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 dall’uomo che si comportano come se fossero vivi. Storicamente, comunque, i GA sono diventati un campo di studio riconosciuto dieci o quindici anni prima dell’A-life. Molto del lavoro sui GA è focalizzata nel trovare soluzioni specifiche a problemi reali, mentre l’obiettivo finale  dell’AL è 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.
L’idea è 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 l’algoritmo 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 l’algoritmo genetico che ogni colonia usa, scegliendo l’intensità  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, l’informazione 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 dall’evoluzione 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. All’atro 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.