Mi affaccio alla finestra dopo una lunga domenica. E’ una notte gelida d’inverno: Gorgonzola, imbiancata tutto il giorno dalla neve, s’addormenta lentamente, le luci dei palazzi vicini sono ormai spente. Non ho sonno!
I seggi elettorali sono chiusi da alcune ore: gli italiani hanno dovuto esprimere i propri voti per il rinnovo del Parlamento. Nel segreto delle urne è celato parte del futuro del nostro paese; rifletto su quanto sia complesso il modello sociale del voto.
Mi addormento proponendovi un automa cellulare che simula la regola “Gérard Vichniac voting” o “Majority” in cui, ogni cella dell’automa cellulare bidimensionale, assume lo stato della maggioranza delle otto celle limitrofe.
Definita una configurazione iniziale, dopo una breve evoluzione, il sistema si stabilizza facendo emergere surrealistiche forme simili a continenti.
Nella figura, generata dal simulatore, il colore è funzione dell’orientamento politico (rosso, blu) e convinzione dell’elettore (chiaro, scuro).
Per realizzare la simulazione ho utilizzato NetLogo: un ambiente di simulazione per modelli basati su agenti. Si tratta di un software libero multi-piattaforma.
Per esplorare le potenzialità di questo ambiente, vi consiglio di provare i modelli presenti nella: NetLogo Models Library.
Il mio automa cellulare è disponibile online in questa pagina (si tratta di un’applet Java esportata da NetLogo).
Per iniziare, si consiglia di: impostare un livello di rossi “start-red-rate” es. 51%, cliccate su “setup-random-red” per inizializzare le celle e poi cliccate su “loop” per analizzare l’evoluzione del voto nel tempo fino alla stabilizzazione.
E’ impostabile anche il “personal-weight” ovvero il livello di convinzione dell’elettore (valori consigliati: 0, 1, 2); più è alto tale valore più difficilmente l’elettore si farà influenzare dai suoi otto vicini.
Come primo progetto in Python, ho deciso di realizzare una semplice versione del famosissimo automa cellulare di Conway: “Game of Life”.
screenshot di jaGOF
Quick start
Per maggiori informazioni su Life vi rimando alla pagina di Wikipedia in italiano oppure in inglese ed ai vari riferimenti ed approfondimenti che citerò al termine di questo articolo.
Se utilizzate un browser che supporta l’HTML5 potete provare velocemente gameoflife.
The Game of Life
The Game of Life, concepito al termine degli anni 60 dal matematico britannico John Horton Conway, è un automa cellulare che simula l’evoluzione di una popolazione tramite regole che stabiliscono vita, nascita, morte di ogni singolo individuo.
La magia di questo gioco sta nella sua semplicità contrapposta alla profondità e complessità dell’esplorazione dei risultati; piccole variazioni di un solo individuo nella distribuzione della popolazione iniziale possono condurre ad evoluzioni totalmente diverse.
Ogni cella di una popolazione, transitando dallo stato di vita o morte, condiziona l’evoluzione delle celle confinanti; queste interazioni provocano evoluzioni estremamente complesse ed interessanti anche a partire da configurazioni apparentemente banali.
In molti si sono cimentati nella ricerca di configurazioni iniziali con determinate proprietà o nella classificazione sistematica dei possibili schemi o pattern ricorrenti.
Descrizione formale dell’algoritmo di evoluzione
Il mondo è costituito da una griglia rettangolare di N x M celle le quali possono essere in due possibili stati: vive o morte.
Due celle si definiscono confinanti se sono connesse in una delle 8 direzioni possibili (anche in diagonale); i confini del mondo sono tra loro connessi come in un pianeta perfettamente sferico.
Definita una configurazione iniziale di celle, l’automa simula l’evoluzione della vita. In intervalli di tempo discreti tutte le cellule del mondo vengono aggiornate simultaneamente (ogni aggiornamento è definito generazione o epoca) seguendo queste regole:
una cella viva rimane in vita se esistono 2 o 3 celle vive confinanti (sopravvivenza)
una cella viva muore se confina con meno di due celle vive (isolamento)
una cella viva muore se esistono piu’ di 3 celle confinanti (sovraffollamento)
una cella morta con esattamente 3 celle vive confinanti nasce e diventa viva (riproduzione)
Evoluzione e classificazione di alcuni schemi
L’evoluzione della popolazione può giungere verso l’estinzione totale della specie oppure verso varie tipologie di configurazioni ricorrenti che possono essere di:
tipo statico (blocco, barca)
oscillante (lampeggiatore, rospo)
in movimento o navicelle spaziali (aliante, astronave leggera LWSS)
Altri schemi estremamente interessanti sono:
fucili: stazionari che sparano alianti o navicelle spaziali
fumatori: si muovono lasciando in coda frammenti di vita
rastrelli: si muovono ed emettono navicelle
reattore: lascia una coda di fucili (tasso di crescita quadratico)
Su Wikipedia sono disponibili le configurazioni di questi schemi base oppure su ConwayLife Wiki o su Life Lexicon è possibile trovare una classificazione ancora più accurata ed estesa.
jaGof: just another Game of Life (la mia realizzazione)
Per realizzare Life in Python ho utilizzato la libreria Pygame (python-pygame) che si basa su SDL. Potete scaricare i sorgenti di jaGof, rilasciati sotto licenza GNU/GPL v.3, e siete incoraggiati a farne quello che desiderate.
Nella directory seeds sono stati inclusi più di 400 pattern iniziali in formato .cell scaricati da Life Lexicon.
Ricordo che si tratta del mio primo progetto in Python.
This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish.AcceptRead More
Privacy & Cookies Policy
Privacy Overview
This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.