Sei sulla pagina 1di 17

Corso di Sistemi Intelligenti

Algoritmi genetici

Anno accademico: 2016/2017


Abstract

In questo documento vengono discussi gli algoritmi euristici e metaeuristici, particolare


attenzione dedicata agli algoritmi genetici di cui verr proposto e descritto un esempio
implementativo.
Indice

1 Introduzione ........................................................................................................................... 1
2 Algoritmi Euristici e Metaeuristici ......................................................................................... 2
2.1 Algoritmi Euristici ............................................................................................................ 2
2.2 Algoritmi Metaeuristici ................................................................................................... 2
2.3 Combinatorial Optimization Problems .......................................................................... 3
3 Algoritmi Genetici .................................................................................................................. 5
3.1 Cenni generali ................................................................................................................. 5
3.2 Descrizione dellindividuo............................................................................................... 5
3.3 Processo Evolutivo .......................................................................................................... 6
3.4 Operatori ......................................................................................................................... 7
3.5 Metodologia .................................................................................................................... 8
4 Esempio implementativo ..................................................................................................... 10
4.1 Descrizione .................................................................................................................... 10
4.2 Dettagli .......................................................................................................................... 12
4.3 Risultati .......................................................................................................................... 13
5 Bibliografia e sitografia ........................................................................................................ 14
1 Introduzione

Sono numerosi i problemi di cui tuttoggi non si conosce ancora un algoritmo che permetta
la loro risoluzione in tempo accettabile. Per la risoluzione di questi problemi ci si affida
alleuristica.
In ambito informatico leuristica una tecnica designata alla risoluzione di problemi in un
modo pi rapido rispetto ai metodi classici, o nel caso in cui non sia stato ancora trovato un
algoritmo che li risolve di trovare una approssimazione della soluzione ottima. Infatti con
questa tecnica si sceglie di sacrificare gli aspetti dellottimalit, dellaccuratezza e della
precisione per ottener un minor tempo di computazione.
In una grande classe di problemi infatti non si dispone del tempo necessario per applicare
metodi esatti basati su modelli matematici, in questi casi ci si accontenta di soluzioni di buona
qualit, purch siano ottenute in tempi utili.
Con il passare degli anni la tecnica stata sviluppata presentando nuovi sotto-classi quali gli
algoritmi metaeuristici. Di questultima classe fanno parte gli algoritmi genetici, un paradigma
introdotto da Holland nel 1975.

1
2 Algoritmi Euristici e Metaeuristici

2.1 Algoritmi Euristici

Gli algoritmi sviluppati utilizzando la tecnica euristica vengono appunto denominati algoritmi
euristici.
Gli algoritmi euristici possono essere classificati in tre macro-classi: costruttivi, di ricerca
locale e metaeuristici.
Gli algoritmi costruttivi sono orientati alla costruzione graduale di una soluzione ammissibile
sfruttando le loro propriet strutturali. Un esempio di questa classe il Closest Neighbor per
il problema del commesso viaggiatore (TSP), lalgoritmo consiste nel visitare sempre il cliente
pi vicino reiterando la procedura fino a che tutti i clienti non sono stati visitati.
Gli algoritmi di ricerca locale utilizzano uno schema di ricerca nello spazio delle soluzioni,
partendo da una soluzione euristica iniziale gi ammissibile ricercano nel vicinato dei possibili
miglioramenti iterando la procedura fino al presunto ottimo.
Gli algoritmi metauristici invece attuano una esplorazione pi approfondita dello spazio delle
soluzioni nelle regioni pi promettenti. Questi algoritmi implementano regole di ricerca e di
ricombinazione che permettono di raggiungere soluzioni di qualit migliore rispetto alle altre
classi euristiche, richiedendo per allo stesso tempo un tempo di calcolo solitamente pi
elevato.
Queste ultime due classi rappresentano un framework pi generale rispetto agli algoritmi
costruttivi, adatto ad essere utilizzato per la risoluzione di una variet maggiore di problemi.

2.2 Algoritmi Metaeuristici

A partire dagli anni 60/70 emerso un nuovo tipo di algoritmo approssimato che combina i
metodi base delleuristica per esplorare efficacemente lo spazio delle soluzioni. Questi
prendono il nome di algoritmi metaeuristici.
Come accennato nel paragrafo precedente le caratteristiche di questo tipo di algoritmi sono
lesplorazione approfondita di regioni dello spazio delle soluzioni considerate pi promettenti
delle altre e lutilizzo di regole di ricombinazione delle soluzioni. Unaltra caratteristica che li
distingue dagli algoritmi euristici classici la possibilit di passare attraverso soluzioni non
ammissibili o attraverso fasi non migliorative.

2
I risultati derivanti da questi algoritmi sono solitamente di qualit superiore rispetto a quelli
ricavabili con euristici classici. In genere, inoltre, questo tipo di procedure richiede la corretta
valutazione ed impostazione di un certo numero di parametri propri dellalgoritmo. Essendo
infatti un framework generale ladattamento dei parametri al problema da risolvere
garantisce una probabilit maggiore di ottenere la soluzione migliore possibile.
Diverse tipologie di tecniche metaeuristiche sono state presentate in letteratura come lAnt
Colony Optimization (ACO), lEvolutionary Computation (EC), lIterated Local Searchm,
Memetic Algorithms, Artificial Neural Networks.
Molti tecniche si sviluppano partendo da una soluzione iniziale e passa, ad ogni iterazione,
dalla soluzione corrente alla migliore soluzione tra i vicini finch non viene soddisfatto un
opportuno criterio di arresto, tempo di calcolo o ammissibilit della soluzione. In generale per
favorire la diversificazione ed impedire fasi di stallo intorno a minimi locali pu esser
necessario passare attraverso sequenze di soluzioni peggiorative. Nel caso invece degli
algoritmi genetici, legati allEvolutionary Computation, ad ogni passo viene esaminata una
popolazione di soluzioni: ogni popolazione deriva dalla precedente combinando i suoi migliori
elementi e scartando i peggiori. Negli Ant System, un algoritmo della classe dellAnt Colony
Optimization, numerose soluzioni sono create ad ogni passo sfruttando le informazioni
raccolte durante le iterazioni precedenti. Le reti neurali, invece, sono meccanismi in grado di
auto-regolare insiemi di coefficienti interni, progredendo verso soluzioni sempre migliori.
Molte tecniche metaeuristiche si basano su ripetute chiamate a metodi di algoritmi di ricerca
locale. Un insieme di problemi in cui la ricerca sta progredendo in questi ultimi anni sono i
Combinatorial Optimization Problems (CO). Lo sviluppo di algoritmi sempre pi efficaci che
permettano una risoluzione ottimale di questi problemi di primaria importanza per lintero
ambito industriale.

2.3 Combinatorial Optimization Problems

Molti problemi di ottimizzazione consistono nella ricerca della migliore configurazione di


certe variabili per raggiungere un determinato scopo.
Questi si differenziano principalmente in due categorie
1. Problemi a variabili discrete
2. Problemi a variabili reali
Nellinsieme dei secondi, troviamo anche i Combinatorial Optimization Problems (CO) nei
quali cerchiamo un oggetto (per esempio un numero, una permutazione ecc..) allinterno di
un insieme finito (sempre di altri oggetti).
3
Formalmente, un CO problem P = (S, f) definito da:
1. Un insieme di variabili = [1 , , ] definite nei domini 1 , ,
2. I vincoli tra queste variabili
3. Una funzione obiettivo : 1 che deve essere minimizzata
invece lo spazio di tutte le soluzioni possibili del problema.
Per risolvere un CO problem occorre trovare una soluzione tale per cui valga la
relazione ( ) ()
Molti problemi di questo tipo sono di importanza pratica (es. Travel Salesman Problem) e
dunque sono stati sviluppati diversi algoritmi per risolverli.
Questi possono essere classificati come:
Completi: per ogni istanza finita del problema, la soluzione trovata ottima per essa.
Approssimati: la soluzione trovata non ottima ma comunque essa una buona
soluzione.
stato necessario differenziare queste due tipologie in quanto alcuni problemi, detti NP-
Difficili (NP-Hard, Nondeterministic polynomial-hard), non ammettono soluzione in tempo
polinomiale richiedendo dunque, al caso peggiore, un tempo esponenziale che solitamente
conduce a tempi di esecuzioni troppo alti per un uso pratico dellalgoritmo stesso.
Dato che comunque alcuni di questi algoritmi sono necessari per svolgere determinate azioni,
si ricorre ad un approccio approssimativo, sacrificando lottimalit della soluzione per
ottenerne una che si avvicina ad essa in un tempo significativamente minore.

4
3 Algoritmi Genetici

3.1 Cenni generali

Il paradigma alla base degli algoritmi genetici stato introdotto da Holland nel 1975 ed
parte dellinsieme di procedure dellEvolutionary Computation.
Gli algoritmi di Evolutionary Computation sono ispirati dalla capacit degli esseri viventi di
evolversi e adattarsi allambiente in cui vivono e possono dunque essere visti come il modello
computazionale del processo evolutivo presente in natura.
Lo spazio delle soluzioni viene esplorato utilizzando crossover (ricombinazione di due individui
per crearne di nuovi) e mutazioni (operatori che permettono un adattamento spontaneo
dellindividuo) e selezionando ad ogni iterazione (che prender il nome di generazione) gli
individui pi adatti a trasmettere le loro caratteristiche in base al loro fitness, calcolato
tramite unapposita funzione. Pi alto questo fitness, maggiore sar la probabilit che
lindividuo rimanga (o che le sue caratteristiche vengano passate) alla prossima generazione.
Ci sono fondamentalmente tre tipi di algoritmi evolutivi:
1. Evolutionary Programming e Evolutionary Strategies: utilizzati per problemi di
ottimizzazione continui
2. Genetic Algorithms: quelli su cui ci concentreremo, sono utilizzati per problemi di
ottimizzazione combinatori
le caratteristiche principali di questi algoritmi sono varie e andremo ad elencarne alcune nei
paragrafi a seguire.

3.2 Descrizione dellindividuo

Gli algoritmi di Evolutionary Computation, gestiscono una popolazione di individui.


Questi per non sono necessariamente una soluzione ma sono pi che altro una soluzione
parziale o un set di soluzioni.
Nel contesto degli algoritmi genetici, abbiamo due termini fondamentali:

Phenotypes: il nome che diamo agli individui (soluzioni candidate)


Genotypes: il nome che diamo alle soluzioni codificate dagli individui stessi (le
caratteristiche dellindividuo)

5
Questo per differenziare la rappresentazione delle soluzioni dalle soluzioni stesse in quanto,
ogni individuo porta con s un set di propriet (codificate solitamente con n bit o come una
serie di interi) che possono essere ricombinate o mutate.

3.3 Processo Evolutivo

Ad ogni iterazione, devessere deciso quali individui andranno alla prossima generazione e
quali invece si fermeranno.
Se scegliamo solamente gli individui generati da una coppia della generazione precedente,
parliamo di generational replacement. Se invece permettiamo ad un individuo della
generazione corrente di passare a quella successiva, questo detto processo evolutivo steady
state.
Come anticipavamo, il passaggio dellindividuo o delle sue caratteristiche alla successiva
generazione permesso o meno in base ad una funzione di valutazione, fitness function, che
valuta uno o pi parametri scelti in modo coerente allobiettivo da raggiungere alla fine
dellalgoritmo.
Se un individuo non dovesse dunque risultare adeguato, viene eliminato o non gli viene
permesso di riprodursi per passare le sue caratteristiche alliterazione successiva.
Se un individuo pu essere ricombinato con qualunque altro individuo (come nel caso della
maggior parte degli Algoritmi Genetici) parliamo di unstructured populations altrimenti
parleremo di structured populations.
Come possiamo ovviamente intuire, se una popolazione ha un numero variabile ed essa si
restringe ad ogni iterazione, arriveremo ad avere uno o pochi pi individui che non trovano
un partner per dare inizio alla nuova generazione, permettendo cos una condizione di
terminazione dellalgoritmo.

6
3.4 Operatori

Uno dei maggiori problemi da risolvere degli algoritmi di EC la convergenza prematura


verso una soluzione sub-ottima dovuta alla selezione degli individui.
Il metodo pi semplice per evitare (o almeno limitare) questo fenomeno
lintroduzione delloperatore della mutazione.
Questo operatore consiste nellapplicare delle piccole perturbazioni casuali, introdotte da
una funzione apposita che introduce una specie di rumore allinterno delle
caratteristiche di qualche individuo.
Ci permette la nascita di individui con una
permutazione delle loro caratteristiche e, se queste
hanno un fitness sufficiente, possono arrivare a passare
di generazione in generazione introducendo cos una,
probabile, soluzione finale.
Figura 1: Mutazione di un individuo

Un altro operatore specifico degli algoritmi genetici la


selezione. Essa consiste nello scegliere gli individui utile alla
prossima generazione di individui. In generale una
procedura di selezione consiste innanzitutto nel valutare il
fitness per ogni individuo con la funzione di fitness.
Questi valori verranno poi normalizzati rispetto alla loro
somma e rappresenteranno la probabilit di un individuo
di essere scelto per la prossima generazione. Esistono vari
metodi per scegliere gli individui di una popolazione come
roulette-wheel selection (descritta sopra), stochastic universal sampling (raggruppo gli
individui in base al fitness e scelgo tra di loro) e Reward-based selection (scelgo in base a delle
ricompense ottenute dallindividuo e dal suo albero genealogico)

Figura 2: Roulette-Wheel Selection

Figura 3: Stochastic universal sampling

7
Lultimo operatore specifico degli algoritmi genetici quello di crossover. Questo operatore
si utilizza per variare i cromosomi di ogni individuo nel passaggio da una generazione alla
successiva. quindi un processo dove presi due o pi individui genitori viene generato una
soluzione figlio, lanalogo della riproduzione e del crossover biologico. Un esempio di
tecnica di crossover la single-point crossover dove, dati due genitori e presa la stringa di bit
che rappresenta le caratteristiche di ogni individuo esse vengono divise in due parti rispetto
a un singolo punto, detto crossover point. I figli derivanti da questa tecnica avranno i
cromosomi incrociati dei due genitori, il primo avr la prima parte del primo genitore e la
seconda del secondo genitore e viceversa. Esistono anche altri metodi che prevedono di
spezzare in pi punti questa stringa di bit (Two-point crossover e Uniform crossover)

Figura 4: Single-Point Crossover

Figura 5: Two-Point Crossover

Figura 6: Uniform Crossover

3.5 Metodologia

La struttura di un algoritmo genetico la seguente:

8
1. Inizializzazione casuale della popolazione 0
2. Calcolo della funzione di fitness della popolazione 0
3. Ciclo
1. Seleziono due individui dalla popolazione x
2. Applico crossover ai due individui creando la popolazione x+1
3. Applico la mutazione alla popolazione x+1
4. Calcolo la funzione di fitness della popolazione x+1
4. Ripeto finch non raggiungo lobiettivo desiderato

Si pu infatti suddividere lalgoritmo in quattro fasi: inizializzazione, selezione, operatori


genetici e conclusione.

Inizializzazione: durante questa fase viene scelta la dimensione della popolazione che
dipende da caso a caso in base alla natura del problema, di norma consiste in centinaia o
migliaia di possibili soluzioni. Spesso la popolazione iniziale viene generata a caso per
non escludere nessuna possibile soluzione.

Selezione: durante questa fase viene applicato loperatore di selezione per individuare
gli individui che andranno poi a influenzare la creazione della nuova generazione. Questa
selezione viene fatta in base alla funzione di fitness. In alcuni casi per pu essere
impossibile definire una funzione di fitness, si pu perci ricorrere alla valutazione
umana. La classe di algoritmi genetici che fa uso di questa tecnica prende il nome di
iteractive genetic algorithms (IEC).

Operatori genetici: il passo successivo alla selezione consiste nella generazione della
popolazione dagli individui selezionati nel passo precedenti combinandoli tra loro tramite gli
operatori di mutazione e crossover. A processo terminato il risultato della nuova
generazione avr generalmente un valore di fitness medio pi alto rispetto alla generazione
precedente. Anche se questi due operatori sono i pi conosciuti esistono anche altri
operatori genetici utilizzati per gli stessi scopi quali regrouping, colonization-extinction e
migration. La parte importante di questa fase scegliere in modo adeguato i parametri
relativi alla probabilit di mutazione, di crossover e la dimensione della popolazione. Una
probabilit troppo bassa nella mutazione porterebbe infatti a una variazione troppo bassa
dei geni portando a dei possibili stalli in punti di sub ottimo, al contrario un valore troppo
alto potrebbe portare alla perdita di soluzioni ottime.

Conclusione: lintero processo di evoluzione da una popolazione alla successiva ripetuto


finch una condizione di termine non viene raggiunta. Di solito lalgoritmo viene terminato
in base al superamento di un criterio di soddisfacibilit minima, in base al numero di
generazioni create o in base al fatto che le generazioni successive non porterebbero risultati
migliori.

9
4 Esempio implementativo

4.1 Descrizione

Come esempio implementativo si deciso di addestrare, in un ambiente bidimensionale


simulato, una navicella spaziale allo scopo di fargli evitare una serie di ostacoli.
Gli ostacoli comprendono sia i bordi dellambiente di simulazione, sia alcuni meteoriti che
vagano in esso.
La propriet principale di questa implementazione che lambiente in cui la navicella stata
inserita caratterizzata dal comportamento totalmente casuale dei meteoriti.
Va per specificato che il loro comportamento limitato da dei valori massimi e minimi che
ne caratterizzano la velocit massima con cui si muovono
Il tutto stato creato sfruttando il linguaggio di programmazione Python e le librerie PyGame
e PyMunk, rispettivamente per la grafica e la fisica bidimensionale.
La navicella ha a disposizione 5 sensori disposti attorno ad essa con cui pu rilevare oggetti
entro una certa distanza. Quando un sensore rileva un oggetto, viene applicata una forza
descritta da un vettore scalato in base alla distanza a cui si trova loggetto rilevato rispetto al
centro della navicella.
Lo scopo di questa simulazione consiste nel trovare una configurazione dei 5 vettori in modo
tale che la navicella possa evitare gli ostacoli e quindi collidere con essi il meno possibile.
Lintero codice sorgente disponibile in GitHub[1].

10
[1] Codice sorgente: https://github.com/garis/ProgettoSI

11
4.2 Dettagli


Funzione di fitness: =
1+

Essa stata creata apposta per questa particolare simulazione in modo che non privilegiasse
solo la mancanza di collisioni, ma anche la distanza percorsa, e, secondo il nostro giudizio,
esprime una semplice e buona valutazione del comportamento di una navicella.

12000

10000

8000

6000
Bont

4000

2000

0
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
# Collisioni
Distanza 10000 Distanza 5000 Distanza 2500 Distanza 1250

Figura 7 Andamento funzione di fitness al variare della quantit delle collisioni

Questa implementazione stata testata con popolazione da 52 e 128 elementi per ogni
generazione in cui:

110 della popolazione composto da navicelle scelte con il criterio della selection
roulette.
310 della popolazione ottenuto unendo 2 genotipi di due navicelle diverse scelte col
criterio della selection roulette,
610 della popolazione ottenuto mediante mutazione di genotipi di navicelle
selezionate sempre col criterio della selection roulette.
Ogni navicella ha a disposizione 90 bit nel genotipo che vengono usati per codificare i 5 vettori
di forza che usano i sensori. In particolare sono stati assegnati 9 bit per ogni componente (x
e y) di ciascun vettore.

12
4.3 Risultati

4000

3500

3000

2500

2000

1500

1000

500

0
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39

MEDIA PERC 95 PERC 75 PERC 50

Figura 8 Andamento Media e Percentili con popolazione composta da 52 elementi

4000

3500

3000

2500

2000

1500

1000

500

0
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39

MEDIA PERC 95 PERC 75 PERC 50

Figura 9 Andamento Media e Percentili con popolazione composta da 128 elementi

13
5 Bibliografia e sitografia

[1] Vehicle Routing Problem, De Franceschi, 2003,


http://www.dei.unipd.it/~fisch/ricop/tesi/tesi_De_Franceschi_2003.pdf
[2] Algoritmi metauristici,
http://www.or.unimore.it/corsi/MaterialeDidattico/MetaHeur/Metaheuristics.pdf
[3] Algoritmi metauristici, Universit di Bologna,
http://www.or.deis.unibo.it/didatt_pages/mmsd_ce/metaeuristici-I-
introduzione%20rev20.pdf
[4] Heuristic, Wikipedia, https://en.wikipedia.org/wiki/Heuristic_(computer_science)
[5] Evolutionary computation, https://en.wikipedia.org/wiki/Evolutionary_computation
[6] Metaheuristics in Combinatorial Optimization: Overview and Conceptual Comparison,
Christian Blum, Andrea Roli
[7] Crossover, Wikipedia, https://en.wikipedia.org/wiki/Crossover_(genetic_algorithm)
[8] Python, http://www.python.it/
[9] PyMunk, http://www.pymunk.org/en/latest/
[10] Pygame, http://www.pygame.org/lofi.html

14