Algoritmi Genetici e Vita Artificiale
Gli algoritmi genetici possono essere pensati come una parte
della vita artificiale, infatti come la vita artificiale si
occupano di ottenere sistemi creati dalluomo che si
comportano come se fossero vivi. Storicamente, comunque, i GA
sono diventati un campo di studio riconosciuto dieci o quindici
anni prima dellA-life. Molto del lavoro sui GA è
focalizzata nel trovare soluzioni specifiche a problemi reali,
mentre lobiettivo finale dellAL è la più
cosmica questione di impregnare i nostri programmi, processi e
macchine con comportamenti simili alla vita.
In ogni caso, gli algoritmi genetici sembrano essere molto adatti
per evolvere interessanti forme di vita artificiale. In una
tipica situazione, abbiamo alcune creature artificiali che si
muovono in accordo con algoritmi che usano una lista di parametri.
Decidere quali valori usare per i parametri è spesso un problema
molto difficile, perché spesso non possiamo sapere esattamente
quali saranno le implicazioni delle impostazioni, allora conviene
provare e lasciare che qualche buona impostazione si evolva.
Lidea è quella di prendere alcune funzioni fitness che
hanno significato per le creature a-life, e poi di usare un
algoritmo genetico che cerchi di risolvere il problema di ricerca
di una particolare funzione fitness nello spazio delle soluzioni
di tutte le possibili impostazioni di parametri per le tue
creature.
Usando un algoritmo genetico su creature a-life, è consuetudine
rappresentare i genomi delle creature come stringhe di bit
di una certa lunghezza. Una importante considerazione è che ogni
possibile stringa di bit della corretta lunghezza deve essere
usabile come un genoma. Questo perché il crossover e la
mutazione cambiano i bit dei genomi in modo
arbitrario, e lalgoritmo genetico si fermerà se alcune
bitstrings diventeranno inaccettabili.
Tuttavia i parametri che determinano i movimenti di un
turmite di un boid sono di solito limitati entro certi range.
Come possiamo usare arbitrariamente bitstring
come genomi, assicurandoci che queste bitstring
codifichino valori utilizzabili dei parametri di turmite e boid?
Il trucco è quello di dare a ogni creatura due tipi di materiale
genetico, che chiameremo DNA e RNA. I parametri DNA sono
bitstring arbitrarie sulle quali può lavorare un algoritmo
genetico. Le Variabili RNA sono dei valori che possono essere
usati come parametri di turmite e boid. Il programma Boppers ad
esempio usa una funzione, chiamata DNAToRNA, che trasforma una
DNA bitstring in un insieme opportuno di valori per le
Variabili RNA di bopper.
Boppers raggruppa le sue creature in tre colonie:
verde, rossa, e blue. Ogni colonia usa un algoritmo genetico sui
genomi dei suoi membri. I boppers hanno funzioni fitness che sono
principalmente basati sui colori dei pixels che incontrano.
Puoi usare il Controls menu's Colonies dialog per controllare lalgoritmo
genetico che ogni colonia usa, scegliendo lintensità
di ciascuno dei cinque operatori genetici: Morte (riproduzione
proporzionale al fitness), Sesso (crossover), Mutazione, Zapping
e Trasposizione. I parametri Cycles Between Breeding controlla
quanti passi di simulazione i boppers usano per
computare i loro fitness .
Maggiori informazioni sui metodi di riproduzione in Boppers
saranno date in seguito.
Il punteggio dei boppers tende a migliorare sopra un certo punto,
e poi non migliora più. Questo può voler dire che i
bopper sono abbastanza veloci a raggiungere un massimo fitness (o
può voler dire che sono molto lenti ad andare oltre un mediocre
fitness).
Un problema, ovviamente è che le popolazioni Boppers sono di
taglia piuttosto piccola: la maggior parte dei boppers che puoi
avere contemporaneamente è 27. Inoltre gli spazi
delle soluzioni nel quale i bopper cercano,
possono essere estremamente grandi (i bopper possono avere
stringhe DNA che contengono più di 18000 bit). Ma un uso
adeguato degli algoritmi genetici sembra dare alcuni
buoni risultati. Oltre che per evitare attentamente la prematura
convergenza dei genomi, linformazione genetica può essere
processata e riprocessata più volte. Un vantaggio di Boppers è
che gira abbastanza veloce da rendere possibile evolvere
popolazioni attraverso molte migliaia di generazioni..
Una speciale caratteristica del mondo di Boppers è che il
valore fitness di ogni creatura dipende da quello che stanno
facendo le altre creature. Il risultato è che è possibile un
processo di co-evoluzione, sotto cui ogni evoluzione della
colonia è influezata dallevoluzione delle altre. La Co-evoluzione
è naturalmente analoga alla successione dei giorni per sistemi
biologici naturali (le prede evolvono continuamente nuovi
modi di sfuggire ai loro predatori, mentre allo stesso tempo
questi ultimi escogitano nuove tecniche per catturarle).
Una vera vita artificiale dovrebbe sempre essere gnarly (contorta).
I bopper evolvono secondo funzioni fitness contorte? E
allora, tendono ad avere misure di disordine vicine al limite
della casualità totale? E difficile pensare una risposta
definitiva, ma spesso sembra che mentre il mondo di Boppers
evolve diventa più bello e più contorto.
La questione se una buona funzione fitness richieda
gnarliness è un interessante problema che viene
dibattuto dai ricercatori. Si crede che comportamenti gnarly
siano computazionlmente ricchi e perciò più probabilmente
funzioneranno bene su funzioni fitness.
In termini umani, sappiamo che persone molto rigide e
inflessibili (il cui comportamento può essere detto altamente
ordinato) non si adattano bene in situazioni mutevoli. Allatro
estremo, persone molto distratte e eccentriche tendono a non
comportarsi bene. Allora siamo indotti a supporre che
comportamenti che stanno in mezzo avranno maggiori probabilità
di successo. Una delle cose che rendono la vita artificiale
eccitante è che è possibile condurre esperimenti che
possono empiricamente testare questo tipo di credenze
in maniera scientifica.