Capitolo 3 Algoritmi Genetici - Digilander

Capitolo 3
Algoritmi Genetici
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
Capitolo 3
3.1 Breve storia della computazione evolutiva
3.1.1 Algoritmi Evolutivi
Molti problemi computazionali riguardano la ricerca di una soluzione tra un numero
infinito di possibili alternative, tanto che non è proponibile l’idea di valutarle una per
una. Alcuni ricercatori hanno osservato che l’evoluzione biologica può essere un’ottima
fonte d’ispirazione per chi si propone di risolvere questo genere di problemi.
L’evoluzione, infatti, può essere vista come un metodo di ricerca in un insieme di
innumerevoli soluzioni possibili: le soluzioni candidate sono tutte le possibili sequenze
genetiche, mentre le soluzioni desiderate sono quelle sequenze che danno luogo ad
organismi particolarmente adatti al loro ambiente cioè organismi con una forte capacità
di sopravvivere e di riprodursi. Col termine generico di Algoritmi Evolutivi si indica
una gamma di sistemi di risoluzione dei problemi basati sull’utilizzo del calcolatore
affini ai processi evolutivi. Essi comprendono gli Algoritmi Genetici (AG), la
Programmazione Evolutiva, le Strategie Evolutive, i Sistemi Classificatori e la
Programmazione Genetica [Cerruti, 2002].
In genere gli algoritmi utilizzati nelle varie discipline operano l’individuazione di un
massimo o di un minimo globale in uno spazio finito di ricerca sulla base di vincoli
sullo spazio delle soluzioni.
Da un punto di vista formale possiamo dire che dato un elemento X appartenente a uno
spazio cartesiano D ( ∈ N ) e data una funzione:
f :D→R
(3.1)
detta funzione obiettivo, allora la ricerca dell’ottimo globale è la ricerca di un X* che
massimizza (o minimizza) tale funzione, cioè
27
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
X * ∈ D e ∀X ∈ D : f ( X ) ≤ f ( X *)
(3.2)
Fattori come la presenza di più punti di massimo o minimo locale, vincoli sul dominio
dello spazio, la non linearità dei vincoli, possono rendere la ricerca molto difficoltosa,
per cui il problema non è risolvibile in tempi accettabili. Si fa allora uso degli Algoritmi
Evolutivi, tecniche di ricerca parallela euristiche e stocastiche che richiedono tempi di
convergenza molto minori. Da qui la distinzione tra i metodi “forti” e quelli “deboli”. I
primi sono orientati alla soluzione di un problema specifico, sulla base della conoscenza
del dominio particolare e della rappresentazione interna del sistema in esame. I metodi
deboli utilizzano poca conoscenza del dominio, non sono orientati a un target specifico
ma risolvono una vasta gamma di problemi. Gli Algoritmi Evolutivi sono algoritmi di
ricerca euristici, considerati metodi deboli. Tuttavia è stata ultimamente introdotta la
nuova tipologia dei metodi deboli evolutivi che hanno inizialmente poca conoscenza del
dominio, ma che durante la loro evoluzione acquistano maggiore consapevolezza del
problema, implementando alcune caratteristiche dei metodi forti (“intelligenza
emergente”).
Gli Algoritmi Evolutivi si concentrano sul legame esistente tra genitori e figli. Il
processo di ricerca è un ciclo che, a partire da una popolazione iniziale, genera altre
soluzioni candidate ed elimina dall’insieme delle soluzioni quelle meno buone. Ad ogni
passo del ciclo viene manipolato un intero insieme di soluzioni candidate, dette
individui, le quali formano la cosiddetta popolazione. Ogni individuo della popolazione
rappresenta una codifica di una soluzione candidata. Su ognuno di essi vengono
applicati due operatori genetici, chiamati mutazione ed incrocio, seguendo una certa
probabilità [Catallo, 2004]. Ogni individuo ha una certa capacità di risolvere il
problema che si sta trattando, misurata per mezzo di una funzione detta fitness. Sulla
base della qualità degli individui viene applicato il principio della “riproduzione” e della
“sopravvivenza” del più adatto per comporre la generazione successiva.
Inizializzazione
Mutazione
Ricombinazione
Selezione
Soluzione
Figura 3.1: Schema di un Algoritmo Evolutivo
28
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
3.1.2 Gli Algoritmi Genetici (AG)
Tra la fine degli anni ‘50 e l’inizio degli anni ‘60 i ricercatori nel campo del
computazione evolutiva cominciarono a interessarsi ai sistemi naturali nella
convinzione che potessero costituire un modello per nuovi algoritmi di ottimizzazione
per la ricerca della soluzione tra un numero enorme di alternative [Mitchell, 1998].
Gli organismi possono essere considerati ottimi risolutori di problemi, poichè sono in
grado di sopravvivere nel loro ambiente, sviluppare comportamenti ed abilità che sono
il risultato dell’evoluzione naturale dimostrando di poter interagire con un ambiente
mutevole come teorizzato per la prima volta da Charles Darwin nella sua opera
“L’origine delle specie” [Darwin, 1864]. L’evoluzione biologica è assimilabile a un
metodo di ricerca all’interno di un grandissimo numero di soluzioni, costituite
dall’insieme di tutte le sequenze genetiche i cui risultati, le soluzioni desiderate, sono
organismi altamente adattati, dotati di forte capacità di sopravvivenza e di riproduzione.
L’evoluzione di una specie è regolata quindi da due processi fondamentali: la selezione
naturale e la riproduzione che determina la ricombinazione del materiale genetico dei
genitori generando un’evoluzione molto più rapida di quella che si otterrebbe se tutti i
discendenti contenessero semplicemente una copia dei geni di un genitore, modificata
casualmente da una mutazione. Si tratta di un processo ad alto grado di parallelismo:
non opera su una specie per volta, ma mette alla prova e cambia milioni di specie in
parallelo. L’AG seleziona le soluzioni migliori e le ricombina con diverse modalità
affinché esse evolvano verso un punto di ottimo. Il ciclo completo è ripetuto fino al
raggiungimento di un dato criterio di arresto. Un Algoritmo Genetico è una tecnica di
ricerca stocastica che opera su una popolazione di individui e che codifica le possibili
soluzioni di un dato problema [Jiang, 2003].
Gli AG hanno quindi questi punti di forza:
W possibilità di risolvere problemi complessi senza basarsi sulla forma delle funzioni
obiettivo;
W capacità di auto-modificazione in base al mutamento del problema;
W capacità di simulare alcuni fenomeni data una struttura e modalità operative affini
con quelle dell’evoluzione biologica.
29
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
I primi tentativi di progettazione di strumenti di ottimizzazione, le Strategie Evolutive di
Rechemberg e la Programmazione Evolutiva di Fogel, Owens e Walsh, non produssero
risultati interessanti, poichè i test di biologia dei primi anni ‘60 mettevano in risalto
l’operatore della mutazione, piuttosto che il processo riproduttivo per la generazione di
nuovi geni. A metà degli anni ‘60 un progresso significativo fu segnato dalla proposta di
John Holland, i cui Algoritmi Genetici sottolinearono per la prima volta l’importanza
della riproduzione e dell’evoluzione [Holland, 1992].
L’utilizzo di questi algoritmi oggi è essenzialmente legato alla programmazione
dell’intelligenza artificiale in robotica, alla biocomputazione, a particolari problemi di
gestione e sistemi di ottimizzazione in ingegneria.
30
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
3.2 Evoluzione naturale ed artificiale: la terminologia
3.2.1 L’evoluzione naturale
La combinazione delle ipotesi darwiniane con la genetica ha dato luogo a principi che
costituiscono le basi della genetica delle popolazioni. Le modalità di azione del
principio darwiniano della selezione naturale possono essere così riassunte:
W la terminologia utilizzata si ispira direttamente agli studi sull’evoluzione naturale e
biologica;
W una popolazione è definita come un gruppo di individui della stessa specie, che
operano e si incrociano nello stesso luogo;
W l’evoluzione naturale agisce sul materiale genetico di un individuo e non sulle sue
caratteristiche fisiche, il fenotipo. Ogni cromosoma è composto da geni, ognuno dei
quali codifica una particolare proteina che determina le caratteristiche specifiche
dell’organismo. Le posizioni dei geni all’interno del cromosoma sono dette locus e
le diverse configurazioni delle proteine sono dette alleli. La maggior parte degli
organismi presentano più di un cromosoma, il cui insieme è detto genoma. Per
genotipo si intende l’insieme dei geni del genoma. Il risultato finale dell’evoluzione
fetale, cioè l’individuo, è detto fenotipo. Ogni variazione che promuove
l’adattamento di un individuo emerge dal patrimonio genetico, non da ciò che i
genitori avranno eventualmente appreso durante la loro vita;
W la selezione naturale favorisce la riproduzione degli individui che migliorano
l’adattabilità all’ambiente mutevole ed elimina gli individui dalla minore
potenzialità riproduttiva. Dal punto di vista genetico, la selezione naturale promuove
quelle particolari combinazioni genetiche che danno vita a un organismo più
efficiente, selezionando il genotipo, non il fenotipo;
W la riproduzione (incrocio) è il nucleo centrale del processo evolutivo: la variabilità
generazionale di una specie è determinata dalla ricombinazione genica e dalle
piccole mutazioni casuali del codice genetico. La variabilità è una condizione
essenziale dell’evoluzione;
31
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
W l’evoluzione naturale opera su intere popolazioni attraverso processi ciclici e
generazionali determinati esclusivamente dalle contingenze ambientali e dalle
interazioni fra i vari organismi. L’evoluzione si basa quindi sui seguenti
meccanismi:
W mutazione di alleli: fonte primaria di variabilità genetica;
W flusso genico: variazione delle frequenze degli alleli, dovuta ai
movimenti migratori di alcuni individui, con conseguente introduzione o
rimozione di genotipi;
W deriva genetica: variazioni imprevedibili nelle frequenza degli alleli nel
caso in cui una popolazione abbia un piccolo numero di componenti.
32
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
3.2.2 L’evoluzione artificiale e il modello di Holland
Nella terminologia degli Algoritmi Genetici il cromosoma codifica una soluzione
candidata di un dato problema di ricerca.
Il modello originario di Holland si basa su una popolazione di n stringhe di bit di
lunghezza fissata l (n, l ∈ Ν), generate in modo casuale. Ogni stringa (genotipo) è la
codifica binaria di una soluzione candidata (fenotipo). Nei casi in cui la codifica del
cromosoma rappresenti direttamente una soluzione candidata, come in alcune
applicazioni in cui il cromosoma è una stringa di numeri reali anzichè di bit, anche i
termini genotipo e fenotipo possono coincidere.
Nelle applicazioni comuni si utilizzano individui a un singolo cromosoma, quindi i
termini genotipo, cromosoma e individuo sono equivalenti. Ogni locus in un
cromosoma ha due possibili alleli: 0 e 1. Ogni cromosoma può essere pensato come un
punto dello spazio di ricerca delle soluzioni candidate.
L’AG manipola le popolazioni dei cromosomi e ha bisogno in genere di una funzione di
idoneità (una fitness) che assegni un punteggio a ogni cromosoma della popolazione
corrente. Questa dipende dal suo grado di capacità di risolvere il problema che si sta
trattando.
In generale la funzione di fitness si presenta nelle forma seguente:
F = f ( x1 , x 2 ,...., x n )
(3.3)
Tramite questa funzione, ad ogni genotipo g i della popolazione iniziale P(t = 0) è
associato un valore Fi = F ( g i ) che rappresenta la capacità dell’individuo di risolvere il
problema dato. Per determinare il valore di adattività, la funzione di fitness riceve in
input un genotipo, lo decodifica nel corrispondente fenotipo e lo testa sul problema
dato.
Una volta conclusa la fase di valutazione degli individui della popolazione iniziale, si
genera una nuova popolazione P (t + 1) di nuove n soluzioni candidate applicando gli
operatori di selezione, crossover, mutazione e inversione.
33
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
3.3 Codifica dei problemi per un Algoritmo Genetico
Come per tutti i metodi di ricerca, il modo in cui le funzioni candidate sono codificate è
uno dei fattori principali del successo di un Algoritmo Genetico. L’ottimizzazione di tali
modelli è tipicamente difficoltosa a causa dell’esistenza potenziale dei minimi locali
multipli nello spazio di ricerca. Si assume che una possibile soluzione per un problema
possa essere rappresentata come un set di parametri (detti geni) i quali sono uniti
insieme per formare una stringa di valori (spesso chiamata cromosoma). La maggior
parte delle applicazioni usano per codificare le soluzioni candidate stringhe di bit di
lunghezza e ordine prefissati. Sono tutt’ora di studio nuovi approcci per ridurre il
numero delle funzioni fitness richieste da un GA per l’ottimizzazione dei problemi
([Gantovnik, 2003]). Le aggiunte proposte al GA rendono la ricerca più efficace e
veloce migliorando il valore di fitness di generazione in generazione.
Le codifiche più comuni sono:
W codifiche binarie, cioè le stringhe di bit, sono le più comuni per ragioni storiche.
Nei primi studi Holland si concentrò su questo tipo. Sono state studiate numerose
estensioni, ma risultano tuttavia innaturali e a volte inutili per molti problemi;
W codifiche a più caratteri e a valori reali, per molte applicazioni è più naturale
formare i cromosomi con un alfabeto formato da molti caratteri o molti numeri reali.
Queste ultime hanno mostrato risultati migliori rispetto alle codifiche binarie;
W codifiche ad albero, la popolazione non è costituita da stringhe di bit, ma da
programmi che quando vengono eseguiti si evolvono, si combinano, si riproducono
o mutano per dar luogo ad altri programmi che costituiscono le soluzioni migliori di
un determinato problema. Questi programmi vengono codificati con una struttura ad
albero in cui i nodi interni sono funzioni e le foglie sono i simboli terminali del
programma. Ogni nodo ha un unico arco entrante, tranne uno particolare, chiamato
radice, che non ha archi entranti. Ogni nodo può avere zero o più archi uscenti e i
nodi senza archi uscenti sono detti foglie.
34
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
Radice
Campo
Cammino
Sottoalbero
Figura 3.2: Codifica ad albero
Le codifiche ad albero hanno parecchi vantaggi tra cui il fatto di potersi muovere in
spazi di ricerca illimitati. Questa assenza di limiti può anche essere svantaggiosa, gli
alberi possono crescere senza controllo, impedendo la formazione di soluzioni
candidate strutturate in maniera più gerarchica. Inoltre più gli alberi sono estesi, più
risultano di difficile interpretazione. Tuttavia le codifiche ad albero, insieme al
miglioramento locale, costituisco due dei metodi che hanno dimostrato
miglioramenti notevoli in efficienza di calcolo per i problemi di ottimizzazione, dal
momento che utilizzano le informazioni dei punti precedentemente analizzati nelle
ricerche successive. L’operatore di crossover è la forza trainante dell’algoritmo: si
prendono a caso due sottoalberi da individui selezionati in base alla loro fitness e si
ricombinano dando vita a due alberi figli, con parametri che fissano limiti sulla
dimensione massima degli alberi della popolazione. Sarà la fitness, penalizzando gli
alberi che non rispettano le condizioni, a favorire la crescita di alberi corretti. Il
percorso della valutazione della funzione di fitness con l’aiuto dell’albero binario
consta in vari passi: dopo che una nuova generazione è stata creata tramite i
funzionamenti genetici, è cercato un albero binario per ogni nuova iterazione. Se ciò
accade, il valore di fitness è richiamato dall’albero binario senza condurre
un’analisi. Altrimenti, la fitness ottenuta è basata su un’analisi esatta. Questa nuova
35
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
struttura ed il relativo valore di fitness allora sono inseriti nell’albero come nuovo
nodo [De Lucia, 2001].
Una proprietà rilevante di questa codifica è dovuta alla versatilità dei dati che
possono essere richiamati, modificati ed inseriti rapidamente nel processo. Nel GA
standard, una nuova popolazione può contenere le proprietà che sono già state
incontrate nelle generazioni precedenti, soprattutto verso la conclusione del
processo di ottimizzazione. La procedura di memoria elimina la possibilità di
ripetere un’analisi che potrebbe essere costosa.
L’estensione dello spazio di ricerca (lo spazio di tutte le funzioni che soddisfano la
grammatica definita dall’utente) e la minore efficienza della mappatura in memoria
della rappresentazione utilizzata fanno sì che la programmazione genetica richieda
un elevato carico computazionale e un’elevata occupazione di memoria. Ne segue
un utilizzo minore rispetto agli Algoritmi Genetici e la necessità di realizzare
un’implementazione parallela di questi algoritmi su ambienti di tipo distribuito.
36
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
3.4 Parametri degli AG
3.4.1 Selezione
Una volta scelta la codifica, la successiva operazione che viene compiuta è la selezione
che guida la ricerca verso gli individui migliori che promuovono la convergenza. La
selezione dei genitori ha il compito di allocare opportunità riproduttive a ciascun
individuo. Questo funzionamento effettua un rapporto tra alta velocità di convergenza e
l’alta probabilità di individuazione dell’optimum globale nei problemi complessi [Alba,
2003]. Gli schemi più importanti di selezione usati sono:
W metodo proporzionale, all’interno di una popolazione, ad ogni individuo è
associata una probabilità di selezione legata alla fitness. L’operatore di selezione
genera un numero casuale c ∈ ]1,0[ che determina quale individuo verrà scelto.
L’individuo selezionato viene copiato dalla popolazione e introdotto nel cosiddetto
mating pool (“piscina di accoppiamento”), dove gli individui migliori hanno molta
probabilità di essere copiati più volte, mentre i peggiori potrebbero non essere
copiati affatto [Lazzerini, 2002]. Sotto un severo schema di riproduzione, la
dimensione della mating pool è uguale a quella della popolazione. Dopo di ciò,
coppie di individui vengono tirati fuori “dalla piscina” e fatti accoppiare. Esso è
così riempito di n copie degli individui selezionati, al tempo P(t = 0) . Questo viene
ripetuto finché lo spazio rimane vuoto. La nuova popolazione è ottenuta con gli
operatori di crossover, mutazione e inversione;
W metodo della roulette, è il metodo più comune. Ad ogni individuo si assegna una
fetta di una ruota di una roulette e la grandezza di questa fetta è proporzionale
all’idoneità dell’individuo. La ruota viene azionata N volte, dove N è il numero di
individui della popolazione. Ad ogni iterazione, all’individuo prescelto è concesso
di essere tra i genitori della generazione successiva. Il metodo può essere
implementato in questo modo: sommare i valori attesi di tutti gli individui della
popolazione. La somma si indica con T; ripetere N volte le seguenti istruzioni:
scegliere un intero casuale r tra 0 e T, passare in rassegna tutti gli individui della
37
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
popolazione, sommando mano a mano i valori attesi, fino a che la somma non è
maggiore o uguale a r. L’individuo il cui valore atteso porta la somma sopra questo
limite, è prescelto [Mitchell, 1998];
W metodo stocastico universale: con popolazioni relativamente piccole, il numero
dei discendenti effettivamente assegnati a ogni individuo spesso si discosta di
molto dal valore atteso (con la roulette si potrebbe addirittura assegnare tutti i
discendenti all’individuo peggiore). In questo caso si itera una sola volta ma con N
puntatori posti a egual distanza che servono per selezionare gli N genitori.
3.4.2 Crossover
Il crossover è una metafora della riproduzione in cui il materiale genetico dei
discendenti è una combinazione di quello dei genitori, cioè il meccanismo da cui fra
tutti gli individui accoppiati sono scambiate informazioni per formare due nuovi
individui. All’interno del mating pool sono scelti a caso due individui, detti genitori, e
un punto di taglio, detto punto di crossover. L’incrocio è attivato secondo valori scelti di
probabilità, che è presa tipicamente intorno a 0,90. Le tecniche di incrocio
maggiormente utilizzate sono:
W crossover one point: è applicato n/2 volte per ottenere n discendenti in base ad una
prefissata probabilità p. Le porzioni di genotipo alla destra del punto di crossover
sono scambiate generando due discendenti. Nel caso in cui il crossover non sia
applicato, i discendenti coincidono con i genitori [Hasançebi, 2000];
Figura 3.3: Schema di un crossover one point
38
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
W two points crossover: l’incrocio in un punto tratta alcune posizioni in modo
preferenziale, poiché i segmenti scambiati tra due genitori contengono sempre gli
estremi della stringa. Per ovviare a ciò si usa l’incrocio in due punti in cui si
scelgono a caso due posizioni e si scambiano i segmenti compresi;
W multi- point crossover fornisce uno scambio disperso di caratteristiche dei genitori
tanto più evidente quanti più tagli vengono effettuati;
W crossover uniforme prevede che per ogni coppia di genitori si genera una stringa
binaria della stessa lunghezza chiamata maschera. Il discendente viene generato
copiando il bit del padre o quello della madre a seconda che nella corrispondente
posizione della maschera vi sia uno 0 o un 1.
3.4.3 Mutazione
Questo operatore è ispirato alla rara variazione di elementi del genoma degli esseri
viventi durante l’evoluzione. In base a una probabilità piccola p, viene cambiato il
valore dei bit di ogni individuo (da 0 a 1 e viceversa).
Figura 3.4: Schema di una mutazione
Come in natura, la mutazione aggiunge un “rumore” o una certa casualità all’intera
procedura, in modo da assicurare che partendo da una popolazione generata
casualmente non vi siano punti dello spazio delle soluzioni che non vengano esplorati.
3.4.4 Inversione
In base a una fissata probabilità p, sono scelti casualmente due punti nella stringa che
codifica l’individuo e inverte i bit tra le due posizioni.
39
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
Figura 3.5: Schema di un’inversione
Su una popolazione iniziale numerosa è difficile stimare quali valori della probabilità di
crossover e della probabilità di mutazione daranno le migliori prestazioni. Dipende dal
tipo di problema. Generalmente la probabilità di crossover è tra il 60 e l'80%, mentre
quella di mutazione oscilla fra 0,1-1%. Se le probabilità che un individuo sia selezionato
per la riproduzione sono proporzionali alla sua fitness è probabile che, in seguito a
crossover, gli individui migliori vengano ricombinati, con la conseguente perdita del
cromosoma migliore. Per evitare ciò e accelerare i tempi di convergenza si può
“clonare” l’individuo migliore di una generazione. Attraverso tale tecnica, detta
elitismo, mantenendo un alto numero di popolazioni, è possibile clonare più individui
nella successiva generazione, mentre per gli altri si procede in modo classico.
40
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
3.5 Gli altri settori degli Algoritmi Evolutivi
3.5.1 La Programmazione Evolutiva
La Programmazione Evolutiva (Evolutionary Programming, EP) è una strategia
stocastica di ottimizzazione simile agli AG. Si basa sulla definizione della popolazione,
fitness e la selezione dei migliori, ma mentre questi principalmente nei GA cercano di
simulare gli operatori di crossover e mutazione come avvengono in natura, la
Programmazione Evolutiva si concentra sul legame esistente tra genitori e figli. Il
metodo di base consiste in tre passi: scegliere una popolazione iniziale a caso (maggiore
è il numero di individui, più velocemente si arriverà alla convergenza); ogni individuo
viene copiato in una nuova popolazione e a ciascun figlio viene applicata una mutazione
seguendo una certa probabilità; viene calcolato la fitness di ogni individuo e tramite un
torneo con selezione stocastica vengono scelte N possibili soluzioni.
L’obiettivo degli EP è la previsione della prossima configurazione del sistema, non
attraverso l’operatore di crossover (come negli AG), ma affidandosi esclusivamente alla
mutazione: la mutazione altera lo stato iniziale, modifica la transizione o cambia uno
stato interno. La caratteristica fondamentale di questo tipo di algoritmi è che i figli
hanno un comportamento simile a quello dei genitori.
3.5.2 Le Strategie Evolutive
Le Strategie Evolutive sono tecniche simili alla precedente, ma sviluppate
originariamente per problemi di ingegneria civile e strutturale. La principale differenza
consiste nel fatto che nella EP gli individui sono selezionati per la mutazione con una
certa probabilità proporzionale alla fitness come accade negli AG, mentre in questo caso
gli individui peggiori vengono scartati deterministicamente. Il metodo di ottimizzazione
si basa sulla scelta di una strategia che viene poi applicata a una popolazione. Le due
principali sono note come Strategia Plus (m+l) e Strategia Comma (m,l). Nel primo
caso i genitori possono partecipare alla selezione nella generazione successiva, mentre
41
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
nel secondo solo i figli possono essere selezionati, mentre i genitori muoiono. m
rappresenta il numero di individui nella popolazione, mentre l il numero di figli
concepiti per ogni generazione. Un individuo nella popolazione consiste di un genotipo
che rappresenta un punto nello spazio di ricerca (cioè lo spazio delle possibili
soluzioni). A ciascun punto vengono associate:
W delle variabili oggetto xi sulle quali verranno applicati gli operatori di crossover e
mutazione fino a che non viene raggiunta una soluzione ottima del problema;
W delle variabili di strategia Si che determinano la “mutuabilità” di xi. Esse
rappresentano la deviazione standard di una distribuzione Gaussiana (0, Si). Con un
valore uguale a zero i genitori produrranno in media dei figli simili a loro. Questa
strategia funziona perché prima o poi verranno favoriti gli individui che hanno un
buon valore della funzione obiettivo e che probabilmente ricombinandosi tra loro
formeranno figli migliori. Il valore della funzione obiettivo f(x) rappresenta il
fenotipo (fitness) di cui si terrà conto nella selezione. Nella strategia Plus i migliori
m individui su (m+l) sopravvivranno e diventeranno genitori nella generazione
successiva, mentre nella Comma la selezione avviene solo tra i figli.
3.5.3 I Sistemi Classificatori
I Sistemi Classificatori sono operatori che lavorano in un ambiente dal quale ricevono
input che classificano secondo una serie di regole dai quali generano output di istruzioni
da eseguire. Le istruzioni sono del tipo if...then.
3.5.4 La Programmazione Genetica
La tecnica della Programmazione Genetica è simile a quella degli Algoritmi Genetici,
ma in questo caso, la popolazione non è costituita da stringhe di bit, ma da programmi
che quando vengono eseguiti si evolvono, si combinano, si riproducono o mutano per
42
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
dar luogo ad altri programmi che costituiscono soluzioni migliori di un determinato
problema. Questi programmi vengono codificati con una struttura ad albero in cui i nodi
interni sono funzioni e le foglie sono i simboli terminali del programma.
Lo spazio di ricerca è costituito da tutti i programmi composti dai terminali e dalle
funzioni definite per uno specifico problema.
La Programmazione Genetica ha un grado di complessità maggiore rispetto agli
Algoritmi Genetici, poiché la progettazione richiede la selezione di molti più parametri,
come la generazione della popolazione iniziale, l’insieme delle funzioni e terminali di
base, il tipo di selezione, la dimensione della popolazione e il numero massimo di
generazioni, il criterio di terminazione.
L’operatore di crossover è la forza trainante dell’algoritmo: si prendono a caso due
sottoalberi da individui selezionati in base alla loro fitness e si ricombinano dando vita
a due alberi figli, con parametri che fissano limiti sulla dimensione massima degli alberi
della popolazione. Altri operatori, quali la mutazione, la permutazione, l’editing,
l’incapsulamento e la decimazione sono usati in casi particolari. Sarà la fitness,
penalizzando gli alberi che non rispettano le condizioni, a favorire la crescita di alberi
corretti.
Se gli Algoritmi Genetici ottimizzano una soluzione definita e parametrizzata
dall’utente, e quindi l’ottimizzazione opera sulla rappresentazione dei parametri di una
funzione la cui struttura è nota, nella Programmazione Genetica si opera a un livello
superiore, poichè l’utente definisce gli elementi di una grammatica (operatori e simboli
terminali) utilizzati per generare funzioni che devono evolversi. L’ottimizzazione della
fitness consiste allora nella manipolazione del codice stesso delle funzioni e non solo
dei parametri.
L’estensione dello spazio di ricerca (lo spazio di tutte le funzioni che soddisfano la
grammatica definita dall’utente) e la minore efficienza della mappatura in memoria
della rappresentazione utilizzata fanno sì che la programmazione genetica richieda un
elevato carico computazionale e un’elevata occupazione di memoria. Ne segue un
utilizzo minore rispetto agli Algoritmi Genetici e la necessità di realizzare
un’implementazione parallela di questi algoritmi su ambienti di tipo distribuito.
43
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
3.6 Altre tecniche di ricerca
Molte tecniche di approccio generale sono state inventate per problemi di ricerca
[Cerruti, 2002]. Come i GA, assumono che il problema sia definito da una funzione di
fitness, che deve essere massimizzata. Ci sono varie tecniche di ottimizzazione, le più
conosciute sono:
W metodo del gradiente: si utilizzano le informazioni sul gradiente della funzione per
guidare la direzione della ricerca. La funzione deve essere però continua, altrimenti
non ne può essere calcolata la derivata. In generale questi metodi sono detti di
hillclimbing (scalata) e nel caso di funzioni con un solo picco (unimodali), meno
per funzioni multimodali, non è detto che il primo picco scalato sia il più alto. Nella
figura seguente abbiamo un esempio del problema: partendo da un punto a caso X,
con movimenti verso l’alto (uphill) è localizzato il massimo B, ma A e C non sono
localizzati;
Figura 3.6: Schema dell’ hillclimb
W ricerca casuale: l’approccio è una ricerca casuale o enumerata. I punti nello spazio
di ricerca sono scelti a caso o in qualche maniera sistematica, e il loro valore
calcolato;
W ricerca Iterata: si combina il metodo del gradiente con quello della Ricerca Casuale,
in cui i punti dello spazio di ricerca sono scelti a caso. Trovato il picco, la scalata
44
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
riparte da un altro punto scelto a caso. La tecnica ha il pregio della semplicità e dà
buoni risultati con funzioni che ovviamente non hanno molti massimi locali.
Tuttavia, poiché ogni prova è isolata, non si ottiene una figura complessiva della
forma del dominio e mentre la ricerca casuale progredisce, si continuano ad allocare
lo stesso numero di prove sia in regioni dove sono stati trovati alti valori di fitness,
sia in regioni con basso valore di fitness. Un Algoritmo Genetico, invece, opera a
partire da una popolazione iniziale casuale e compie tentativi nelle regioni con più
alto fitness. Potrebbe essere uno svantaggio se il massimo si trova in una piccola
regione circondata da regioni con basso fitness. Ma questo tipo di funzione è
difficilmente ottimizzabile con qualsiasi metodo;
W Simulated Annealing (temperatura simulata): è una versione modificata
dell’hillclimbing. Iniziando da un punto scelto a caso nel dominio, viene fatto un
movimento casuale: se questo porta a un punto più alto allora è accettato, se ci porta
ad un valore più basso è accettato con una probabilità p(t), dove t è il tempo.
All’inizio il valore di p(t) è vicino a 1, ma tende gradualmente a zero. Inizialmente
ogni movimento è accettato, ma la “temperatura” si riduce e la probabilità di
accettare un movimento negativo diminuisce. A volte i movimenti negativi sono
necessari per evitare massimi locali, me se sono troppi possono allontanarci dal
massimo. In generale, questa tecnica lavora con una sola soluzione candidata per
volta, non costruisce una figura complessiva dello spazio di ricerca e non sono
salvate le informazioni dei precedenti movimenti per guidarci verso la soluzione
[Catallo, 2004].
45
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
3.7 Vantaggi e svantaggi degli AG
Una prima distinzione degli AG, rispetto alle normali procedure di ricerca ed ai più
classici algoritmi d’ottimizzazione numerica, può essere fatta sulla base delle seguenti
motivazioni:
W svolgono ricerche all’interno di una popolazione di punti di una regione dello spazio
di ricerca e non nel singolo punto;
W le leggi che regolano il passaggio da un punto all’altro del dominio (regole di
transizione) sono di tipo probabilistico e non deterministico;
W valutano le informazioni contenute direttamente nella funzione obiettivo e non le
derivate parziali o altre conoscenze ausiliarie;
W lavorano con una codifica dei parametri e non con i parametri in sé e per sé.
L’Algoritmo Genetico sfrutta le regioni ”bersaglio” dello spazio delle soluzioni, poiché
in generazioni successive, attraverso la riproduzione ed il crossover, aumenta
progressivamente il numero delle stringhe che si trovano in quelle regioni [Cavanna,
2004].
In un normale problema di statistica, in cui sono applicati opportuni algoritmi
matematici (un esempio sono i metodi di Montecarlo), si dovrebbero valutare decine di
campioni tratti da migliaia o milioni di regioni per ottenere il valore adattivo di ciascuna
di queste. L’Algoritmo Genetico invece riesce ad ottenere lo stesso risultato con un
numero di stringhe di gran lunga inferiore. Questo sorprendente comportamento è
dovuto al fatto che una singola stringa appartiene a tutte le regioni in cui appare almeno
qualcuno dei suoi bit. Per esempio, la stringa
[11011001]
appartiene alle regioni
11******, 1******1, **0**00*
46
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
e così via, dove il segno di asterisco indica che il valore di un bit non è specificato. Le
regioni più grandi, quelle cioè con un numero elevato di bit non specificati, saranno
rappresentate da una elevata percentuale di tutte le stringhe di una popolazione. Così, un
Algoritmo Genetico che manipola una popolazione di poche migliaia di stringhe, di
fatto dispone di campioni di un numero molto più grande di regioni.
E’ proprio questo parallelismo implicito, che conferisce all’Algoritmo Genetico il suo
vantaggio fondamentale rispetto ad altri procedimenti utilizzati per la risoluzione di
problemi, in quanto può esplorare e sfruttare moltissime regioni nello spazio di ricerca,
pur manipolando un numero relativamente piccolo di stringhe.
Inoltre l’Algoritmo Genetico contribuisce a risolvere un enigma che ha eluso fin qui i
metodi convenzionali di risoluzione di problemi. Per localizzare l’ottimo, una solida
tecnica di crossover può utilizzare due strategie: esplorazione (exploration) per
esaminare le aree dello spazio di ricerca, e sfruttamento (exploitation). Queste richieste
sono contraddittorie e un buon algoritmo di ricerca deve trovare un buon compromesso
tra le due [Herrera, 1999]. Una ricerca puramente casuale è buona per l’esplorazione,
ma non fa nessuno sfruttamento, mentre un metodo puramente di scalata (hillclimb) va
bene per lo sfruttamento, ma fa poca esplorazione. La combinazione di queste due
tecniche può essere abbastanza efficace, ma è difficile sapere dove si trova l’equilibrio
migliore, cioè quanto sfruttamento bisogna fare prima di arrendersi. Holland ha
dimostrato che un GA combina le due strategie allo stesso tempo e in un modo ottimale.
Sebbene questo sia teoricamente vero, in pratica ci sono problemi inevitabili. Holland
infatti ha fatto certe semplificazioni:
W la popolazione è infinita;
W la funzione fitness riflette accuratamente l’utilità della soluzione;
W i geni in un cromosoma non interagiscono significativamente.
La prima condizione non può essere mai verificata in pratica e a causa di ciò il
funzionamento del GA sarà soggetto ad errori stocastici. Un problema del genere, che si
trova anche in natura è quello della deriva genetica (genetic drift). Anche in assenza di
qualsiasi pressione di selezione (cioè la funzione fitness è costante), i membri della
popolazione continueranno a convergere verso qualche punto nello spazio di ricerca.
Questo succede a causa dell’accumulo di errori stocastici. Se un gene diventa
47
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
predominante nella popolazione, allora ha la stessa probabilità sia di diventare più che
meno dominante nella generazione successiva. Il tasso di deriva genetica produce un
limite inferiore alla velocità con la quale un GA può convergere verso la soluzione
corretta. Così, se il GA sta sfruttando l’informazione del gradiente nella funzione
fitness, la funzione fitness fornisce un’inclinazione sufficientemente grande per
contrastare ogni deriva genetica. Il tasso di genetic drift, può essere anche ridotto
introducendo la mutazione. Se la mutazione è troppo elevata, le informazioni del
gradiente non possono essere sfruttate adeguatamente. La seconda e la terza condizione
possono essere verificate su funzioni test che si comportano bene in laboratorio, ma
sono difficili da soddisfare nel mondo reale. Gli Algoritmi Genetici sono
particolarmente indicati per quelle regioni del dominio caratterizzate dall’avere parecchi
punti di massimo o minimo locali dove quindi il metodo del gradiente facilmente
rischierebbe di focalizzarsi su un estremo locale, oppure caratterizzate da zone piatte a
gradiente nullo che rendono difficoltosa la ricerca dell’estremo.
Figura 3.7: Visualizzazione di una funzione obiettivo
48
Università degli Studi di Pavia
Facoltà di Ingegneria
Algoritmi Genetici
Gli Algoritmi Genetici sono sicuramente il paradigma evoluzionistico più comunemente
utilizzato, sia per le caratteristiche della rappresentazione che consente di realizzare
implementazioni particolarmente efficienti degli operatori genetici, sia per la quantità di
problemi d’ottimizzazione le cui soluzioni possono essere rappresentate in modo
immediato ed efficace con stringhe binarie.
Considerando le applicazioni dei metodi d’ottimizzazione ai problemi d’ingegneria
civile, si può affermare che i più usati sono tradizionalmente quelli di ricerca del
gradiente.
Con tale approccio esistono difficoltà legate alla scelta di una funzione di costo
differenziabile e continua e nel fatto di considerare la non linearità.
Comparato con quello del gradiente, il metodo degli Algoritmi Genetici è invece in
grado di ottenere un valore ottimale dalla complessa e possibile discontinuità dello
spazio delle soluzioni, in quanto la funzione di prestazione di costo è la sola
informazione richiesta per questo tipo di problema; infatti gli Algoritmi Genetici non
richiedono la riformulazione del problema in una forma più adatta a differenza del
metodo del gradiente.
Nel campo civile gli AG sono molto utili quando si vogliono identificare i parametri
strutturali di un edificio nel quale si evolve un danno.
Essi servono, ad esempio, per identificare i valori di smorzamento da introdurre nel
modello matematico che si usa per svolgere l’analisi strutturale, ma il problema che si
presenta è quello di scegliere una buona funzione di costo in modo da ottenere soluzioni
ottimali ed accettabili.
49