Università degli studi di Cagliari Facoltà di Ingegneria Dipartimento di Ingegneria Elettronica Gruppo di Elettromagnetismo Metodo di Progettazione Automatica basato sulla Genetic Programming
Obiettivo Sviluppare un metodo per automatizzare la progettazione di soluzioni a problemi complessi Creare uno strumento per affrontare problemi non facilmente trattabili per via analitica o attraverso le tradizionali tecniche di progetto Aprire una strada verso soluzioni innovative
Flow Chart del ciclo di progetto
Gli strumenti necessari I riquadri in verde nel flow-chart mettono in evidenza la necessità di alcuni strumenti: Un sistema formale di rappresentazione della soluzione teorica individuata Un insieme di regole che consentano di operare delle modifiche sulla rappresentazione del modello Una logica di controllo
La Genetic Programming E' una generalizzazione degli algoritmi genetici e come tale trae spunto dalle teorie evoluzionistiche di Darwin e dalla genetica, ma a differenza di questi ultimi non opera su stringhe di bit ma su algoritmi. Questi sono delle combinazioni di funzioni tratte da un particolare insieme scelto accuratamente per ben rappresentare il problema in esame. Il termine funzione va inteso nella sua accezione più generica, può dunque trattarsi di Operatori aritmetici e/o logici; Funzioni matematiche di vario tipo; Funzioni definite ad hoc per il problema in esame.
Gli oggetti della Genetic Programming Gli oggetti della GP, i programmi, vengono indicati col termine individui e gli insiemi di tali oggetti col termine popolazioni. Gli individui vengono solitamente rappresentati mediante una notazione compatta ereditata dai linguaggi funzionali (tipo LISP) detta s-expression (OR (AND (NOT D0) (NOT D1)) (AND D0 D1)) O mediante una più intuitiva rappresentazione ad albero
S-Expression in forma d'albero
La Genetic Programming La Genetic Programming imita il ciclo della vita, per cui inizia con una popolazione di individui generati a caso. Ognuno di questi individui viene poi analizzato e riceve un punteggio, detto fitness, che misura il suo grado di adattamento (ovvero la sua capacità di soddisfare i requisiti richiesti). A questo punto si costruisce una nuova popolazione detta generazione successiva. Imitando il principio di sopravvivenza del più forte viene assegnata agli individui con un punteggio più elevato una opportunità di sopravvivere e passare alla generazione successiva ed una maggiore probabilità di riprodursi.
Flow Chart del Ciclo Evolutivo
La Genetic Programming La riproduzione degli individui imita i meccanismi della genetica e avviene tramite due operatori principali: il CROSSOVER che imita la riproduzione sessuata ed in particolare l'incrocio di due patrimoni genetici diversi la MUTATION che imita la riproduzione asessuata ed in particolare l'alterazione casuale di un particolare patrimonio genetico
Un esempio di operatore: il CROSSOVER
Un caso concreto: le antenne filiformi Una antenna filiforme è una struttura costituita da un insieme di cilindri metallici disposti ordinatamente nello spazio. Come tale può essere rappresentata in maniera del tutto generale come l'insieme di un certo numero di linee spezzate disposte arbitrariamente nello spazio.
L’insieme di funzioni Avendo scelto di modellare la soluzione mediante un insieme di linee spezzate nello spazio, per la scelta delle funzioni con cui modellare la soluzione si è tratto spunto dal linguaggio LOGO. Si sono dunque selezionate delle funzioni che consentissero movimenti e rotazioni arbitrarie nello spazio e altre che “disegnassero delle linee” { RotX, RotY, RotZ, Wire, Branch, End…}
Struttura del software e strumenti utilizzati ECJ, Evolutionary Computation in JAVA, è una libreria di pubblico dominio che fornisce gli strumenti di base per operare con la genetic programming. NEC2, Numerical Electromagnetic Code, è un software di pubblico dominio per l’analisi di antenne filiformi sviluppato presso il Lawrence Livermore Laboratory. Il software si basa su due strumenti: ECJ NEC 2
I modelli di rappresentazione ECJ, operando con gli strumenti propri della Genetic Programming, modella gli individui mediante strutture ad albero e li rappresenta mediante s-expression: Tree 0: (RuotaRispettoA_Z (Wire (RuotaAttornoA_Z END))) Tree 1: (RuotaRispettoA_Z (Wire (StiraLungoX END))) Tree 2: (RuotaAttornoA_Y (StiraLungoY (Wire END))) Tree 3: (RuotaAttornoA_Y (StiraLungoY (Wire END))) Tree 4: (RuotaAttornoA_Y (StiraLungoY (StiraLungoY (RuotaAttornoA_Z (StiraLungoY (RuotaAttornoA_Z (Wire END)))))))) …..
I modelli di rappresentazione NEC 2 è l’evoluzione di vare software scritti quando l’input veniva fornito mediante schede perforate e, pur lavorando su file, mantiene ancora un forte legame con le origini. Il seguente listato NEC rappresenta la struttura della s-expression precedente : GW E E E E E E E-03 GW E E E E E E E-03 GW E E E E E E E-03 GW E E E E E E E-03 GW E E E E E E E-03 GW E E E E E E E-03 GX GE LD E6 EX EK FR RP …..
Il ciclo di analisi di un individuo si esegue il parsing della s- expression che rappresenta l'individuo; si genera genera il listato NEC che descrive la struttura, comprensivo dei comandi necessari per l’analisi si scrive il file su disco si lancia l'eseguibile esterno in C++ si leggono i risultati dell'analisi si sintetizzano questi risultati in un valore numerico che rappresenta la fitness (o punteggio di merito) dell’individuo
Funzionamento del software modalità stand-alone Viene avviato un unico processo Java che inizializza il sistema a partire da un insieme di file di configurazione; genera la popolazione iniziale combinando casualmente alcune funzioni tratte dall’insieme definito precedentemente; valuta ogni singolo individuo presente nella popolazione secondo lo schema precedentemente illustrato; verifica se almeno uno degli individui soddisfa i requisiti richiesti e in caso affermativo termina; altrimenti genera una nuova popolazione combinando I patrimoni genetici degli individui più promettenti e prosegue il ciclo evolutivo
Parallelismo intrinseco La genetic programming ha il vantaggio di essere una tecnica intrinsecamente parallela perché la valutazione di ogni singolo individuo può avvenire in maniera del tutto indipendente da quella degli altri. In altre parole ogni singolo individuo può essere valutato in un processo distinto eseguito nello stesso momento da un altra CPU. Per questo un ciclo evolutio ben si presta all’esecuzione su architetture distribuite.
Funzionamento del software modalità Master-Slave In modalità Master-Slave viene generato un processo Master che si occupa di inizializzare il ciclo evolutivo e di “organizzare” il lavoro ed N processi Slave che si occupano di eseguire materialmente il lavoro. Il Master invia agli slave la descrizione degli individui da valutare e gli Slave eseguono l’analisi e restituiscono al Master la fitness degli individui valutati. L’interazione tra questi processi avviene tramite una connessione TCP-IP, in tal modo i processi possono essere distribuiti su altrettante macchine e operare realmente in parallelo.
Modalità Master-Slave funzionamento del Master Quando viene avviato il master legge i file di configurazione; genera la popolazione iniziale; si pone in ascolto su una determinata porta in attesa che qualche Slave tenti una connessione; ad ogni slave che si connette affida un piccolo gruppo di individui da valutare e si pone in attesa dei risultati; ricevuti i risultati continua ad assegnare nuovi individui da valutare fino a che l’intera popolazione non è stata valutata; verifica se l’obiettivo è stato raggiunto altrimenti genera la nuova popolazione e riprende il ciclo.
Modalità Master-Slave funzionamento di uno Slave Quando viene avviato lo Slave legge i file di configurazione (che devono essere identici a quelli del master e degli altri slave); tenta di connettersi al Master; ottenuta la connessione si pone in ascolto in attesa di individui da valutare; valuta, secondo lo schema precedentemente illustrato, ogni individuo ricevuto e comunica al Master la fitness relativa; Termina quando la connessione col master viene interrotta o se quest’ultimo comunica il termine delle operazioni.