Home    About me    Publications    Blog    Undergrad memories

Fabio Ruini’s blog

Because Italians do it better! What the f**k? Ehm… the blogs, I mean… obviously! :-/

Aggiustamenti vari

Il lavoro procede alla grandissima. Prima di iniziare a modificare in maniera sostanziale il mio modello, testando architetture neurali di vario tipo, ho deciso di dedicare la giornata di oggi ad aggiustare un pochino tutti quegli aspetti che al momento potrebbero risultare un po’ ambigui.

L’assetto raggiunto dovrebbe ora essere quello definitivo. Rimane migliorabile la codifica dell’angolo visivo dei miei organismi (lo zero dell’input sensoriale corrisponde ad un oggetto posizionato alle spalle dell’organismo, creando un potenziale conflitto con la situazione di assenza dell’input), ma al momento questo non sembra essere un problema di particolare rilevanza.

Riassumendo un po’, la situazione base risulta essere ora la seguente:

  • l’ambiente è una griglia bidimensionale di 15×15=225 celle, ciascuna delle quali può essere vuota oppure contenere un organismo, un’unità di cibo o un predatore;
  • la vita di un organismo consiste in 2500 cicli di input/output, suddivisi in 25 epoche di 100 passi ciascuna;
  • ogni epoca si differenzia dalle altre per una diversa distribuzione delle unità di cibo al suo interno. Ciascuna cella può contenere un’unità di cibo con probabilità 0.25;
  • all’inizio di ciascuna epoca, l’organismo viene posizionato in una cella vuota scelta casualmente, con un orientamento (nord, sud, est, ovest) altrettanto casuale;
  • il comportamento dell’organismo è governato da una rete neurale feedforward con 4 unità di input sensoriali (2 relativi alla posizione della più vicina unità di cibo, 2 relativi al predatore), 2 unità di output motorio ed uno strato intermedio composto da 9 neuroni;
  • le informazioni sensoriali sono relative alla distanza (di Manhattan) dell’organismo dal cibo/predatore ed all’angolo che li separa (calcolato in senso orario, normalizzato nel range [0,1], a partire dalle spalle dell’organismo);
  • le due unità booleane di output codificano i movimenti dell’organismo: 11 muovi avanti di una casella verso la direzione nella quale si sta guardando, 01 ruota di 90° in senso orario, 10 ruota di 90° in senso antiorario, 00 rimani fermo;
  • quando l’organismo si muove su una casella dove è presente un’unità di cibo, questa scompare (viene “mangiata”);
  • il predatore compare una volta per ciascuna epoca, ad un ciclo scelto casualmente. Il predatore vive per un massimo di 25 cicli, per poi scomparire;
  • il comportamento del predatore è “hardwired”: il suo unico scopo è quello di muoversi verso l’organismo, cercando di catturarlo. Il movimento può avvenire liberamente nelle quattro direzioni, senza alcun problema di orientamento. Per rendere meno efficiente un comportamento altresì perfetto, all’input del predatore viene aggiunta una quantità casuale di “rumore”;
  • all’inizio della simulazione viene creata una popolazione di 100 organismi, ciascuno dei quali riceve pesi delle connessioni sinaptiche casuali, compresi nell’intervallo [-1,+1];
  • al termine della propria vita, a ciascun organismo viene assegnato un punteggio di fitness dato dalla formula: fitness = unità di cibo raccolte + (numero di catture subite * 10) ;
  • alla fine della generazione corrente i 20 individui con la fitness migliore danno origine a 5 figli ciascuno, che ereditano dai genitori i pesi delle connessioni sinaptiche, ciascuno dei quali viene mutato, con probabilità uguale a 0.25, di una quantità casuale compresa nel range [-1,+1];
  • il processo viene iterato per 200 generazioni.

L’algoritmo genetico implementato fa sì che, con il passare delle generazioni, evolvano comportamenti di approvvigionamento sempre più efficienti, così come mediamente migliora l’abilità degli organismi nel fuggire dal predatore. Questi aspetti sono ben evidenziati nei tre grafici che seguono:

Simulazione 1 - Fitness media

Simulazione 1 - Media cibo raccolto

Simulazione 1 - Numero medio di catture

Questo per quanto riguarda la prima situazione sperimentale, la “baseline”. La seconda, che prevede una modifica dell’architettura della rete neurale con l’aggiunta di uno strato di 2 neuroni tra l’input sensoriale relativo al predatore e l’hidden layer, porta ad alcuni cambiamenti nei risultati. Come previsto migliora l’abilità degli organismi nel fuggire dal predatore. Al tempo stesso decresce la loro capacità di approcciarsi al cibo. La fitness, però, complessivamente aumenta. Gli organismi della seconda simulazione, in sostanza, risultano essere “più adatti” all’ambiente nel quale vivono.

I grafici qui sotto riportano un’analisi comparativa delle due simulazioni:

Simulazione 2 - Fitness media

Simulazione 2 - Media cibo raccolto

Simulazione 2 - Numero medio di catture

Ok… per oggi direi che è tutto… :-)

Non ci sono ancora commenti. Vuoi essere il primo?

Lascia un commento