Algoritmi Genetici
Transcript
Algoritmi Genetici
AI – Sistemi Evolutivi Algoritmi genetici Programmazione evolutiva Strategie evolutive Particle Swarm Optimization (Teoria degli sciami) Ant Colony Optimization Sistemi Evolutivi Sistemi Evolutivi I sistemi evolutivi (Evolutionary Computation) costituiscono una famiglia di metodi (sviluppati teoricamente a partire dagli anni ’60 del XX secolo, ma implementati solo a partire dagli anni ‘90) che rientrano nell’ambito dell’Intelligenza Artificiale. Essi fondano il loro impianto teorico sulla possibilità di riprodurre artificialmente i meccanismi evolutivi darwiniani e quelli dell’intelligenza “sociale”, di un gruppo di individui, ognuno dei quali dotato di una propria intelligenza, ma in grado di “collaborare” con altri individui. Nella loro versione “artificiale” vengono utilizzati principalmente per affrontare problemi di Ottimizzazione. In generale un problema di ottimizzazione consiste nell’individuare i valori per cui una certa funzione raggiunge un minimo o un massimo, con l’eventuale presenza di vincoli su questi valori oppure sulla funzione stessa (ottimizzazione vincolata, constrained optimization). L’ottimizzazione combinatoria è una sottoclasse di quella matematica, in cui l'insieme ammissibile di soluzioni è definito in termini di strutture combinatorie (quindi di natura discreta anziché continua). Sistemi Evolutivi Sistemi Evolutivi - Algoritmi genetici (GA) Introdotti da John Holland(1) ispirandosi ai meccanismi della Teoria dell’Evoluzione di C. Darwin, costituiscono oggi uno dei metodi più potenti e diffusi per l’ottimizzazione di sistemi non lineari complessi. Le componenti di un GA sono: Il modulo di codifica (generazione di geni e cromosomi); La procedura di inizializzazione (creazione); La funzione di valutazione e selezione (fitness, adattamento all’ambiente); Il meccanismo di riproduzione (riproduzione, crossover); Gli operatori genetici (mutazione); L’accettazione e l’inserimento del nuovo individuo (nuova generazione). (1)J.H. Holland, Adaptation in Natural and Artificial Systems, University of Michigan Press, Ann Arbor, Michigan (1975); re-issued by MIT Press (1992) Sistemi Evolutivi Sistemi evolutivi - GA - Codifica Codifica dei cromosomi Il cromosoma deve contenere l’informazione codificata della soluzione che rappresenta. La codifica più utilizzata è quella binaria e quindi i cromosomi ‘artificiali’ altro non sono che stringhe di 0 e 1. Cromosoma 1 1101100100110110 Cromosoma 2 1101111000011110 Se ogni cromosoma è costituito da una stringa binaria, ogni bit della stringa può rappresentare di per sé una componente della soluzione, oppure l’intera stringa può rappresentare un numero (reale, per es.). Le modalità di codifica sono svariate, quella diretta di numeri interi o reali, quella di permutazioni combinatorie, di stati digitali binari, ternari, etc. Sistemi Evolutivi Sistemi Evolutivi - GA - Riproduzione Una volta che è stata definito il tipo di codifica, possiamo “generare” dei figli a partire dai genitori. La riproduzione avviene selezionando secondo una qualche modalità dei geni da entrambi i genitori e creando una nuova generazione. Esistono varie tecniche per fare questo, le più usate sono: • Un punto: viene selezionato, in modo casuale, un singolo punto all’interno dei cromosomi genitori che costituisce il punto di scambio di una parte del patrimonio genetico; Genitore 1 110110 | 0100110110 Genitore 2 110111 | 1000011110 Figlio 1 110110 | 1000011110 Figlio 2 110111 | 0100110110 Sistemi Evolutivi Sistemi Evolutivi - GA - Riproduzione Due punti: vengono scelti due punti all’interno dei cromosomi genitori che selezionano una porzione che viene incrociata fra i due genitori; Genitore 1 11011 | 00100 | 110110 Genitore 2 11011 | 11000 | 011110 Figlio 1 11011 | 11000 | 110110 Figlio 2 11011 | 00100 | 011110 Sistemi Evolutivi Sistemi Evolutivi - GA - Riproduzione Uniforme: i cromosomi “figli” vengono scelti da quelli genitori non mescolando dei segmenti di codice, ma dei singoli geni, in modo casuale e in una percentuale data da un “mixing ratio” mix.Ratio = 0.5 Genitore 1 1101100100110110 Genitore 2 1101111000011110 Figlio 1 1101111100010110 Figlio 2 1100100000111110 Sistemi Evolutivi Sistemi Evolutivi - GA - Riproduzione Aritmetica: l’operatore di crossover agisce secondo le relazioni (λ è un fattore peso casuale): • Figlio1 = λ⋅Genitore1 + (1- λ)⋅Genitore2 • Figlio2 = (1 – λ)⋅Genitore1 + λ⋅Genitore2 λ = 0.7 Genitore 1: (0.3)(1.4)(0.2)(7.4) Genitore 2: (0.5)(4.5)(0.1)(5.6) Figlio 1: (0.36)(2.33)(0.17)(6.86) Figlio 2: (0.402)(2.981)(0.149)(6.842) Sistemi Evolutivi Sistemi Evolutivi - GA - Mutazione La mutazione, mutuata dal meccanismo darwiniano, ha luogo in seguito alla riproduzione, e assolve al compito di ridurre la possibilità di incappare in minimi locali della funzione da ottimizzare. Essa modifica, in modo casuale, alcuni dei geni della popolazione appena generata, in caso di modifica binaria invertendone un ristretto numero, selezionato secondo un’assegnata probabilità, da 0 a 1 o da 1 a 0. Cromosoma figlio1 1101111000011110 Cromosoma figlio 2 1101100100110110 Crom. F.1 Mutato 1100111000011110 Crom. F.2 Mutato 1101101100110100 Sistemi Evolutivi Sistemi Evolutivi - GA - Selezione La selezione degli individui che daranno luogo alla riproduzione, anch’essa mutuata dalla teoria darwiniana della selezione naturale, è il meccanismo chiave che viene adottato per andare nella direzione della soluzione desiderata, incrementando la Fitness della popolazione; esistono numerose alternative che possono essere adottate. • Roulette Wheel Selection: 1.[Sum] Calcola la somma delle fitness di tutti gli individui della popolazione = S. 2.[Select] Genera un numero casuale nell’intervallo (0,S) = r. 3.[Loop] Scansiona la popolazione e somma le fitness da 0 = s. Quando s supera r, fermati e scegli l’ultimo individuo selezionato. Ripeti da 2. Sistemi Evolutivi Sistemi Evolutivi - GA - Selezione Roulette Wheel Selection: Fitness 1. [Sum] Calcola la somma delle fitness di tutti gli individui della popolazione = S. 2. [Select] Genera un numero casuale nell’intervallo (0,S) = r. 3. [Loop] Scansiona la popolazione e somma le fitness da 0 = s. Quando s supera r, fermati e scegli l’ultimo individuo selezionato. Ripeti da 2. indiv 1; 5 indiv 6; 8 indiv 2; 3 indiv 5; 2 Esempio: Somma delle Fitness: 35 Si estrae un numero random tra 0 e 35 (es. 11) Si seleziona l’individuo il cui settore contiene il numero estratto Sistemi Evolutivi indiv 4; 7 indiv 3; 10 Sistemi Evolutivi - GA - Selezione • Rank Selection: Gli individui della popolazione vengono riordinati secondo la loro fitness e ad ognuno viene assegnata una nuova fitness relativa a questa graduatoria (al peggiore viene assegnato 1, al migliore N, dove N è il numero dei cromosomi). Vengono poi scelti gli individui genitori attingendo alla graduatoria con una probabilità pari alla “fitness relativa”: ρ ρ f (ak ) p(ak ) = N ρ ∑ f (a j ) ρ ρ ak = individuok - simo; f (ak ) = fitnessdell'individuok - simo j =1 Sistemi Evolutivi Sistemi Evolutivi - GA - Selezione Steady state Selection: Solo una parte (più o meno grande) di popolazione viene sostituita da una generazione all’altra, escludendo gli individui con i cromosomi peggiori e introducendo al loro posto quelli generati dai migliori; Sistemi Evolutivi Sistemi Evolutivi - GA - Selezione Elitism: questo è in realtà un accorgimento aggiuntivo al meccanismo selettivo, che parte dalla considerazione che riproduzione e mutazione possono avere come conseguenza negativa la perdita degli individui “migliori”; per evitare ciò si può far precedere i passi suddetti dalla preselezione dell’individuo (o di pochi individui) avente il cromosoma migliore; è stato dimostrato che l’elitismo può accelerare notevolmente la convergenza. Sistemi Evolutivi Sistemi Evolutivi - GA – Schema a blocchi Inizializzazione Creazione individui con cromosomi random Calcolo Fitness degli individui Criterio di Stop no Selezione individui per la riproduzione Riproduzione Mutazione Nuova generazione Sistemi Evolutivi Sistemi Evolutivi - GA - applicazioni Domain Application Types Control gas pipeline, pole balancing, missile evasion, pursuit Design Scheduling semiconductor layout, aircraft design, keyboard configuration, communication networks manufacturing, facility scheduling, resource allocation Robotics trajectory planning Machine Learning Signal Processing designing neural networks, improving classification algorithms, classifier systems filter design Game Playing poker, checkers, prisoner’s dilemma Combinatorial Optimization set covering, travelling salesman, routing, bin packing, graph colouring and partitioning Sistemi Evolutivi Esempio: massimo funzione Si vuol trovare il punto di massimo della funzione: , = 1 0.5 + = − 0.3 + − 0.3 + 0.1 −1 + −1 + 0.1 nell’intervallo: 0≤ ≤2e0≤ ≤2 La soluzione è = 1, = 1( = 10.46) Sistemi Evolutivi massimo funzione Codifica dei crosomi Ogni individuo ha due crosomi Cx e Cy, rappresentati da due byte che codificano le coordinate del punto. La codifica usata è: 2 = ∗ = 256 ∗ 2 256 La fitness è il valore della funzione. Sistemi Evolutivi Esempio: Il problema del commesso viaggiatore Siano date n città (nodi del grafo) collegate da strade (archi del grafo). A E Il valore di un arco è la lunghezza della strada (o il costo di viaggio) che quell’arco rappresenta. Un commesso viaggiatore si propone di visitare una ed una sola volta ciascuna città (partendo da una qualsiasi e ritornandovi), in modo da avere un percorso totale di lunghezza (o costo) minimo. Sistemi Evolutivi 8 5 B F 3 D C Il problema del commesso viaggiatore Matrice dei costi A B C D E F A - 5 7 4 8 6 B 5 - 3 9 2 8 C 7 3 - 4 7 6 D 4 9 4 - 5 1 E 8 2 7 5 - 3 F 6 8 6 1 3 - Sistemi Evolutivi Il problema del commesso viaggiatore Ciascun individuo della popolazione è rappresentato da una permutazione delle sei città: per esempio F,E,A,B,D,C La funzione di fitness è data dal costo del percorso dell’individuo (N.B. in questo caso si vuol minimizzare la fitness). Sistemi Evolutivi Il problema del commesso viaggiatore Codifica dei cromosomi Ogni individuo ha 5 cromosomi, rappresentati da un byte. Ciascuno di questi cromosomi indica la posizione sulla lista delle città non ancora scelte. Esempio: il percorso F,A,E,B,D,C è rappresentato dalla sequenza di numeri interi: 5,0,3,0,1 5 – il 6° elemento della lista (indici a base 0) ABCDEF -> F 0 – il 1° elemento della lista ABCDE -> A 3 – il 4° elemento della lista BCDE -> E 0 – il 1° elemento della lista BCD -> B 1 – il 2° elemento della lista CD -> D Resta l’ultimo elemento possibile -> C Sistemi Evolutivi Il problema del commesso viaggiatore Codifica dei cromosomi Il primo dei 5 numeri può variare da 0 a 5, Il secondo da 0 a 4, ……… Il quinto da 0 a 1 Questi numeri sono individuati dai corrispondenti byte (cromosomi) con la seguente formula: = 256 ∗ (6 − ) = 0, … , 5 Sistemi Evolutivi Genetic Algorithm, un esempio - Un metodo per la selezione automatica delle frequenze di test in circuiti analogici basato su GA(1), 1 Il metodo si propone di selezionare l’insieme di frequenze ottime per eseguire diagnosi di guasto parametrica multifrequenza dei circuiti analogici. È un’applicazione tipica di un problema di ottimizzazione multiparametrica, nel quale si vuole individuare un certo numero di frequenze (numero che dipende dal numero dei parametri da individuare) alle quali effettuare le misure della risposta del circuito allo scopo di localizzare i guasti parametrici eventualmente presenti nei componenti testabili del circuito stesso. Il problema dell’inversione delle funzioni misurate è nonlineare nelle incognite e quello della giusta collocazione delle frequenze è arduo da risolvere con metodi di ricerca tradizionali. Funzione di rete (Test point) Elementi della matrice Jacobiana e delle sue componenti calcolate rispetto alla sola ampiezza espressa in dB (1)F.Grasso, A.Luchetta, S.Manetti, M.C.Piccirilli, “A Method for the Automatic Selection of Test Frequencies in Analog Fault Diagnosis“, IEEE Trans. on Instrumentations and Meaurements, Vol. 56, N. 6, pp. 2322-2329, December 2007. Sistemi Evolutivi Genetic Algorithm, un esempio - Un metodo per la selezione automatica delle frequenze di test in circuiti analogici basato su GA, 2 L’idea è quella di utilizzare un metodo iterativo di Newton-Raphson per risolvere le funzioni di diagnosi di guasto e ricercare l’insieme di frequenze di misura che minimizzino l’errore nella soluzione e accelerino la convergenza verso di essa. È possibile dimostrare per mezzo di alcuni teoremi che: 1. Per minimizzare l’errore nella soluzione è opportuno che il numero di condizionamento della matrice jacobiana associata alla funzione di trasferimento relativa al test point in esame: k(Jq) = ||Jq||2⋅||Jq-1||2 sia il più basso possibile; essendo esso sempre ≥ 1, deve essere il più vicino possibile all’unità. 2. Per incrementare la rapidità di convergenza dell’algoritmo di Newton–Raphson, la norma della matrice inversa dello jacobiano ||Jq-1||2 deve essere più piccola possibile. Potendosi esprimere per mezzo della Decomposizione a valori Singolari (SVD): k(Jq) = σMAX/σMIN e ||Jq-1||2 = 1/σ2MIN dove σMAX e σMIN rappresentano il massimo e il minimo valore singolare della matrice Jacobiana associata al test point, la funzione obiettivo (la “Fitness”) dell’algoritmo genetico può essere presa pari al seguente indice (Test Index): Sistemi Evolutivi Genetic Algorithm, un esempio - Un metodo per la selezione automatica delle frequenze di test in circuiti analogici basato su GA, 2 In questo caso nei geni dei cromosomi vengono inserite le frequenze di test, utilizzando 16-bit di word per codificare ciascuna di esse usando opportuni offset e fattori di scala. Al fine di migliorare la convergenza, il meccanismo elitario trascrive senza alterazioni l’individuo migliore nella generazione successiva. La “fitness” di ogni membro è rappresentata dal T.I. che corrisponde a quelle frequenze di test. Per evitare problemi numerici dovuti ai valori reali dei componenti si procede con la normalizzazione/denormalizzazione in ampiezza e frequenza. L’algoritmo di arresta quando un T.I. predefinito è stato raggiunto o dopo un numero prefissato di iterazioni. In concreto, la procedura di ricerca delle frequenze e diagnosi di guasto consiste nel seguante algoritmo: 1. Partendo dai valori nominali dei componenti (vettore po), il GA determina le frequenze di test; 2. Le equazioni di guasto sono risolte tramite l’algoritmo di Newton– Raphson utilizzando le misure effettuate alle frequenze determinate al passo 1; 3. Il GA determina nuove frequenze di test ripartendo dalla soluzione p data al passo precedente 4. Per mezzo dell’algoritmo di Newton–Raphson viene determinata una nuova soluzione p∗. Se è vero che, ∀ i, |(p∗i− pi)/pi|⋅100 ≤ δ, dove δ è fissato a priori, stop; altrimenti, vai al passo 3. Ipotizzando e simulando due componenti guasti (C1 ed R1) e necessitando 3 frequenze di test, dopo 3 iterazioni costituite rispettivamente di 2000, 1640 e 1800 generazioni di cromosomi, si ricavano infine le 3 frequenze desiderate (“ottime”): 1020 Hz, f2 = 1447 Hz, and f3 =2366 Hz, e i valori dei componenti guasti con un errore dello 0.62% e dello 0.54%. Sistemi Evolutivi