Continua lo studio degli algoritmi genetici. In questo articolo scopriremo come creare una popolazione di oggetti, necessari alla formazione di un dataset per realizzare il nostro GA.

Nel cercare di ricreare l’esempio delle scimmie nel codice creeremo una popolazione di frasi ossia una stringa di caratteri.
Incombe allora una domanda: Come creeremo questa popolazione? E’ qui che applicheremo il principio darwiniano della variazione. Intendiamo dire, per semplicità, che noi cercheremo di evolvere la frase “cat” a partire da una popolazione di tre frasi:

hug
rid
won

Nonostante ci sia varietà nelle tre frasi sopra, anche se provassimo a mescolare e abbinare i caratteri non otterremo mail la parola “cat”. Non c’è abbastanza varietà per evolvere alla soluzione ottimale. Tuttavia, se avessimo una popolazione di migliaia di frasi, tutte generate casualmente, è probabile che almeno un membro della popolazione abbia una “c” come primo carattere, uno avrà una “a” come secondo carattere, e un terzo una “t” come terzo. Molto probabilmente una grande popolazione ci darà abbastanza varietà per generare la frase desiderata (anche se ricordiamo che nella seconda parte dell’algoritmo, avremo un’altra opportunità per introdurre ancora più variazioni nel caso in cui non ce ne siano abbastanza in questa fase). Quindi potremmo essere più specifici nel descrivere il passaggio 1 dicendo:

CREA UNA POPOLAZIONE DI ELEMENTI GENERATI CASUALMENTE

Questa situazione ci porta ad un’altra importante domanda. Che cos’è questo elemento? Comunque noi analizziamo l’esempio, vedremo differenti scenari; potremmo avere una popolazione di immagini, o una popolazione di veicoli (si veda pg 308). La chiave, è che ogni membro della popolazione ha un DNA virtuale, un set di proprietà (che chiameremo geni), che descrive come un dato elemento appare o si comporta. Nel caso dell’esempio della scimmia, il DNA per esempio, è semplicemente una stringa di caratteri. 

Nel campo della genetica, c’è un importante distinzione tra il concetto del genotipo e quello del fenotipo. Il codice genetico attuale è un elemento genotipico. E’ ciò che viene ereditato generazione dopo generazione. Il fenotipo, è invece l’espressione di quel dato. Questa differenza è fondamentale per capire come useremo l’algoritmo genetico. Come progetteremo gli oggetti del nostro fenotipo? E del genotipo che li deve archiviare? Il grafico sotto ci aiuta nella comprensione di queste differenze.

 

Come si può vedere dal grafico sopra, ilgenotipo sono le informazioni digitali. Ogni colore è una variabile archiviata come intero che abbaimo scelto di rappresentare come un colore. Ora il modo in cui scegliamo di rappresentare il dato è arbitrario. Ad esempio in un altro caso avremmo potuto scegliere di rappresentare l’intero con la lunghezza di una linea, come sipuò vedere dallo schema che segue.

La cosa bella riguardo il nostro esempio delle scimmie, è che non c’è differenza tra genotipo e fenotipo. Il dato del DNA stesso è una stringa di caratteri e la rappresentazione del dato è essa stessa una stringa di caratteri. Possiamo ora essere più precisi nella definizione del primo passo che deve attuare il nostro algoritmo gentico:

CREARE UNA POPOLAZIONE DI N ELEMENTI, OGNUNO DEI QUALI E’ CONTINE UNA DNA GENERATO CASUALMENTE