Introduzione a DarwinBots
Introduzione

DarwinBots e' un programma di vita artificiale, cioe' il suo scopo e' quello di simulare piu' fedelmente possibile alcuni degli aspetti della vita vera e dell'evoluzione in un computer. Il lato affascinante e' che lo fa portando alla vita un certo numero di individui, che lottano per l'esistenza come fanno i veri organismi. L'altro lato della faccenda e' che, dato che non e' possibile simulare OGNI aspetto della realta', il programmatore, cioe' io in questo caso, deve decidere quali aspetti gli interessa simulare e quali trascurare, per costruire un modello che sia al tempo stesso abbastanza complesso da risultare interessante ma semplice abbastanza da essere calcolato in fretta, cosi' da essere anche divertente.

Come e' fatto un programma di vita artificiale? Fondamentalmente, si tratta di simulare un certo numero di individui - cioe' di esseri che agiscano indipendentemente gli uni dagli altri- e fornirli di un codice di qualche tipo che specifichi come appaiono, o come si comportano, o come interagiscono gli uni con gli altri. La riproduzione di questi individui avviene semplicemente duplicando il loro codice, ma con qualche variazione da genitore a figlio. Cosi', il codice trasmesso attraverso le generazioni finira' per cambiare, determinando negli individui che lo portano comportamenti o forme diverse. Se questi comportamenti o forme nuove migliorano la capacita' di un individuo di riprodursi, allora verranno passati alle nuove generazioni; altrimenti spariranno.

Come funziona DarwinBots?

L'universo di DarwinBots e' un grande campo piatto, popolato da individui piatti anch'essi detti "robot".
I robots sono quadratini tutti della stessa grandezza, quindi la forma non e' implicata nell'evoluzione. Cioe' che determina l'evoluzione e' un codice di lunghezza variabile (il "DNA") che e' in effetti un programma vero e proprio scritto in un linguaggio apposito.
Come ogni altro programma, il
DNA dei robot ha bisogno di operare su una memoria. Ogni robot ha una memoria di 1000 celle capaci di memoriazzare numeri interi, e il DNA puo' compiere su di esse operazioni di lettura e scrittura.
Per interagire con il mondo, ogni robot ha un insieme di
sensori e di "muscoli" o uscite, che sono poi uguali per tutti i robots. Quello che cambia, in questo caso, e' la capacita' di ogni singolo individuo di sfruttare le informazioni che gli provengono dall'esterno e di controllare le proprie azioni al fine di nutrirsi e riprodursi.
Ogni robot ha un parametro detto
"energia", che di fatto stabilisce solo, quando e' a zero, che il robot e' morto. L'energia viene consumata dalle azioni che il robot compie, siano esse interne (scrivere nella memoria, confrontare dei valori) o esterne, come muoversi o sparare. Ma non si puo' dire che un robot sia "piu' in salute" se ha piu' energia, dato che potrebbe esistere una specie i cui individui hanno poca energia, si muovono poco e si riproducono molto, e un'altra di robot che ne hanno molta, ma non sono capaci di riprodursi abbastanza spesso.

L'universo simulato e' semplice ma abbastanza potente. Ogni robot ha un
mirino (rappresentato da un puntino bianco) che indica la direzione in cui il robot sta guardando. Ognuno dei sensi e delle azioni del robot e' relativo a questo punto, percio' nessuno dei suoi sensi gli da' informazioni assolute sull'ambiente.
Ci sono solo due tipi di oggetti nell'universo: i robots e i
colpi, o particelle. Mentre i robots sono quadrati e non possono sovrapporsi, ma rimbalzano gli uni sugli altri, le particelle sono puntiformi e immateriali, quindi non collidono le une con le altre. I colpi sono prodotti dai robots, e possono trasportare informazione o energia. Per esempio, un robot mangia - cioe' acquista energia- sparando ad un altro un particolare getto di particelle. Quando l'obbiettivo viene raggiunto dai colpi, viene forzato ad emettere in risposta un secondo getto, in direzione opposta, che trasporta parte della sua energia.
Ma i colpi possono anche
trasportare informazione, nella forma di una coppia locazione/valore che viene memorizzata nela memoria del ricevente. Dato che la memoria dei robot e' composta di celle che vengono usate per l'input/output ma anche di celle libere, e' possibile in questo modo sia confondere un avversario che trasmettere informazioni.
Infine, c'e' una specie di semi-oggetto, e sono i
legami: si possono vedere quando un robot si riproduce, e il figlio resta attaccato al genitore per un po', attraverso un cordoncino elastico grosso ma temporaneo; oppure possono essere creati volontariamente da un robot e in quel caso appaioni piu' sottili, ma di durata indefinita.

Le mutazioni:

Come ho detto all'inizio, l'altro aspetto importante di un programma di vita artificiale e' l'evoluzione degli organismi. dato che il DNA di un robot e' semplicemente un programma, la
mutazione consiste solo nell'incasinarlo un po'. Comunque, questo e' ottenuto in modo tale da diminuire la frequenza di mutazioni senza senso (o grammaticalmente scorrette), nonostante le mutazioni negative rimangano comunque la parte maggiore. Questo e' ottenuto con routines che trasformano le variabili in altre variabili, le costanti in altre costanti, e cosi' via, oppure inseriscono pezzi completamente nuovi: nuovi geni, nuove condizioni.

La cosa positiva della mutazione e' che, essendo completamente casuale, e' facile veder venire fuori qualcosa di inaspettato. Ad esempio, durante la fase di scrittura e test del programma, si sono evoluti degli strani robottini, in grado di fare cose impossibili come aumentare la propria energia senza mangiare e muoversi verticalmente senza spendere energia. Cosi', ho scoperto che c'era un bug nel programma e quelli lo sfruttavano a loro vantaggio. In un certo senso sono stati i miei primi beta-testers.