VITA ARTIFICIALE
Questa simulazione, realizzata nel 1994 in ambiente DOS, è stata il nostro primo studio pilota con reti neurali e algoritmi genetici, quello che ci ha mostrato la potenza della metodica e ci ha incoraggiato a proseguire la ricerca lungo la strada che ha poi portato ai risultati descritti in Rooms.
Si tratta della simulazione, senza pretese di verosimiglianza biologica, di un ecosistema ipersemplificato, in cui individui dotati di reti neurali inizialmente 'potenziali' evolvono in competizione fra loro per il raggiungimento di 'pacchetti di cibo' distribuiti nell’ambiente.
Il programma, per noi storico, è stato realizzato con il sistema operativo DOS. Ma il programma è operativo anche sotto sistema operativo Windows in emulazione DOS.
Mondo
Il 'mondo' di questo ecosistema è una griglia bidimensionale di 640x480 caselle (o un multiplo di tali dimensioni), ripiegata a toroide in modo che i margini opposti si uniscano (non vi sono confini). In essa sono collocati gli individui, mobili, e i 'pacchetti' di cibo (d'ora in poi detti brevemente cibi), immobili. Più individui e più cibi possono occupare una stessa casella, e ogni individuo o cibo occupa una sola casella. Gli individui consumano energia per mantenersi e per muoversi, e la reintegrano assorbendo i cibi.
L'ambiente si considera illuminato con una certa intensità di luce e dotato di un certo grado di 'trasparenza'. I cibi 'riflettono luce' e quindi sono visibili da individui che eventualmente evolvano sensori visivi; gli individui non possono invece vedersi tra loro. L'intensità del segnale visivo decresce con la distanza dal cibo che lo origina e con l'opacità dell'ambiente.
Il tempo è discretizzato e misurato in turni. In ogni turno gli individui vengono fatti agire una volta, dove per 'agire' si intende: ricevere le informazioni visive dall'ambiente, attivare le eventuali unità di rete neurale, muoversi, consumare/acquistare energia, ed eventualmente incrociarsi, riprodursi, o morire. Non vi è suddivisione del tempo in generazioni: diverse generazioni si sovrappongono e coesistono.
Cibi
Quando un individuo, muovendosi, giunge sufficientemente vicino a un cibo, lo 'mangia', sottraendolo all’ambiente e assimilandone l’energia. Ogni cibo contiene una medesima quantità d’energia. Ad ogni turno viene reimmesso nell'ambiente un numero di cibi predeterminato, fisso oppure variabile con andamento sinusoidale ciclico nel tempo (stagioni). Questa ciclicità stagionale costituisce un efficace 'setaccio' ambientale, che accelera la selezione di individui più efficienti in grado di sopravvivere anche quando il cibo scarseggia.
La quantità di cibo complessivamente presente varia quindi da turno a turno, essendo influenzata dalla bravura degli individui nel raggiungere i cibi e dall'eventuale andamento stagionale. Ogni cibo reintrodotto nell’ambiente viene collocato casualmente, ma entro una predeterminata distanza massima da un altro cibo già presente scelto a caso per simulare la riproduzione dei cibi. Se lo sperimentatore impone che tale distanza sia piccola, questo genera zone di addensamento dei cibi. Essendo tale distanza decidibile separatamente lungo la direzione orizzontale e quella verticale, anche la forma e l'orientamento di tali addensamenti sono influenzabili (cluster circolari più o meno densi, bande verticali od orizzontali etc).
Individui
Gli individui (max. 200) sono costituiti da un numero variabile di cellule (da 1 a 12) disposte in corona circolare, sicché ogni individuo ha in definitiva una forma circolare. Il numero e la distribuzione delle cellule sono assegnati in modo casuale per ciascun individuo all'inizio della simulazione, e successivamente sono soggetti alla selezione genetica.
Le cellule hanno la potenzialità di evolvere funzioni sensoriali ('visive' come descritto più sopra) e/o funzioni motorie (che provocano la rotazione e la traslazione dell’individuo) e/o funzioni associative (connessioni neurali con le altre cellule). Ogni cellula costituisce quindi una potenziale unità di rete neurale, connessa alle altre tramite connessioni pesate, senza una distinzione aprioristica tra unità di input (sensoriali), unità nascoste (associative), e unità di output (motorie). Per le connessioni è adottata l''ipotesi di Dale': una data cellula ha sulle altre cellule effetti o solo eccitatori o solo inibitori, e i pesi in uscita da essa sono solo positivi o nulli.
Tutte queste caratteristiche e funzioni cellulari (esistenza o meno di una cellula in una data posizione nell’individuo, capacità sensoriale, capacità motoria e verso della forza sviluppabile, azione eccitatoria o inibitoria sulle altre cellule, quantità di connessioni e loro peso), sono assegnati in modo inizialmente casuale e poi progressivamente selezionati dall’evoluzione.
Se una cellula ha capacità sensoriale, l’arrivo su quella cellula di “luce” riflessa dai cibi provoca un aumento del suo stato di attivazione proporzionale all’intensità della luce ricevuta e al livello di sensibilità della cellula. La zona 'vista' da ogni cellula è un settore circolare con vertice nel centro dell'individuo, e con orientamento e angolo di apertura individuati dalle dimensioni, in gradi, della cellula stessa. Va notato che la cellula è attivata dalla quantità globale di luce proveniente da tale zona: se nella zona vi sono vari cibi, la cellula riceve la somma dei loro segnali (scalati per la distanza), ma non è in grado di identificare i singoli cibi né tanto meno la loro localizzazione precisa. Perciò molti cibi, ma lontani, possono determinare lo stesso effetto di un solo cibo vicino. In altri termini la vista non è organizzata con una 'retina', ma come semplici sensori direzionali di luce, anche se più sensori possono essere affiancati come gli ommatidi di un insetto.
Se una cellula ha capacità motoria, lo stato di attivazione di quella cellula genera un vettore-forza, applicato nel punto mediano del bordo esterno della cellula, di direzione tangente al contorno dell'individuo e verso variabile (orario od antiorario) da cellula a cellula: qualcosa di simile all’effettto di una pinna o una zampa. Quanto maggiore è la capacità motoria di una cellula, tanto maggiore è il modulo della forza a parità di attivazione della cellula.
Una forza, da sola, può provocare soltanto una rotazione dell'individuo; per traslare, l'individuo deve quindi generare contemporaneamente almeno due forze in due diversi punti del suo contorno, cioè possedere e attivare almeno due diverse cellule dotate di capacità motorie. La rotazione e la traslazione complessive risultano dalla composizione dei singoli vettori motori delle singole cellule.
Ad ogni individuo è assegnato inizialmente un medesimo contenuto di energia medio. Se in seguito l'energia di un individuo scende a zero a causa dei consumi 'metabolici' e motori senza reintegro per assunzione di cibo, l’individuo muore ed è tolto dall'ambiente. Se invece l'energia supera un certo livello, assegnato all'inizio, l'individuo si riproduce generando una copia mutata di se stesso (v. dopo). Il livello di energia al quale avviene la riproduzione può essere fisso e uguale per tutti gli individui, oppure assegnato in modo inizialmente casuale; in quest'ultimo caso esso è poi trasmesso geneticamente con possibilità di mutazione, e quindi sottoposto a selezione. I valori di energia sono misurati in unità puramente arbitrarie: essi hanno significato solo nel rapporto tra i consumi di energia e l'energia acquisita dai cibi.
La riproduzione è asessuata. La replicazione (con mutazione) si verifica ogni volta che l'energia di un individuo supera la soglia di riproduzione caratteristica di quell'individuo. Allora l'individuo genera una copia di sé‚ lievemente mutata, alla quale cede metà della sua riserva di energia. L’individuo-figlio nasce nella casella in cui si trova il genitore e si avvia immediatamente per la propria strada.
Il crossover è indipendente dalla riproduzione: avviene fra due individui ogni volta che questi vengano a trovarsi vicini entro una distanza predeterminata. Allora essi si scambiano segmenti di genoma e le corrispondenti strutture somatiche, trasformandosi in due individui diversi da quelli pre-incontro. Questo è ovviamente uno scostamento considerevole dalla realtà biologica, introdotto per mantenere la possibilità di crossover pur in presenza di riproduzione asessuata.
Il programma consente ovviamente allo sperimentatore di determinare tutti i parametri implicati in quanto finora descritto: grandezza della griglia-ambiente; parametri 'metabolici' della simulazione (consumo energetico di ciascun individuo per muoversi e per mantenere le sue unità-cellule); parametri 'fisici' (quanto vicino un individuo deve arrivare a un cibo o a un altro individuo per interagire con esso; illuminazione; opacità dell'ambiente); numero massimo di cibi; numero di cibi all'inizio della simulazione; numero di cibi aggiunti nell'ambiente ad ogni turno; andamento 'stagionale' o meno dell’aggiunta di cibi; distanze massime orizzontale e verticale entro cui ciascun nuovo cibo verrà collocato rispetto a un 'cibo genitore' preesistente; numero iniziale e numero massimo di individui; dote iniziale di energia di ciascun individuo; soglia di energia alla quale avviene la replicazione; probabilità di mutazione di ciascun bit del genotipo al momento della replicazione; numero massimo di cellule per individuo; valore massimo del peso delle connessioni.
Genotipo e determinazione del fenotipo
Il fenotipo è codificato in genotipo 'a codifica diretta' (ogni caratteristica fenotipica è codificata nel genoma in modo esplicito, come un valore o una serie di valori che vengono direttamente tradotti nelle caratteristiche corrispondenti) e di lunghezza fissa, la lunghezza massima necessaria e sufficiente a definire tutte le possibili caratteristiche, stabilendo che un valore zero in un 'gene' significa che la struttura fenotipica corrispondente a quel gene risulterà assente in quell’individuo.
Questa scelta presenta vantaggi e svantaggi rispetto alle scelte opposte (codifica indiretta e genoma di lunghezza variabile). La codifica diretta presenta gli svantaggi di una minore compressione dei dati e minore verosimiglianza con la realtà biologica, ma mantiene lo spazio di ricerca dell’algoritmo genetico il più ampio possibile, e consente all’evoluzione di controllare direttamente e individualmente ogni aspetto dell’architettura degli individui e delle loro reti neurali. Ritenendo queste caratteristiche particolarmente desiderabili abbiamo optato per la codifica diretta: il fenotipo è ricavato istantaneamente e fedelmente dal genotipo, in modo deterministico, senza embriogenesi né ontogenesi, ed eventuali modificazioni del genotipo nel corso della vita dell'individuo (ad es. per il verificarsi di un crossover - v. sopra) si riflettono immediatamente sul fenotipo, che ne risulta modificato di conseguenza.
La lunghezza fissa del genoma ne preserva agevolmente il significato posizionale di ogni bit, e semplifica così la gestione del crossover, ma è antieconomica in termini di spazio genetico utilmente sfruttato, poiché grandi tratti di genoma possono essere allocati anche solo per veicolare informazioni nulle. Poiché in questa prima versione il numero massimo di caratteristiche per individuo è abbastanza limitato (12 cellule al massimo, e quindi non più di 122 = 144 connessioni), abbiamo considerato accettabile lo spreco di spazio in favore della maggiore semplicità, e abbiamo pertanto optato per il genoma di lunghezza fissa.
Visualizzazione e analisi della simulazione
Il programma consente di visualizzare e analizzare l’andamento della simulazione in tre scale diverse.
La scala più alta (“Grafici”) è una scala a livello del tutto 'strategico': in tre finestre orizzontali sono rappresentate gli andamenti, nel tempo, del numero di individui, di cibi, e dell'efficienza della popolazione nel raggiungere il cibo; e gli andamenti delle strategie motorie (ampiezza di rotazione e di traslazione) prevalenti nella popolazione, rappresentati in codici-colore.
La scala intermedia ("Mondo") segue la simulazione 'in tempo reale', non visualizza l’andamento di variabili nel tempo come invece la scala “Grafici”. Essa mostra l'intera griglia-ambiente, con gli individui come punti mobili colorati (il colore è in funzione della riserva di energia di ogni individuo), e i cibi come piccoli punti di colore bianco. Gli eventi di 'pasto', 'replicazione', e 'accoppiamento' (crossover) sono riconoscibli tramite appositi segnali grafici e sonori. E' anche possibile evidenziare la traccia di percorso di specifici individui, per analizzarne più agevolmente la strategia di movimento.
La scala più bassa ("Individuo") opera in modo simile alla scala “Mondo”, ma a un livello ancora più 'tattico': uno o più individui, prescelti tramite il puntatore mouse sul display “Mondo”, vengono a turno presentati in dettaglio, 'ingranditi', mentre agiscono. Essendo ogni individuo costituito da una corona circolare di cellule, la sua forma può essere rappresentata graficamente come un cerchio interno (serbatoio di energia) di colore dipendente dall’energia accumulata dall’individuo (rosso alta energia – blu bassa), contornato dalle cellule, le cui capacità sensoriali e motorie e le cui attivazioni sono ugualmente rappresentate graficamente, con codici-colore che mostrano il loro livello di attivazione e le loro azioni eccitatorie o inibitorie sulle altre cellule.
Vengono anche rappresentati gli stimoli sensoriali che arrivano dall'esterno, i vettori-movimento generati da ogni cellula, e i vettori risultanti di traslazione e rotazione che determinano il movimento netto dell'organismo. Questo occupa circa metà dello schermo; l'altra metà è occupata da una visione in scala grafica globale, ma che ora resta centrata sull'individuo che lascia una traccia del suo percorso. Questa rappresentazione combinata aiuta a capire come una data configurazione cellulare produce un dato comportamento.
Risultati
Il primo obiettivo, quello di osservare la comparsa di un comportamento finalizzato alla sopravvivenza della specie viene raggiunto quasi invariabilmente, pur partendo da condizioni iniziali molto differenti. Il secondo, quello di veder comparire nella specie adattata una simmetria o comunque una 'forma corporea' analoga a quelle presenti nel mondo animale semovente, ha portato a risultati inaspettati generando organismi esotici ma funzionali, talora simmetrici talora no.
In tutte le simulazioni effettuate si sono invariabilmente evoluti organismi dotati di cellule sensoriali e cellule motorie, spesso con due o tre cellule sensoriali raggruppate verso un polo dell’organismo (che possiamo considerare come 'polo rostrale'), e due, tre, o quattro cellule motorie, generalmente localizzate sui lati e sul polo (che possiamo considerare 'caudale') opposto a quello sensoriale-rostrale. In questo arrangiamento due cellule motorie 'principali', localizzate sui lati, avevano funzioni motorie più spiccate, e vettori-forza orientati in modo da spingere il corpo nella direzione rostrale; una o due cellule motorie 'accessorie', di 'forza' molto inferiore a quelle principali, erano spesso localizzate tra queste e il polo caudale, come a fungere da 'timoni'. Quando queste cellule motorie accessorie erano due, i loro vettori-forza avevano invariabilmente verso opposto tra loro; quando era una sola, il verso del suo vettore-forza era tale da aggiungersi a quello della cellula motoria principale meno potente.
Le varie anatomie finali si sono mostrate comunque praticamente sempre in grado di attuare comportamenti efficaci di ricerca e raggiungimento dei cibi.
Per quanto riguarda tali comportamenti si osserva che, in assenza di cibi, gli individui attuano prevalentemente o esclusivamente piccoli movimenti circolari, tali da consentire loro di 'guardare' ampie zone di spazio consumando relativamente poca energia; per poi, alla comparsadi cibi, 'lanciarsi' su di questi alla massima velocità possibile. Questo comportamento, tuttavia, presenta eccezioni quando il cibo compare molto lontano dall’individuo: in questo caso gli individui distanti dal cibo si astengono dal lanciarsi sui cibi lontani, e modificano poco o nulla il loro comportamento di ricerca.
Ovviamente questo comportamento ha la sua ragion d’essere nel fatto che, per ogni dato individuo, è molto improbabile riuscire a raggiungere un cibo lontano prima che questo sia raggiunto da altri individui più vicini al cibo. Nessun individuo ha sistemi sensoriali in grado d'informarlo sulla collocazione (e neanche sulla presenza) degli altri individui; ma, nella simulazione che abbiamo disegnato, una informazione sensoriale 'indiretta' circa la presenza di altri individui in realtà esiste, e consiste nella sparizione dei cibi (che, infatti, scompaiono dall’ambiente soltanto per l’azione 'predatoria' degli individui). Così, sebbene ogni singolo individuo sia, in effetti, ignaro della presenza degli altri individui, egli tuttavia 'impara' (geneticamente) di avere molte più probabilità di mangiare cibi vicini piuttosto che cibi lontani, poiché questi ultimi, dal suo punto di vista, 'scompaiono spontaneamente' prima che lui riesca a raggiungerli. Perciò gli individui non 'sprecano energia' tentando di raggiungere cibi lontani, e 'preferiscono' invece continuare a guardarsi bene intorno in attesa che compaiano cibi più vicini. La 'distanza critica' che determina i due diversi comportamenti appare variabile con la frequenza di comparsa dei cibi e la loro distribuzione – le quali a loro volta influenzano ovviamente anche la densità e distribuzione degli individui.
E’ interessante notare che la grande importanza della distanza dei cibi si scontra con l’elementare sistema sensoriale che gli individui hanno la possibilità di evolvere. Infatti, come già detto, ogni cellula sensoriale è paragonabile a un ommatide, e non è in grado, di per sé e nel suo proprio campo sensoriale, di distinguere tra un singolo cibo vicino e molti cibi lontani. Tuttavia, se l’individuo ruota e si muove (esattamente come gli individui evoluti mostrano di fare), anche questo elementare sistema sensoriale è in grado di fornire informazioni sulla distanza dei cibi. Infatti, con la rotazione dell’individuo, l’entrata o l’uscita dal campo sensoriale di una cellula di un singolo cibo vicino determina un cambiamento di attivazione più brusco di quello prodotto dalla graduale entrata o uscita di un ampio raggruppamento di cibi lontani. Inoltre, se l’individuo si muove, è addirittura immaginabile che esso possa ricavare informazioni sulla distanza dei cibi tramite una serie di 'triangolazioni'. La rete neurale interna a ogni individuo è infatti una rete ricorrente, e come tale è del tutto in grado di sviluppare una memoria operativa (elettrica) capace di mantenere le necessarie informazioni per il tempo sufficiente ad elaborarle, anche in assenza di apprendimento fenotipico di lunga durata (modificazione sinaptica) ossia di memoria a medio o lungo termine.
Se, nel corso della simulazione, lo sperimentatore cambia uno o più parametri ambientali (densità e ciclicità del cibo) o fisici (bilancio energetico consumo / rendimento), si nota che la variazione di ogni parametro stravolge profondamente la linea evolutiva, la quale può arrivare ad estinguersi, oppure, nell’arco di alcune generazioni o decine di generazioni, adattarsi perfettamente al cambiamento con l’affermarsi di nuovi comportamenti idonei alla nuova situazione ambientale. L’estinzione o l’adattamento dipendono ovviamente dall’entità e dalla rapidità del cambiamento (cambiamenti grandi ma lenti sono affrontati meglio di cambiamenti meno grandi ma istantanei) e dal grado di specializzazione della specie in evoluzione (specie meno evolute si adattano più facilmente di specie altamente 'ottimizzate' all’ambiente scomparso).
Tra le altre osservazioni degne di nota è il fatto che il sistema è fortemente dipendente dalle condizioni iniziali, e ciò non meraviglia essendo esso ricco di relazioni non lineari, tanto da assimilarlo per certi versi ad un sistema caotico deterministico.
E, secondariamente, che un ambiente uniforme e ciclicamente stabile seleziona generalmente un'unica specie di individui meglio adattati dotati di comportamenti ISTINTIVI.
Ciò che si vuole evidenziare è che i meccanismi evolutivi genetici scovano utilmente caratteristiche statiche e dinamiche dell’ambiente anche non facilmente prevedibili.
Conclusioni
Questo studio preliminare conferma che gli algoritmi genetici si dimostrano altamente efficaci nel produrre adattamento selettivo all'ambiente. Conferma inoltre che la probabilità di rintracciare negli ecosistemi artificiali similitudini con il mondo biologico dipende fortemente dalla realistica implementazione delle leggi fisico-chimiche del mondo reale. Ma soprattutto questa sperimentazione, al di là degli specifici risultati che si possono osservare, ha il merito di dimostrare in modo tangibile ed inequivocabile la potenza dei meccanismi evolutivi darwiniani, e di confermare la validità dei metodi simulativi come strumenti di indagine scientifica.
Se un’immagine vale mille parole, e un film ne vale un milione, una simulazione dinamica ne vale un miliardo!