La tragica poesia dietro il Game Of Life
2014-07-28
(home)

Nelle ultime due settimane sono stato particolarmente depresso per motivi diversi, ma questa non è una novità (anche se era tempo che non mi succedeva). Come diceva Morgan dei Bluvertigo, però, le crisi sono tutt'altro che folli (fou), sono eccessi di lucidità -- e forse vedendo il mondo dal mio punto di vista depresso vedevo il mondo più realisticamente o come più verosimilmente è - un luogo di tristezza e attesa. Ok, so cosa state pensando, non è bene psicoanalizzarsi utilizzando testi di gruppi musicali (aggiungo che Morgan ora si è totalmente rincoglionito) ma se partissimo da questa affermazione, che in un eccesso di lucidità mi sono accorto che il mondo è triste e un luogo d'attesa, sì cioè in pratica una pensilina del pullman o le poste, in un altro eccesso di lucidità (o almeno lo spero) mi sono accorto che il tutto è qualcosa di magnificamente complesso e al contempo estremamente semplice per non dire quasi scontato. Questo grazie al mio interessamento, in primo luogo, ai cosiddetti Elementary Cellular Automata.

Cos'è un per comodità ECA? Immaginate una stringa di 0 e 1 casuale:

10110101

(per 0 e 1 possiamo anche dire acceso spento, nero o bianco ecc...):

█ ██ █ █

Questa stringa è la nostra situazione iniziale, diciamo t0, dalla quale si "evolveranno" le generazioni seguenti t1,t2... Per sapere come sarà la generazione seguente, applichiamo la regola rappresentata nell'immagine qua sopra (ruleset) che ci mostra come procedere: tenendo in considerazione lo stato di un blocco centrale (B) e dei blocchi ad esso adiacenti (B-1 e B+1), in base alla regola di qui sopra il blocco centrale cambierà o meno il suo stato alla generazione successiva.

In pratica, nel nostro caso:

(0)10 --> 1 101 --> 0 011 --> 1 110 --> 0 101 --> 0 010 --> 1 101 --> 0 01(0) --> 1

T0: 10110101 ==> █ ██ █ █ T1: 10100101 ==> █ █  █ █

OK, sembra inutile e stupidamente semplice. Eppure qua dentro, per dirla alla Tumbr, qua dentro ci si trova il mare: il signor Wolfram, creatore delle più mastodontiche opere informatiche degli ultimi tempi (ovvero di sempre) come Mathematica, WolframAlpha e quella in tutta franchezza figata del Tunes Generator madeinWolfram, studiando questi cellular automata negli anni '70 ha scoperto cose davvero interessanti.

Un metodo per osservare le variazioni di queste stringhe nel corso delle generazioni è, ovviamente, accatastarle una sopra l'altra. Il risultato è poco interessante in molti casi, sorprendente in alcuni e estremamente sorprendente in altri. Nell'ordine:

Rule 29

Rule 18

Rule 110

(non l'ho specificato ma il numero di ogni regola è l'equivalente binario della sequenza che emerge dal ruleset, es: nella prima immagine del post, 00011110 in sistema decimale è 31)

Partendo dalle medesime condizioni di partenza, notiamo come delle regole estremamente semplici possono portare a risultati ripetitivi, simmetrici o caotici. Sebbene a prima vista la regola 18 possa sembrare la più accattivante visivamente, ciò che otteniamo dalla famigerata regola 110 è estremamente più incredibile.

Sul lato sinistro del triangolo troviamo una sequenza più o meno regolare di figure geometriche ma, come dice sempre un mio caro amico, a destra si sviluppa la pazzia: si vedono diverse linee o strutture che vanno in certe direzioni e che, a contatto con altre, modificano "imprevedibilmente" la propria traiettoria e la propria forma, talvolta morendo anche, generando in modo caotico la generazione successiva. Queste strutture sembrano interagire tra di loro per dare vita a qualcosa di molto più complesso; da qui, il tutto è più della somma delle sue parti o qualcosa del genere.

Il fatto è che non c'è una regola matematica per stabilire la stringa di 0 e 1 alla generazione t, e per questo si parla di irriducibilità computazionale della regola 110: in poche parole, per sapere come si sviluppa il nostro ECA ad una determinata generazione non si può far altro che eseguire tutti i passaggi fino ad arrivare al risultato desiderato.

Qua il mio codice python per graficare una qualsiasi regola dell'ECA (non ho utilizzato librerie grafiche per cui, inevitabilmente, il risultato finale è un po' grezzo...)

È inevitabile, alla luce di ciò, fare una piccola riflessione. La Rule110 (01101110) ci mostra come con regole estremamente semplici si possa letteralmente dare vita a sistemi estremamente complessi e caotici. Ciò che può stupire è che complicando un po' questa regola base, per es. aggiungendo un terzo colore oltre al nero e al bianco, a fronte delle 2167 rulesets utili  che si formano (per l'ECA erano solo 256) non si notano particolari incrementi nella (scusate il gioco di parole) complessità complessiva. Ovvero: complicando le regole, non si ottiene maggiore complessità. E questo aspetto, che nel suo New Kind of Science Wolfram sottolinea, è estremamente interessante e potrebbe essere impiegato per qualsiasi situazione anche della nostra vita: per ottenere risultati creativi e in un certo senso "incontrollabili", bastano semplici regole applicate alla lettera.

(a puro scopo informativo, con tre colori nel generale non si ha un incremento di complessità, ma ci sono comunque rulesets che buttano fuori cose estremamente caotiche e, a mio avviso, fondamentalmente magnifiche:)

ilkjo

Essendo l'ECA, per l'appunto, E (elementary), si può dedurre che sono stati inventate molte altre variazioni sul tema. La più famosa, sicuramente, è il cosiddetto GOL (Game Of Life), che non è altro che un ECA in 2D:

In realtà il GOL è semplicemente un particolare tipo di ruleset tra quelli possibili su una griglia 2D; il suo "vero" nome, infatti, sarebbe B3S23, e vediamo perché:

Utilizzando questa terminologia (riproduzione, sovrapopolazione ecc...) ci rendiamo conto di quanto sia inquietantemente semplice il confronto tra questo semplicissimo gioco (almeno per ciò che riguarda le regole) e l'altrettanto "semplice" vita cellulare (idem).

Nel GOL di Conway, quello di cui stiamo trattando, esistono diverse strutture che tornano più o meno spesso anche utilizzando diverse situazioni iniziali (vedi i cosiddetti Gliders, forme di vita che si muovono in una certa direzione sulla griglia, oppure gli oscillatori che sono esattamente ciò che il nome suggerisce: delle forme che, se lasciate al loro destino, si ripeteranno ciclicamente, come vediamo nella figura sopra), ma nonostante ciò gli scenari che si possono ottenere sono totalmente imprevedibili, caotici e potenzialmente affascinanti.

Questo "methuselah", ad esempio, parte con sole 5 cellule vive e impiega 1103 generazioni prima di stabilizzarsi ad una popolazione di 116. Vediamo dei proiettili di tanto in tanto, dei glider e, in ultima analisi, i drammatici oscillatori che finiscono per trionfare (seppur dopo un numero notevole di generazioni). Il più lungo methuselah impiega 40000 generazioni circa per stabilizzarsi, partendo da una popolazione di 18 cellule.

Il ché, a ben pensarci, è una cosa abbastanza triste, il fatto che sia questo GOL sia la regola 110 di prima siano entrambi destinati a ripetersi o, meglio, a fermare la propria evoluzione. La regola 110 infatti, dopo 2780 generazioni forma un pattern che interagisce con le linee diagonali che partono dal lato sinistro del triangolo, e questo comportamento si ripete approssimativamente ogni 240 generazioni. Certo, bisogna notare quanto sia notevole che partendo da regole così semplici e, non dimentichiamo, da situazioni iniziali così semplici, si arrivi a tutto questo; cionostante, è desolante sapere che è praticamente impossibile trovare un qualcosa che non si ripeta all'infinito senza generare nuove strutture o nuovi percorsi o qualsiasi cosa. Siamo anche noi, in quanto esseri facenti parte di un universo caotico, destinati all'oscillazione perpetua?

Il signor Wolfram, di cui ho parlato prima, in realtà nasce come fisico e prima di dedicarsi allo studio della complessità computazionale ha studiato fisica e, in particolare, fisica delle particelle. Siccome è, almeno suppongo, un uomo decisamente ambizioso e, soprattutto, curioso, il nostro buon Stephen da diversi anni sta tentando di utilizzare questi principi che sottendono al GOL e all'ECA e a tutte le loro varianti più elaborate per trovare la regola prima dell'universo. Il ché è, decisamente, notevole.

Una delle regole che, secondo Wolfram, si avvicina di più a quella del nostro universo è questa:

(ammettelo, non vi sentite anche voi come quando quel computer, dopo aver elaborato per sette milioni e mezzo di anni la risposta alla domanda fondamentale della vita dell'universo e di tutto quanto, ai suoi creatori risponde "42"? )

Secondo Wolfram, la regola fondamentale dell'universo deve essere, per l'appunto, fondamentale nel senso stretto della parola, e perciò andare oltre lo spazio e il tempo per raggiungere qualcosa di più semplice, il piano terra dell'universo o qualcosa di simile. Un modo per formulare questa regola sarebbe appunto attraverso dei "network" come quelli rappresentati in figura, che a quanto pare ha generato fenomeni gravitazionali e di relatività speciale. È un discorso complicato, e per questo vi rimando a un post dello stesso Wolfram.

(da qui in poi non si parla più di scienza) Tornando però alle due nostre prime dimensioni, non si può fare a meno di pensare che, se gli universi generati da Mathematica di Wolfram in ultima analisi si comportano come ruleset o come "semplici" methuselah molto lunghi, noi alla fine viviamo per nessuno scopo se non quello dell'autoscillazione eterna. Fondamentalmente, vivremmo per per qualcosa di molto inutile e molto poco interessante, e tuttavia dovremmo pure ritenerci fortunati. Ammettendo che tutti gli universi possibili, partendo da network come quello qua sopra, effettivamente si creano, bisogna sapere che molti di essi si dissolvono in poco tempo o sono potenzialmente instabili. Qualcosa di equivalente accade con GOL e ECA: come potete notare col mio fantastico programma in python o giocando a un qualsiasi GOL alcuni ruleset sono estremamente monotoni e altri invece tendono a dissolversi in poche generazioni. O magari la nostra infinita griglia 2d ad una data generazione sarà vuota, e non potrà più crearsi nulla e tutto sarà irrimediabilmente finito, concluso, e per quel che vale nemmeno mai esistito.

In ogni caso, è evidente che ci perdiamo qualcosa di tutto ciò che ci circonda.

È qualcosa di molto simile a quello che scrive Taleb Nassim nei suoi libri: il nostro modo di fare scienza è prettamente induttivista, e inoltre abbiamo una fiducia ferma in certe teorie che vengono considerate come intoccabili o quasi come assiomi, quando è la storia stessa delle scienze che ci mostra come i preconcetti spesso fanno più male che bene. Studiamo cose molto particolari, particolari equazioni, particolari fenomeni, fenomeni particellari, quando invece, forse, dovremmo rivedere ciò che sta alla base: per l'appunto, capire la regola fondamentale e da lì solo tutto il resto. Dal generale al particolare, non il contrario.

Perché è evidente che, se le cose stanno davvero come dice Wolfram, non vediamo e ci ostiniamo a non voler vedere che c'è qualcosa oltre le tre dimensioni, c'è qualcosa oltre il tempo ed è lì che bisogna indagare, per poter capire profondamente perché le cose sono così e non in un altro qualsiasi modo, e soprattutto come sono. E magari, chissà cos'altro.

-

Per approfondire:

Innanzitutto, consiglio la lettura di "A New Kind Of Science" di Stephen Wolfram, liberamente consultabile qui, che parla di questa nuova scienza della "complessità" e che, di conseguenza, porta e anzi poggia su argomenti come l'ECA e i suoi derivati per arrivare poi alla fisica fondamentale e alla sua spiegazione.

Consiglio moltissimo di leggere Il Cigno Nero e il saggio sull'Antifragilità di Nassim Nicholas Taleb. Sia perché in entrambi di caos e di imprevedibilità, ma anche perché applica tutto ciò al mondo reale, all'economia, ai disastri naturali, al nostro modo di pensare e a un sacco di cose che appena li leggerete vi sentirete stupidi probabilmente (almeno, io mi sono sentito così...)

Wikipedia, come sempre, è un'ottima rampa di lancio per approfondire certe questioni. Digitate semplicemente Rule 110, Conway's Game Of Life o qualunque cosa vogliate e avrete una base su cui poi costruirci qualcosa.

Rimando anche WolframAlpha e Mathematica per lo studio più completo di queste affascinanti questioni.

Infine, il miglior modo per capire la maggior parte delle cose che ho scritto qui è programmarle per conto vostro. Ora sto lavorando ad una versione in Processing del WGOL, e forse anche in python farò qualcosa, ma vi assicuro che è molto più istruttivo (e in un certo senso divertente) provare da soli a scrivere piccoli programmi per queste cose. Speranzosi, un giorno, di poter scrivere un codice per il WGOL più corto di questa versione in perl:

$/=pop;@b=split'',<>;map{$n=-1;@b=map{++$n;/
/?$_:($t=grep/X/,@b[map{$n+$_,$n-$_}1,80..82])==3|$t+/X/==3?X:'.'}@b}1..$/;print@b