Problemi di ottimizzazione multi-obiettivo in ambito
Transcript
Problemi di ottimizzazione multi-obiettivo in ambito
UNIVERSITÀ DEGLI STUDI DI NAPOLI "FEDERICO II" FACOLTÀ DI INGEGNERIA Corso di Laurea in Ingegneria Elettronica Tesi di laurea PROBLEMI DI OTTIMIZZAZIONE MULTI-OBIETTIVO IN AMBITO CIRCUITALE Relatore Ch.mo Prof. Massimiliano de Magistris Candidato Marco Sorrentino Matr. 45/4448 ANNO ACCADEMICO 2006/2007 Ringraziamenti Desidero ringraziare in primo luogo il prof. Massimiliano de Magistris per avermi messo a disposizione, lungo tutto il periodo di sviluppo della tesi, le sue notevoli capacità professionali e innegabili qualità umane, consentendomi di portare a termine questo lavoro con totale serenità. Dedico quindi il frutto di questo lavoro, e il risultato accademico che ne consegue, ai miei genitori, inarrivabile esempio di dedizione alla famiglia, rispetto verso il prossimo e onestà intellettuale. Spero che il raggiungimento di questo risultato li ripaghi almeno in parte di tutti i sacrifici fatti per permettermi di studiare in un ambiente sereno. Un ringraziamento va a mia sorella Sabrina, la cui folle genialità mi ha spesso aiutato a guardare le cose con un’ottica diversa consentendomi così di non prendermi mai troppo sul serio. Un grazie particolare alla mia fidanzata Giusy per avermi supportato lungo tutto il mio percorso di studi riuscendo nella non facile impresa di starmi accanto in ogni situazione, credendo in me dal primo momento e riuscendo a sopportarmi nei periodi più difficili. Ringrazio tutti i parenti per la costante fiducia riposta nei miei confronti, tutti gli amici ed in particolare il mio amico fraterno Giuseppe sempre vicino in ogni circostanza, prodigo di buoni consigli e con la straordinaria capacità di trasmettermi buonumore anche quando fare un semplice sorriso poteva sembrare il gesto più difficile. Indice INDICE ...................................................................................................................1 1 INTRODUZIONE ..........................................................................................5 2 PROBLEMI DI OTTIMIZZAZIONE ...............................................................9 2.1 BACKGROUND MATEMATICO .............................................................................9 2.2 OTTIMIZZAZIONE NON VINCOLATA ..................................................................14 2.2.1 Minimizzazione di funzioni convesse......................................................15 2.3 OTTIMIZZAZIONE VINCOLATA .........................................................................16 2.3.1 La funzione penalty ................................................................................19 2.4 ALGORITMI DETERMINISTICI ...........................................................................20 2.4.1 Convergenza di un algoritmo.................................................................22 2.4.2 Rapidità di convergenza.........................................................................24 2.4.3 Ricerca del passo : backtracking ...........................................................25 2.4.4 Ricerca della direzione di discesa .......................................................26 2.4.5 Metodi di ricerca diretta : il metodo del simplesso ...............................29 2.5 ALGORITMI STOCASTICI ..................................................................................31 2.5.1 Strategie evolutive. (µ/ρ,λ)-ES e (µ/ρ+λ)-ES ..........................................32 2.5.1.1 2.5.1.2 2.5.2 Algoritmi genetici...................................................................................38 2.5.2.1 2.5.2.2 2.5.2.3 2.5.2.4 3 Operatori genetici......................................................................................... 35 σ-Self Adaptation......................................................................................... 37 La popolazione............................................................................................. 40 Operatori genetici......................................................................................... 41 Reinserzione................................................................................................. 44 Terminazione ............................................................................................... 45 OTTIMIZZAZIONE MULTI-OBIETTIVO ....................................................47 3.1 INTRODUZIONE ................................................................................................47 3.1.1 Cenni storici ...........................................................................................48 3.2 DEFINIZIONI E CONCETTI BASE ........................................................................50 1 3.3 METODI CLASSICI DI SOLUZIONE ..................................................................... 61 3.3.1 Metodi senza preferenze ........................................................................ 63 3.3.2 Metodi a posteriori ................................................................................ 64 3.3.3 Metodi a priori....................................................................................... 66 3.3.4 Metodi interattivi ................................................................................... 67 3.4 ALGORITMI MULTIOBIETTIVO EVOLUTIVI........................................................ 69 3.4.1 Tecniche di implementazione degli algoritmi MOEA............................ 72 3.4.1.1 3.4.1.2 3.4.1.3 3.4.2 Struttura degli algoritmi MOEA ............................................................ 77 3.4.2.1 3.4.2.2 3.4.2.3 3.4.2.4 3.4.2.5 3.4.2.6 3.4.2.7 3.4.2.8 3.4.2.9 3.4.2.10 3.4.2.11 3.4.3 4 Aggregazione di funzioni ............................................................................ 72 Approccio population-based........................................................................ 73 Approccio Pareto-based............................................................................... 73 Multi-objective Genetic Algorithm (MOGA) ............................................. 79 Nondominated Sorting Genetic Algorithm (NSGA) ................................... 81 Niched-Pareto Genetic Algorithm (NPGA) ................................................ 83 Pareto Archived Evolution Strategy (PAES)............................................... 85 Strength Pareto Evolutionary Algorithm (SPEA)........................................ 86 Multi-objective Messy Genetic Algorithm (MOMGA) .............................. 88 Pareto Envelope-based Selection Algorithm (PESA).................................. 89 Micro-Genetic Algorithms for Multiobjective Optimization (µGA)........... 89 Multi-objective Struggle Genetic Algorithm (MOSGA)............................. 91 Orthogonal Multi-objective Evolutionary Algorithm (OMOEA) ............... 91 General Multi-objective Evolutionary Algorithm (GENMOP)................... 93 Applicazioni degli algoritmi MOEA ...................................................... 93 L’ALGORITMO GENETICO NSGA-II..................................................... 101 4.1 ANALISI DELL’ALGORITMO ........................................................................... 103 4.1.1 4.1.2 4.1.3 4.1.4 4.1.5 Inizializzazione della popolazione ....................................................... 103 Sorting non-dominato .......................................................................... 103 Crowding distance ............................................................................... 104 Selezione .............................................................................................. 105 Operatori genetici................................................................................ 106 4.1.5.1 4.1.5.2 Simulated Binary Crossover...................................................................... 106 Mutazione polinomiale.............................................................................. 107 4.1.6 Ricombinazione e selezione ................................................................. 107 4.2 IL CODICE MATLAB ....................................................................................... 108 4.3 TEST ............................................................................................................. 108 4.3.1 4.3.2 4.3.3 4.3.4 5 CASI DI STUDIO ...................................................................................... 121 5.1 5.1.1 5.1.2 5.1.3 5.1.4 2 Problema 1........................................................................................... 109 Problema 2........................................................................................... 112 Problema 3........................................................................................... 115 Problema 4........................................................................................... 117 RADDRIZZATORE A DOPPIA SEMIONDA.......................................................... 121 Aspetti teorici ....................................................................................... 121 Descrizione del progetto ...................................................................... 123 Ottimizzazione con somma pesata ....................................................... 125 Ottimizzazione multi-obiettivo ............................................................. 128 5.1.4.1 5.1.4.2 5.2 Simulazione con una variabile di decisione ............................................... 128 Simulazione con tre variabili di decisione ................................................. 130 CONVERTITORE DC-DC LOW POWER ............................................................135 5.2.1 Aspetti teorici .......................................................................................135 5.2.1.1 5.2.1.2 5.2.1.3 5.2.2 5.2.3 Modalità CCM (Continuous Current Mode).............................................. 137 Modalità DCM (Discontinuous Current Mode)......................................... 138 Rettificazione sincrona............................................................................... 140 Descrizione del progetto ......................................................................141 Calcolo del fronte di Pareto.................................................................150 6 CONCLUSIONI E SVILUPPI FUTURI ........................................................157 7 APPENDICE .............................................................................................161 7.1 LISTATI MATLAB...........................................................................................161 7.1.1 7.1.1.1 7.1.1.2 7.1.1.3 7.1.1.4 7.1.1.5 7.1.1.6 7.1.1.7 7.1.2 7.1.2.1 7.1.2.2 7.1.3 7.1.3.1 7.1.4 7.1.4.1 7.1.5 7.1.5.1 NSGA-II................................................................................................161 Funzione per l’inizializzazione (initialize_variables.m) ............................ 161 Sorting non-dominato e crowding distance (non_domination_sort.m)...... 162 Tournament selection (tournament_selection.m)....................................... 165 Operatore genetico (genetic_operator.m)................................................... 166 Valutazione della funzione obiettivo (evaluate_objective.m).................... 169 Operatore di selezione (replace_chromosome.m)...................................... 169 Script principale (nsga_2.m) ...................................................................... 171 Raddrizzatore – Simulazione 1.............................................................173 Script principale (elaborato.m) .................................................................. 173 Funzione obiettivo (obj.m)......................................................................... 175 Raddrizzatore – Simulazione 2.............................................................176 Funzione obiettivo (evaluate_objective.m) ................................................ 176 Raddrizzatore – Simulazione 3.............................................................178 Funzione obiettivo (evaluate_objective.m) ................................................ 178 Buck converter - Simulazione...............................................................180 Funzione obiettivo (evaluate_objective.m) ................................................ 180 BIBLIOGRAFIA...................................................................................................183 3 4 1 Introduzione Qual è il bagaglio tecnico che un ingegnere dovrebbe possedere quando si appresta a progettare circuiti, in particolare quelli destinati alla gestione della potenza come ad esempio i regolatori switching? Al giorno d’oggi, la parola chiave nel campo della progettazione è una sola: ottimizzazione. Il quesito che a questo punto sorge spontaneo è il seguente: “Cosa bisogna ottimizzare?”. Si tratta di scegliere. La ricerca e l’adozione di metodologie, criteri e strumenti per comprendere qual è la scelta più idonea è il principale valore aggiunto del know how di un ingegnere che può essere sfruttato nel corso del processo di design. Ad esempio, nelle applicazioni di power management gli attuali dispositivi a semiconduttore, i componenti passivi e gli integrati per il controllo dei circuiti sono capaci di garantire la più ampia varietà di prestazioni, grazie alla disponibilità di tecnologie innovative e all’adozione di avanzati processi produttivi. Inoltre le prestazioni statiche e dinamiche dei regolatori risultano essere sempre più un fattore critico, specialmente nei settori delle telecomunicazioni e dei sistemi di elaborazione. La reale necessità dei progettisti è comprendere come utilizzare adeguati modelli parametrici dei dispositivi e opportune equazioni parametriche di progetto al fine di determinare non una sola soluzione – la “migliore” – bensì una “famiglia” di soluzioni “accettabili”, equivalenti rispetto alle specifiche, ciascuna delle quali presenti eventualmente differenti peculiarità in termini di costo, ingombro, efficienza, e così via: tra di esse, il progettista può scegliere la più “adeguata” per la specifica applicazione considerata. Questo lavoro di tesi nasce proprio dall’esigenza di effettuare una panoramica sulle varie tecniche di ottimizzazione e, in particolare, riguardo a problematiche multiobiettivo. 5 Il concetto di ottimizzazione multiobiettivo, trasversale a molte discipline, verrà analizzato nel dettaglio in termini teorici e, una volta individuata la metodologia più adatta, verranno eseguite delle simulazioni di progettazione di alcuni casi test in ambito circuitale. Il seguito della tesi è così organizzato: • Nel Capitolo 2, dopo un richiamo su alcuni concetti matematici indispensabili per la comprensione delle successive nozioni, è introdotto il concetto generale di ottimizzazione (vincolata e non vincolata) e sono illustrati i fondamenti su cui si basano gli algoritmi risolutivi, sia deterministici che stocastici. Su questi ultimi, in particolare, sarà focalizzata l’attenzione essendo il concetto di procedura stocastica alla base dei moderni algoritmi. • Nel Capitolo 3 è introdotto il concetto di ottimizzazione multiobiettivo, le radici storiche dei primi approcci scientifici e una analisi dei principali metodi classici di soluzione. Verranno inoltre descritti dettagliatamente i principali algoritmi multiobiettivo evolutivi che rappresentano oggi il metodo più utilizzato per la soluzione di problematiche con più obiettivi in contrasto tra loro. Il capitolo si chiude con una panoramica sui risultati più importanti nell’ambito dell’ingegneria elettronica ed elettrica conseguiti facendo ricorso ai metodi evolutivi sopra citati. • Il capitolo 4 prevede la descrizione dell’algoritmo scelto per eseguire le simulazioni circuitali: NSGA-II. Si tratta di un “all purpose algorithm” di cui sono descritti i criteri base su cui opera ed è analizzata la struttura del codice Matlab relativo. Sono illustrate, inoltre, alcune simulazioni che mettono in risalto i pregi di questo tipo di approccio nel gestire le problematiche più disparate riuscendo a lavorare in maniera efficiente su domini di differenti caratteristiche. • Nel capitolo 5 sono illustrati i due casi test di progettazione circuitale considerati. In particolare il primo circuito analizzato è un raddrizzatore a doppia semionda di cui si vuole dimensionare l’induttore di spianamento per ottenere i requisiti desiderati in termine di ripple in uscita e percentuale di potenza disponibile sul carico. Il secondo circuito in esame è un convertitore buck low power con rettificazione sincrona e 6 controllo ibrido. Scopo del progetto è quello di ottimizzazione la scelta dei valori di induttanza e frequenza di switching per ottenere un set di risultati che possano rappresentare il miglior compromesso in termini di ingombro (dell’induttore e del condensatore) e di efficienza. • Infine il Capitolo 6 riporta le conclusioni e gli sviluppi futuri di questo lavoro di tesi con le opportune considerazioni riguardo allo stato dell’arte della progettazione ottima di circuiti. • Il Capitolo 7 (Appendice) conclude questo lavoro fornendo i necessari riferimenti ai listati Matlab utilizzati nelle simulazioni svolte. 7 8 2 Problemi di ottimizzazione In questo capitolo verranno introdotti i concetti di ottimizzazione monobiettivo (non vincolata e vincolata) e dei fondamentali algoritmi deterministici e stocastici. Prima di entrare nel vivo della trattazione è d’uopo anteporre dei sintetici richiami matematici. Per eventuali approfondimenti si rimanda a [2]. 2.1 Background matematico In un problema di ottimizzazione monobiettivo occorre identificare il valore della variabile x (o grado di libertà) che rende ottima la funzione obiettivo (o funzione di fitness) F (x) . Data dunque una funzione di fitness F, definita nello spazio dei parametri Ndimensionale, X, e con valori nello spazio monodimensionale, Z: F : x ∈ X → F ( x) ∈ Ζ (2.1) Un problema di ottimizzazione può essere formulato come segue: determinare il vettore dei parametri x * ∈ X in cui la funzione assuma il suo valore ottimo: F (x * ) = opt F (x) (2.2) dove: x = ( x1 ,..., x N ) x * = ( x1* ,..., x *N ) (2.3) 9 E’ opportuno sottolineare che il valore ottimo può consistere nel minimo o nel massimo della funzione F a seconda del tipo di problema di ottimizzazione. Le componenti xi di x sono dette variabili di decisione. Ipotizziamo che il problema di ottimizzazione consista nella determinazione di un punto x * appartenente all’insieme X tale da rendere minima la funzione F. Il problema si può in generale indicare così: x∈ X min F (x) (2.4) Illustriamo ora alcuni concetti matematici introduttivi relativi all’ottimizzazione di una funzione obiettivo F di n variabili su X detto insieme di ammissibilità. Minimo globale Un punto x * appartenente all’insieme X è un punto di minimo globale di F su X se F ( x * ) ≤ F ( x) ∀x ∈ X (2.5) Minimo locale Un punto x * appartenente all’insieme X è un punto di minimo locale di F su X se esiste un intorno circolare I (x * ; ε ) di x * , avente raggio ε > 0 tale che F ( x * ) ≤ F ( x) ∀x ∈ X ∩ I (x * ; ε ) (2.6) Derivata direzionale Si consideri una funzione F : ℜ N → ℜ , e un vettore d ∈ ℜ N . Sia x ∈ ℜ N un punto in cui F è definita. Se esiste il limite lim λ F ( x + λd ) − F ( x) →0 + λ allora tale limite prende il nome di derivata direzionale di F nel punto x lungo la direzione d. 10 Gradiente Si consideri una funzione F : ℜ N → ℜ . Se in x esistono le n derivate parziali ∂F , i=1,…,n , definiamo gradiente di F in x il vettore ∇F(x) ∈ ℜ N avente ∂xi come componenti le derivate parziali, ossia ∂F (x) ∂F (x) ∂F (x) ∇F(x) = , ,..., ∂x 2 ∂x n ∂x1 (2.7) Matrice Hessiana Sia F : ℜ N → ℜ , due volte continuamente differenziabile in x ∈ℜN , definiamo matrice hessiana di F in x la matrice: ∂ 2 F ( x) 2 ∂x1 ∂ 2 F ( x) ∇ 2 F(x) = ∂x ∂x 2 1 M ∂ 2 F ( x) ∂x n ∂x1 ∂ 2 F ( x) ∂x1∂x 2 ∂ 2 F ( x) ∂ 2 F ( x) ∂x1∂x n ∂ 2 F ( x) ... 2 ∂x 2 ∂x n ∂x 2 M O M 2 2 ∂ F ( x) ∂ F ( x) L 2 ∂x n ∂x 2 ∂x n ... (2.8) Formula di Taylor Sia F una funzione di una sola variabile con derivata continua in un intorno di un punto x, e si consideri il punto x + h appartenente a tale intorno; allora è possibile esprimere l’incremento della funzione nel seguente modo (formula di Taylor arrestata ai termini del primo ordine): F ( x + h) = F ( x) + F ′( x)h + β1 ( x; h) (2.9) dove β1 ( x; h) è un infinitesimo di ordine superiore rispetto ad h. Se F possiede anche la derivata seconda continua, allora è possibile scrivere (formula di Taylor arrestata ai termini del secondo ordine): 11 1 F ( x + h) = F ( x) + F ′( x)h + F ′′( x)h 2 + β 2 ( x; h) 2 (2.10) dove β 2 ( x; h) è un infinitesimo di ordine superiore rispetto ad h2. Pertanto con la formula di Taylor è possibile approssimare il valore di una funzione in un punto incrementato x + h utilizzando i valori delle derivate nel punto x, e tale approssimazione è tanto migliore quanto più piccolo è h. Nel caso n-dimensionale le due equazioni diventano: F (x + h) = F (x) + ∇F(x)T h + β 1 (x;h) (2.11) 1 F (x + h) = F (x) + ∇F(x)T h + ∇ 2 F(x)T h + β 2 (x;h) 2 (2.12) dove β 1 (x;h) e β 2 (x;h) sono rispettivamente infinitesimi di ordine superiore rispetto alla norma dell’incremento h e al quadrato della norma di h. Osserviamo che se poniamo nella (2.11) h=λd con λ scalare, la formula diventa: F (x + λd) = F (x) + λ (∇(F(x))) T d + β1 (x,λ , d) e passando al limite per λ → 0 dopo aver diviso tutto per λ si ottiene che la derivata direzionale di F in x lungo la direzione d è pari a ∇F(x)T d . Direzione di discesa Un vettore d ∈ ℜ N è una direzione di discesa per la funzione F (x) : ℜ N → ℜ nel punto x se esiste uno scalare α * > 0 tale che risulti: F ( x + αd ) < F ( x ) ∀α ∈ (0; α * ] In sostanza se d è una direzione di discesa nel punto x, spostandosi da questo punto di una quantità α sufficientemente piccola, si è sicuri di ottenere un decremento della funzione F. Riveste notevole importanza la seguente condizione: 12 Condizione sufficiente affinché la direzione d sia di discesa per la funzione F(x) nel punto x è che risulti: ∇F(x)T d < 0 (2.13) Appare chiaro, quindi, che seguendo una direzione d la cui derivata direzionale risulta negativa e compiendo spostamenti sufficientemente piccoli, si trovano punti in cui la funzione assume valori via via decrescenti. Se scegliessimo invece una direzione per la quale ∇F(x)T d > 0 avremmo che la F crescerebbe e d sarebbe dunque una direzione di salita. Se invece ∇F(x)T d = 0 , allora d è ortogonale al gradiente e non si può dire in generale se è una direzione di discesa o meno; in tal caso si parla di direzione ammissibile. Matrice definita positiva Una matrice simmetrica A ∈ ℜ n× x si dice definita positiva se ( Ax, x) = ∑i =1 ∑ j =1 aij xi x j > 0 n n per ogni x ∈ ℜ N Se vale anche l’uguaglianza (≥) la matrice è detta semidefinita positiva. Se la relazione vale con il segno di minore (<) la matrice è detta definita negativa. Infine se vale anche l’uguaglianza come nel caso precedente (≤) la matrice è detta semidefinita negativa. Matrice jacobiana Dato un vettore h = [h1 , h2 ,..., hm ] di funzioni di x ∈ N , la matrice jacobiana è definita come la matrice m × n costituita dai gradienti delle m funzioni, ossia ∂h1 ∂x1 ∂h ∂h 2 = ∂x1 ∂x L ∂hm ∂x 1 ∂h1 ∂x 2 ∂h2 ∂x 2 L ∂hm ∂x 2 ∂h1 ∂x n ∂h2 L ∂x n O K ∂hm L ∂x n L 13 2.2 Ottimizzazione non vincolata Nel più generale dei casi, riferendoci al problema formalizzato nella (2.1), parliamo di ottimizzazione non vincolata quando X coincide con ℜ N , cioè quando il problema diventa: min F(x) x ∈ℜN Introduciamo ora alcune condizioni in base alle quali si possono caratterizzare i punti di minimo di una funzione. Condizione di ottimalità del primo ordine Sia una funzione F con gradiente continuo in un punto x * ∈ ℜ N . Condizione necessaria affinché x * sia un punto di minimo locale è che: ∇( F (x * )) = 0 (2.14) Un punto che soddisfa tali condizioni si dice stazionario e PS indica l’insieme dei punti stazionari per F, ossia { } PS = x : x ∈ ℜ N , ∇F (x) = 0 . Condizione di ottimalità del secondo ordine Si consideri una funzione F con hessiana continua in un punto x * ∈ ℜ N . Condizioni necessarie affinchè x * sia un punto di minimo locale per F sono: ∇F (x * ) = 0 2 ∇ F (x * ) semidefinita positiva (2.15) Condizione sufficiente di ottimalità Si consideri una funzione F con hessiana continua in un intorno di un punto x * ∈ ℜ N . Condizioni sufficienti affinchè x * sia un punto di minimo locale stretto per F sono: 14 ∇F (x * ) = 0 2 ∇ F (x * ) definita positiva (2.16) 2.2.1 Minimizzazione di funzioni convesse Iniziamo col fornire le seguenti definizioni Insieme convesso Un insieme X ⊂ ℜ N si dice convesso se, presi comunque due punti x, y ∈ X , il segmento che li unisce è interamente contenuto in X. Funzione convessa Una funzione F definita su un insieme convesso X si dice convessa se, presi comunque due punti x, y ∈ X , si ha λF (x) + (1 − λ ) F (y ) ≥ F (λx + (1 − λ )y ) In pratica se F è convessa, vuol dire che il grafico della sua funzione si trova sempre al di sotto di un segmento teso fra due suoi punti. Se aggiungiamo tra le ipotesi anche la continua differenziabilità di F, possiamo dire che: dati due punti x, y ∈ ℜ N F ( y ) − F ( x ) ≥ ∇F ( x ) T ( y − x ) Dunque se F è convessa la curva della funzione si trova sempre al di sopra della retta tangente in un suo punto. Nel caso in cui la F è una funzione convessa, è possibile enunciare alcune proprietà molto forti della soluzione ottima del problema. Anzitutto vediamo che sotto ipotesi molto generali, nel caso convesso la distinzione tra minimi locali e globali non sussiste. 15 Teorema Si consideri una funzione F convessa in ℜ N . Se x * è un punto di minimo locale, è anche un punto di minimo globale. Si noti che questo teorema vale in ipotesi del tutto generali: non abbiamo nemmeno supposto la F differenziabile. Se lo è, vediamo ora che la convessità consente di dare una caratterizzazione dei punti di minimo più forte di quanto visto finora. Infatti in generale il soddisfacimento delle condizioni necessarie del primo e del secondo ordine non basta a determinare la natura del punto in questione. Invece, nel caso particolare che la F sia convessa, le sole condizioni del primo ordine divengono necessarie e sufficienti. Teorema Si consideri una funzione F con gradiente continuo, e sia F convessa in ℜ N . Condizione necessaria e sufficiente affinché x * sia un punto di minimo globale per F è che ∇( F (x * )) = 0 Dunque, nel caso convesso trovare un minimo locale equivale a trovare un minimo globale, e un punto è di minimo se e solo se soddisfa le condizioni del primo ordine. 2.3 Ottimizzazione vincolata Un problema di ottimizzazione vincolata è caratterizzato dal fatto che, a differenza del caso non vincolato, lo spazio dei parametri X non coincide con ℜ N . Formalizzando: min F(x) x ∈ X ⊂ ℜN 16 I vincoli sono espressi mediante un insieme di equazioni di uguaglianza e disuguaglianza e individuano la regione di fattibilità all’interno della quale muovere i gradi di libertà nella ricerca dell’ottimo. Indicando i vincoli mediante l’insieme di equazioni hi (x), i ∈ Φ e/o disequazioni g j (x), j ∈ Ψ , si ha che un generico problema di ottimizzazione vincolato può essere così formulato: min F(x) (2.17) h(x) = 0 g(x) ≥ 0 dove h(x) e g(x) sono vettori di funzioni, ciascuna di n variabili. Nel caso non vincolato, le condizioni necessarie consistevano nell’annullamento del gradiente e nell’essere l’hessiana semidefinita positiva. Ora illustriamo alcune condizioni simili anche per il caso vincolato, approfondendo in particolare le condizioni del primo ordine. Supponiamo che sia la funzione obiettivo F che le hi e g j siano almeno due volte differenziabili. Una condizione necessaria affinché un punto x sia di minimo, è che non esista alcuna direzione d che sia ortogonale al gradiente del vincolo e allo stesso tempo che formi con il gradiente della funzione un angolo ottuso. Dunque, se esiste un vettore d tale da soddisfare le condizioni: • ∇F(x) = λ∇h(x) • ∇F(x)T d < 0 , λ scalare (2.18) (2.19) possiamo sperare di trovare un punto ancora ammissibile e tale da migliorare la funzione obiettivo. La condizione (2.18) di parallelismo tra i gradienti può essere espressa in modo leggermente diverso. Introducendo la funzione lagrangiana L ( x, λ ) = F ( x ) − λ h ( x ) 17 e indicando con ∇ x L(x, λ ) il gradiente calcolato rispetto al solo vettore delle variabili x, possiamo giungere a una formulazione compatta del problema sia nel caso di uguaglianze che di disuguaglianze. Caso con uguaglianze Possiamo riformulare la (2.18) dicendo che deve esistere un λ* ∈ R tale che ∇ x L(x * , λ* ) = 0 (2.20) Il parametro λ* presente nella funzione prende il nome di moltiplicatore di Lagrange. Caso con disequazioni Introduciamo anche in questo caso la funzione lagrangiana L(x, λ1 ) = F (x) − λ1 g1 (x) Possiamo affermare che , se non esiste una direzione di discesa ammissibile nel punto x, allora risultano soddisfatte le due condizioni ∇ x L(x* , λ1 ) = 0 * per qualche λ1 ≥ 0 * λ1* g1 (x) = 0 (2.21) (2.22) La (2.22) è nota come condizione di complementarietà, e implica che il moltiplicatore di Lagrange λ1 * può essere strettamente positivo solo se il vincolo è attivo. Le condizioni di Karush-Kuhn-Tucker Prima di enunciare questo notevole risultato, diamo due importanti definizioni: Vincoli attivi Data una regione X = {x | h(x) = 0, g (x) ≥ 0} e un punto x ∈ X , l’insieme dei vincoli attivi in x è costituito da tutti i vincoli soddisfatti in x all’uguaglianza, ossia I a (x) = {i ∈ Φ} ∪ {j ∈ Ψ | g j (x) = 0} 18 Condizione di qualificazione Dato un problema di programmazione non lineare (2.17), un punto ammissibile x, e il corrispondente insieme di vincoli attivi I a (x) , si dice che i vincoli attivi soddisfano la condizione di qualificazione in x se i loro gradienti, calcolati in x, sono linearmente indipendenti. Possiamo ora introdurre le Condizioni KKT Sia x * un minimo locale, e in x * valga la condizione di qualificazione dei vincoli attivi. Allora esiste un vettore λ * , avente componenti λ k , k ∈ Φ ∪ Ψ , * tale che ∇ x L(x * , λ* ) = 0 hi (x * ) = 0 per ogni i ∈ Φ g j (x * ) ≥ 0 per ogni j ∈ Ψ λ*j ≥ 0 per ogni j ∈ Ψ λ j * g j (x) = 0 per ogni j ∈ Ψ 2.3.1 La funzione penalty I normali problemi di ottimizzazione nell’ambito dell’ingegneria elettrica ed elettronica generalmente richiedono la determinazione dei parametri ottimi vincolati a una o più equazioni o disequazioni di vincolo, come illustrato negli ultimi paragrafi. Quando si analizza un generico problema di ottimizzazione non lineare nel quale i vincoli non possono essere facilmente eliminati, è necessario trovare un modo per bilanciare l’obiettivo di ridurre il valore della funzione fitness F(x) con quello di rimanere all’interno, o almeno molto vicini, alla regione ammissibile. Il modo più intuitivo per risolvere un problema così impostato è quello di considerare una funzione di penalty che sia in qualche modo la combinazione della funzione di fitness F(x) e dei vincoli ci (x) : 19 1 Φ(x, σ ) = F (x) + σ ∑ (ci (x)) 2 2 i (2.23) Estraendo una sequenza dalla (2.23) per σ crescenti si ha che la soluzione approssimata x → x * per σ → ∞ . Gli step che tradizionalmente vengono applicati per questa procedura sono i seguenti: { } a) Scegli una sequenza fissata σ ( k ) → ∞ ({1,10,10 ,...}) 2 b) Per ogni σ (k ) calcola il minimo locale x per il problema non vincolato Φ(x, σ (k ) ) c) Termina se ∑ (c (x)) i 2 è sufficientemente piccolo i Sebbene questo metodo appaia di facile implementazione, esso deve però scontare diversi problemi di tipo numerico. Appare evidente, infatti, che se σ → ∞ diventa sempre più difficile eseguire il passo b) del precedente algoritmo in quanto si perdono via via informazioni sulla funzione di fitness F(x). Pertanto, scegliendo σ (1) molto grande oppure facendo aumentare rapidamente σ , si hanno notevoli difficoltà nella minimizzazione dei sottoproblemi. D’altra parte, scegliendo σ (1) molto piccolo oppure facendo aumentare molto dolcemente σ , si può giungere ad una più facile ed accurata soluzione a scapito di tempi di esecuzione più lunghi. E’ bene sottolineare che questo tipo di approccio, sebbene intuitivo, non è di norma utilizzato nei reali algoritmi che sfruttano invece criteri di calcolo diversi. 2.4 Algoritmi deterministici Gli algoritmi deterministici si dividono in due importanti categorie, a seconda che facciano o meno uso delle derivate della funzione. Gli algoritmi che fanno uso delle derivate hanno un peso computazionale maggiore, perché le operazioni necessarie durante ciascuna iterazione sono più complicate di quelle eseguite dai metodi che non utilizzano le derivate. 20 Questi ultimi non utilizzano un fondamento matematico, ma scelgono iterativamente una nuova soluzione tentando di ridurre il valore della funzione obiettivo muovendosi all’interno della regione ammissibile. Il vantaggio principale di questo tipo di approccio è la maggior velocità con la quale si raggiunge una soluzione. Tuttavia, questo tipo di metodi non è in grado di assicurare l’ottimalità della soluzione. La struttura di fondo degli algoritmi di minimizzazione non vincolata è molto semplice. Si considera un punto x o ∈ ℜ n , e si calcola il valore della funzione F (x 0 ) e del gradiente ∇F(x 0 ) . Se quest’ultimo è il vettore nullo, si è già individuato un punto stazionario. Altrimenti, da x 0 ci si sposta in cerca di un punto x 1 , possibilmente migliore di x 0 . Per fare questo, appare logico scegliere una direzione di discesa, e lungo tale direzione muoversi di un opportuno passo. Trovato x 1 , se esso appartiene a PS ci si ferma, altrimenti si cerca un nuovo punto x 2 e così via. Al generico passo quindi, il nuovo punto x k +1 si ottiene come x k +1 = x k + α k d k (2.24) Si ottiene così una successione x 0 , x 1 , x 2 ,..., x k ,... di punti. A tale schema generale di algoritmo ci si riferisce in genere con il termine di metodo di discesa, a indicare che a ogni passo risulta F ( x k +1 ) < F ( x k ) Lo schema è dunque quello riportato in fig. 2.1. Ciò che distingue un metodo di discesa da un altro sono i criteri da usare per effettuare le due scelte che caratterizzano il metodo: la direzione di discesa e la lunghezza del passo. 21 Fig. 2.1 2.4.1 Convergenza di un algoritmo Prima di addentrarci nello studio dei metodi di ricerca della lunghezza del passo e della direzione di discesa, vediamo alcune considerazioni circa la convergenza di un algoritmo. Un importante criterio di classificazione degli algoritmi riguarda il punto iniziale della successione {x k } . Infatti, in alcuni casi l’algoritmo può convergere o meno a seconda della scelta di x 0 . Convergenza globale e locale Un algoritmo è globalmente convergente se esso è convergente per qualunque x 0 ∈ ℜ n . Un algoritmo è localmente convergente se è convergente solo per x 0 ∈ I (x * ) , ove I (x * ) è un opportuno intorno di un punto x * ∈ PS . Ovviamente la convergenza globale è preferibile a quella locale, anche perché tipicamente è molto difficile conoscere la struttura e l’estensione dell’intorno I (x * ) , ma se ne conosce soltanto l’esistenza. Senza illustrare tutte le dimostrazioni analitiche (che esulano dallo scopo del presente lavoro di tesi e per le quali si rimanda a [3] per eventuali approfondimenti) 22 enunciamo i criteri che sono alla base degli algoritmi per il calcolo del passo α e della direzione d. Innanzitutto, è desiderabile che, a ogni iterazione dell’algoritmo, il punto incrementato x k + αd k soddisfi una condizione di sufficiente riduzione della F, che possiamo esprimere in questi termini: F (x k + αd k ) ≤ F (x k ) + γα∇F(x k )T d k (2.25) ove 0 < γ < 1 . La (2.25) da sola può non essere ancora sufficiente a garantire una buona efficienza dell’algoritmo. Questo perché, essendo comunque la condizione soddisfatta per valori sufficientemente piccoli di α , il rischio è che lo spostamento rispetto a x k sia poco significativo. Allora possiamo considerare la seguente condizione, chiamata condizione di Wolfe: ∇F(x k + αd k ) T d k ≥ c∇F(x k ) T d k (2.26) ove γ < c < 1 In sostanza la (2.26) vincola il passo α ad essere abbastanza lungo da percepire una significativa diminuzione. Vediamo ora una condizione su d k che richiede qualcosa in più. Condizione d’angolo Un algoritmo di ottimizzazione del tipo (2.24) soddisfa la condizione d’angolo se esiste un ε > 0 tale che, a ogni passo k ∇F(x k ) T d k ≤ −ε ⋅ ∇F(x k ) ⋅ d k (2.27) con ε > 0 . Come sappiamo, se ∇F(x k ) T d k < 0 , la direzione d k è una direzione di discesa. La condizione d’angolo richiede qualcosa in più: dovendo essere soddisfatta a ogni iterazione k dell’algoritmo, dal momento che il termine di destra nella (2.27) è 23 strettamente negativo, questa condizione implica che il coseno dell’angolo tra il gradiente e la direzione di ricerca si mantiene sempre strettamente inferiore a − ε . Questo impedisce che, nel corso dell’algoritmo, d k possa tendere a diventare ortogonale a ∇F(x k ) . Si noti che non importa quanto piccolo sia ε , purchè sia strettamente positivo. 2.4.2 Rapidità di convergenza E’ di fondamentale importanza definire con quale rapidità un algoritmo converge. Distinguiamo diversi casi: Convergenza lineare e sublineare Dato un algoritmo del tipo (2.24), se esiste un numero c > 0 tale che, per tutti i ~ k da un certo k in poi, risulta x k +1 − x * ≤c xk − x* Allora, se c ∈ (0,1) , si dice che l’algoritmo ha rapidità di convergenza lineare, se invece c ≥ 1 , la convergenza è sublineare. Convergenza superlineare Un algoritmo del tipo (2.24) ha convergenza superlineare se lim k →∞ x k +1 − x * xk − x* =0 Convergenza quadratica Un algoritmo del tipo (2.24) ha rapidità di convergenza quadratica se esiste un ~ numero C > 0 tale che, per tutti i k da un certo k in poi, risulta x k +1 − x * x k − x* 24 2 ≤C Evidentemente gli algoritmi aventi convergenza lineare sono quelli meno efficienti mentre una convergenza di tipo quadratico può definirsi “veloce”. 2.4.3 Ricerca del passo : backtracking Affrontiamo ora il problema della determinazione del passo α k a ciascuna iterazione della (2.24) che dà il nuovo punto x k +1 , supponendo che d k sia una direzione di discesa, ossia che ∇F(x k ) T d k < 0 . Questa ricerca di α k prende il nome di line search (dal momento che avviene lungo una linea, ossia la direzione d k ). La scelta di α k deve essere fatta in modo tale da consentire anche un significativo spostamento dal punto x k , pur senza garantire in generale il soddisfacimento della condizione di Wolfe. L’approccio iterativo che stiamo per descrivere è di tipo backtracking. L’approccio backtracking consiste nel considerare, inizialmente, un valore α 0 (che va scelto con una certa attenzione). Se gia α 0 soddisfa la condizione di riduzione, il procedimento termina e restituisce α 0 . Altrimenti, si moltiplica α 0 per un fattore di contrazione 0 < σ < 1 / 2 e si prova il valore così generato. Il procedimento prosegue in questo modo fino a trovare un valore αˆ = σ iα 0 tale da soddisfare la (2.25). L’idea è che il valore α restituito dal metodo, oltre a soddisfare la (2.25), non sarà troppo piccolo, in quanto c’è da tener presente che il valore trovato all’iterazione precedente, ossia σ i −1α 0 , non era stato ritenuto soddisfacente, ossia era ancora troppo grande. In questa versione base, l’approccio backtracking prevede di utilizzare ad ogni iterazione sempre lo stesso valore del fattore di concentrazione σ . In tal caso il metodo prende il nome di metodo di Armijo, ed è riportato in fig. 2.2. 25 Fig 2.2 2.4.4 Ricerca della direzione di discesa I metodi esistenti per la ricerca della direzione di discesa si possono distinguere in due importanti categorie: • Metodi che utilizzano soltanto le derivate prime (ad es. il metodo del gradiente) • Metodi che utilizzano la conoscenza delle derivate prime e delle derivate seconde (ad es. il metodo di Newton) Metodo del gradiente Il metodo del gradiente costituisce l’algoritmo di ottimizzazione più semplice, sia dal punto di vista concettuale che realizzativo. In molti metodi di discesa, la direzione di ricerca d k viene determinata considerando un’opportuna approssimazione della funzione obiettivo. Nel matodo del gradiente, si fa riferimento a un’approssimazione lineare di F (x k + d) , pensata come funzione del vettore d. Riprendendo la formula di Taylor arrestata al primo ordine: F ( x k + d ) = F ( x k ) + ∇F ( x k ) T d + β 1 ( x k , d ) L’idea del metodo del gradiente è quella di approssimare F (x k + d) con la funzione ψ k (d) = F (x k ) + ∇F(x k ) T d 26 e di scegliere come direzione di ricerca d k quella direzione che minimizza ψ k (d) nella sfera di raggio unitario. In fig. 2.3 è illustrato lo schema generale di tale algoritmo Fig 2.3 Dal punto di vista pratico, il metodo del gradiente viene ritenuto mediamente inefficiente, soprattutto in presenza di funzioni aventi superfici di livello a forte curvatura. Metodo di Newton I metodi di tipo Newton sono tra i metodi di maggiore importanza nell’ottimizzazione non vincolata. Il metodo di Newton per la minimizzazione di F consiste nel costruire una successione di punti minimizzando a ogni passo un’approssimazione quadratica della funzione. In fig. 2.4 sono illustrati gli step di questo algoritmo. In questo metodo, anziché distinguere la scelta della direzione da quella del passo, viene specificato direttamente il vettore-incremento o, in altre parole, viene fissata la direzione d k = −∇ 2 F(x k ) −1 ∇F(x k ) E lungo questa direzione ci si muove con passo pari a 1. 27 Fig 2.4 Il metodo di Newton converge, anche se solo localmente, con rapidità quadratica, il che lo rende significativamente più interessante rispetto al metodo del gradiente. Tale algoritmo, infine, può convergere anche globalmente, se opportunamente modificato: l’algoritmo così ottenuto è chiamato “Metodo di Newton modificato”. Terminiamo con una tabella riepilogativa sulle principali differenze tra metodo del gradiente e metodo di Newton. Fig 2.5 28 2.4.5 Metodi di ricerca diretta : il metodo del simplesso Terminiamo il paragrafo con un accenno sui metodi di ricerca diretta e in particolare sul metodo del simplesso. Questi algoritmi, a differenza di quelli precedentemente analizzati, hanno il forte vantaggio di non necessitare né della valutazione del gradiente di F, né della sua hessiana. D’altra parte la natura euristica di questi metodi porta all’onere di dover selezionare un numero più o meno grande di parametri strategici: l’esito dell’esecuzione di un algoritmo spesso è notevolmente influenzato dalla scelta di questi parametri. Il simplesso è una figura geometrica avente n+1 vertici per n gradi di libertà. In fig. 2.6 sono illustrati gli esempi di simplesso per n=2 (triangolo) e per n=3 (tetraedro). Fig 2.6 Partendo da un punto iniziale, ad ogni iterazione un nuovo poligono viene generato intercettando un nuovo punto in sostituzione del “peggiore” dei punti iniziali tramite una “riflessione” del poligono, come illustrato in fig. 2.7. 29 Fig. 2.7 La fig. 2.8 mostra un semplice esempio applicativo dell’algoritmo del simplesso nel caso n=2. Fig. 2.8 Il processo iterativo può essere descritto dai seguenti passi: • Sostituzione dei vertici con il peggior valore della funzione obiettivo tramite riflessione ( 1 → 4,2 → 5,3 → 6,5 → 7,7 → 9,12 → 13) 30 • Se il valore della funzione obiettivo nel nuovo vertice è peggiore di quello nel vecchio vertice, il metodo potrebbe iniziare a oscillare. In tal caso il “secondo peggiore” viene riflesso (4 → 8,8 → 10) • Se un vertice sopravvive più di un certo numero prefissato M di iterazioni, il poligono viene contratto (nell’esempio il punto 6 sopravvive troppo a lungo e avvengono le seguenti contrazioni: 9 → 11,10 → 12 ) 2.5 Algoritmi stocastici Molti dei problemi di ottimizzazione possono essere ricondotti a quello di trovare un minimo globale in uno spazio limitato di ricerca, considerando eventualmente alcuni vincoli sullo spazio delle soluzioni ammissibili. Le tecniche esatte di risoluzione non riescono spesso a trovare una soluzione in tempi accettabili; perciò si ricorre a metodi di tipo euristico. Una importante caratteristica dei metodi stocastici in generale, che li differenzia dai metodi deterministici, è rappresentata dal fatto che i metodi stocastici consento un momentaneo “deterioramento” della funzione fitness, consentendo a questi algoritmi di poter anche “sfuggire” da minimi locali e cercare soluzioni che risolvano il problema in esame in un’ottica globale. Dato che le strategie stocastiche sono metodi di ordine zero e richiedono alla funzione obiettivo solo la sua valutazione in diversi punti dello spazio dei parametri, non c’è bisogno di fare ipotesi sulla continuità della funzione fitness o calcolare gradienti ed hessiane durante l’esecuzione dell’algoritmo. I metodi stocastici che studieremo sono costituiti dai cosiddetti “algoritmi evolutivi”. Gli algoritmi evolutivi sono strategie euristiche che si ispirano all'evoluzione naturale, teorizzata da Darwin nel suo libro sull'evoluzione della specie, per risolvere problemi di ricerca globale. Questo tipo di algoritmi si basa sul principio darwiniano che gli elementi più “adatti” all’ambiente hanno maggiore possibilità di sopravvivere e di trasmettere le loro caratteristiche ai successori; in pratica, si ha una popolazione di individui che evolvono di generazione in generazione attraverso meccanismi simili alla 31 riproduzione sessuale e alla mutazione dei geni. Questo meccanismo conduce ad una ricerca euristica che privilegia le zone dello spazio di ricerca dove maggiormente è possibile trovare soluzioni migliori, non trascurando altre zone a più bassa probabilità di successo in cui saranno impiegate un minor numero di risorse. Gli algoritmi evolutivi sono classificati fra i metodi di ricerca "deboli", così denominati perché si adattano a risolvere una grande varietà di problemi, incorporando poca conoscenza del domino particolare, in contrapposizione a quelli "forti" che sfruttano le conoscenze del dominio applicativo. Si è visto però che gli algoritmi evolutivi tendono a sviluppare un'intelligenza emergente che li porta a risolvere in modo efficace anche problemi con domini particolari. Sebbene gli algoritmi evolutivi siano generalmente caratterizzati da una notevole efficacia risolutiva, essi presentano l’handicap di richiedere numerose valutazioni della funzione obiettivo. E’ solo grazie ai recenti incredibili miglioramenti in termini potenza di calcolo dei moderni elaboratori che questi algoritmi hanno ottenuto una forte popolarità. All'interno degli algoritmi evolutivi si è soliti distinguere fra diverse sottocategorie. In particolare , nel corso del paragrafo, analizzeremo le strategie evolutive e gli algoritmi genetici che rappresentano i metodi che sono alla base dei più importanti algoritmi di ottimizzazione multiobiettivo. 2.5.1 Strategie evolutive. (µ/ρ,λ)-ES e (µ/ρ+λ)-ES Le strategie evolutive (ES) costituiscono una sotto-categoria dei metodi di ottimizzazione diretta appartenenti alla classe degli algoritmi evolutivi. Esse furono inizialmente sviluppate da P. Bienert , I. Rechenberg e H.P. Schwefel alla Thecnical University di Berlino negli anni ’60. Le ES possono essere applicate in tutti i settori dell’ottimizzazione inclusi i problemi con spazi di ricerca continui, discreti, combinatoriali, con o senza vincoli. Data una generica funzione di fitness F, definita nello spazio dei parametri N-dimensionale Y, e con valori nello spazio monodimensionale Z: F : y ∈ Y → F (y ) ∈ Z Un problema di ottimizzazione può essere formulato come segue: 32 “determinare il vettore dei parametri ŷ ∈ Y in cui la funzione assuma il suo valore ottimo: F (yˆ ) = opt[ F (y )] ”. dove y = ( y1 ,..., y N ) yˆ = ( yˆ1 ,..., yˆ N ) Le componenti y i di y sono dette variabili oggetto, mentre F rappresenta la funzione obiettivo. L’ES opera su una popolazione B di individui, oguno dei quali è definito completamente da tre parametri: un vettore di parametri y, un set di strategy parameters s e il corrispondente valore di fitness F(y): a = (y , s, F (y )) Il set di parametri s è endogeno, cioè può variare all’evolvere dell’algoritmo, e gioca un ruolo fondamentale per la self-adaptation dell’ES. Gli individui a, che costituiscono una popolazione, consistono di µ genitori, am, con m = 1,..., µ e λ discendenti, a~l , con l = 1,..., λ . I parametri µ e λ sono esogeni, cioè non variano durante l’evoluzione. Indichiamo, rispettivamente, le popolazioni dei genitori e dei figli al tempo g ~ (g) (g) con Bµ e Bλ : { } { } Bµ = a m = (a1 ,..., a µ ) ~ (g) (g) (g) (g) Bλ = a~l = (a~1 ,..., a~λ ) (g) (g) (g) (g) Usando queste notazioni possiamo schematizzare l’algoritmo ES − ( µ / ρ ,+ λ ) come mostrato in fig. 2.9. Oltre a µ e λ, un altro parametro esogeno è ρ . Esso determina il numero dei genitori che partecipano alla riproduzione di un singolo figlio, ricombinando opportunamente il loro patrimonio genetico. Questi genitori formeranno l’insieme C: C = (a m1 ,..., a mρ ) Essendo 1 ≤ ρ ≤ µ , se ρ=1 si ha una riproduzione asessuata, mentre per ρ=2 si ha la riproduzione biologica standard. 33 Fig. 2.9 Descrizione dell’algoritmo Si parte da una popolazione iniziale di individui, Bµ (0) , ossia da un insieme di possibili soluzioni generate in modo pseudo-random. Segue il ciclo evolutivo, basato su applicazioni successive di operatori genetici alla popolazione B µ . Gli operatori genetici usati nell’ES sono: riproduzione, ricombinazione, mutazione, selezione. Dalla linea 4 alla 19 è rappresentato il ciclo generazionale: per ogni generazione, g, si parte da una popolazione di genitori Bµ (g) , da cui deriveranno λ figli, ~ (g) che a loro volta formeranno la popolazione Bλ , (linee 5-13). Ogni discendente è 34 creato passo dopo passo. Prima sono selezionati i suoi genitori (linea 6), poi se ρ > 1 si ha la ricombinazione dei geni (linee 7 e 9), e quindi la mutazione (linee 8 e 10). Invece per la riproduzione asessuata si passa direttamente all’operatore di mutazione. L’operatore di ricombinazione, detto crossover, a differenza di quello di mutazione, non è controllato dall’insieme dei parametri di strategia ~ sl . Il risultato sarà y l , su cui è valutata la fitness (linea 11). un nuovo insieme di parametri, ~ Dopo la procreazione segue la selezione (linee 14-17) degli individui ”migliori”. Alla fine, a seconda del criterio di selezione usato, (µ,λ) o (µ+λ), si avrà la nuova popolazione di genitori Bµ ( g +1) , a cui sarà associata il valore di fitness relativo. Il ciclo generazionale continuerà fino a quando non si raggiunge un criterio di stop predefinito. Possibili criteri di stop possono essere: • La funzione obiettivo diventa più piccola di un ε prefissato • L’ultimo progresso (cambiamento) della funzione obiettivo risulta più piccolo di un determinato ε c . • Viene superato il numero massimo di chiamate a funzione. • E’ stato oltrepassato il numero massimo di chiamate a funzione senza migliorie. 2.5.1.1 Operatori genetici Analizziamo ora nel dettaglio le caratteristiche di ogni operatore genetico. Operatore di riproduzione L’operatore di riproduzione seleziona l’insieme dei genitori, C, che prenderanno parte alla procreazione di un individuo figlio: C = (a i1 ,..., aiρ ) per ρ<µ C = (a1 ,..., a µ ) per ρ=µ dove, ∀r ∈ {1,..., ρ } : ir = Random{1,..., µ } per ρ<µ m = 1,..., µ per ρ=µ 35 Nel caso ρ=µ si ha C ≡ Bµ , cioè tutti gli individui che appartengono alla popolazione dei genitori partecipano alla creazione di un figlio. Se ρ<µ i genitori che parteciperanno alla riproduzione sono scelti in modo random. Operatore di ricombinazione (crossover) La ricombinazione è un processo in cui sia le componenti di y che di s, associati ai ρ genitori precedentemente scelti, si combinano per formare i vettori sl e y l , associati al corrispondente figlio (linee 7 e 9 in fig. 2.9). Questo operatore agisce su ρ vettori (x 1 ,..., x ρ ) , dove x indica l’insieme dei parametri y oppure indica il set dei parametri di strategia s. Esistono due tipi fondamentali di ricombinazione: • La ricombinazione intermedia, in cui il discendente ricombinato r è dato dal centro di massa dei ρ genitori casualmente selezionati • La ricombinazione dominante, in cui si seleziona casualmente uno dei ρ genitori, detto dominante, e si trasferisce esclusivamente la sua rispettiva componente Operatore di mutazione L’operatore di mutazione è di fondamentale importanza nell’ES, poiché rappresenta la fonte delle variazioni genetiche. In tale processo sia le componenti del vettore dei parametri, y, che le componenti del vettore s, associati all’individuo-figlio appena creato, sono soggette a piccoli disturbi random. In questo modo, si generano possibili soluzioni nuove e quindi si rinnova il patrimonio genetico. In pratica, il figlio ~ y l sarà dato dalla somma del vettore y l risultante dalla ricombinazione, con un vettore random, z, normalmente distribuito: ~ y = y + z con z = ( z ,..., z ) l l 1 N Ogni componente z i varia secondo una distribuzione gaussiana N (0, σ i ) , ed è 2 statisticamente indipendente dalle altre componenti. Inoltre tutte le componenti hanno 36 la stessa deviazione standard σ i = σ , detta mutation strenght, che determina l’ampiezza e la direzione delle variazioni applicate a y. Operatore di selezione L’operatore di selezione, indicato dalla simbologia (+) o (,) , produce alla generazione successiva, g+1, una popolazione di genitori B µ , attraverso un processo deterministico. Gli individui migliori, in base al valore assunto dalla funzione di fitness corrispondente, possono essere selezionati secondo due possibili strategie: comma-selection (,) oppure plus-selection (+) La differenza tra le due sta nell’insieme degli individui su cui l’operatore di selezione agisce: • ~ (g) Nella selezione (,) si considera solo la popolazione dei figli Bλ • Nella selezione (+) la scelta degli individui migliori è fatta considerando sia l’insieme dei figli che dei genitori Bµ (g) 2.5.1.2 σ-Self Adaptation La performance degli algoritmi ES dipende molto dal valore del parametro di strategia σ . L’adattamento dinamico del valore di σ alla topologia locale dello spazio di ricerca è una caratteristica fondamentale dell’algoritmo ES- σ SA. Il σ SA è un algoritmo evolutivo self-adapting, cioè σ fa parte del patrimonio genetico degli individui, ed è soggetta a ricombinazione e mutazione come le componenti del vettore dei parametri y. In altre parole, ogni individuo a = (y , s, F (y )) ha il proprio set di parametri di strategia; se un discendente a~ è selezionato attraverso ~ la sua fitness, Fl = F (~ y l ) , non solo il suo vettore dei parametri y l sopravvive, ma anche il corrispondente set dei parametri di strategia ~sl . Generalmente il comportamento adattivo di un algoritmo ES viene realizzato introducendo un fattore α . Agendo con questo fattore sullo stepwidth σ si ha la possibilità di aumentare o diminuire quest’ultimo in maniera casuale: σ figlio = σ ereditato * α oppure σ figlio = σ ereditato / α 37 Questa procedura può essere eseguita in maniera univoca per tutti gli individui figli, oppure ogni individuo figlio può essere trattato in maniera indipendente dagli altri. 2.5.2 Algoritmi genetici Gli algoritmi genetici sono stati sviluppati basandosi sulle teorie evoluzionistiche di Darwin, presentate nel suo libro “On the Origin of Species by Means of Natural Selection” del 1859 e sono stati trattati per la prima volta da John Holland nel 1975. Questo tipo di algoritmi si basa sul principio darwiniano che gli elementi più “adatti” all’ambiente hanno maggiore possibilità di sopravvivere e di trasmettere le loro caratteristiche ai successori; in pratica, vi è una popolazione di individui che evolvono di generazione in generazione attraverso meccanismi simili alla riproduzione sessuale e alla mutazione dei geni. In tal modo si avrà una ricerca euristica che privilegia le zone dello spazio di ricerca dove maggiormente è possibile trovare soluzioni migliori, non trascurando altre zone a più bassa probabilità di successo in cui saranno impiegate un minor numero di risorse. Tipicamente un algoritmo genetico è costituito da : • Una popolazione finita di individui di dimensione N, che rappresentano le soluzioni candidate a risolvere il problema; • Una funzione di adattamento, detta fitness, che fornisce una misura della bontà della soluzione e un’indicazione sugli individui più adatti a riprodursi; • Una serie di operatori genetici, che trasformano l’attuale popolazione nella successiva; • Un criterio di terminazione, che stabilisce quando l’algoritmo si deve fermare (siamo arrivati a una soluzione accettabile del problema, o abbiamo superato i limiti di tempo imposti dall’utente); • Una serie di parametri di controllo Uno schema semplice del funzionamento di un algoritmo genetico è illustrato in fig. 2.10. Inizialmente si crea in modo del tutto casuale una popolazione di individui, dove ogni individuo è rappresentato da una stringa di lunghezza prefissata, tipicamente 38 binaria. Quindi si valuta la fitness, cioè la funzione di adattamento di ognuno degli individui; si verifica se è soddisfatto il criterio di terminazione e in caso contrario si passa alla nuova generazione. Fig. 2.10 La nuova popolazione sarà costruita applicando alla vecchia gli operatori principali dell’algoritmo: • La ricombinazione (crossover), che dati due elementi selezionati nella popolazione, detti genitori, genera due “figli”, cioè due individui con caratteristiche ereditate da entrambi i parenti; 39 • La mutazione, che altera (inverte) uno o più geni (bit) di un individuo; • La riproduzione, che copia un individuo inalterato nella nuova popolazione. Questi operatori, che insieme al numero di generazioni massime e alla dimensione della popolazione costituiscono i parametri fondamentali dell’algoritmo, sono applicati con diverse probabilità fino a che la nuova popolazione non ha raggiunto la dimensione desiderata. 2.5.2.1 La popolazione Un elemento base degli algoritmi genetici è la popolazione che è costituita da un numero prefissato di individui ed è generata, all’inizio dell’algoritmo, in modo casuale. Esistono diverse varianti di algoritmo genetico, dipendenti dalla gestione della popolazione, di cui citiamo le principali. Se l’intera popolazione è sostituita interamente dai nuovi elementi si parla di generazionale , in caso contrario si ha l’algoritmo genetico steady-state (a stato fissato). Ancora, si ha un modello elitarista se l’elemento o gli elementi migliori sono conservati durante l’evoluzione della popolazione. Nel modello a isole, invece, si hanno una serie di popolazioni che evolvono in maniera autonoma, con occasionali migrazioni di individui da un’isola all’altra. Ogni individuo della popolazione è rappresentato da una stringa di lunghezza prefissata di bit. I vantaggi della codifica binaria tradizionale negli algoritmi genetici sono evidenti: definizione implicita della precisione, facilità nell’esaminare il tasso di convergenza e una definizione formalmente elegante degli operatori genetici. Ad ogni modo ci sono degli svantaggi nell’uso di questa codifica, come quando si richiede una più alta precisione nei risultati. La comune rappresentazione binaria, quindi, non è spesso adatta a trasformare lo spazio dei problemi nello spazio delle rappresentazioni, perché una piccola distanza nel primo potrebbe corrispondere ad una grande distanza nel secondo. Se, per esempio, supponiamo un cambiamento di valori da 31 a 32, c’è il cambiamento di addirittura 6 bit nella codifica tradizionale (da 011111 a 100000) mentre un altro piccolo cambiamento come quello da 32 a 33 produce il cambiamento di un solo bit (da 100000 a 100001). Per questo motivo, generalmente, viene impiegato il codice Gray per le codifica dei parametri. 40 Continuando la similitudine con le teorie genetiche, la stringa di bit di un individuo rappresenta il genotipo dell’individuo (o cromosoma), mentre il fenotipo indica il comportamento dell’individuo ed è completamente dipendente dal dominio. La funzione di fitness genera un mapping dal genotipo al fenotipo; di conseguenza, due genotipi differenti potrebbero avere lo stesso valore di fitness, ma un’accurata progettazione dovrebbe evitare che ciò avvenga per due fenotipi diversi. 2.5.2.2 Operatori genetici Negli algoritmi genetici si utilizzano principalmente tre operatori: la riproduzione, la mutazione e la ricombinazione (crossover). I primi due metodi si applicano ad un solo individuo, mentre il crossover ha bisogno di due individui. Prima di applicare uno di questi operatori è necessario selezionare uno o due individui della popolazione, a seconda del caso. Fra i più popolari metodi di selezione si ricordano il fitness-proportionate (o metodo della roulette) e il K-tournament. Il metodo della roulette assegna a ciascun individuo un valore compreso tra 0 e 1 in modo che la somma di tutti i valori di tutti gli individui sia 1 e facendo in modo che individui con una miglior fitness abbiano assegnati valori più alti. Successivamente viene estratto un numero in modo random tra 0 e 1 e viene scelta la configurazione corrispondente (vedi fig. 2.11). Fig. 2.11 41 Il K-tournament, invece, sceglie K elementi a caso nella popolazione, indice un torneo tra questi individui e quello che risulta vincente sarà selezionato. Ovviamente con entrambi i metodi, gli individui con fitness migliore hanno maggiori probabilità di essere selezionati e, quindi, di trasmettere i propri geni alla generazione successiva, rispettando i meccanismi evolutivi di sopravvivenza più adatti. Una volta selezionato l’individuo (o gli individui) viene scelto in modo random un operatore genetico. La scelta, pur essendo casuale, si basa su valori di probabilità diversi assegnati a ciascun operatore: p (C ) per il crossover, p (M ) per la mutazione e p (R ) per la riproduzione. La riproduzione ricopia semplicemente l’individuo nella nuova popolazione, lasciando intatto tutto il suo patrimonio genetico. La mutazione inverte uno o più bit, scelti casualmente con una distribuzione uniforme, del genotipo dell’individuo e inserisce in tal modo diversità nella popolazione, portando la ricerca verso nuovi spazi (fig. 2.12). Fig. 2.12 Il crossover combina i patrimoni genetici dei due genitori in modo da costruire due “figli”, che possiedono metà dei geni di uno e metà dell’altro. Esistono diverse tipologie di crossover. Il crossover ad un punto (fig. 2.13) sceglie in modo casuale una posizione della stringa e genera i figli nel modo seguente: supponendo che la stringa sia di lunghezza L, si sceglie K estraendolo a caso nell’intervallo (1,…,L), quindi il primo figlio avrà i geni da (1,…,K) del primo genitore e da (K+1,…,L) dell’altro e il secondo l’inverso. Un’altra tipologia largamente usata di crossover è quella a due punti (fig. 2.14), in cui le stringhe sono scambiate, con procedimento analogo al precedente, fra due punti scelti a caso. 42 Fig. 2.13 Fig. 2.14 Il crossover è la forza trainante dell’algoritmo genetico ed è l’operatore che maggiormente influenza la convergenza, anche se un suo uso troppo spregiudicato potrebbe portare ad una convergenza prematura della ricerca su qualche massimo/minimo locale. 43 I parametri che regolano la minore o maggiore influenza di un operatore su un altro sono la probabilità di crossover, di mutazione e di riproduzione; la loro somma deve essere uguale a 1, anche se esistono varianti di algoritmo genetico che realizzano in ogni caso la mutazione, anche dopo il crossover per mantenere maggiore diversità nella popolazione. In realtà la scelta dei parametri e del tipo particolare di operatore usato dipendono fortemente dal dominio del problema, perciò non è possibile, a priori, stabilire le specifiche di un algoritmo genetico. Addirittura sono stati sviluppati con buon successo algoritmi ibridi che sostituiscono la mutazione con un algoritmo fortemente dipendente dal dominio. 2.5.2.3 Reinserzione Dopo l’azione degli operatori genetici sulla vecchia popolazione, una nuova popolazione viene prodotta e resta determinato il valore di fitness di ogni suo individuo. Nel caso in cui ci sono pochi individui in più, introdotti dalla ricombinazione, rispetto alla grandezza della popolazione originaria, allora la differenza tra nuova e vecchia popolazione è chiamata generational gap. Se il numero di nuovi individui introdotti ad ogni generazione è uno o due, allora siamo di fronte ad un algoritmo steady-state. Inoltre si dice che l’algoritmo usa una strategia elitistica se gli individui con miglior fitness vengono deterministicamente scelti per propagare successive generazioni. Per mantenere costante la dimensione della popolazione originaria, potrebbe esserci bisogno di un reinserimento dei nuovi individui nella nuova generazione. Analogamente, se non tutti i nuovi individui vengono utilizzati per ogni generazione oppure se viene generato un numero di “figli” superiore alle dimensioni della vecchia popolazione, si rende necessario l’utilizzo di uno schema di reinserzione per determinare quali individui devono esistere anche nella nuova generazione. Un importante vantaggio del non arricchire la popolazione di un numero di individui via via crescente, consiste nel fatto che il costo (e quindi il tempo) computazionale è ridotto. Addirittura per algoritmi steady-state con pochissimi individui aggiunti si rende possibile l’utilizzo di calcolatori con requisiti di sistema piuttosto bassi in termini di memoria disponibile. Per selezionare quali membri della vecchia popolazione sostituire, la strategia più intuitiva consiste nel selezionare gli individui con la peggior valutazione di fitness, 44 comportando così in qualche modo l’adozione di una strategia elitistica in quanto gli individui con miglior fitness procedono nelle generazioni successive. 2.5.2.4 Terminazione Dato che gli algoritmi genetici sono metodi di ricerca stocastici, è difficile definire criteri di convergenza. In molti casi può accadere che il valor medio della fitness di una popolazione può rimanere praticamente fermo per un certo numero di generazioni prima di trovare un individuo con la fitness ottimale. Pertanto l’adozione dei convenzionali criteri di terminazione può risultare problematica. Una pratica comune è quella di terminare l’algoritmo quando il numero di generazioni raggiunge un valore predeterminato. Successivamente vengono testati e valutati i membri con fitness migliore e se questi valori non sono compatibili con le richieste iniziali allora si può far ripartire l’algoritmo o iniziare una nuova ricerca. 45 46 3 Ottimizzazione multi-obiettivo 3.1 Introduzione Il ruolo attuale dell’ottimizzazione multiobiettivo nella progettazione industriale risulta sempre più rilevante. La crescente potenza di calcolo dei moderni elaboratori, infatti, fornisce ai progettisti la possibilità di costruire modelli parametrici complessi che possono essere utilizzati per realizzare procedure di ottimizzazione automatiche. Come accade in gran parte dei problemi di progettazione, gli obiettivi di cui tener conto sono molti e spesso in contrasto tra loro. L’approccio classico, tuttora ampiamente utilizzato, per affrontare problemi di ottimizzazione multiobiettivo consiste nel trasformare il problema multi-obiettivo in uno mono-obiettivo utilizzando informazioni ulteriori sul problema che formalizzino un grado di preferenza tra gli obiettivi; il problema mono-obiettivo, così ottenuto, viene successivamente risolto tramite una delle tecniche classiche di ottimizzazione, deterministiche o stocastiche. In questa ottica il problema multi-obiettivo viene visto come un caso particolare del problema mono-obiettivo. Questo approccio ha principalmente tre svantaggi: • La varietà di soluzioni di un problema multiobiettivo viene così ridotta a una sola soluzione con una conseguente significativa perdita di informazione. • La scelta di una soluzione tra le infinite possibili (o meglio, tra le n numericamente disponibili) attraverso informazioni aggiuntive viene fatta a priori, cioè senza una completa informazione su tutte le possibili soluzioni. 47 • Esistono alcuni casi di problemi (non convessi) in cui l’approccio multiobiettivo puro fornisce soluzioni che sarebbe impossibile da un punto di vista matematico ottenere attraverso un approccio classico. L’approccio derivato dalla teoria dei Pareto non richiede una scelta a priori del grado di preferenza e inverte il punto di vista considerando il problema mono-obiettivo come un caso particolare del problema multi-obiettivo. Il risultato dell’ottimizzazione non è più uno soltanto ma una varietà, un campionamento delle infinite soluzioni Pareto-ottime. La teoria dei problemi multiobiettivo è d’altra parte matura e fornisce utili teoremi di esistenza e unicità delle soluzioni, sia quando si considerano le classiche formulazioni scalarizzate, sia quando il problema è affrontato attraverso la teoria degli ottimi di Pareto. Una notevole varietà di metodi evolutivi e non evolutivi specificamente sviluppati per l’ottimizzazione multiobiettivo secondo Pareto sono presenti in letteratura e sono tuttora oggetto dello studio della comunità scientifica. Allo scopo di confrontare questa enorme varietà di metodi diversi in maniera univoca, specifici criteri di convergenza e misure dell’errore di approssimazione sono in corso di studio, perché l’estensione all’approssimazione del fronte di Pareto dei suddetti concetti non è per nulla immediata. D’altra parte l’applicazione dei suddetti algoritmi a problemi di progettazione reali è spesso difficile e poco pratica da un punto di vista del costo computazionale, a causa dell’elevato numero di chiamate alla funzione obiettivo (fissato il numero delle soluzioni volute). Nel seguito del capitolo, dopo alcuni cenni storici e una breve introduzione ai concetti che sono alla base della teoria dell’ottimizzazione multiobiettivo, illustreremo i più importanti metodi classici di soluzione. Successivamente analizzeremo in maniera dettagliata i più importanti algoritmi evolutivi, definendone pregi e difetti, e soprattutto i campi di applicazione più adeguati. 3.1.1 Cenni storici La teoria dell’ottimizzazione multiobiettivo non è così recente come si potrebbe pensare. In effetti, qualche autore considera l’ottimizzazione multiobiettivo come parte 48 integrante della teoria degli equilibri economici e pertanto ne fa risalire gli inizi al 1776, anno in cui Adam Smith pubblicò “The wealth of Nations”. Il concetto generale di equilibrio economico è spesso attribuito a Leon Walras. Comunque anche William Jevons, Carl Menger, Francis Edgeworth e Vilfredo Pareto, produssero importanti lavori a riguardo nel periodo tra il 1874 e il 1906. In stretta relazione all’ottimizzazione multiobiettivo è anche la teoria dei giochi psicologici e la nozione di strategia di gioco (basata sull’analisi della psicologia dell’avversario), che viene attribuita ad Emile Borel. La cosiddetta “teoria dei giochi” viene datata in corrispondenza al lavoro fatto da Borel nel 1921. Comunque, molti storici tendono ad attribuire le origini della teoria dei giochi ad una pubblicazione del matematico ungherese John Von Neumann, che fu presentata nel 1928. Nel 1944, John Von Neumann e Oskar Morgensten affermarono che un problema di ottimizzazione nel contesto dell’economia degli scambi sociali era “una particolare e sconcertante miscela di diversi problemi in conflitto” che “non erano mai stati trattati nella matematica classica”. Nel 1951 T.C. Coopmans pubblicò un libro chiamato “Activity analysis of production and location” dove per la prima volta fu introdotto il concetto di “vettore efficiente”. Le origini dei fondamenti matematici dell’ottimizzazione multiobiettivo possono essere retrodatate al periodo che va dal 1895 al 1906. Durante questo periodo Georg Cantor e Felix Hausdorff posero le fondamenta di spazi ordinati di dimensione infinita. Cantor introdusse anche il concetto di classi equivalenti ed enunciò la prima condizione sufficiente per l’esistenza di una “utility function”. Hausdorff diede inoltre il primo esempio di ordinamento completo. Ad ogni modo fu il concetto di “problema di massimo vettoriale” introdotto da H.W. Kuhn e A.W. Tucker a definire l’ottimizzazione multiobiettivo come una disciplina matematica come viene considerata oggi. La cosiddetta “efficienza esatta” nel contesto dell’ottimizzazione multiobiettivo può essere considerata come il primo tentativo serio di derivare una teoria per questa disciplina. Questa stessa direzione venne successivamente seguita da K.J. Harrow che usò il termine “ammissibile” invece di “efficiente”. 49 Successivamente, la teoria dell’ottimizzazione multiobiettivo non venne molto sviluppata durante gli anni ’50. Probabilmente la più importante ricerca conclusa in questi anni fu il “goal programming” presentato da A. Charness e W.W. Couper. Fu intorno al 1960 che i fondamenti teorici dell’ottimizzazione multiobiettivo furono consolidati e presi in seria considerazione anche da matematici puri come L. Hurwicz che generalizzò i risultati di Kuhn e Tucker negli spazi vettoriali. Negli anni ’60 i problemi multiobiettivo negli investimenti pubblici divennero molto comuni e “trade-off “ divenne un termine spesso utilizzato dai manager. Successivamente molte tecniche vennero sviluppate dagli analisti per la soluzione di problemi sia nel settore privato che in quello pubblico, da teorici per problemi di ingegneria e da economisti e analisti per la pianificazione delle risorse idriche. L’applicazione dell’ottimizzazione multiobiettivo in contesti diversi da quello economico iniziò con il lavoro di Koopmans in ambito teorico e con il lavoro di Marglin riguardo la pianificazione delle risorse idriche. La prima applicazione ingegneristica riportata in letteratura fu una pubblicazione di L. Zadeh nei primi anni ’60. 3.2 Definizioni e concetti base Un problema di ottimizzazione multiobiettivo può essere definito come la minimizzazione o massimizzazione di una funzione a valori reali su un insieme specificato. L’importanza di questo modello matematico deriva ovviamente dal fatto che molti problemi reali vengono affrontati facendovi ricorso. Tuttavia quasi ogni problema reale di ottimizzazione è caratterizzato dalla presenza contemporanea di più obiettivi, cioè funzioni a valori reali da massimizzare e/o minimizzare, tipicamente in contrasto tra loro. Nel seguito, quando non diversamente specificato, considereremo il seguente problema di ottimizzazione multiobiettivo: " min" F(x) = ( F1 (x) F2 (x) K Fk (x)) T x∈ X ove k ≥ 2 e 50 Fi : ℜ n → ℜ, per i = 1,..., k . (MOP) Osserviamo subito che, essendo ovviamente lo spazio dei vettori k-dimensionali non ordinato, definire un minimo in tale insieme potrebbe portare qualche perplessità nel lettore: in effetti la ricerca del minimo è affrontata sulla base del criterio di non dominazione secondo Pareto che verrà introdotto di qui a poco. D’ora in avanti chiameremo ℜ k spazio degli obiettivi e ℜ n spazio delle variabili di decisione. Un vettore x ∈ ℜ n sarà pertanto un vettore di decisioni mentre z ∈ ℜ k un vettore di obiettivi. Indicheremo, inoltre, con F(x) il vettore delle funzioni ( F1 (x) F2 (x) K Fk (x)) T obiettivo Z = F (X ) e con l’immagine della regione ammissibile X nello spazio degli obiettivi e cioè: { } Z = F( X ) = z ∈ ℜ k : ∃x ∈ X , z = F(x) In particolare diremo che un vettore di obiettivi z ∈ ℜ k è ammissibile quando risulti z ∈ Z . Definiamo, inoltre, il vettore ideale degli obiettivi z id come il vettore di componenti z i = min Fi (x) id x∈ X In pratica, il problema così formalizzato consiste nel minimizzare tutte le funzioni obiettivo simultaneamente. Se non ci fossero conflitti tra le funzioni obiettivo, una soluzione banale al problema sarebbe quella ottenibile risolvendo separatamente k problemi di ottimizzazione mono-obiettivo (uno per ogni funzione obiettivo) ottenendo quindi come soluzione proprio il vettore ideale z id . Non sarebbe pertanto necessario applicare alcuna tecnica specifica di soluzione. Per evitare il sorgere di tale caso banale, supporremo che z id ∉ Z . Questo significa assumere che le funzioni F1 (x), F2 (x),..., Fk (x) siano, almeno in parte, in contrasto tra loro. Introduciamo ora quello che può essere considerato il concetto più importante nell’ambito dell’ottimizzazione multiobiettivo, cioè il concetto di “Ottimalità secondo Pareto”. La definizione che adottiamo è stata proposta per la prima volta da Edgeworth 51 nel 1881 e successivamente ripresa da Vilfredo Pareto nel 1896 che la approfondì ulteriormente. Relazione di dominazione Dati due vettori z 1 , z 2 ∈ ℜ k , diciamo che z 1 domina z 2 secondo Pareto (z 1 ≤ P z 2 ) quando risulta zi ≤ zi 1 2 zj < zj 1 2 per ogni i = 1,2,..., k e per almeno un indice j ∈ {1,..., k } La relazione binaria ≤ P è un ordinamento parziale (non riflessivo) nello spazio delle k-uple di numeri reali. Possiamo dare un’interpretazione geometrica a quest’ultima definizione. Immaginiamo di avere un insieme di soluzioni per un problema di ottimizzazione con due funzioni obiettivo da massimizzare e inseriamo in un grafico i punti soluzione trovati. Fig. 3.1 52 Focalizziamo la nostra attenzione sul punto F* immagine attraverso la funzione F di un punto x * ∈ X e disegniamo due semiassi paralleli agli assi principali, con origine nel punto F* e orientati verso infinito o meno infinito a seconda se la relativa funzione obiettivo deve essere minimizzata o massimizzata. La regione delimitata dai semiassi aventi origine nella soluzione F * = F(x * ) è detta regione di dominazione e tutte le soluzioni al suo interno sono dette soluzioni dominate. Sfruttando la relazione ≤ P possiamo dare la seguente definizione : Ottimalità secondo Pareto Un vettore di decisioni x * ∈ X è un ottimo secondo Pareto (PO) se non esiste un altro vettore x ∈ X tale che: F(x) ≤ P F(x * ) Dualmente diremo che un vettore di obiettivi z * ∈ Z è ottimo secondo Pareto quando non esiste un altro vettore z ∈ Z tale che: z ≤ P z* Quindi se ci troviamo in un punto ottimo secondo Pareto e vogliamo ulteriormente diminuire il valore di una o più funzioni obiettivo dobbiamo essere disposti ad accettare un conseguente aumento di almeno una delle rimanenti funzioni. In tal senso possiamo affermare che, nello spazio degli obiettivi, gli ottimi di Pareto sono punti di equilibrio che si trovano sulla frontiera dell’insieme Z. La definizione di ottimo secondo Pareto è ovviamente una definizione di ottimo globale dato che si richiede la validità di una certa proprietà su tutto l’insieme ammissibile del problema (MOP). E’ evidentemente possibile, però, dare una definizione di ottimo locale secondo Pareto. Ottimo locale secondo Pareto Un vettore di decisioni x * ∈ X è un ottimo locale di Pareto se esiste un numero δ > 0 tale che x * è ottimo secondo Pareto in X ∩ B(x * , δ ) . 53 In fig. 3.2 si riportano gli ottimi globali e locali di Pareto per un insieme Z. Fig. 3.2 Ovviamente ogni ottimo globale è anche ottimo locale di Pareto. Il viceversa generalmente non vale. Se però consideriamo un problema (MOP) convesso, cioè un problema in cui tutte le funzioni obiettivo sono convesse, è possibile dimostrare che in questo caso tutti gli ottimi locali sono anche ottimi globali. Per completezza, definiamo anche il concetto di ottimo debole secondo Pareto la cui interpretazione grafica è illustrata in fig. 3.3. Ottimo debole secondo Pareto Un vettore x * ∈ X è un ottimo di Pareto debole per il problema (MOP) se non esiste un punto x ∈ X tale che F(x) < P F(x * ) Fig. 3.3 54 Tornando al concetto di ottimalità globale secondo Pareto, possiamo definire due insiemi fondamentali: Insieme degli ottimi di Pareto (POS) Si definisce Insieme degli ottimi di Pareto (Pareto Optimal Set), l’insieme delle soluzioni ottime (PO) in X, cioè formalmente: { } POS = x * ∈ X : x * è PO Frontiera efficiente di Pareto (POF) Si definisce Frontiera efficiente di Pareto o Fronte di Pareto (Pareto Optimal Front) l’immagine del POS attraverso F, cioè formalmente: { POF = F(x * ) ∈ Z : x * ∈ POS } Una rappresentazione grafica degli insiemi POS e POF è illustrata in fig. 3.4 con un tipico esempio; come si può osservare il Fronte di Pareto è facilmente rappresentabile quando le funzioni obiettivo sono 2, diventa più complesso quando sono 3, e diventa impossibile per problemi con più di 3 funzioni obiettivo. Fig. 3.4 55 Definiamo ora tre punti notevoli, nello spazio degli obiettivi, che forniscono alcune informazioni preliminari sulla topologia dell’insieme Z. Punto Utopia Definiamo Punto Utopia il vettore avente per componenti i valori minimi di ogni funzione obiettivo presa singolarmente, cioè: U = min Fi x∈X i = 1: M Abbiamo, cioè, in qualche modo formalizzato il concetto di vettore ideale introdotto all’inizio del paragrafo. Punto Distopia Definiamo Punto Distopia il vettore avente per componenti i valori massimi di ogni funzione obiettivo presa singolarmente, cioè: D = max Fi x∈X i = 1: M Punto Nadir Definiamo Punto Nadir il vettore avente per componenti i valori estremi del POF. I punti Utopia U, Distopia D e Nadir R sono rappresentati in un esempio schematico in fig. 3.5. Essi sono di fondamentale importanza per poter tracciare una prima approssimazione del Fronte di Pareto. 56 Fig. 3.4 Mostreremo ora schematicamente le più importanti tipologie di Fronti di Pareto che si possono incontrare analizzando problemi reali. Generalizzando possiamo dire che un Fronte di Pareto può essere scritto come funzione di una fitness in funzione delle rimanenti fitness,cioè: FK POF = POF ( F1 , K , FK −1 ) (3.1) Solo in alcuni rari casi la (3.1) può essere scritta in forma chiusa. Problema convesso Un problema multiobiettivo è definito convesso se e solo se tutte le funzioni obiettivo sono convesse. E’ definito non-convesso se e solo se almeno una funzione obiettivo è non-convessa. Per un problema convesso si verifica che la (3.1) è una funzione convessa. In fig. 3.5 è riportato un esempio di problema convesso. 57 Fig. 3.5 Problema discontinuo Un problema multiobiettivo è definito discontinuo se e solo se la (3.1) è discontinua. In fig. 3.6 è riportato un esempio schematico di problema discontinuo. Fig. 3.6 Problema apparente Sia S X un campionamento random dell’insieme X e consideriamo S Z = F ( S X ) come un campionamento di Z. Allora, un problema multiobiettivo è detto apparente (deceptive) se e solo se S Z è non uniforme in corrispondenza di S X uniforme. 58 Se il Fronte di Pareto si trova in una regione di S Z a densità non uniforme, allora anche il Fronte di Pareto è detto apparente. Vedi fig. 3.7. Fig. 3.7 Dal grafico osserviamo come il Fronte di Pareto tenda a convergere verso la regione a densità più elevata. Problema multimodale Un problema multiobiettivo è definito multimodale se e solo se esistono più Fronti di Pareto locali. Una situazione del genere può verificarsi quando vengono considerati dei punti campionati in modo random ma uniformemente distribuiti nel dominio dello spazio di ricerca; se i corrispondenti punti nello spazio degli obiettivi vengono plottati, possiamo trovarci di fronte ad una situazione come quella descritta in fig. 3.8. In sostanza un problema multimodale è l’estensione all’ottimizzazione multiobiettivo del concetto di molteplicità di minimi nell’ottimizzazione mono-obiettivo. 59 Fig. 3.8 Casi particolari Analizzando tutte le definizioni e i concetti riportati appare chiaro come le caratteristiche geometriche del fronte di Pareto dipendono fortemente dalla morfologia sia dello spazio degli obiettivi che dello spazio delle variabili di decisione. Ad esempio, se lo spazio degli obiettivi è bidimensionale allora l’immagine della regione ammissibile sarà presumibilmente una superficie piana: in questo caso, essendo il fronte di Pareto per definizione un sottospazio dell’immagine Z della regione ammissibile, ci troveremmo in presenza di una classica frontiera curvilinea. Analogamente, nel caso di spazio degli obiettivi tridimensionale, avremmo una immagine Z anch’essa presumibilmente con caratteristiche tridimensionali e di conseguenza il fronte di Pareto sarebbe rappresentato da una superficie limite di tale volume. Analizziamo adesso quello che accade nel caso di una sola variabile di decisione ed ipotizziamo, ad esempio, un problema con due funzioni obiettivo: in tal caso, essendo la regione ammissibile X ⊂ ℜ , avremo una immagine Z con caratteristiche geometriche non più di superficie chiusa ma di curva. E’ evidente, pertanto, che ricavare un fronte di Pareto da una curva potrebbe risultare banale in quanto se tale curva fosse convessa avremmo probabilmente la perfetta coincidenza tra immagine Z e fronte di Pareto. Queste considerazioni si applicano però solo a casi particolari, e non in generale: se infatti la curva rappresentativa dell’immagine Z fosse non convessa, il fronte di Pareto consisterebbe solo nella parte non dominata di tale curva, dando luogo ad esempio ad un fronte discontinuo come quello illustrato in fig. 3.6 60 3.3 Metodi classici di soluzione Generare le soluzioni ottime secondo Pareto costituisce una parte essenziale della risoluzione di un problema multiobiettivo. Nel seguito considereremo un problema in cui X è definito da vincoli di disuguaglianza, cioè: min F(x) (P) g(x) ≤ 0 ove F : R n → R k , k ≥ 2 e g : R n → R m sono funzioni continuamente differenziabili ed X assume la seguente struttura: { } X = x ∈ ℜ n : g(x) ≤ 0 Matematicamente parlando, il problema (P) si considera risolto una volta che sia stato individuato l’insieme degli ottimi di Pareto. Spesso, però, è necessario ordinare tutte le soluzioni trovate e quindi selezionare la migliore rispetto a tale ordinamento. Per questo motivo abbiamo bisogno di un decisore cioè di qualcuno che ci dica, in base alle sue preferenze, come ordinare l’insieme degli ottimi di Pareto del problema (P). In base al ruolo svolto dal decisore nella strategia di soluzione del problema, i metodi risolutivi classici vengono spesso suddivisi in quattro categorie: • Metodi senza preferenze , nei quali il decisore non ha nessun ruolo e si considera soddisfacente l’aver trovato un qualunque ottimo di Pareto. • Metodi a posteriori , nei quali si genera l’insieme di tutti gli ottimi di Pareto e poi lo si presenta al decisore che sceglie la soluzione per lui migliore. • Metodi a priori , nei quali il decisore specifica le sue preferenze prima che abbia inizio il processo risolutivo. In base alle informazioni avute dal decisore viene direttamente trovata la soluzione ottima migliore, senza dover dunque generare tutti gli ottimi di Pareto. • Metodi interattivi , nei quali il decisore specifica le sue preferenze mano a mano che l’algoritmo procede, guidando in tal modo il processo risolutivo verso la soluzione per lui più soddisfacente. 61 Al di là di questa distinzione, tutti i metodi classici di soluzione si basano sulla medesima idea di fondo, ovvero quella di trasformare il problema originario in uno con una sola funzione obiettivo. La tecnica mediante la quale si ottiene il problema monoobiettivo a partire dal problema multi-obiettivo (P) è nota come scalarizzazione. Sebbene questa tecnica sia di facile implementazione essa presenta una serie di svantaggi, primo fra tutti il fatto di restituire una sola soluzione ipotizzata ottimale. Il primo problema è costituito dal fatto che non è sempre chiaro dove sia collocata questa soluzione rispetto al Fronte di Pareto effettivo, ed in alcuni casi questa soluzione può risultare essere addirittura una soluzione dominata. Una seconda osservazione, ancora più importante, è che con la scalarizzazione viene in qualche modo travisata la filosofia stessa di un problema multiobiettivo, in quanto quest’ultimo presenta una certa varietà di soluzioni che sono distribuite sul Fronte di Pareto. Conoscere questa varietà di soluzioni risulta estremamente utile per un progettista in quanto si ha una scelta molto ampia a disposizione. Per ottenere questa varietà di soluzioni si potrebbe pensare di risolvere svariati problemi mono-obiettivo con diverse funzioni scalarizzate senza introdurre assolutamente il concetto Pareto-ottimo. Questo modo di procedere potrebbe funzionare per certe formulazioni in alcuni casi particolari, ma è concettualmente sbagliato e spesso porta a ottenere soluzioni dominate o comunque non uniformemente distribuite sul Fronte di Pareto. Per questi motivi la formulazione Pareto-ottima del problema multiobiettivo, in cui non vengono considerate scalarizzazioni ed in cui tutti gli obiettivi in contrasto vengono tenuti separati, costituisce un metodo sicuramente più valido e affidabile di soluzione. In fig. 3.9 è illustrato schematicamente il diverso approccio dei due metodi. 62 Fig.3.9 Gli algoritmi prettamente multiobiettivo attualmente più utilizzati sono i cosiddetti MOEA (Multiobjective optimization evolutionary algorithm) su cui verrà fatta un’ampia panoramica nel paragrafo 3.4. Nei prossimi sotto-paragrafi, invece, verranno analizzati i metodi classici più importanti con cenni alle loro proprietà notevoli. Per le dimostrazioni analitiche si rimanda a [11]. 3.3.1 Metodi senza preferenze Nei metodi senza preferenze ci si accontenta di generare una soluzione ottima di Pareto, qualunque essa sia, senza tenere in considerazione le indicazioni del decisore. Metodo GOAL Questo metodo cerca la soluzione che minimizza, nello spazio degli obiettivi, la distanza tra la regione ammissibile Z e un qualunque punto di riferimento z ref ∉ Z = F( X ) . Il vettore di riferimento sarà costituito dai valori auspicabili per le singole funzioni obiettivo. In particolare una possibile scelta è z ref = z id . Il problema che otteniamo è perciò il seguente: 63 min F(x) − z id p (Pp) g ( x) ≤ 0 ove ⋅ p indica la norma p di un vettore (1 ≤ p ≤ ∞) . In particolare se p = ∞ , il problema (Pp) è noto come problema di Tchebycheff. Supponiamo di conoscere il vettore ideale globale degli obiettivi. Sotto tali ipotesi il problema (Pp) ammette sempre soluzione. Inoltre ogni soluzione globale del problema (Pp) (con 1 ≤ p < ∞ ) è un ottimo globale di Pareto per il problema (P). In relazione ai minimi locali, poi, è possibile dimostrare che ogni ottimo locale del problema (Pp) (con 1 ≤ p < ∞ ) è un ottimo locale di Pareto per il problema (P). Infine, nel caso in cui p = ∞ si verifica che ogni ottimo locale (globale) del problema di Tchebycheff è un ottimo locale (globale) debole di Pareto del problema (P). Inoltre il problema di Tchebycheff ha sempre almeno una soluzione che è ottima secondo Pareto. 3.3.2 Metodi a posteriori In questi metodi, le preferenze del decisore vengono considerate solo al termine del processo risolutivo. Analizzeremo i 2 metodi principali che fanno parte di questa categoria: il metodo dei pesi ed il metodo degli ε-vincoli. In entrambi la difficoltà principale consiste nella scelta dei parametri, cioè dei pesi nel primo e degli upper bound nel secondo. Metodo dei pesi Consideriamo il seguente problema: k min ∑ wi Fi (x) i =1 g ( x) ≤ 0 ove w ∈ ℜ + e i coefficienti wi si intendono normalizzati cioè tali che: k 64 (Pw) k ∑w i =1 i =1 Si dimostra che ogni soluzione locale (globale) del problema (Pw) è un ottimo debole locale (globale) di Pareto per il problema (P). Inoltre se il problema (Pw) ammette una unica soluzione allora essa è un ottimo di Pareto per il problema (P). Infine si può dimostrare che nel caso in cui il problema analizzato (P) sia convesso e x * un suo ottimo di Pareto allora esisteranno sicuramente dei pesi normalizzati w ∈ ℜ + tali che x * sarà soluzione anche del problema (Pw). k Metodo degli ε-vincoli Questo metodo consiste nel selezionare una funzione obiettivo Fl (x) tra gli obiettivi di (P) e trasformare poi tutte le altre k-1 funzioni Fi (x) (con i = 1,..., k ; i ≠ l ) in vincoli, imponendo degli upper bound sui loro valori. Il problema può essere così formalizzato: min Fl (x) Fi (x) ≤ ε i (Pε) ∀i = 1,..., k i ≠ l g ( x) ≤ 0 ove l ∈ {1,..., k } Si verifica che ogni soluzione di (Pε) è un ottimo debole secondo Pareto per il problema (P). Inoltre si puo dimostrare che un vettore x * ∈ X è ottimo secondo Pareto di (P) se e solo se esso è soluzione di (Pε) per ogni scelta di l ∈ {1,..., k } ed essendo ε i = Fi (x * ) con i ≠ l . Infine se il punto x * ∈ X è l’unica soluzione del problema (Pε) per qualche l ∈ {1,..., k } e con ε j = F j (x * ) per ogni j ≠ l allora esso è Pareto ottimo per il problema (P). 65 3.3.3 Metodi a priori Nei metodi a priori è il decisore a fornire le indicazioni prima che il processo risolutivo abbia inizio. Presentiamo 2 metodi: il metodo della Utility function e il metodo dell’ordinamento lessicografico. Metodo della “Utility function” Il decisore specifica l’espressione analitica di una funzione di utilità degli obiettivi U (z) . Formalizzando: min U (F(x)) (PU) g (x) ≤ 0 Notiamo che se la U (z) fosse una funzione lineare otterremo nuovamente il problema del metodo dei pesi. Mentre però il metodo dei pesi è un metodo a posteriori, in cui si vogliono generare tutte le soluzioni di Pareto (cambiando di volta in volta i pesi wi ), il metodo della utility function è un metodo a priori, in cui cioè il decisore ci comunica le sue preferenze imponendo le “utilità” relative delle funzioni obiettivo. Ovviamente la funzione U (z ) , nel caso generale, potrebbe essere non lineare. Metodo dell’ordinamento lessicografico In questo metodo il decisore ordina le funzioni obiettivo in base alla loro importanza. Successivamente il processo risolutivo inizia con la minimizzazione della prima funzione obiettivo sull’insieme ammissibile originario X, cioè si risolve il problema: min F1 (x) (P1) g ( x) ≤ 0 Se il problema (P1) ha un’unica soluzione allora questa è anche soluzione di (P) e l’algoritmo termina. Altrimenti si minimizza la seconda funzione obiettivo in base all’ordine definito inizialmente. Questa volta però oltre ai vincoli originari, si aggiunge 66 un ulteriore vincolo il cui scopo è quello di garantire che all’ottimo non peggiori il valore della prima funzione obiettivo. Formalizzando: min F2 (x) (P2) F1 (x) ≤ F1 (x 1 ) * g ( x) ≤ 0 * ove x 1 è la soluzione di (P1). Se (P2) ha un’unica soluzione ci si ferma, altrimenti si procede come prima, selezionando la successiva funzione obiettivo nell’ordinamento assegnato dal decisore. Al generico passo h ≤ k avremo il seguente problema: min Fh (x) (Ph) Fi (x) ≤ Fi (x h −1 ) * i = 1,2,..., h − 1 g ( x) ≤ 0 * ove x i è una soluzione del problema (Pi) Si dimostra che ogni soluzione ottenuta con questo metodo è ottima secondo Pareto per il problema (P). 3.3.4 Metodi interattivi Lo schema generale di un metodo interattivo è il seguente: 1. Trova una soluzione ammissibile iniziale. 2. Presenta la soluzione al decisore. 3. Se la soluzione trovata va bene allora STOP, altrimenti sulla base delle indicazioni ottenute, trova una nuova soluzione e torna al punto (2). 67 Metodo STEP Supponiamo che in un punto ottimo secondo Pareto il decisore sappia indicare quali funzioni obiettivo hanno un valore accettabile e quali no. Supponiamo inoltre che tutte le funzioni obiettivo siano limitate sulla regione ammissibile. Ad ogni iterazione del metodo un ottimo di Pareto viene presentato al decisore che sulla base delle sue conoscenze e dei valori delle funzioni obiettivo nel punto corrente, specifica le funzioni obiettivo per le quali è accettabile un aumento del valore al fine di poter ulteriormente ridurre i valori delle restanti funzioni. In sostanza, l’insieme degli indici J = {1,2,..., k } viene partizionato, ad ogni iterazione, in due sottoinsiemi: 1. J < , l’insieme degli indici delle funzioni obiettivo i cui valori sono insoddisfacenti per il decisore 2. J > , l’insieme dei restanti indici Se J < risulta ad un certo punto vuoto allora l’algoritmo si ferma avendo trovato l’ottimo di Pareto che meglio soddisfa il decisore. Altrimenti si chiede al decisore di specificare dei bounds ε i sulle funzioni obiettivo con indici in J > e quindi si risolve il problema: 1 id min ∑ Fi (x) − z i i∈J < p p Fi (x) ≤ ε i i ∈ J> Fi (x) ≤ Fi (x * ) i ∈ J< g ( x) ≤ 0 ove 1 ≤ p < ∞ e x * e l’ottimo di Pareto trovato nella iterazione precedente. Notiamo che l’algoritmo si deve fermare, al fine di evitare problemi di ciclaggio, anche quando è vuoto l’insieme J > cioè quando tutte le funzioni obiettivo hanno valori insoddisfacenti. 68 3.4 Algoritmi multiobiettivo evolutivi Il potenziale reale degli algoritmi evolutivi nel risolvere problemi di ottimizzazione multiobiettivo fu intuito per la prima volta sul finire degli anni ’60 da Rosenberg. Egli introdusse l’uso di proprietà multiple, nelle sue simulazioni di chimica e genetica, riguardo la popolazione di organismi mono-cellulari. La prima implementazione moderna di ciò che oggi è chiamato algoritmo multiobiettivo evolutivo (MOEA – Multiobjective optimization evolutionary algorithm) è accreditata a David Schaffer che propose il VEGA (Vector Evaluation Genetic Algorithm) nel 1984. I lavori di Schaffer vennero presentati alla Prima Conferenza Internazionale sugli Algoritmi Genetici e il test che presentò (un semplice problema a due obiettivi non vincolato) divenne il banco di prova ufficiale per molti algoritmi negli anni successivi. Gli algoritmi evolutivi sono estremamente efficaci nel risolvere problemi multiobiettivo perché essi riescono a gestire simultaneamente in insieme nutrito di soluzioni (la cosiddetta popolazione). Questa peculiarità permette agli algoritmi di trovare un consistente numero di punti Pareto-ottimi in una sola esecuzione, invece di dover eseguire una serie innumerevole di volte algoritmi che fanno uso delle classiche formulazioni precedentemente viste. Inoltre gli algoritmi evolutivi sono poco influenzati dalla forma e continuità del fronte di Pareto da ricercare e pertanto possono essere utilizzati con successo anche in presenza di fronti discontinui e/o concavi. Un MOEA è caratterizzato evidentemente dal fatto di implementare una molteplicità di funzioni da dover ottimizzare contemporaneamente. D’altra parte una decomposizione rigorosa dei passi mostra una leggera differenza tra un generico algoritmo evolutivo mono-obiettivo e uno multi-obiettivo. Le fig. 3.10 e 3.11 mostrano rispettivamente le decomposizioni sequenziali per un generico algoritmo evolutivo e per un algoritmo evolutivo multiobiettivo. La differenza maggiore consiste nel fatto che il MOEA, dovendo ricevere un singolo valore di fitness su cui operare la selezione, necessita di un “task” aggiuntivo per effettuare la conversione della fitness vettoriale in scalare. 69 Fig. 3.10 Fig. 3.11 Gli algoritmi MOEA hanno dimostrato negli anni una straordinaria efficacia nel risolvere problemi di ottimizzazione nei più disparati campi di applicazione. Infatti, come si puo osservare dal grafico in fig. 3.12 (aggiornato ai primi mesi del 2007), la comunità scientifica ha prodotto pubblicazioni in numero crescente soprattutto a partire da metà degli anni ’90, testimoniando così un interesse sempre più vivo nei confronti di questa metodologia. A differenza degli algoritmi basati su logica deterministica che richiedono una certa conoscenza del dominio di applicazione e che spesso puntano a minimi locali, gli algoritmi evolutivi essendo di natura stocastica permettono in genere una mappatura completa del dominio di lavoro sfuggendo ai minimi locali. Esistono comunque studi, come [14] che testimoniano un uso efficace di metodologie ibride di ottimizzazione. In questa pubblicazione viene proposto un metodo in cui un algoritmo su base evolutiva come l’ NSESA viene combinato con un algoritmo deterministico denominato PGBA. Viene dimostrato in questo modo che le 70 chiamate a funzione diminuiscono notevolmente rispetto ad un algoritmo evolutivo “puro” ma contemporaneamente i risultati si mantengono su approssimazioni più che soddisfacenti. Fig. 3.12 Osservazioni sulle notazioni Durante l’esecuzione di un algoritmo MOEA, ad ogni generazione, viene determinato un insieme corrente di soluzioni Pareto-ottime che chiameremo Pcurrent(t), dove t rappresenta il numero progressivo della generazione. Molte implementazioni di MOEA, inoltre, presentano anche una popolazione secondaria memorizzata di soluzioni non dominate, chiamata Pknown(t). Durante l’esecuzione dell’algoritmo, periodicamente, queste soluzioni vengono controllate e se risultano dominate allora vengono eliminate. Evidentemente Pknown(0) risulta vuoto e Pknown(t) nello stadio finale rappresenta la soluzione restituita dall’algoritmo. Ovviamente il vero Fronte di Pareto Ptrue(t) è fissato e non esplicitamente noto dato che esso è definito solo implicitamente dal problema di ottimizzazione. 71 Evidentemente Pcurrent(t), Pknown(t) e Ptrue(t) sono insiemi di genotipi; ad ognuno di questi insiemi corrisponde un insieme di fenotipi che formano il Fronte di Pareto (attuale, memorizzato o reale). Questi insiemi vengono chiamati PFcurrent(t), PFknown(t) e PFtrue(t). 3.4.1 Tecniche di implementazione degli algoritmi MOEA Esistono vari modi per classificare un MOEA. Quello che adottiamo è basato sul meccanismo di selezione adottato: • Aggregazione di funzioni • Approccio population-based • Approccio Pareto-based 3.4.1.1 Aggregazione di funzioni Questo metodo estremamente semplice consiste nel combinare le funzioni obiettivo per formare una sola funzione. Formalmente: k min ∑ wi Fi (x ) , i =1 k ∑w i =1 i wi ≥ 0 =1 La funzione di aggregazione usualmente è lineare ma potrebbe anche non esserlo. Questo tipo di tecnica, come discusso ampiamente nei paragrafi precedenti, è stato praticamente accantonato in quanto l’aggregazione lineare porta in conto una serie di svantaggi soprattutto quando si tenta di calcolare fronti non convessi. Solo l’utilizzo di alcune tecniche di aggregazione non lineare è sopravvissuto, sebbene in particolarissimi campi di applicazione. 72 3.4.1.2 Approccio population-based In questo tipo di approccio, la popolazione di un algoritmo evolutivo è usata per diversificare la ricerca, ma il concetto di dominazione secondo Pareto non è direttamente incorporato nel processo di selezione. Un esempio classico di questo tipo di approccio e il VEGA (Vector Evaluated Genetic Algorithm) proposto da Schaffer. Il VEGA consiste praticamente di un semplice algoritmo genetico con un meccanismo di selezione modificato. Ad ogni generazione, vengono generati un certo numero di sotto-popolazioni in base a meccanismi fitness-proportionate (ampiamente discussi nel paragrafo 2.5.2). Quindi assumendo una popolazione totale di dimensione M e un numero k di funzioni obiettivo, si ha la generazione di k sotto-popolazioni di M/k individui. Queste sotto-popolazioni sono poi mixate per ottenere una nuova popolazione di dimensione M sulla quale l’algoritmo genetico eseguirà le classiche operazioni di mutazione e crossover. Il VEGA presenta diversi problemi, tra i quali soprattutto quello di presentare un meccanismo di selezione non fedele al concetto di Pareto-dominazione. Per esempio, se un individuo presenta un buon compromesso tra le funzioni obiettivo (o addirittura è Pareto-ottimo) ma non è il migliore in assoluto per nessuna delle fitness, allora esso viene scartato. Schaffer propose un metodo euristico per preservare soprattutto questa tipologia di individui ma il fatto che questo algoritmo non incorpori una tecnica di selezione in base alla dominazione rimane un grosso svantaggio per questa metodologia. Nonostante questo tipo di problemi, il VEGA è ancora oggi usato da molti ricercatori in quanto risulta piuttosto affidabile quando il numero di funzioni obiettivi è molto elevato. 3.4.1.3 Approccio Pareto-based A questa categoria appartengono tutti gli algoritmi che incorporano il concetto di Pareto-ottimalità nel loro meccanismo di selezione. L’idea di utilizzare un approccio Pareto-based venne introdotta da Goldberg per risolvere i problemi proposti da Schaffer. Egli suggerì l’utilizzo di una classificazione (ranking) e di una selezione basati sul concetto di non-dominazione per orientare la popolazione verso il fronte di Pareto. 73 L’idea di base è quella di cercare all’interno della popolazione iniziale degli individui non dominati e assegnargli un alto valore di rank. Successivamente questi individui vengono eliminati e si ripropone la stessa analisi per la popolazione rimanente. Il processo continua fino a che tutta la popolazione non viene “classificata”, come mostrato in fig. 3.13. Fig. 3.13 L’idea di fondo è che tutti gli individui non dominati appartenenti ad uno stesso rank hanno la stessa probabilità di riprodursi, sicuramente più elevata degli individui dominati da questi ultimi. In effetti esistono vari modi per implementare questo ranking, tra cui: • Il dominance ranking (fig. 3.14), in cui ad ogni individuo è assegnato un valore pari al numero di individui da cui viene dominato più uno. • Il dominance count (fig. 3.15), in cui ad ogni individuo è assegnato un valore pari al numero di individui dominati. 74 Fig 3.14 Fig. 3.15 75 Il problema di mantenere una certa “diversità” tra gli individui della popolazione è stato spesso affrontato da molti ricercatori. Per questo motivo sono state individuate tecniche di niching (segmentazione) e soprattutto di fitness sharing. Quest’ultima, in particolare, permette di evitare che l’algoritmo converga verso un solo punto dello spazio degli obiettivi, permettendo agli individui di “occupare” tutto il fronte di Pareto. (Vedi fig. 3.16). Fig. 3.16 Negli ultimi anni è stato intensificato anche l’uso di schemi elitistici, cioè di tecniche atte a preservare gli individui migliori in modo deterministico. In pratica viene utilizzata una sorta di archivio esterno (denominato seconda popolazione) che 76 interagisce in qualche modo con la popolazione principale, in modo da migliorare anche la distribuzione delle soluzioni. In alternativa, alcuni algoritmi usano una plus selection (+) mediante la quale gli individui genitori sono “mescolati” ai figli formando una nuova popolazione da cui verranno trattenuti solo gli individui migliori. Il principale problema di questi metodi consiste nell’alto onere computazionale, generalemente O(kM 2 ) con k numero degli obiettivi ed M grandezza della popolazione, che ne pregiudica l’utilizzo quando questi due parametri assumono valori molto alti. Il più famoso di questi algoritmi è l’ NSGA-II (Nondominated sorting genetic algorithm) di cui si discuterà ampiamente nel quarto capitolo. 3.4.2 Struttura degli algoritmi MOEA Il progetto di un algoritmo MOEA (in particolare di algoritmi Pareto-based, che sono tra quelli più utilizzati) prevede l’individuazione di 4 obiettivi fondamentali: 1. Preservare i punti non dominati. 2. Far convergere PFknown verso PFtrue. 3. Generare e mantenere diversità tra i punti di PFknown (fenotipi) e tra i punti di Pknown (genotipi). 4. Fornire al decisore un numero limitato di punti di PFknown. Alla luce di questi requisiti, possiamo elencare le operazioni generiche di un qualunque algoritmo MOEA, il cui pseudo codice è illustrato in fig. 3.17 : • Uno step iniziale genera N individui in una popolazione P e ne valuta la fitness. I geni degli individui vengono codificati in base al tipo di problema con valori binari, interi o reali. • Vengono rimossi gli individui dominati dall’insieme P in base alle valutazioni di scalarizzazioni del problema multiobiettivo. P → P I . • Si utilizza uno stimatore di densità per limitare il numero di individui in P I che sono locati in piccole zone degli attuali PFknown e Pknown. Le 77 tecniche utilizzate sono quelle di niching, sharing e crowding con relativi parametri. La rarefazione di queste “nicchie” comporta un notevole miglioramento del costo computazionale. • Vengono eseguite le operazioni evolutive (ricombinazione, mutazione, ecc.) per generare nuovi individui usando appropriati valori dei parametri specifici; P I → P II . Per la ricombinazione, gli individui possono essere selezionati in vario modo come ad esempio con una tournament-selection o una proportional-selection. • Si selezionano gli individui per la prossima generazione (popolazione [ ] [ ] P III ) agendo su P II o su P I ∪ P II . P III è evidentemente Pcurrent. Per limitare la dimensione di P III si possono usare varie tecniche, tra cui l’elitismo che sperimentalmente genera i migliori risultati dato che trattiene gli individui migliori. • Se non viene raggiunta una condizione di terminazione, come un raggiunto numero massimo di generazioni o un qualche criterio di convergenza, si pone P III = P come Pcurrent. • Vengono rimossi gli individui dominati o non ammissibili da P III . • Viene trattenuto un archivio di individui non dominati e ammissibili memorizzando P III in un archivio P IV . Successivamente i criteri di non dominazione vengono applicati all’unione dell’archivio con la nuova popolazione P III . L’archivio P IV contiene Pknown e l’associato PFknown. • Operazioni di ricerca locale implementati in alcuni MOEA ibridi possono migliorare le performance difficilmente accessibili normalmente. 78 esplorando regioni limite Fig. 3.17 Elenchiamo di seguito le strutture di vari MOEA. 3.4.2.1 Multi-objective Genetic Algorithm (MOGA) C.M. Fonseca e P.J. Fleming proposero una variazione della tecnica di Goldberg chiamata “Multi-objective Genetic Algorithm (MOGA)” in cui il rank di un dato individuo equivale al numero di cromosomi nell’attuale popolazione dai quali è dominato. Consideriamo, per esempio, un individuo x i alla generazione t dominato da pi (t ) individui nell’attuale generazione; allora ad un individuo viene assegnato un rank con la seguente regola rank (x i , t ) = 1 + pi . L’algoritmo formale in pseudo-codice è (t ) mostrato in fig. 3.18. In questo contesto N ' rappresenta la dimensione della popolazione, g il numero di generazioni richieste, f j (x k ) è la j-esima funzione obiettivo, x k è il k-esimo individuo e P ' la popolazione. A tutti gli individui non dominati viene assegnato rank 1, mentre quelli dominati subiscono un rank penalizzato in funzione della densità di popolazione della corrispondente regione di trade-off. 79 Il valore di fitness viene assegnato in questo modo: 1. Viene ordinata la popolazione in base al rank. 2. Viene assegnata la fitness agli individui tramite interpolazione tra i migliori e i peggiori rank. 3. Si calcola la media delle fitness di individui nello stesso rank in modo che tutti vengano campionati con la stessa frequenza. Questa procedura mantiene costante la fitness globale della popolazione mentre viene esercitata un’adeguata “ pressione” di selezione. Una prima controindicazione di questa tecnica è rappresentata da una frequente convergenza prematura. Per evitare questo, Fonseca e Fleming hanno proposto un metodo per distribuire la popolazione sulla regione Pareto–ottima, applicando una tecnica di sharing direttamente ai valori della funzione obiettivo. Fig. 3.18 80 3.4.2.2 Nondominated Sorting Genetic Algorithm (NSGA) N. Srinivas e K. Deb proposero un’altra variazione dell’approccio di Goldberg chiamato “ Nondominated Sorting Genetic Algorithm ( NSGA)”. L’ NSGA rappresenta un’altra variazione della procedura di ranking originaria proposta da Goldberg. Lo pseudo-codice è illustrato in fig. 3. 19. Questo algoritmo è basato su diversi livelli di classificazione degli individui. Prima che la selezione venga eseguita, la popolazione viene classificata in base alla non-dominazione: tutti gli individui non dominati vengono classificati in un’unica categoria (con un fittizio valore di fitness, proporzionale alla dimensione della popolazione, che fornisce a questi individui un identico potenziale riproduttivo). Per mantenere diversità nella popolazione, questi individui classificati vengono condivisi con i rispettivi valori fittizi di fitness. Successivamente questo gruppo di individui classificati viene ignorato ed un altro livello di individui non dominati viene considerato. Il processo continua fino a quando tutti gli individui della popolazione risultano classificati. Dato che gli individui nel primo fronte hanno il miglior valore di fitness, essi risulteranno sicuramente più riprodotti rispetto al resto della popolazione. Questo meccanismo permette una migliore ricerca del PFknown ed una discreta convergenza della popolazione verso questa regione. Lo sharing, d'altronde, aiuta ad effettuare una efficace distribuzione della popolazione sul fronte di Pareto del problema. Ci si potrebbe attendere che questo algoritmo converga velocemente, mentre in realtà il meccanismo di sharing rappresenta un collo di bottiglia dal punto di vista dell’onere computazionale. L’ NSGA ha avuto un discreto successo per diversi anni sebbene diversi studi comparativi hanno individuato in algoritmi come il MOGA e l’NPGA performance migliori. In particolare l’NSGA ha dovuto scontare una certa inefficienza dovuta al sistema di classificazione degli individui. Deb propose una versione migliorata, chiamata NSGA-II, il cui algoritmo è mostrato in fig.3.20. Questo algoritmo costruisce una popolazione di individui in competizione, classifica e ordina ogni individuo in base al livello di non-dominazione, applica gli operatori evolutivi per creare un nuovo insieme di figli, combina genitori e figli e partiziona quest’ultimo insieme in più fronti. 81 L’ NSGA-II utilizza tecniche di niching (segmentazione) fornendo ad ogni individuo un parametro chiamato crowding distance (distanza di affollamento). Questo parametro misura la distanza di un individuo dai suoi “vicini” e viene utilizzato dall’algoritmo per assicurare una adeguata distribuzione degli individui, in modo da condurre la popolazione ad esplorare adeguatamente tutto lo spazio degli obiettivi. L’ NSGA-II è notoriamente più efficiente del suo predecessore ma sembra avere qualche problema di capacità esplorativa. Sebbene l’algoritmo tenda a distribuirsi velocemente ed in maniera appropriata quando una certa regione non dominata viene trovata, esso ha difficoltà nel generare vettori non dominati che risiedono in certe regioni isolate dello spazio di ricerca Un’approfondita analisi dell’NSGA-II, corredata da una serie di test, verrà effettuata nel IV capitolo. Fig. 3.19 82 Fig. 3.20 3.4.2.3 Niched-Pareto Genetic Algorithm (NPGA) J. Horn propose un MOEA con tournament selection chiamato “ Niched-Pareto Genetic Algorithm (NPGA) “ il cui algoritmo è illustrato in fig. 3.21. Due individui, scelti a caso, vengono comparati ad un sotto-insieme dell’intera popolazione (tipicamente il 10%). Se uno dei due individui risulta dominato (dagli individui del sottoinsieme) e l’altro no, allora l’individuo non dominato vince. Nel caso in cui entrambi gli individui risultano dominati (o non-dominati), il risultato del torneo viene deciso attraverso tecniche di fitness sharing. Horn suggerì una forma di fitness sharing nel dominio degli obiettivi chiamato equivalent class sharing. Successivamente Erickson propose l’NPGA-II, il cui pseudo codice è mostrato in fig. 3.22, che a differenza del suo predecessore utilizzava tecniche di Pareto-ranking. 83 Fig. 3.21 Fig. 3.22 84 3.4.2.4 Pareto Archived Evolution Strategy (PAES) Il PAES fu progettato e implementato da J.D. Knowles e D.W. Corne. In fig. 3.23 è illustrato l’algoritmo di base. Il PAES consiste essenzialmente in un (1+1)ES in combinazione con un “archivio storico” che registra alcune delle soluzioni non dominate precedentemente trovate. Questo archivio è usato come insieme di riferimento con il quale ogni individuo mutato viene comparato. Il PAES usa un sistema per mantenere diversità basato su una procedura di crowding che divide in maniera ricorsiva lo spazio degli obiettivi. Ogni soluzione è posizionata in un certo punto di una griglia la cui locazione riflette i valori delle funzioni obiettivo (utilizzate quindi come coordinate). Successivamente viene effettuata e poi registrata una mappatura di questa griglia, indicando il numero di soluzioni che risiedono in ogni sua cella. Dato che la procedura è adattiva, non sono richiesti ulteriori parametri (ad eccezione del numero di divisioni dello spazio degli obiettivi). Come conseguenza questa procedura risulta avere una bassa complessità computazionale, anche se presenta difficoltà nell’esaminare fronti discontinui. Fig. 3.23 85 3.4.2.5 Strength Pareto Evolutionary Algorithm (SPEA) Lo SPEA fu introdotto da E. Zitzler e L. Thiele. Questo algoritmo, illustrato in fig. 3.24, fu concepito come una integrazione di diversi MOEA. Lo SPEA utilizza un archivio esterno contenente soluzioni non dominate precedentemente trovate. Ad ogni generazione gli individui non dominati vengono copiati nell’archivio esterno. Ad ogni individuo in questo insieme esterno viene associato un coefficiente di intensità, proporzionale al numero di soluzioni che questo individuo domina. Nello SPEA la fitness di ogni membro dell’attuale popolazione è calcolata in base al valore dei coefficienti di intensità di tutte le soluzioni non dominate esterne da cui è dominato. Il processo di assegnazione della fitness considera sia la vicinanza al vero fronte di Pareto, sia la distribuzione delle soluzioni in un dato istante. Pertanto viene utilizzato il concetto di Pareto-dominazione per realizzare una giusta distribuzione delle soluzioni sul fronte di Pareto. L’efficacia di questa tecnica dipende molto dalla dimensione dell’archivio esterno. Infatti, dato che quest’ultimo partecipa al processo di selezione, se la sua dimensione cresce troppo esso riduce la pressione della selezione danneggiando la ricerca. Per evitare l’insorgere di questi problemi, gli autori proposero una tecnica di clustering chiamata average linkage method ottenendo come risultato un sostanziale contenimento delle dimensioni dell’archivio entro una certa soglia. Esiste anche una versione modificata dello SPEA (chiamata SPEA 2 e illustrata in fig. 3.25). Questa versione differisce dalla principale per tre motivi: • Incorpora una raffinata strategia per l’assegnazione della fitness che tiene conto per ogni individuo del numero di individui che lo dominano e del numero di individui che esso domina. • Usa uno stimatore di affollamento che guida la ricerca in maniera più efficace. • Presenta un metodo efficace per limitare la dimensione dell’archivio che garantisce la sopravvivenza delle soluzioni di frontiera. 86 Lo SPEA II e l’ NSGA-II sono due tra i più importanti MOEA usati per la comparazione di nuovi algoritmi. Fig. 3.24 Fig. 3.25 87 3.4.2.6 Multi-objective Messy Genetic Algorithm (MOMGA) Il MOMGA (il cui algoritmo di base è mostrato in fig. 3.26) fu proposto da D.A. Van Veldhuizen e G.B. Lamont. Esso si sviluppa in tre fasi: 1. Fase di inizializzazione. 2. Fase primordiale. 3. Fase di giustapposizione. Nella fase di inizializzazione il MOMGA produce “blocchi“ di grandezza specificata attraverso un processo deterministico. La fase primordiale esegue una tournament selection sulla popolazione riducendone la grandezza se necessario. Nella fase di giustapposizione l’algoritmo genetico esegue la costruzione della popolazione attraverso l’utilizzo di un operatore di ricombinazione. Fig. 3.26 88 3.4.2.7 Pareto Envelope-based Selection Algorithm (PESA) Il PESA (introdotto da Corne) si sviluppa su due popolazioni: una piccola interna e una grande esterna. Una “iper-griglia” nello spazio degli obiettivi viene utilizzata per mantenere diversità nella selezione (insieme ad un parametro di affollamento) durante l’esecuzione dell’algoritmo. Questo parametro viene quindi utilizzato per convogliare le soluzioni migliori nella popolazione esterna, utilizzando un ulteriore archivio di vettori non dominati per effettuare i necessari confronti. In fig. 3.27 è illustrato lo pseudo-codice di questo algoritmo. Fig. 3.27 3.4.2.8 Micro-Genetic Algorithms for Multiobjective Optimization (µGA) L’algoritmo micro-genetico (µGA) fu introdotto da Coello Coello e Toscano Pulido e, per definizione, è caratterizzato dall’utilizzare una piccola popolazione e tecniche di reinizializzazione. Una iniziale popolazione casuale fluisce in una memoria divisa in due parti: una porzione modificabile e una non modificabile. 89 La parte non modificabile permette una certa diversità nella popolazione. La parte modificabile, ovviamente, cambia alla fine di ogni generazione dopo l’azione degli operatori di mutazione e crossover. Attraverso operatori di selezione elitistici, gli individui non dominati vanno a formare la porzione modificabile. Un diagramma di flusso di questo tipo di algoritmo è mostrato in fig. 3.28. Fig. 3.28 90 3.4.2.9 Multi-objective Struggle Genetic Algorithm (MOSGA) Il MOSGA combina un algoritmo genetico di tipo struggle-crowding con uno schema di classificazione Pareto- Based. L’algoritmo ha la stessa configurazione dello struggle, in cui due genitori vengono scelti a caso nella popolazione e normali operatori di crossover e di mutazione agiscono per formare un figlio. Successivamente il figlio entra in competizione con gli individui simili della popolazione. Il figlio va poi a sostituire individui simili se esso presenta un miglior ranking. Il metodo di ranking impiegato è lo stesso di quello adottato nel MOGA. In figura 3. 29 è illustrato l’algoritmo di base. Fig. 3.29 3.4.2.10 Orthogonal Multi-objective Evolutionary Algorithm (OMOEA) L’ OMOEA si basa su una rigida definizione dei vincoli del problema di ottimizzazione. L’algoritmo inizia definendo una singola nicchia nello spazio delle variabili di decisione X. Questa nicchia viene ricorsivamente divisa in gruppi di sottonicchie finchè non viene raggiunto un criterio di stop. Questo partizionamento porta ad una ricerca uniforme. Lo pseudo-codice dell’OMOEA è illustrato in figura 3.30 in cui P ' denota la popolazione globale e ψ denota l’insieme di tutte le sotto-nicchie. In genere questo algoritmo presenta buone performance, anche se gli autori hanno segnalato alcuni deficit: 91 1. Una forte interazione tra le variabili degrada la performance dell’OMOEA sia per la precisione che per la distribuzione dei vettori del PFknown. 2. Al crescere del numero degli obiettivi, il numero delle soluzione aumenta esponenzialmente. Per risolvere questi problemi è stato proposta una modifica (denominata OMOEA-II, il cui pseudo-codice è mostrato in figura 3.30). Questo algoritmo implementa una tecnica per sfruttare l’ottimalità anche in spazi relativamente stretti. Fig. 3.30 92 3.4.2.11 General Multi-objective Evolutionary Algorithm (GENMOP) Il GENMOP è un MOEA generale progettato dal US Air Force Institute of Technology (AFIT). Esso utilizza diversi operatori evolutivi per la selezione. Durante la ricerca, l’algoritmo sceglie gli operatori che fino a quel punto hanno ottenuto risultati migliori, con la supposizione chq questi stessi operatori continueranno a produrre ancora ottimi risultati in futuro. In fig. 3.31 è illustrato l’algoritmo base. Fig. 3.31 3.4.3 Applicazioni degli algoritmi MOEA L’ingegneria è da sempre il più importante campo di applicazione degli algoritmi evolutivi multiobiettivo. Questo è dovuto principalmente al fatto che le applicazioni ingegneristiche normalmente sono corredate di ottimi modelli matematici che possono essere direttamente utilizzati per la ricerca degli ottimi. In particolare, il settore dell’ingegneria elettronica ed elettrica ha conosciuto negli ultimi anni un numero crescente di pubblicazioni di autori di tutto il mondo riguardo l’utilizzo di algoritmi MOEA per la soluzione di vari problemi di ottimizzazione. 93 Analizziamo ora alcuni tra i risultati più importanti raggiunti in tal senso: • Arslan et al. [15,16] usarono un algoritmo genetico con combinazione lineare degli obiettivi per la sintesi strutturale di circuiti VLSI cell-based ottimizzando tre obiettivi: massimizzare la funzionalità, minimizzare il ritardo e minimizzare l’ingombro. In lavori successivi, Bright e Arslan [17,18] usarono il Pareto-ranking per il progetto di sistemi DSP low power minimizzando l’area occupata e la potenza impiegata. I risultati, comparati con alcuni benchmark specifici, hanno dimostrato il raggiungimento di soluzioni qualitativamente comparabili con quelle ottenibili con metodi tradizionali anche se il tempo di convergenza a queste soluzioni è risultato decisamente migliore. • Ramirez Rosado et al. [19,20] hanno utilizzato un algoritmo genetico e la programmazione evolutiva con Pareto-ranking per la pianificazione ottimale di un sistema di distribuzione dell’energia elettrica. Due gli obiettivi considerati: minimizzare il costo e minimizzare la quantità stimata di energia non fornita. L’algoritmo genetico comprendeva una rappresentazione per interi ed un operatore di filtro in grado di eliminare le soluzione che avrebbero portato a risultati troppo costosi. • Nam et al. [21] usarono la programmazione evolutiva con Paretoranking per il progetto di un circuito per la realizzazione di un riferimento di tensione. Gli obiettivi furono: minimizzare la tensione di riferimento a temperatura ambiente e minimizzare gli effetti dovuti alla variazione di tensione. Comparando i risultati con quelli ottenuti con quelli di altri quattro algoritmi mono-obiettivo si è osservato un sostanziale miglioramento delle soluzioni. • Dick e Jha [22] hanno utilizzato il MOGA per una co-sisntesi hardware/software di sistemi embedded minimizzando costo e potenza assorbita. Gli autori hanno usato una rappresentazione a interi per realizzare cluster di soluzioni, operatori a livello cluster (mutazione) e 94 operatori a livello soluzioni (crossover). La riproduzione è ristretta ad individui dello stesso cluster e vengono utilizzati vincoli di tipo hard e vincoli di tipo soft. Se un individuo viola un vincolo hard allora viene eliminato, mentre se viola un vincolo soft esso subisce l’azione di una penalty. • Alotto et al. [23] hanno utilizzato una strategia evolutiva con una combinazione lineare dei pesi per ottimizzare dispositivi elettromagnetici. Gli obiettivi considerati erano quelli di rendere il valore di energia il più vicino possibile a quello di progetto e minimizzare l’errore RMS della densità del flusso. I risultati sono stati comparati con quelli ottenuti mediante un simulated annealing monoobiettivo e un algoritmo di ricerca globale. Da questo confronto è emerso un numero molto basso di chiamate a funzione relativo alla strategia evolutiva ottenendo comunque soluzioni qualitativamente discrete. • Mohammed e Uler [24] hanno effettuato un progetto di dispositivi elettromagnetici tramite un algoritmo genetico con combinazione lineare dei pesi. Il problema, consistente nel ridurre le dimensioni del dispositivo mantenendo una certa densità di flusso magnetico, è stato formulato usando una rappresentazione binaria con codice Gray, e crossover e mutazione entrambi uniformi. I risultati comparati con quelli ottenuti con ricerca dinamica sono risultati competitivi ed in qualche caso migliori. • Saludjian et al. [25] hanno utilizzato un algoritmo genetico con somma pesata lineare per ottimizzare un dispositivo elettromagnetico superconduttivo, con l’obiettivo sia di rendere l’energia immagazzinata nel dispositivo il più possibile vicina ad un valore predefinito, sia minimizzare l’induzione magnetica interna. L’implementazione comprendeva una rappresentazione in virgola mobile, selezione 95 proporzionale con ranking lineare, quattro operatori di cross over e due di mutazione . • Weile et al. [26] hanno utilizzato l’ NSGA [27] per progettare dispositivi elettromagnetici chiamati assorbitori di microonde. Gli obiettivi da ottimizzare erano rappresentati dall’indice di riflessione e dallo spessore. I risultati furono poi comparati con quelli ottenuti tramite combinazione lineare di pesi, evidenziando soluzioni nettamente migliori di queste ultime. In altri lavori Weile et al. [28] hanno usato Pareto–ranking NSGA e NPGA per progettare assorbitori di microonde multi strato con gli stessi obiettivi precedentemente visti. Gli autori hanno osservato, tramite ispezione grafica che i risultati dell’ NSGA sono risultati qualitativamente migliori ma hanno anche osservato che questo algoritmo è risultato essere quello più costoso in termini di onere computazionale. In [30], l’ NSGA è stato anche comparato con un algoritmo di simulated annealing e con una procedura di Tchebycheff. L’NSGA ha prodotto risultati migliori in termini di fronte di Pareto rispetto alle altre due tecniche. • Thompson [33] ha utilizzato il MOGA e simaleted annealing multiobiettivo per il progetto di un’unità di tuning di antenna, minimizzando il disadattamento tra impedenze di sorgente di carico e minimizzando la potenza trasmessa al carico alla frequenza armonica. Tra i vari risultati ottenuti si evidenzia il netto miglioramento del MOGA quando utilizzato con tecniche elitistiche. • Trefzer et al. [34] hanno usato una variazione dell’ NSGA – II (chiamato turtle-GA) per la sintesi di amplificatori operazionali. L’esperimento degli autori consisteva in una combinazione di 11 obiettivi. Dal confronto con amplificatori operazionali progettati in maniera classica è risultato che questi ultimi presentano una migliore distorsione ed un miglior consumo di risorse. Inoltre le performance degli altri obiettivi come Offset e Slew-rate sono risultate equivalenti per le due tecniche mentre i risultati ottenuti tramite il turtle-GA hanno evidenziato che 96 quest’ultimo offre ottime soluzioni in termini di margine di fase, obiettivo considerato primario all’interno di questa ricerca. • Zebulum et al. [35] hanno impiegato un algoritmo genetico con pesi adattativi per la sintesi di amplificatori operazionali a bassa potenza. Gli obiettivi considerati sono: massimizzare GBW, guadagno e margine di fase e minimizzare la potenza assorbita e l’area occupata. I risultati ottenuti erano spesso migliori di quelli ottenuti con altre tecniche. Con la stessa tecnica Zebulum et al. [36] hanno eseguito delle sintesi di filtri attivi analogici. • Harris e Ifeachor [37] hanno utilizzato un algoritmo genetico con Paretoranking per il progetto di filtri FIR non lineari, minimizzando l’errore massimo tra la risposta reale e quella desiderata e minimizzando l’errore di linearità della risposta in fase in una specificata regione della banda passante. Usando una rappresentazione binaria gli autori hanno notato una scarsa performance e hanno suggerito l’uso di cardinalità più elevate. • Schnier et al [38] hanno impiegato una strategia evolutiva ed uno schema di tournament selection simile all’ NPGA per il progetto di filtri digitali.Tre gli obiettivi da minimizzare: massima deviazione dell’ampiezza in banda passante, massima deviazione del ritardo in banda passante e l’inverso della massima ampiezza in banda esclusa. Un interessante aspetto di questo lavoro è che gli autori hanno adottato diversi schemi per la selezione dei genitori e per selezionare individui per la generazione successiva. Nel primo caso è stato utilizzato un dominance-based tournament, mentre nel secondo caso tutti gli individui non dominati generalmente sopravvivono compatibilmente con la grandezza della popolazione. I risultati hanno mostrato la competitività di questa tecnica. • Stanley and Mudge [39] hanno utilizzato un algoritmo genetico con Pareto-ranking per risolvere problemi di progettazione di 97 microprocessori. Il problema è costituito da due vincoli di progetto: area occupata e potenza dissipata, con l’obiettivo di massimizzare la performance (numero di cicli di clock richiesti per eseguire un certo numero di istruzioni). Un interessante aspetto di questa applicazione è il fatto che gli autori hanno considerato i vincoli del problema come ulteriori obiettivi da soddisfare. Gli autori hanno utilizzato crossover a due punti, mutazione uniforme e un meccanismo per eliminare i duplicati. • Di Barba et al. [40] hanno utilizzato una strategia evolutiva multiobiettivo (NSES) per progettare la forma di serie di reattori a singola fase per applicazione di potenza minimizzando il costo del reattore e minimizzando la componente radiale dell’induzione magnetica in una sezione dell’avvolgimento. Gli autori hanno utilizzato un (1+1)ES con implementazione parallela di tre processi: mutazione, procedura di annealing dopo la mutazione e generazione di nuovi individui. La nondominazione è stata utilizzata come criterio per classificare gli individui con alto valore di fitness fittizia nello spazio delle soluzioni. • Rodrìguez Vàzquez e Fleming [41] hanno utilizzato una programmazione genetica in un MOGA per il progetto di circuiti logici combinatori (in particolare un multiplexer a sei ingressi). Due gli obiettivi considerati: correttezza (funzionalità del circuito) e ottimalità (riduzione dei nodi del circuito). I risultati della simulazione multiobiettivo sono apparsi nettamente migliori di quelli ottenuti con una versione mono-obiettivo dell’algoritmo. Inoltre la frequenza di generazione di circuiti funzionali è nettamente più alta quando si utilizza un approccio multi-obiettivo. • Coello Coello et al. [43] & Coello Coello e Haguirre [44] hanno impiegato il VEGA per il progetto di circuiti combinatori. Dato che ogni valore della tabella di verità da accoppiare al circuito generato da un algoritmo genetico è considerato come un obiettivo, sono stati utilizzati 98 più di 65 obiettivi. Gli autori hanno utilizzato una rappresentazione a numeri interi per codificare una rappresentazione matriciale del circuito, crossover a due punti, elitismo e tournament selection. L’approccio utilizzato genera circuiti equivalenti o addirittura più compatti di quelli generati utilizzando tecniche tradizionali come le mappe di Karnaugh. In un successivo lavoro, Luna et al. [45] hanno utilizzato il VEGA per lo stesso problema optando però per una ottimizzazione particle swarm. Questa versione modificata del VEGA raggiunge performance migliori delle altre tecniche. 99 100 4 L’algoritmo genetico NSGA-II L’ NSGA (Non-Dominated Sorting Genetic Algorithms) proposto da Srinivas e Deb [51] è un popolare algoritmo genetico basato sulla non-dominazione per l’ottimizzazione multi-obiettivo. Esso è un algoritmo molto efficace ma è stato spesso oggetto di critiche per alcuni rilevanti problemi: • Alta complessità computazionale nel sorting non-dominato: La complessità computazionale è O( MN 3 ) , con M numero delle funzioni obiettivo e N dimensione della popolazione. Appare chiaro che utilizzando popolazioni molto numerose la complessità può crescere in misura addirittura inaccettabile. • Mancanza di elitismo: Recenti risultati hanno mostrato chiaramente come una tecnica di elitismo possa migliorare significativamente le performance di un algoritmo genetico e prevenire la perdita di buone soluzioni durante la sua esecuzione. • Necessità di specificare il parametro di sharing σshare: I tradizionali meccanismi per assicurare diversità nella popolazione si fondano sul concetto di sharing. Quest’ultimo ha la pecca non indifferente di richiedere la definizione di un parametro esterno, da parte dell’operatore, detto appunto parametro di sharing. Una versione modificata, NSGA-II [49], è stata sviluppata con un miglior algoritmo di ordinamento raggiungendo la più ragionevole complessità computazionale di O( MN 2 ) . Esso inoltre incorpora l’elitismo, garantendo così la sopravvivenza 101 sistematica delle soluzioni migliori, e non necessita della scelta di alcun parametro di sharing. Recenti studi hanno dimostrato che l’ NSGA-II presenta performance di alto livello se confrontato con altri algoritmi multiobiettivo evolutivi, approssimando in maniera dettagliata e veloce una gran varietà di tipologie di fronti di Pareto. Per questo motivo esso viene considerato un “all purpose algorithm” e viene spesso utilizzato come termine di paragone per misurare le prestazioni di nuovi algoritmi. In questa tesi utilizzeremo una versione sviluppata in codice Matlab dell’NSGA-II per la ricerca delle soluzioni ottime in alcune problematiche circuitali che verranno introdotte nel prossimo capitolo. Il funzionamento dell’algoritmo, per sommi capi, può essere così descritto: in primis la popolazione viene inizializzata in maniera simile ad altri algoritmi. Successivamente la popolazione è ordinata in base alla non dominazione in più fronti. Il primo fronte è un insieme totalmente non dominato nell’attuale popolazione e il secondo fronte è dominato solo dal primo fronte. Ogno individuo in ogni fronte ha un valore di rank (fitness) assegnato oppure basato sul fronte al quale appartiene. Gli individui nel primo fronte hanno un valore di fitness pari a uno, gli individui nel secondo fronte hanno un valore di fitness pari a due, ecc. Oltre al valore di fitness, un nuovo parametro chiamato crowding distance viene calcolato per ogni individuo. La crowding distance è una misura della distanza di un individuo dai suoi vicini. Grandi valori medi di crowding distance creano una migliore diversità nella popolazione. I genitori vengono selezionati dalla popolazione usando una tournament selection binaria sia sul rank che sulla crowding distance. Un individuo è selezionato se il rank è minore degli altri o se la crowoding distance è più grande degli altri (la crowding distance viene comparata solo se il rank di entrambi gli individui è lo stesso). La popolazione selezionata genera figli tramite operatori di mutazione e crossover che verranno dettagliatamente descritti in seguito. La popolazione con gli attuali genitori e figli viene ancora una volta ordinata in base alla non dominazione e solo gli N migliori individui vengono selezionati con N dimensione della popolazione. La selezione è basata sul rank e sulla crowding distance dell’ultimo fronte. 102 4.1 Analisi dell’algoritmo 4.1.1 Inizializzazione della popolazione La popolazione viene inizializzata in base ai range delle variabili di decisione del problema e in base ai vincoli (se presenti). 4.1.2 Sorting non-dominato La popolazione inizializzata viene ordinata in base alla non-dominazione. L’algoritmo veloce di ordinamento [49] è così descritto: • Per ogni individuo p nella popolazione principale P esegui i seguenti passi: 1. Inizializza S p = 0 . Questo insieme contiene tutti gli individui dominati da p. 2. Inizializza n p = 0 . Esso rappresenta il numero degli individui che dominano p. 3. Per ogni individuo q in P: se p domina q allora aggiungi q all’insieme S p . ( S p = S p ∪ {q}) altrimenti, se q domina p, incrementa il contatore di dominazione per p. (n p = n p + 1) 4. Se n p = 0 (cioè se non ci sono individui che dominano p e quindi p appartiene al primo fronte) allora setta il rank di p a 1 ( p rank = 1) e aggiorna il primo fronte aggiungendo p. ( F1 = F1 ∪ {p}) . • Esegui le precedenti operazioni per tutti gli individui della popolazione P. • Inizializza il contatore di fronte a 1. ( i = 1 ). • Mentre l’i-esimo fronte risulta non vuoto esegui i seguenti passi: 1. Q = 0 . Rappresenta l’insieme degli individui dell’(i+1)-esimo fronte. 2. Per ogni individuo p nel fronte Fi esegui: 103 Per ogni individuo q di S p esegui: n q = n q − 1 , cioè decrementa il contatore di dominazione dell’individuo q; Se n q = 0 allora nessuno degli individui nel successivo fronte dominerà q. Quindi poni q rank = i + 1 . Aggiorna l’insieme Q con l’individuo q. (Q = Q ∪ {q}) . 3. Incrementa il contatore di fronte di una unità. 4. Ora l’insieme Q è il prossimo fronte e pertanto Fi = Q . Questo algoritmo di ordinamento è risultato essere migliore di quello dell’NSGA originario [51] dato che utilizza le informazioni riguardo l’insieme che un individuo domina ( S p ) e il numero di individui che dominano l’individuo in questione (n p ) . 4.1.3 Crowding distance Una volta terminato il sorting non-dominato, viene assegnata la crowding distance. Dato che gli individui vengono selezionati in base al rank e alla crowding distance, tutti gli individui devono ricevere assegnato un valore di crowding distance. La crowding distance è assegnata a parità di fronte e confrontare la crowding distance tra due individui su fronti diversi ha scarso significato. La crowding distance è calcolata come segue: • 104 Per ogni fronte Fi : (n è il numero di individui) 1. Inizializza la distanza a zero per tutti gli individui. Fi (d j ) = 0 , dove j corrisponde al j-esimo individuo nel fronte Fi . 2. Per ogni funzione obiettivo m: Ordina gli individui nel fronte Fi in base all’obiettivo m. I = sort ( Fi , m) Assegna distanza infinita ai valori estremi di ogni individuo in Fi . I (d 1 ) = ∞, I (d n ) = ∞ Per k compreso tra 2 e (n-1) esegui: I (d k ) = I (d k ) + I (k + 1).m − I (k − 1).m , f mmax − f mmin con I (k ).m riferito al valore dell’mesima funzione obiettivo del k-esimo individuo in I. L’idea di base della crowding distance è trovare la distanza euclidea tra ogni individuo in un fronte in base alle m funzioni obiettivo nell’iperspazio m-dimensionale. Gli individui ai confini estremi sono sempre selezionati dato che hanno assegnata distanza infinita. 4.1.4 Selezione Una volta che gli individui sono stati ordinati in base alla non-dominazione e il parametro di crowding distance è stato assegnato a ognuno di loro, la selezione può iniziare usando un operatore di selezione denominato crowded-comparison-operator (p n ) . La comparazione è eseguita in base a : 1) Rank di non-dominazione p rank . Gli individui del fronte Fi hanno assegnato un rank p rank = i . 2) Crowding distance Fi (d j ) . Si verifica che p p n q se 105 p rank < q rank oppure Fi (d p ) > Fi (d q ) (se p e q appartengono allo stesso fronte Fi ) 4.1.5 Operatori genetici Questo algoritmo utilizza il Simulated Binary Crossover (SBX) [47,48] per il crossover e mutazione polinomiale [48,50]. 4.1.5.1 Simulated Binary Crossover Questa tecnica di crossover simula la ricombinazione binaria che si osserva in natura ed è definito da: c1,k = 1 [(1 − β k ) p1,k + (1 + β k ) p 2,k ] 2 c 2,k = 1 [(1 + β k ) p1,k + (1 − β k ) p 2,k ] 2 ove ci , k è l’i-esimo figlio con la k-esima componente, pi ,k è il genitore selezionato e β k (≥ 0) è un campione di una generazione casuale di numeri avente densità: p(β ) = 1 (η c + 1) β ηc 2 , se 0 ≤ β ≤ 1 p(β ) = 1 1 (η c + 1) η + 2 2 β c , se β > 1 La distribuzione può essere ottenuta da un campionamento unforme di numeri casuali u compresi tra 0 e 1. η c è l’indice di distribuzione del crossover e determina quanto è distribuito un figlio rispetto ai genitori. In pratica: β (u ) = (2u ) 106 1 (η +1) 1 β (u ) = [2(1 − u )] 1 (η +1) 4.1.5.2 Mutazione polinomiale La mutazione opera nel seguente modo: c k = p k + ( p ku − p kl )δ k ove c k è il figlio, p k il genitore, p ku e p kl upper e lower bound delle componenti u ed l del genitore e δ k è una leggera variazione calcolata con una distribuzione polinomiale usando: 1 δ k = (2rk ) η m +1 −1 δ k = 1 − [2(1 − rk )]η , se rk < 0.5 1 m +1 , se rk ≥ 0.5 ove rk è un numero casuale uniformemente campionato tra 0 e 1 e η m è l’indice di distribuzione della mutazione. 4.1.6 Ricombinazione e selezione La popolazione “figlia” viene combinata con la popolazione corrente e la selezione viene eseguita per scegliere gli individui della prossima generazione. Dato che tutti gli attuali e precedenti migliori individui sono stati aggiunti alla popolazione, l’elitismo è assicurato. La popolazione viene poi ordinata in base alla non-dominazione. La nuova generazione è riempita da ogni fronte susseguentemente finchè la dimensione della popolazione supera la dimensione della popolazione corrente. Se aggiungendo individui al fronte j-esimo la popolazione supera il valore di N, allora vengono selezionati individui da questo fronte in base alla crowding distance in ordine discendente fino a quando la popolazione risulta avere dimensione N. Il processo così illustrato si ripete per generare le successive generazioni. 107 4.2 Il codice Matlab L’implementazione Matlab dell’NSGA-II che abbiamo utilizzato consta di uno script principale e di 6 sottoprogrammi atti a svolgere varie funzioni. I relativi listati sono consultabili in appendice al paragrafo 7.1.1. L’algoritmo parte lanciando il comando: nsga_2(pop,gen) con “pop” dimensione della popolazione e “gen” numero di generazioni successive da eseguire. E’ evidente che scegliendo una popolazione di pochi individui otterremo (a prescindere dal valore di gen) un fronte di Pareto poco popolato e quindi poco dettagliato. Con un numero di generazioni basso, invece, otteniamo delle soluzioni poco precise nel senso che risultano lontane dal fronte essendo spesso dominate. Viceversa scegliendo alti valori di pop e gen otteniamo soluzioni precise e un fronte di Pareto “denso” di punti, il tutto a scapito di un più elevato costo computazionale con conseguente aumento dei tempi si calcolo. Nel paragrafo 4.4 dedicato ai test approfondiremo questo concetto. Al termine dell’esecuzione dell’algoritmo viene eseguito un plot di tutti i punti calcolati su uno spazio bidimensionale o tridimensionale a seconda che il problema abbia 2 o 3 funzioni obiettivo. Viene inoltre salvato un file chiamato “solution.txt” che contiene le coordinate, nello spazio delle variabili di decisione e nello spazio degli obiettivi, di tutte le soluzioni trovate. 4.3 Test Esaminiamo ora il funzionamento di questa implementazione Matlab dell’ NSGA-II attraverso alcuni test (sia di problemi 2D che 3D) di complessità crescente. 108 4.3.1 Problema 1 Consideriamo il seguente semplicissimo problema di ottimizzazione: 2 min F1 ( x1 , x 2 ) = x 1 min F ( x , x ) = 2 x1 x 2 2 1 2 ( x , x ) ∈ [1,2] × [1,2] 1 2 Eseguiamo una prima volta l’algoritmo utilizzando parametri minimi per popolazione e generazione : pop=20 , gen=5. Il risultato è osservabile in fig. 4.1. L’area verde rappresenta lo spazio degli obiettivi per ( x1 , x2 ) ∈ [1,2] × [1,2] . Gli asterischi rappresentano le soluzioni trovate dall’algoritmo. Come si può notare le soluzioni trovate in questo caso sono poche è disposte in maniera praticamente casuale, ben lontano da individuare il fronte di Pareto. 8 7 F2 6 5 4 3 2 1 1.1 1.2 1.3 1.4 1.5 F1 1.6 1.7 1.8 1.9 2 Fig. 4.1 – (pop=20,gen=5) Eseguiamo ora altre 2 simulazioni: la prima (Fig. 4.2) con (pop=500,gen=5), la seconda (Fig. 4.3) con (pop=20,gen=500). 109 8 7 F2 6 5 4 3 2 1 1.1 1.2 1.3 1.4 1.5 F1 1.6 1.7 1.8 1.9 2 1.7 1.8 1.9 2 Fig. 4.2 – (pop=500,gen=5) 8 7 F2 6 5 4 3 2 1 1.1 1.2 1.3 1.4 1.5 F1 1.6 Fig. 4.3 – (pop=20,gen=500) Osserviamo in fig. 4.2 che nonostante l’alto numero di individui considerato, molti di essi risultano dominati e in generale non vi è una riproduzione fedele del fronte 110 di Pareto. Viceversa, in fig. 4.3 osserviamo che le poche soluzioni considerate (appena 20) sottoposte a un ciclo di 500 generazioni risultano posizionarsi in maniera molto precisa sul fronte. Infine lanciamo l’algoritmo con i parametri (pop=200,gen=150). Come osserviamo dalla fig. 4.4, in questo caso il fronte di Pareto è ben definito, preciso e molto popolato, il tutto ovviamente a scapito del tempo di elaborazione. A tal proposito concludiamo con una tabella riassuntiva riguardo i tempi di elaborazione dei 4 casi esaminati di questo problema. Il PC utilizzato presenta una configurazione con Intel Pentium 4 @ 2,66 GHz e 512 Mb di RAM. 8 7 F2 6 5 4 3 2 1 1.1 1.2 1.3 1.4 1.5 F1 1.6 1.7 1.8 1.9 2 Fig. 4.4 – (pop=200,gen=150) Pop Gen Tempo di elaborazione 20 5 <1’’ 500 5 52’’ 20 500 9’’ 200 150 3’01’’ 111 4.3.2 Problema 2 Consideriamo il seguente problema di ottimizzazione (Schaffer’s 2D function) utilizzato spesso come benchmark di algoritmi genetici: min F1 ( x1 , x 2 ) = x12 + x 22 2 2 2 2 ) + ( x2 − ) min F2 ( x1 , x 2 ) = ( x1 − 2 2 2 2 ] ] × [0, ( x1 , x 2 ) ∈ [0, 2 2 Questo problema presenta un fronte di Pareto che può essere definito analiticamente come: F1 ( x1 , x 2 ) + 1 − 2 F1 ( x1 , x 2 ) − F2 ( x1 , x 2 ) = 0 x1 = x 2 Eseguiamo ora 2 simulazioni: la prima (Fig. 4.5) con (pop=20,gen=5), la seconda (Fig. 4.6) con (pop=20,gen=500). Osserviamo che la prima simulazione presenta risultati che in alcuni casi si discostano notevolmente dal fronte reale (grafico blu). Nella seconda simulazione abbiamo mantenuto costante la popolazione a 20 individui e abbiamo aumentato il numero di generazioni a 400. Notiamo che nonostante questo significativo aumento del numero di generazioni, alcune soluzioni si discostano ancora dal fronte reale. Questo algoritmo, infatti, necessita di lavorare con una popolazione adeguata, in mancanza della quale non si può sopperire con un aumento di generazioni. 112 1 0.9 0.8 0.7 F2 0.6 0.5 0.4 0.3 0.2 0.1 0 0 0.1 0.2 0.3 0.4 0.5 F1 0.6 0.7 0.8 0.9 1 0.8 0.9 1 Fig. 4.5 – (pop=20,gen=5) 1 0.9 0.8 0.7 F2 0.6 0.5 0.4 0.3 0.2 0.1 0 0 0.1 0.2 0.3 0.4 0.5 F1 0.6 0.7 Fig. 4.6 – (pop=20, gen=400) 113 In fig. 4.7 è mostrato il grafico dell’algoritmo eseguito con popolazione pari a 200 e 150 generazioni: i risultati sono più che soddisfacenti. 1 0.9 0.8 0.7 F2 0.6 0.5 0.4 0.3 0.2 0.1 0 0 0.1 0.2 0.3 0.4 0.5 F1 0.6 0.7 0.8 0.9 Fig. 4.7 – (pop=200,gen=150) Pop Gen Tempo di elaborazione 20 5 <1’’ 20 400 8’’ 200 150 3’18’’ 114 1 4.3.3 Problema 3 Consideriamo ora un problema di ottmizzazione multi-obiettivo bidimensionale utilizzato nello sviluppo di strategie evolutive, il problema DTZ3 di Deb. min F1 ( x1 ) = x1 min F2 ( x1 , x 2 ) = 1 + 9 x 2 − x1 (1 + 9 x 2 ) − x1 sin(10πx1 ) ( x , x ) ∈ [0,1] × [0,1] 1 2 L’espressione analitica del relativo fronte di Pareto è costituita dalla parte non-dominata della curva avente equazione: F2 ( x1 , x 2 ) − 1 + F1 ( x1 ) + F1 sin(10πF1 ( x1 )) Lanciando l’algoritmo con i valori minimi dei parametri (fig. 4.8) osserviamo subito che il risultato appare molto lontano dall’essere soddisfacente, soprattutto per problemi come questi avente fronte di Pareto discontinuo. 3.5 3 2.5 2 F2 1.5 1 0.5 0 -0.5 -1 0 0.1 0.2 0.3 0.4 0.5 F1 0.6 0.7 0.8 0.9 1 Fig. 4.7 – (pop=20,gen=5) 115 Simulando ora con i parameti raddoppiati (fig. 4.8), osserviamo come la distribuzione delle soluzioni (che pure risultano abbastanza precise se confrontate con il fronte reale), risulta sbilanciata in una zona molto ristretta, lasciando vuote altre zone. 1 0.8 0.6 0.4 F2 0.2 0 -0.2 -0.4 -0.6 -0.8 0 0.1 0.2 0.3 0.4 0.5 F1 0.6 0.7 0.8 0.9 1 Fig. 4.8 – (pop=40,gen=10) Eseguendo infine l’algoritmo con parametri di valore elevato (fig. 4.9) notiamo che il fronte viene mappato in maniera precisa e densa. Pop Gen Tempo di elaborazione 20 5 <1’’ 40 10 ~2’’ 200 150 3’55’’ 116 1 0.8 0.6 0.4 F2 0.2 0 -0.2 -0.4 -0.6 -0.8 0 0.1 0.2 0.3 0.4 0.5 F1 0.6 0.7 0.8 0.9 1 Fig. 4.9 – (pop=200,gen=150) 4.3.4 Problema 4 Consideriamo ora un problema 3D con 12 variabili di decisione: F1 ( x) = (1 + g ( x)) cos(0.5πx1 ) cos(0.5πx 2 ) F2 ( x) = (1 + g ( x)) cos(0.5πx1 ) sin(0.5πx 2 ) F ( x) = (1 + g ( x)) sin(0.5πx ) 1 3 12 con g ( x) = ∑ ( xi − 0.5) 2 , i =1 0 ≤ xi ≤ 1 , i = 1,...,12 Nei problemi 3D è ovviamente ancora più forte la necessità di dover utilizzare valori molto alti dei parametri popolazione e generazione. Il motivo risiede sia nella 117 maggiore complessità del problema, sia per avere una buona interpretazione grafica del risultato. In fig. 4.10 e 4.11 sono rappresentate 2 viste ottenute lanciando l’algoritmo con popolazione 400 e 150 generazioni . Il risultato è stato ottenuto dopo 14’33’’ di tempo necessario per l’elaborazione. 2 1.5 F3 1 0.5 0 2 1.5 2 1.5 1 1 0.5 F2 0.5 0 0 Fig. 4.10 – Vista 1 118 F1 2 F3 1.5 1 0.5 0 2 1.5 1 0 0.5 0.5 F1 1 0 1.5 2 F2 Fig. 4.11 – Vista 2 119 120 5 Casi di studio Nel presente capitolo verranno analizzati due casi di progettazione e dimensionamento di circuiti tramite l’utilizzo di algoritmi multiobiettivo evolutivi e, in particolare, del già ampiamente analizzato NSGA-II. I circuiti in esame sono : 1. Un raddrizzatore a doppia semionda, in cui l’obiettivo finale sarà quello di dimensionare l’induttore per ottenere il miglior compromesso possibile tra ripple in uscita e potenza dissipata dalla resistenza parassita. 2. Un convertitore DC-DC low power, in cui l’obiettivo finale sarà quello di scegliere i valori di induttanza e frequenza massima di esercizio per ottenere i migliori valori in termini di efficienza e ingombro. 5.1 Raddrizzatore a doppia semionda 5.1.1 Aspetti teorici Un raddrizzatore o rettificatore è un dispositivo che serve a rettificare un segnale bipolare e quindi a trasformarlo in un segnale unipolare. Il raddrizzatore, collegato ad altri componenti, è usato per trasformare la corrente alternata in corrente continua. Adottando quattro diodi disposti in configurazione a ponte di Graetz (Fig. 5.1), è possibile ottenere un segnale che è la somma di una semionda positiva più la semionda negativa capovolta (doppia semionda). Questa soluzione, molto usata negli alimentatori, rende molto più semplice il successivo filtraggio e livellamento della tensione fino ad ottenere una corrente continua. Principale svantaggio di questo metodo 121 è di avere una caduta di tensione pari a quella di due diodi in serie, quindi anche oltre 2 volt. Nel raddrizzare tensioni molto piccole si ha quindi una perdita e una distorsione eccessive. Fig. 5.1 Il funzionamento del Ponte di Graetz, tenendo conto che la tensione di uscita è prelevata ai capi della resistenza RL, può essere descritto in questi termini: durante la semionda positiva del generatore, la corrente IA fluisce nel diodo A e, non potendo proseguire in C, prosegue nella resistenza RL e infine si chiude nel generatore dopo aver attraversato il diodo D. In pratica A e D sono in conduzione mentre B e C rimangono interdetti; durante la semionda negativa la corrente IB fluisce attraverso il diodo C e, con un percorso speculare al precedente, percorre il ramo della resistenza di carico RL e si chiude nel generatore attraversando il diodo B. In questa fase, pertanto, i diodi B e C conducono mentre A e D risultano interdetti. Globalmente,quindi, nella resistenza di carico fluirà una corrente IL costituita da un treno di semionde positive come illustrato in fig. 5.2. I raddrizzatori a ponte di Graetz trovano applicazione, in generale, negli alimentatori elettronici, circuiti in grado di trasformare la tensione alternata di rete in tensione costante. 122 Fig. 5.2 L’uscita così ottenuta, pur essendo unipolare, è ben lontana dall’essere costante. Per tal motivo, sul ramo di uscita della resistenza di carico viene posto un filtro passabasso, con lo scopo di lasciar passare solo le componenti a frequenza più bassa (nel caso ideale solo la continua). In particolare, nel nostro caso, utilizzeremo una induttanza di “spianamento” che presentando una reattanza Z& L = jωL direttamente proporzionale alla frequenza lascia passare solo le componenti a bassa frequenza, attenuando più o meno le altre. 5.1.2 Descrizione del progetto Nel progetto in esame, il circuito di riferimento è quello illustrato in fig. 5.3. In ingresso abbiamo una tensione sinusoidale da raddrizzare di ampiezza 15 V e frequenza 50 Hz e una carico fissato Rload pari a 10 Ω. 123 Fig. 5.3 Supponendo i diodi ideali è possibile scrivere la soluzione analitica a regime per il circuito imponendo le condizioni di continuità agli estremi di un periodo del generatore. In tal caso è possibile dimostrare che la corrente nel carico nell’intervallo di periodicità assume la forma [55]: 2VM sin(tan −1 iload (t ) = (1 − e πR − ωL ωL R ) e ) R +ω L 2 2 2 R − t L + VM R +ω L 2 2 2 sin(ωt − tan −1 ωL R ) ove R = R par + Rload , con R par resistenza parassita dell’induttore (dovuta alla resistenza dell’avvolgimento). Lo scopo del progetto, quindi, è quello di determinare le caratteristiche geometriche e costruttive dell’induttore per ottimizzare 2 parametri: il ripple e la potenza di perdita. Il ripple in uscita è definito come il rapporto tra il valore efficace della tensione alternativa sul carico e il valor medio (componente continua) della tensione sul carico. Un ripple molto alto, quindi, è da evitare dato che determina una tensione sul carico ancora fortemente ondulatoria. La potenza di perdita è rappresentata dall’aliquota di 124 potenza che viene dissipata dalla resistenza parassita dell’induttore e che quindi viene sottratta al carico. Osserviamo che, essendo la resistenza parassita e la resistenza di carico in serie, calcolare le aliquote di potenza equivale a calcolare il rapporto tra le resistenze. Per questo motivo il parametro che ci proponiamo di minimizzare è Rratio = R par / RTOT . Ridurre al minimo questo valore significa progettare un rettificatore che convoglia la maggior parte della potenza disponibile sul carico e non sulla resistenza parassita dell’induttore che, per questo motivo, dovrà necessariamente essere piuttosto piccola. 5.1.3 Ottimizzazione con somma pesata Le prime due simulazioni proposte chiariscono una volta per tutte la differenza fondamentale tra un processo di ottimizzazione mono-obiettivo e uno multio-biettivo. Mentre nel primo, infatti, il risultato è costituito da una sola soluzione (dipendente da parametri dell’algoritmo come ad esempio i pesi nel caso di somma pesata), nel caso di ottimizzazione multi-obiettivo il risultato è costituito da un set di soluzioni ottime che messe a disposizione del progettista gli consentono una più ampia panoramica sulle effettive possibilità di miglioramento delle prestazioni. Nella prima simulazione abbiamo usato un algoritmo di ottimizzazione monoobiettivo scritto in codice Matlab (vedi Appendice al paragrafo 7.1.2) basato sulla funzione fminsearch che minimizza una qualunque funzione f : R → R . Il problema progettuale in questione consiste nel minimizzare i valori di Ripple e Rratio (obiettivi) scegliendo una opportuna Sezione del filo dell’induttore (variabile di decisione. Pertanto, usando la tecnica della somma pesata, la funzione obiettivo da minimizzare è: OBJ = C1 * Ripple + C 2 * Rratio E’ evidente che a pesi diversi corrispondono soluzioni diverse (ma singole) in quanto vengono valutati diversamente gli obiettivi. 125 Ci proponiamo, in quest’ottica, di ottimizzare un induttore (schematizzato in fig. 5.4 ma avvolto su un nucleo di ferrite con µ r = 2000 ) le cui dimensioni sono fissate a 30mm di altezza (H) e 15mm di diametro (2R). Fig. 5.4 Ponendoci l’obiettivo di trovare un valore della sezione del filo a cui corrisponda un valore di Ripple minore del 5% e un valore della Rratio minore del 20%, abbiamo eseguito innumerevoli prove cambiando di volta in volta il valore dei pesi. La difficoltà maggiore è rappresentata dall’alta sensibilità del risultato al variare dei pesi: anche piccolissime variazioni dei pesi possono portare a cambiamenti anche importanti del risultato finale. Nella tabella che segue sono riportati i valori calcolati per alcune prove significative : C1 C2 Sezione (mm) Ripple (%) Rratio (%) I 1 20 0.79 28.43 0.64 II 250 1 0.12 2.29 62.88 III 1 0.25 0.28 5.00 12.63 IV 1.33 0.15 0.23 3.77 20.26 V 1 0.15 0.25 4.18 17.04 Tab. 5.1 126 In particolare nell’ultimo rigo della tabella è indicato un risultato che abbiamo ritenuto apprezzabile: con una Sezione (commerciale) di 0.25mm abbiamo ottenuto un Ripple del 4.18% e un Rratio del 17.04%. Per quest’ultimo caso (C1=1 e C2=0.15) in fig. 5.5 è illustrato il grafico della diminuzione della funzione obiettivo durante l’esecuzione dell’algoritmo. FUNZIONE OBIETTIVO 0.22 0.2 Funzione obiettivo 0.18 0.16 0.14 0.12 0.1 0.08 0.06 0 5 10 15 Iterazione 20 25 30 Fig. 5.5 Da questa prima simulazione sono già evidenti i principali svantaggi di questo tipo di approccio. Innanzitutto, il fatto che il risultato fornito dall’algoritmo è sempre uno solo per ogni esecuzione. Per avere un’idea di come sono distribuite le soluzioni dovremmo eseguire un numero altissimo (teoricamente infinito) di simulazioni. Inoltre non è affatto semplice cambiare i pesi in quanto questi ultimi influenzano in maniera brusca e inaspettata il risultato dell’algoritmo. Per ultimo, ma assolutamente non meno importante, non abbiamo nessuna sicurezza che il risultato di un siffatto algoritmo sia un ottimo del problema cioè si trovi sul Fronte di Pareto. 127 TENSIONE IN USCITA Tensione sul carico Componente continua Componente alternata 10 Tensione [V] 8 6 4 2 0 0 0.01 0.02 0.03 0.04 0.05 0.06 Tempo [s] 0.07 0.08 0.09 0.1 Fig. 5.6 In fig. 5.6 è mostrato l’andamento della tensione di uscita sul carico: è possibile osservare come in questo caso il valor medio della tensione in uscita sia circa 8V. 5.1.4 Ottimizzazione multi-obiettivo 5.1.4.1 Simulazione con una variabile di decisione La seconda simulazione è stata eseguita tramite l’algoritmo NSGA-II inserendo gli stessi parametri della precedente simulazione, cioè impostando come unica variabile di decisione la Sezione del filo e come funzioni obiettivo da minimizzare il Ripple e la Rratio. Grazie a questo algoritmo multiobiettivo non abbiamo dovuto tener conto di alcun parametro di peso e una volta inserito semplicemente il range di ricerca per la sezione del filo abbiamo ottenuto una famiglia di risultati come appare dall’output grafico in fig. 5.7. 128 Pertanto una volta impostato il range di ricerca da 0.10mm a 0.80mm e settato l’algoritmo con una popolazione di 200 individui e 50 generazioni, dopo 1’02’’ di calcolo abbiamo ottenuto il risultato in figura, nel quale sono stati evidenziati con numeri da “I” a “V” i punti-soluzione precedentemente trovati con la somma pesata e riportati in Tab. 5.1. 0.7 II 0.6 0.5 Rratio 0.4 0.3 IV 0.2 V III 0.1 0 I 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 Ripple Fig. 5.7 – Variabile di decisione: Sezione del filo E’ molto importante in questa fase sottolineare che un algoritmo multiobiettivo eseguito per un problema con una sola variabile di decisione produce spesso un fronte di Pareto che potremmo definire “banale”, in quanto coincidente con l’immagine Z = F (X ) della regione ammissibile X per il determinato range di ricerca impostato. Spieghiamo meglio questo concetto concentrandoci sul caso di problemi multiobiettivo con due obiettivi da minimizzare: quando il problema multiobiettivo da analizzare è impostato con un numero di variabili di decisione maggiore di uno, ad esempio due per fissare le idee, si ha che queste variabili individuano un’immagine Z, nello spazio degli obiettivi ℜ 2 , rappresentata da una superficie; in questo caso il fronte di Pareto dell’insieme Z è rappresentato dalla curva ottenuta eseguendo un plot di tutti i punti non dominati di tale superficie. Invece quando il numero delle variabili di decisione è pari a 129 uno (cioè la regione ammissibile X è un sottoinsieme di ℜ ), come nella simulazione appena eseguita, si ha che a questo insieme X monodimensionale di valori della variabile di decisione corrisponde un’immagine Z, nello spazio degli obiettivi ℜ 2 , avente caratteristiche non più superficiali ma curvilinee. A questo punto, avendo un’immagine Z curvilinea e, come nel problema in oggetto, convessa, definire un fronte di Pareto non ha più senso in quanto saremmo costretti a calcolare i punti non dominati appartenenti non più ad una superficie ma ad una curva convessa: in queste condizioni, come precedentemente accennato, immagine Z e fronte di Pareto coincidono. Notiamo, comunque, che in generale questo concetto non è più valido se ipotizziamo che l’immagine curvilinea non sia più convessa come nella simulazione eseguita: in tal caso il fronte di Pareto coincide con la parte non dominata della curva. Ritornando all’ultima simulazione eseguita, appare chiaro che la curva rappresentata in fig. 5.7 rappresenta non solo il fronte di Pareto calcolato dall’algoritmo, ma addirittura l’intera immagine Z, della regione ammissibile X, calcolata considerando la sezione del filo come unica variabile di decisione. A prescindere dalla natura del problema in questione (se caratterizzato, cioè, da una o più variabili di decisione) appare comunque chiaro come l’aver utilizzato un algoritmo multiobiettivo abbia portato in maniera immediata ad un aumento della possibilità di scelta da parte del progettista: anche in un caso banale come questo, cioè con una sola variabile di decisione, avere a disposizione in una sola esecuzione dell’algoritmo un set completo di soluzioni è senz’altro auspicabile per avere una visuale più chiara in chiave progettuale del problema da ottimizzare. 5.1.4.2 Simulazione con tre variabili di decisione Effettuiamo quest’ultima simulazione allargando il numero di gradi di libertà a tre: Sezione del filo (mm) , Diametro induttore (mm) , Altezza induttore (mm). Consideriamo, inoltre, una terza funzione obiettivo oltre a Ripple e Ratio: DeltaV. Quest’ultima funzione, che ci proponiamo di minimizzare insieme alle altre, rappresenta la differenza tra la componente continua della tensione sul carico e un riferimento di tensione assegnato: nel presente caso cercheremo di avvicinarci progettualmente ai 10V di tensione continua sul carico. 130 Il problema così generalizzato è stato sottoposto al consueto algoritmo NSGA-II con un listato della evaluate_objective.m leggermente modificato, come illustrato in Appendice al paragrafo 7.1.4. Il range di ricerca delle variabili di decisione è stato così impostato: Sezione filo : 0.10 - 0.80 (mm) Diametro induttore: 10 - 20 (mm) Altezza induttore: 15 - 25 (mm) Una volta lanciato l’algoritmo con un settaggio di 400 individui per la popolazione e 100 generazioni, dopo 8’12’’ di calcolo abbiamo ottenuto il fronte di Pareto del problema come riportato nelle figg. 5.8, 5.9 e 5.10. Come è possibile osservare soprattutto dalla vista 3 in fig. 5.10, il fronte di Pareto calcolato giace su un piano (evidenziato in giallo). 8 DeltaV [V] 6 4 2 0 0.8 Scelta progettuale 0.5 0.6 0.4 0.4 0.3 0.2 0.2 Rratio 0.1 0 0 Ripple Fig. 5.8 –Variabili di decisione: Sezione filo, Diametro ind., Altezza ind. Vista 1 131 8 DeltaV [V] 6 4 2 Scelta progettuale 0 0 0.1 0.2 0.3 0.4 Ripple 0.5 0 0.1 0.3 0.2 0.4 0.6 0.5 0.7 Rratio Fig. 5.9 –Variabili di decisione: Sezione filo, Diametro ind., Altezza ind. Vista 2 8 7 6 DeltaV [V] 5 4 3 Scelta progettuale 2 1 0 0.7 0.6 0.5 0.4 0.3 0.2 0.1 Rratio Fig. 5.10 –Variabili di decisione: Sezione filo, Diametro ind., Altezza ind. Vista 3 132 0 Scelta progettuale A questo punto abbiamo proceduto con l’analisi rigorosa (quantitativa oltre che qualitativa) dei risultati. In particolare, abbiamo ipotizzato di dover ricercare soluzioni che presentino la peculiarità di avere sia il Ripple che la Rratio minori del 10%: in Tab.5.2 è mostrato l’insieme delle soluzioni (punti del fronte di Pareto calcolato) che presentano proprio queste caratteristiche. Abbiamo poi evidenziato in rosso le soluzioni cui corrisponde un valore commerciale della sezione del filo. Infine abbiamo scelto tra queste ultime una soluzione considerata come il miglior compromesso per i requisiti del problema (in blu). Sezione filo (mm) 3.6579909e-001 3.5388298e-001 3.8172925e-001 3.9744671e-001 3.8698126e-001 4.0400975e-001 4.6532597e-001 3.3380059e-001 3.3755601e-001 3.2712775e-001 3.3157044e-001 3.4271690e-001 5.0452510e-001 4.9401479e-001 4.9923356e-001 3.4857568e-001 3.2503928e-001 4.5911855e-001 4.8039917e-001 3.3972296e-001 3.2198357e-001 4.7289854e-001 4.3176915e-001 4.4758213e-001 4.3904302e-001 4.0945000e-001 3.8310143e-001 3.1807336e-001 4.8912458e-001 4.3125376e-001 3.4536730e-001 4.6957384e-001 4.5017304e-001 4.3628542e-001 4.1660546e-001 3.3250800e-001 4.3787962e-001 Diametro Ind. Altezza Ind. (mm) 1.9998012e+001 2.0000000e+001 2.0000000e+001 2.0000000e+001 2.0000000e+001 1.9999232e+001 1.9999997e+001 2.0000000e+001 1.9935422e+001 2.0000000e+001 1.9999931e+001 2.0000000e+001 2.0000000e+001 1.9999943e+001 1.9977931e+001 1.9975606e+001 1.9999225e+001 1.9999996e+001 2.0000000e+001 1.9975683e+001 2.0000000e+001 1.9977673e+001 1.9778597e+001 1.9983908e+001 1.9777010e+001 1.9999930e+001 1.9999884e+001 2.0000000e+001 1.9961086e+001 2.0000000e+001 1.9975976e+001 1.9977841e+001 2.0000000e+001 1.9771307e+001 2.0000000e+001 2.0000000e+001 2.0000000e+001 Ripple Rratio (mm) 2.5000000e+001 2.5000000e+001 2.4941022e+001 2.4925565e+001 2.4743371e+001 2.4937129e+001 2.4890130e+001 2.4905694e+001 2.5000000e+001 2.4956355e+001 2.5000000e+001 2.4980060e+001 2.4892928e+001 2.4892932e+001 2.4853372e+001 2.4989845e+001 2.5000000e+001 2.4888881e+001 2.4748688e+001 2.5000000e+001 2.5000000e+001 2.4849512e+001 2.4854105e+001 2.4985066e+001 2.4856134e+001 2.4936017e+001 2.4735464e+001 2.5000000e+001 2.4929744e+001 2.5000000e+001 2.5000000e+001 2.4844806e+001 2.4919936e+001 2.4855643e+001 2.5000000e+001 2.4999942e+001 2.4936706e+001 DeltaV (V) 5.4186276e-002 5.1093308e-002 5.8591411e-002 6.3050391e-002 6.0494603e-002 6.4927559e-002 8.4247241e-002 4.6302656e-002 4.7335766e-002 4.4640056e-002 4.5614549e-002 4.8338174e-002 9.7777727e-002 9.4058100e-002 9.6240504e-002 4.9889340e-002 4.4087458e-002 8.2193337e-002 8.9822342e-002 4.7681355e-002 4.3380030e-002 8.7108350e-002 7.5102205e-002 7.8271713e-002 7.7443552e-002 6.6523795e-002 5.9425451e-002 4.2489820e-002 9.2562778e-002 7.2958704e-002 4.9068693e-002 8.5997269e-002 7.9178513e-002 7.6597497e-002 6.8492361e-002 4.5836755e-002 7.5205105e-002 6.6727588e-002 7.3194370e-002 5.9065687e-002 5.2655558e-002 5.6403178e-002 5.0278087e-002 3.3428526e-002 8.5713221e-002 8.3160881e-002 9.0748807e-002 8.7603738e-002 7.9934401e-002 2.6419674e-002 2.8093602e-002 2.7174251e-002 7.6215124e-002 9.2490060e-002 3.4753384e-002 3.0304617e-002 8.1860376e-002 9.4899459e-002 3.1813815e-002 4.0997426e-002 3.7517474e-002 3.9071673e-002 4.8395762e-002 5.8015998e-002 9.8095016e-002 2.8906959e-002 4.1813766e-002 7.8221971e-002 3.2466576e-002 3.6833084e-002 3.9775803e-002 4.6170432e-002 8.6929111e-002 3.9921748e-002 1.0887404e+000 1.1503958e+000 1.0157241e+000 9.5467522e-001 9.9036696e-001 9.3204450e-001 7.7201419e-001 1.2698020e+000 1.2454577e+000 1.3178431e+000 1.2878363e+000 1.2146762e+000 7.0583107e-001 7.2159950e-001 7.1294605e-001 1.1792053e+000 1.3344562e+000 7.8456215e-001 7.4247681e-001 1.2330489e+000 1.3574458e+000 7.5674309e-001 8.4384929e-001 8.1076686e-001 8.2556768e-001 9.1413293e-001 1.0057296e+000 1.3879383e+000 7.2928163e-001 8.5155062e-001 1.1983449e+000 7.6291823e-001 8.0427463e-001 8.3225217e-001 8.9296290e-001 1.2814002e+000 8.3358370e-001 Tab. 5.2 133 In particolare, scegliendo: Sezione del filo = 0.35mm Diametro induttore = 20mm Altezza induttore = 25mm abbiamo ottenuto i seguenti valori in uscita: Ripple = 4.99% Rratio = 7.62% Vout_media = 10V – 1.18V = 8.82V In fig.5.11 è riprodotto l’output grafico, relativo alla tensione in uscita, ottenuto con i parametri appena calcolati. TENSIONE IN USCITA 10 Tensione [V] 8 6 Tensione sul carico Componente continua Componente alternata 4 2 0 0 0.01 0.02 0.03 0.04 0.05 0.06 Tempo [s] Fig. 5.11 134 0.07 0.08 0.09 0.1 Confrontando i risultati ottenuti in quest’ultima simulazione con la soluzione scelta come miglior compromesso nella simulazione con somma pesata degli obiettivi, possiamo osservare che avendo avuto a disposizione il quadro completo della situazione è stato possibile effettuare scelte più ponderate e, in particolare, ottenere risultati complessivamente migliori. In quest’ultima simulazione, infatti, abbiamo ottenuto un valore della Rratio nettamente minore (7.62% contro il 17.04% nel caso della somma pesata) e un valore più alto della componente continua della tensione in uscita (8.82V contro un valore di poco inferiore agli 8V nel caso precedente) a scapito di un leggerissimo peggioramento del Ripple in uscita (4.99% nell’ultima simulazione contro il 4.18% nel caso della somma pesata). 5.2 Convertitore DC-DC low power 5.2.1 Aspetti teorici Con il termine convertitori DC-DC si intende una vasta gamma di circuiti in grado di trasformare una tensione continua in un'altra sempre continua ma con parametri diversi. I convertitori DC-DC sono importanti nei dispositivi elettronici portatili come i telefoni cellulari e i computer laptop, che sono alimentati da batterie. Tali dispositivi spesso contengono diversi sottocircuiti, in cui ognuno necessita di un livello di tensione differente da quello fornito dalla batteria (tipicamente più alto o più basso della tensione della batteria, e qualche volta anche tensioni negative). Inoltre, la tensione della batteria diminuisce man mano che la potenza viene prelevata. I convertitori DC-DC offrono un metodo per generare diversi livelli di tensione controllati a partire da una batteria a tensione variabile, risparmiando in tal modo spazio ed evitando di utilizzare molte batterie per fornire energia alle diverse parti dello strumento. Il circuito che analizzeremo nel dettaglio è il cosiddetto buck-converter (fig. 5.12), convertitore switching DC-DC utilizzato per ridurre una tensione in ingresso VI ad un dato valore della tensione di uscita VO . 135 Fig. 5.12 Il metodo più semplice per ridurre una tensione è quello del partitore di tensione. Esso però comporta una serie di svantaggi, come il fatto di non poter permettere la regolazione della tensione e soprattutto di essere caratterizzato da una bassa efficienza dovuta ad un eccesso di dissipazione del calore. Tramite il buck-converter, invece, è possibile regolare opportunamente la tensione di uscita con la nota tecnica di modulazione PWM (Pulse Width Modulation) ed inoltre si possono raggiungere tranquillamente valori di efficienza superiori al 90% con picchi del 95% per sistemi integrati. Il principio di funzionamento è il seguente: abbiamo una tensione di ingresso VI da ridurre ad un determinato valore. Tramite l’interruttore S otteniamo da VI una tensione di ingresso al filtro LC a valore medio non nullo la cui forma d’onda dipende dalla durata degli intervalli di chiusura (TON ) e di apertura (TOFF ) dell’interruttore (avente pertanto duty-cicle pari a δ = TON TON = ). Il filtro LC estrae il valor T TON + TOFF medio di VI e trasferisce al carico una tensione VO pressoché continua senza dissipare potenza. In questo contesto il diodo D ha il duplice scopo di proteggere l’interruttore dalle sovratensioni e consentire la circolazione di corrente quando l’interruttore è aperto. Prima di analizzare nel dettaglio le diverse modalità di funzionamento del buck converter dobbiamo enunciare due ipotesi necessarie per poter descrivere il comportamento di questo circuito e per poter scrivere le leggi necessarie che regolano il funzionamento di questo convertitore. Tali ipotesi sono: 136 • Il regime di corrente è retto solo da L secondo la legge: V dI = L dt • Il regime di tensione è retto solo da C secondo la legge: I dV = C dt 5.2.1.1 Modalità CCM (Continuous Current Mode) Un convertitore buck funziona in modo continuo (CCM) se la corrente che circola nell'induttore (IL) non va mai a zero durante il ciclo di commutazione. In fig. 5.13 sono riportate le forme d'onda nel tempo: • Quando l'interruttore è chiuso, la tensione sull'induttore è VL = VI − VO . La corrente che circola attraverso l'induttore cresce linearmente. Il diodo è inversamente polarizzato e non vi è circolazione di corrente in esso. • Quando l'interruttore è aperto, il diodo è polarizzato direttamente. La tensione sull'induttore è VL = − Vo (trascurando la caduta sul diodo: caso ideale) e la corrente IL diminuisce linearmente. Fig. 5.13 - CCM 137 Se assumiamo che il convertitore lavora in regime stazionario, l'energia immagazzinata in ciascun componente alla fine del ciclo di commutazione è uguale a quella di inizio ciclo. Questo significa che il valore della corrente IL è lo stesso a t=0 e a t=T (vedi figura 5.13). Sotto questa ipotesi si ha che ∆I ON = ∆I OFF ; esplicitando: VI − VO TON ∆I ON = L VO ∆I OFF = L TOFF Infine uguagliando si ha : VO = TON V I = δV I T (5.1) Osserviamo che la (5.1) vale indipendentemente dalla corrente media sul carico. Da questa equazione, si può osservare che la tensione di uscita del convertitore varia linearmente con il duty-cycle per una data tensione di ingresso. Dato che il dutycycle è uguale al rapporto tra TON ed il periodo T, esso non può essere maggiore di 1. Perciò VO ≤ V I . Se, per esempio, si volesse abbassare una tensione di 12V fino a 3V (cioè una tensione di uscita uguale ad un quarto di quella di ingresso), ciò richiederebbe nel circuito ideale un duty-cycle del 25%. 5.2.1.2 Modalità DCM (Discontinuous Current Mode) Spesso accade che la quantità di energia richiesta dal carico è abbastanza piccola da essere trasferita in un tempo minore dell'intero periodo di commutazione. In questo caso, la corrente attraverso l'induttore scende fino a zero durante parte del periodo. L'unica differenza col principio sopra descritto è che l'induttore viene completamente scaricato alla fine del ciclo di commutazione (vedi fig. 5.14). Pertanto nell’intervallo TOFF l’induttore L si scarica completamente determinando un comportamento non lineare del circuito: l’andamento della corrente 138 presenta dei tratti a corrente nulla e dei picchi di corrente molto elevati che rischiano di mandare in saturazione il nucleo dell’induttore e (nel caso di potenze elevate in gioco) di riscaldare eccessivamente il rame dei fili di collegamento. Tali picchi inoltre possono causare un invecchiamento precoce del condensatore. Fig. 5.14 - DCM In definitiva si ha che in modalità DCM la (5.1) non è più valida, cioè: VO ≠ δVI L’uscita, inoltre, non è più indipendente dalla corrente nel carico. Si dimostra infatti che: VO = V I 1 2 LI load +1 δ 2VI T (5.2) 139 5.2.1.3 Rettificazione sincrona Consideriamo ora un buck converter con una topologia leggermente modificata che però comporta alcuni importanti vantaggi: il buck converter con rettificazione sincrona (fig. 5.15). Fig. 5.15 Un convertitore buck sincrono è una versione modificata del convertitore buck di base nella quale il diodo D viene sostituito da un secondo commutatore S2. Questa modifica è un compromesso tra aumento dei costi e miglioramento dell'efficienza. In un convertitore buck di base, il diodo di recupero si attiva automaticamente, poco dopo che il commutatore si è spento, come risultato dell'aumento della tensione diretta ai suoi capi. La caduta di tensione attraverso il diodo provoca una perdita di potenza uguale a: PD = VD (1 − δ ) I load Sostituendo il diodo D con il commutatore S2, selezionato per avere poche perdite, l'efficienza del convertitore può essere migliorata. Per esempio, basta selezionare per S2 un MOSFET con una RDSon molto bassa, che la perdita di potenza diventerà: 2 PS 2 = I load R DSon (1 − δ ) Confrontando queste equazioni il lettore noterà che in ambedue i casi, la perdita di potenza è fortemente dipendente dal duty cycle. È chiara la ragione per la quale le perdite di potenza sul diodo di recupero o sul commutatore secondario saranno proporzionali al tempo di funzionamento in conduzione di questi. Perciò, i sistemi 140 progettati per funzionare con un duty cycle basso, saranno affetti da grandi perdite di potenza nel diodo di recupero o nel commutatore secondario, e per tali sistemi è conveniente considerare la progettazione di un convertitore buck sincrono. Consideriamo per esempio un alimentatore per computer, dove l'ingresso sia di 5V, l'uscita di 3.3V e la corrente di carico di 10A. In questo caso, il duty cycle sarà del 66% e il diodo sarà in conduzione per il 34% del tempo. Un tipico diodo con tensione diretta di 0.7V sarebbe affetto da perdite per 2.38W. Un MOSFET ben selezionato con una RDSon di 0.015Ω, dissiperebbe solamente 0.51W di perdite di conduzione diretta. Questo si traduce in un miglioramento di efficienza e riduzione di calore dissipato. I vantaggi di un convertitore buck sincrono non arrivano senza un costo. Per cominciare il commutatore secondario costa tipicamente più del diodo di recupero. Inoltre la complessità del convertitore viene aumentata a causa della necessità di inserire un pilota con uscita complementare per il commutatore secondario. Tale pilota deve prevenire che ambedue i commutatori vengano abilitati allo stesso tempo, un problema detto "shoot-through". La tecnica più semplice per evitare il verificarsi di questo problema è l'inserimento di un ritardo di tempo tra lo spegnimento di S1 e l'accensione di S2, e viceversa. Comunque, impostando questo ritardo abbastanza lungo da assicurarsi che S1 e S2 non siano mai accesi contemporaneamente provocherà un'ulteriore perdita. Una tecnica migliorata per prevenire questa condizione è conosciuta come protezione adattiva di "non-sovrapposizione" (overlap), nella quale la tensione al nodo dei commutatori (il punto in cui S1, S2 e L sono connessi assieme) viene controllata per determinare il suo stato. Quando la tensione del nodo passa una soglia predefinita, viene fatto passare il tempo di ritardo. Il pilota può quindi adattarsi ai molti tipi di commutatori senza le eccessive perdite di potenza che la mancanza di flessibilità di un tempo di non sovrapposizione fisso potrebbe portare. 5.2.2 Descrizione del progetto Il progetto che ci apprestiamo a considerare riguarda il dimensionamento di un convertitore buck low power a rettificazione sincrona con un sistema a controllo ibrido (fig. 5.16). 141 Fig. 5.16 Un convertitore con queste caratteristiche è pensato per venire incontro alle esigenze sempre più pressanti dei dispositivi portatili come laptop, palmari e cellulari che, avendo a disposizione una batteria con energia immagazzinata evidentemente limitata, richiedono da un convertitore DC-DC un rendimento il più possibile alto e costante a fronte di un ampio range sia del carico in uscita che dello stato di carica della batteria. Nei sistemi convenzionali a frequenza di switching fissata, il valore della frequenza è selezionato come compromesso tra due esigenze contrastanti: non troppo alto per non aumentare le perdite di switching e non troppo basso per essere poi costretti a scegliere valori troppo elevati per l’induttanza e la capacità. Infatti, essendo la pulsazione di taglio del filtro LC pari a ω 0 = 1 / LC , se la frequenza del segnale in ingresso al filtro è molto bassa siamo costretti a scegliere una ω 0 ancor più bassa e di conseguenza valori molto alti per L e C. In fig. 5.17 è mostrato un grafico che illustra la dipendenza del volume occupato (totale e dei singoli componenti circuitali) dalla frequenza di switching in un convertitore buck convenzionale: è evidente come alle basse frequenze si ha un importante impatto volumetrico determinato sia dal condensatore ma soprattutto dall’induttore. 142 Fig. 5.17 D’altra parte, i sistemi a frequenza fissata consentono un dimensionamento agevole dei componenti dato che non bisogna prevedere particolari situazioni di funzionamento del sistema. Essi però hanno la grave pecca di presentare una significativa diminuzione del rendimento in corrispondenza di correnti di carico in uscita piuttosto basse. Infatti al diminuire della corrente di carico diminuisce ovviamente anche la potenza sul carico, mentre le perdite di potenza presentano solo una leggera diminuzione. In questo contesto è importante precisare che le perdite di un convertitore possono essere classificate in 3 categorie: • Perdite di conduzione, dipendenti dal carico e dovute alla RON dei Mosfet, alla resistenza serie equivalente di condensatore e induttore, ecc. • Perdite di switching, dipendenti dalla frequenza di switching e dovute alle capacità di uscita di Mosfet e diodi, perdite di gate drive, perdite relative al nucleo dell’induttore (core), ecc. • Perdite fisse, dovute alla corrente assorbita dal sistema di controllo in stand-by, alle correnti di leakage di Mosfet e diodi, ecc. 143 Per risolvere questo grave problema è stato proposto in [59] l’utilizzo di un sistema a frequenza variabile. Un sistema siffatto presenta la peculiarità di variare la frequenza di switching in funzione del carico: se il carico è elevato allora la frequenza è massima, mentre al diminuire del carico diminuisce contemporaneamente anche la frequenza di switching riducendo notevolmente le perdite di switching. In fig. 5.18 è possibile apprezzare qualitativamente la differenza di prestazione dei due sistemi in corrispondenza di carichi leggeri. Fig. 5.18 144 D’altra parte i sistemi a frequenza variabile, presentando un range di frequenza molto ampio, sono caratterizzati da una difficoltà intrinseca nella scelta dei componenti passivi. Per risolvere questi problemi è stata proposta in [60] una strategia di controllo ibrida del convertitore. Il principio di funzionamento è relativamente semplice: per carichi alti il convertitore lavora in modalità CCM (fig. 5.19) e una eventuale lieve diminuzione del carico non pregiudica particolarmente il rendimento consentendo di utilizzare una frequenza di switching fissa (la massima del sistema) pari a fs = Vo Vin ⋅ t on con un duty cycle D = f s ⋅ t on = (5.2) Vo e t on tempo di conduzione del PMOS. Vin In questo contesto la corrente picco-picco nell’induttore I pp , il suo picco massimo I p e il suo picco minimo I v sono pari rispettivamente a I pp = (Vin − Vo )Vo L ⋅ f s ⋅ Vin I p = I o + I pp / 2 I v = I o − I pp / 2 Al diminuire del carico si verifica che, superata una certa soglia, il convertitore entra in modalità DCM (fig. 5.20) e, da questo punto in poi, il sistema di controllo provvede a regolare la frequenza di switching in accordo con la corrente media di carico I o secondo la formula fs = 2 ⋅ L ⋅ Vo Io t ⋅ Vin (Vin − Vo ) 2 on (5.3) 145 In questa modalità i tempi di conduzione del PMOS e dell’ NMOS sono pari rispettivamente a D1 = D2 = I p ⋅ L ⋅ fs Vin − Vo I p ⋅ L ⋅ fs Vo Fig. 5.19 - CCM Fig. 5.20 - DCM Appare chiaro, quindi, che uguagliando le due formule (5.2 e 5.3) delle frequenze di switching nel caso CCM e nel caso DCM possiamo ricavare il valore della corrente di commutazione I COM cioè quel valore della corrente di carico in corrispondenza della quale si ha la commutazione da DCM a CCM o viceversa (a 146 seconda che il valore della corrente di carico stia aumentando o diminuendo). Per la precisione questo valore risulta essere pari a I COM = (Vin − Vo ) ⋅ t on 2L (5.4) I vantaggi del controllo ibrido sono evidenti dal grafico qualitativo riassuntivo in fig. 5.21 in cui con la linea continua (a) viene indicato proprio il grafico relativo ad un sistema ibrido, mentre con (b) e (c) sono indicati rispettivamente i grafici di sistemi a frequenza variabile e fissa. Appare evidente come nel caso del controllo ibrido si riesce ad ottenere una performance del rendimento ottimale essendo quest’ultimo piuttosto indipendente dal carico. A differenza del controllo puramente variabile, però, abbiamo ridotto il range di frequenza richiesto in quanto tutta la parte relativa alla modalità CCM è contraddistinta da un frequenza fissa. Questa riduzione del range di frequenza permette una scelta più semplice dei componenti passivi. Fig. 5.21 Il rendimento del convertitore è definito dalla formula E= Pload Pload + Ploss 147 ove Pload è la potenza media sul carico e Ploss è la potenza persa, dovuta a una serie di contributi, illustrati in Tab. 5.2 (perdite di conduzione) e in Tab. 5.3 (perdite di switching, di gate drive e di core). High Side Switch Pq1 Low Side Switch Pq 2 Winding Resistance Pwr Capacitor ESR Pesr Sensing Resistor Psen CCM DCM ( I p2 + I p I v + I v2 ) ⋅ D ⋅ RON I p2 ⋅ D1 ⋅ RON 3 3 ( I p2 + I p I v + I v2 ) ⋅ (1 − D) ⋅ RON I p2 ⋅ D2 ⋅ RON 3 3 ( I p2 + I p I v + I v2 ) ⋅ Rl I p2 ⋅ ( D1 + D2 ) ⋅ Rl 3 3 1 I p − Iv 3 2 2 ⋅ Rc 3 3 Ip VIN ⋅ Rc ⋅ D1 IO +(I p − IO) ⋅ + I p ⋅ IO ⋅ ( − IO) VO ⋅ I p 3 2 ( I p2 + I p I v + I v2 ) ⋅ (1 − D) ⋅ RS I p2 ⋅ D2 ⋅ RS 3 3 Tab. 5.2 – Perdite di conduzione Capacitive Turn On CCM DCM 2 (C oss _ p + C oss _ n ) ⋅ V IN2 ⋅ f s 3 2 [C oss _ p ⋅ (V IN − VO ) 2 + C oss _ n ⋅ V IN2 ] ⋅ f s 3 1 V IN ⋅ ( I p ⋅ t f _ p + I v ⋅ t f _ n ) ⋅ f s 4 1 V IN ⋅ I p ⋅ t f _ p ⋅ f s 4 Pturn −on Turn off Overlapping Pover Gate drive loss (C iss _ p + C iss _ n ) ⋅ VGS2 ⋅ f s (C iss _ p + C iss _ n ) ⋅ VGS2 ⋅ f s Pgate Core loss k ⋅ I p2 ⋅ f s k ⋅ I p2 ⋅ f s Pcore Tab. 5.3 – Perdite di switching, di gate drive e di core 148 La potenza persa è pertanto pari a Ploss = Pq1 + Pq 2 + Pwr + Pesr + Psen + Pturn − on + Pover + Pgate + Pcore ove • Pq1 e Pq 2 rappresentano rispettivamente la potenza dissipata dal PMOS e dall’NMOS in conduzione con RON resistenza equivalente del MOS acceso • Pwr è la potenza dissipata dalla resistenza parassita Rl dell’induttore • Pesr è la potenza relativa la resistenza serie equivalente Rc del condensatore • Psen è la potenza dissipata dal sensore con resistenza equivalente Rs • Pturn −on è la potenza dissipata dai MOS in fase di accensione, con C oss capacità di uscità dei MOS • Pover è la potenza di overlapping, dissipata quando i MOS si spengono con fall-time t f • Pgate è la potenza relativa al gate, con C iss capacità di ingresso dei MOS • Pcore è la potenza relativa al nucleo (core) dell’induttore, con k costante adimensionale Altro parametro importante da considerare è il valore minimo del condensatore C che dipende dal ripple desiderato in uscita ed è pari a : C = [Vo (1 − D)] /(8 L ⋅ f s2 ⋅ ∆Vc ) con ∆Vc ripple in uscita. 149 Una volta illustrato il funzionamento di questo convertitore, non ci resta che definire gli obiettivi di ottimizzazione circuitale. Quello che intendiamo fare è stabilire i valori di frequenza di switching massima (in CCM) e induttanza per minimizzare l’ingombro (espresso in termini di diametro dell’induttore, avente le altre dimensioni geometriche fissate, e valore della capacità C) e massimizzare il rendimento di un convertitore buck a controllo ibrido che riduca una tensione continua in ingresso di 5V a una continua in uscita di 3.3V con carico massimo di 500mA. Per eseguire questa ottimizzazione abbiamo utilizzato il modello di convertitore fin qui descritto e illustrato in [57] impiegando le relazioni costitutive all’interno dell’algoritmo di ottimizzazione NSGA-II. Il listato Matlab della valutazione delle funzioni obiettivo è riportato in Appendice al paragrafo 7.1.5. In questa descrizione abbiamo utilizzato il PMOS STD30PF03L della STMicroelectronics e l’NMOS STB60NH02L sempre della STMicroelectronics che presentano caratteristiche specifiche per essere utilizzati in convertitori DC-DC low power. Abbiamo inoltre utilizzato un induttore avvolto in aria con altezza fissata a 10mm e diametro del filo di 0.30mm. Il condensatore che abbiamo considerato è al tantalio (ma avremmo potuto scegliere anche uno ceramico) che presenta una bassa ESR, minore del decimo di ohm. Abbiamo inoltre considerato un ripple in uscita in condizioni di pieno carico pari al 2.5%. 5.2.3 Calcolo del fronte di Pareto Il problema così impostato è stato sottoposto all’algoritmo di ottimizzazione con le due variabili di decisione L (Induttanza, con range di ricerca da 1 a 50 µH) e f (frequenza di switching, con range da 0.1 a 20 MHz). Le funzioni obiettivo da minimizzare che sono state considerate sono il diametro induttore, C (Capacità) e la Perdita (cioè il rapporto tra la potenza persa Ploss e la potenza totale Pload + Ploss ). Abbiamo così settato l’algoritmo con una popolazione di 600 individui e 250 generazioni e dopo un tempo di elaborazione di 54’42’’ abbiamo ottenuto il fronte di Pareto di cui riportiamo le viste in figg.5.22, 5.23, 5.24 e 5.25 ottenute ruotando il grafico intorno all’asse z in senso antiorario. Come è possibile osservare, l’insieme dei punti ottenuti definisce una superficie limite dello spazio volumetrico tridimensionale delle tre funzioni obiettivo. 150 0.025 Diam.ind.[m] 0.02 0.015 0.01 Scelta progettuale 0.005 0 5 0.8 4 3 0.6 0.4 2 Capacità [uF] 1 Perdita (1-E) 0.2 0 Fig. 5.22 – Variabili di decisione: Induttanza, Frequenza di switching. Vista 1 0.025 Diam.ind.[m] 0.02 0.015 0.01 Scelta progettuale 0.005 0 0 0.8 1 0.6 Perdita (1-E) 2 0.4 3 0.2 -6 x 10 Capacità [uF] 4 0 5 Fig. 5.23 – Variabili di decisione: Induttanza, Frequenza di switching. Vista 2 151 0.025 Diam.ind.[m] 0.02 0.015 0.01 0.005 0 Scelta progettuale 0 0 1 2 Capacità [uF] 0.2 3 0.6 4 0.4 Perdita (1-E) 0.8 5 Fig. 5.24 – Variabili di decisione: Induttanza, Frequenza di switching. Vista 3 0.025 Diam.ind.[m] 0.02 0.015 4 0.01 3 0.005 Scelta progettuale 2 0 0 0.1 Perdita (1-E) 0.2 1 0.3 0.4 0.5 0.6 0.7 0 Capacità [uF] Fig. 5.25 – Variabili di decisione: Induttanza, Frequenza di switching. Vista 4 152 Scelta progettuale Una volta ottenuto l’output grafico dell’algoritmo per una interpretazione qualitativa dei risultati, abbiamo proceduto con l’operare una serie di scelte per cercare le soluzioni che rispettassero dei particolari requisiti di progetto. Più precisamente, in Tab. 5.4 è riportata una selezione di punti rispondenti a due precisi requisiti di progetto: rendimento superiore all’88% e un valore di capacità inferiore a 1 µF. Induttanza Frequenza switching (H) (Hz) 8.3247682e-006 2.7773295e-006 1.1424332e-006 7.6320946e-006 1.1767771e-006 2.2250564e-006 8.7538745e-006 2.3316639e-006 7.7597078e-006 8.6443538e-006 2.4457267e-006 9.0672228e-006 7.3490038e-006 1.7701499e-006 4.7685316e-006 5.6560252e+005 8.8838827e+005 1.4465522e+006 5.1118679e+005 1.2425228e+006 1.1578371e+006 8.3281928e+005 1.1615601e+006 5.8053750e+005 6.2343361e+005 8.5419996e+005 4.5461957e+005 7.3736884e+005 1.1568525e+006 8.0204913e+005 Perdita (1-E) 7.7072366e-002 8.6855756e-002 1.1692640e-001 7.3034743e-002 1.0696053e-001 1.0074523e-001 9.2914332e-002 1.0102432e-001 7.7086153e-002 8.0819635e-002 8.4950232e-002 7.1926891e-002 8.5353627e-002 1.0071212e-001 8.4872714e-002 Capacità Diametro Ind. (F) (mm) 6.3834300e-007 7.7556086e-007 7.1113147e-007 8.5240488e-007 9.3572006e-007 5.6991873e-007 2.7999293e-007 5.4038041e-007 6.5004435e-007 5.0598305e-007 9.5262487e-007 9.0714848e-007 4.2545231e-007 7.1760077e-007 5.5419462e-007 8.7127942e-003 5.0325151e-003 3.2276526e-003 8.3424431e-003 3.2758084e-003 4.5044513e-003 8.9345265e-003 4.6110981e-003 8.4118993e-003 8.8784602e-003 4.7225367e-003 9.0930279e-003 8.1862616e-003 4.0176898e-003 6.5942243e-003 Tab. 5.4 In particolare, in rosso è evidenziata la soluzione su cui è caduta la nostra scelta. Grazie a questa soluzione abbiamo ottenuto un valore di rendimento massimo in CCM pari al 90% con un diametro dell’induttore di 4.5mm e un valore di capacità di 569 nF molto vicino al commerciale 560nF. Per ottenere questi risultati l’algoritmo ha calcolato un valore della frequenza di switching di 1.16 MHz e un valore dell’induttanza di 2.22 µH, molto vicino al 2.2 µH commerciale (la Datatronic distribuisce un induttore schermato SMD della serie DR331-8 proprio con questo valore di induttanza). Inoltre, dalla (5.4) è stato possibile ricavare la corrente media di carico di commutazione I COM pari a 218 mA a cui corrisponde un rendimento ECOM pari all’85%. Nelle figg. 5.26 e 5.27 sono riportati i grafici delle simulazioni Spice del convertitore così dimensionato: in particolare nella fig. 5.26 è osservabile l’andamento 153 del transitorio, mentre nella 5.27 è illustrato in dettaglio l’andamento a regime della tensione e della corrente nel carico (rispettivamente indicati con il grigio e il rosso) e il classico andamento della corrente nell’induttore (in blu). In verde, invece, è illustrato il grafico della tensione di controllo con una rappresentazione in logica negativa per facilitarne la lettura: quando questo livello di tensione è alto (5V) il PMOS è acceso e la tensione in ingresso è inviata direttamente al filtro LC; viceversa quando il livello è basso (0V) il PMOS è spento e la tensione in ingresso è scollegata dal filtro. Fig. 5.26 Fig. 5.27 E’ importante sottolineare che, una volta determinati i requisiti minimi di progetto, la scelta della soluzione più idonea per il caso in esame non è assolutamente banale. Infatti questi algoritmi essendo basati su procedimenti squisitamente analitici non tengono assolutamente conto del dominio e della natura del problema. Per esempio sappiamo benissimo che i valori commerciali dei condensatori sono tabellati e ben definiti, mentre l’output dell’algoritmo fornisce una serie di valori non compatibili con gli standard in commercio. Appare chiaro, quindi, come un primo passo per una possibile “personalizzazione” dell’algoritmo in funzione del dominio di ricerca sia quello di discretizzare sia i valori di scelta della variabile di decisione che quelli relativi alle funzioni obiettivo considerate. 154 Ad ogni modo, il convertitore così dimensionato con i valori di induttanza e capacità presenta un funzionamento che può essere così descritto: quando il carico è massimo (500mA) si ha un rendimento del 90% con la frequenza di switching fissa a 1.16 MHz; al diminuire della corrente di carico, rimanendo comunque in CCM, la frequenza rimane ancora fissa al precedente valore e il rendimento scende contestualmente al carico, fino a quando si arriva per I O = I COM = 218 mA, alla soglia di commutazione CCM → DCM con un rendimento dell’85%. Se il carico continua a diminuire oltre questa soglia il convertitore entra definitivamente in DCM e il sistema di controllo provvede a regolare la frequenza di switching in accordo con la (5.3) mantenendo così il rendimento all’incirca costante con l’ultimo valore riscontrato. 155 156 6 Conclusioni e sviluppi futuri In conclusione di questo lavoro di tesi è possibile riepilogare sinteticamente i più importanti concetti introdotti e le considerazioni principali derivate dallo studio di alcuni casi test. Possiamo innanzitutto chiarire che quello dell’ottimizzazione è un concetto fondamentale in molte discipline, con particolare riferimento a quelle ingegneristiche. In particolare gli algoritmi di ottimizzazione multiobiettivo, a differenza dei classici monobiettivo, consentono al progettista di avere una visuale più chiara e completa del problema fornendo tutte le informazioni utili per interpretare le dinamiche del sistema in esame e scegliere i parametri migliori per fare in modo che tutti gli obiettivi considerati rientrino nei requisiti di progetto. Trovare un metodo di ottimizzazione valido per un campo di impiego particolare non sempre è agevole e spesso richiede una forte conoscenza del dominio di lavoro. Esistono però delle tecniche di ottimizzazione denominate stocastiche che hanno la peculiarità di riuscire ad analizzare in maniera approfondita anche domini totalmente sconosciuti al progettista. In queste tecniche stocastiche rientrano gli algoritmi evolutivi e, soprattutto, gli algoritmi genetici oggi molto diffusi. Questi algoritmi sfruttano i concetti naturali dell’evoluzione e della mutazione genetica per procedere con delle ricerche di soluzioni attraverso continui “miglioramenti”. Le soluzioni del problema, infatti, rappresentate dagli individui di una popolazione creata ad hoc, possono evolvere di generazione in generazione migliorando il proprio patrimonio genetico e quindi, traslando il concetto al campo ingegneristico, avvicinandosi sempre di più alle soluzioni ottimali scartando passo dopo passo le soluzioni inequivocabilmente peggiori. Questo modo di procedere ha prodotto negli ultimi anni una serie di risultati importanti in vari settori e in particolare nel campo dell’ingegneria elettronica ed 157 elettrica suggerendo così una serie di interventi migliorativi su tecnologie già in uso nel campo dell’ottimizzazione circuitale. Dopo aver analizzato le varie tecniche in circolazione per effettuare procedure di ottimizzazione multiobiettivo con criteri evolutivi, abbiamo concentrato l’attenzione su un particolare algoritmo, l’ NSGA-II (Non-dominated Sorting Genetic Algorithm II). Questo “all purpose algorithm” molto popolare ha subìto nel tempo una serie di miglioramenti che lo hanno reso ad oggi uno degli algoritmi di riferimento quando si tratta di valutare le prestazioni di una nuova procedura di ottimizzazione. Una volta familiarizzato con questo algoritmo, sottolineando le notevoli doti di precisione, convergenza e di non eccessivo peso computazionale, abbiamo sottoposto ad esso la ricerca di soluzioni ottime per la progettazione di 2 circuiti. Per il primo circuito, un raddrizzatore a doppia semionda, abbiamo innanzitutto mostrato la differenza tra ottimizzazione monobiettivo (tramite la tecnica della somma pesata) e multiobiettivo: è apparso immediatamente come questa seconda tecnica sia più versatile e progettualmente utile in quanto abbiamo ottenuto un set di soluzioni ottime, tutte non dominate, a differenza di una sola soluzione del caso monobiettivo ottenuta, tra l’altro, con una dispendiosa ricerca “manuale” dell’esatto valore dei pesi da porre nella somma degli obiettivi. Invece, il secondo problema esaminato ha posto l’attenzione su un caso reale ed attuale di progettazione in quanto si è proceduti con l’ottimizzazione di un buck converter low power a rettificazione sincrona e controllo ibrido. Procedendo ad una simulazione con un notevole numero di individui-soluzione nella popolazione e molte generazioni per garantire una buona precisione nei risultati, abbiamo ottenuto un notevole numero di punti-soluzione nello spazio degli obiettivi che ci ha permesso, con una adeguata analisi, di procedere alla selezione della soluzione migliore in base ai vari requisiti di progetto e, non da ultimo, in base alla reperibilità commerciale dei singoli componenti. Il trend attuale nella progettazione ottima circuitale tramite schemi evolutivi multiobiettivo è orientato su vari fronti: in pratica nessuno degli algoritmi multiobiettivo evolutivi sin qui esaminati viene utilizzato tal quale, mentre si procede spesso ad un affinamento delle tecniche di ricerca a seconda del campo operativo che viene analizzato. Questa tendenza porta a fornire “on demand” l’algoritmo così raffinato e particolarizzato al preciso campo applicativo per il quale è stato pensato. 158 Parallelamente a questo, vi è il continuo sviluppo di modelli matematici per descrivere il funzionamento dei vari dispositivi. Attualmente, infatti, queste procedure di ottimizzazione sono sempre più utilizzate per progettare sistemi estremamente complessi come circuiti integrati nei quali si raggiunge un notevole livello di integrazione. Sarebbe perciò impensabile destinare le risorse a disposizione solo per miglioramenti in termini di pura efficienza algoritmica trascurando il fatto che poi, passando all’analisi di sistemi complessi, il gran numero di modelli da analizzare costituirebbe un collo di bottiglia inaccettabile per la resa di una procedura di ottimizzazione. Gli sforzi della comunità scientifica, pertanto, sono orientati al raggiungimento di un reale equilibrio tra affidabilità e precisione degli algoritmi evolutivi e di una adeguata caratterizzazione dei dispositivi, con l’intento di fornire all’industria di settore uno strumento sempre più efficiente e performante. 159 160 7 Appendice 7.1 Listati Matlab 7.1.1 NSGA-II 7.1.1.1 Funzione per l’inizializzazione (initialize_variables.m) % Initialize population % % function f = initialize_variables(N,problem) % N - Population size % problem - takes integer values 1 and 2 where, % ’1’ for MOP1 % ’2’ for MOP2 % % This function initializes the population with N individuals % and each individual having M decision variables based on the % selected problem. % M = 6 for problem MOP1 and M = 12 for problem MOP2. The % objective space for MOP1 is 2 dimensional while for MOP2 is % 3 dimensional. function f = initialize_variables(N,problem) % Both the MOP’s given in Homework # 5 has 0 to 1 as its range % for all the decision variables. min = 0; max = 1; switch problem case 1 M = 6; K = 8; 161 case 2 M = 12; K = 15; end for i = 1 : N % Initialize the decision variables for j = 1 : M f(i,j) = rand(1); % i.e f(i,j) = min + (max - min)*rand(1); end % Evaluate the objective function f(i,M + 1: K) = evaluate_objective(f(i,:),problem); end } 7.1.1.2 Sorting non-dominato e crowding distance (non_domination_sort.m) %% Non-Donimation Sort % This function sort the current popultion based on non- % % domination. All the individuals in the first front are given % a rank of 1, the second front individuals are assigned rank 2 % and so on. After assigning the rank the crowding in each front % is calculated. function f = non_domination_sort_mod(x,problem) [N,M] = size(x); switch problem case 1 M = 2; V = 6; case 2 M = 3; V = 12; end front = 1; % There is nothing to this assignment, used only to manipulate % easily in MATLAB. F(front).f = []; individual = []; for i = 1 : N % Number of individuals that dominate this individual individual(i).n = 0; % Individuals which this individual dominate individual(i).p = []; for j = 1 : N dom_less = 0; 162 dom_equal = 0; dom_more = 0; for k = 1 : M if (x(i,V + k) < x(j,V + k)) dom_less = dom_less + 1; elseif (x(i,V + k) == x(j,V + k)) dom_equal = dom_equal + 1; else dom_more = dom_more + 1; end end if dom_less == 0 & dom_equal ~= M individual(i).n = individual(i).n + 1; elseif dom_more == 0 & dom_equal ~= M individual(i).p = [individual(i).p j]; end end if individual(i).n == 0 x(i,M + V + 1) = 1; F(front).f = [F(front).f i]; end end % Find the subsequent fronts while ~isempty(F(front).f) Q = []; for i = 1 : length(F(front).f) if ~isempty(individual(F(front).f(i)).p) for j = 1 : length(individual(F(front).f(i)).p) individual(individual(F(front).f(i)).p(j)).n = ... individual(individual(F(front).f(i)).p(j)).n - 1; if individual(individual(F(front).f(i)).p(j)).n == 0 x(individual(F(front).f(i)).p(j),M + V + 1) = ... front + 1; Q = [Q individual(F(front).f(i)).p(j)]; end end end end front = front + 1; F(front).f = Q; end [temp,index_of_fronts] = sort(x(:,M + V + 1)); for i = 1 : 163 length(index_of_fronts) sorted_based_on_front(i,:) = x(index_of_fronts(i),:); end current_index = 0; % Find the crowding distance for each individual in each front for front = 1 : (length(F) - 1) objective = []; distance = 0; y = []; previous_index = current_index + 1; for i = 1 : length(F(front).f) y(i,:) = sorted_based_on_front(current_index + i,:); end current_index = current_index + i; % Sort each individual based on the objective sorted_based_on_objective = []; for i = 1 : M [sorted_based_on_objective, index_of_objectives] = ... sort(y(:,V + i)); sorted_based_on_objective = []; for j = 1 : length(index_of_objectives) sorted_based_on_objective(j,:) = y(index_of_objectives(j),:); end f_max = ... sorted_based_on_objective(length(index_of_objectives), V + i); f_min = sorted_based_on_objective(1, V + i); y(index_of_objectives(length(index_of_objectives)),M+V+1+i)... = Inf; y(index_of_objectives(1),M + V + 1 + i) = Inf; for j = 2 : length(index_of_objectives) - 1 next_obj = sorted_based_on_objective(j + 1,V + i); previous_obj = sorted_based_on_objective(j - 1,V + i); if (f_max - f_min == 0) y(index_of_objectives(j),M + V + 1 + i) = Inf; else y(index_of_objectives(j),M + V + 1 + i) = ... (next_obj - previous_obj)/(f_max - f_min); end end end distance = []; distance(:,1) = zeros(length(F(front).f),1); 164 for i = 1 : M distance(:,1) = distance(:,1) + y(:,M + V + 1 + i); end y(:,M + V + 2) = distance; y = y(:,1 : M + V + 2); z(previous_index:current_index,:) = y; end f = z(); } 7.1.1.3 Tournament selection (tournament_selection.m) function f=selection_individuals(chromosome,pool_size,tour_size) % function selection_individuals(chromosome,pool_size,tour_size) % function selection_individuals(chromosome,pool_size,tour_size) % is the selection policy for selecting the individuals for the % mating pool. The selection is based on tournament selection. % Argument ’chromosome’ is the current generation population % from which the individuals are selected to form a % mating pool of size ’pool_size’ after performing tournament % selection, with size of the tournament being ’tour_size’. % By varying the tournament size the selection pressure can be % adjusted. [pop,variables] = size(chromosome); rank = variables - 1; distance = variables; for i = 1 : pool_size for j = 1 : tour_size candidate(j) = round(pop*rand(1)); if candidate(j) == 0 candidate(j) = 1; end if j > 1 while ~isempty(find(candidate(1 : j - 1) == candidate(j))) candidate(j) = round(pop*rand(1)); if candidate(j) == 0 candidate(j) = 1; end end end end 165 for j = 1 : tour_size c_obj_rank(j) = chromosome(candidate(j),rank); c_obj_distance(j) = chromosome(candidate(j),distance); end min_candidate = ... find(c_obj_rank == min(c_obj_rank)); if length(min_candidate) ~= 1 max_candidate = ... find(c_obj_distance(min_candidate)==… max(c_obj_distance(min_candidate))); if length(max_candidate) ~= 1 max_candidate = max_candidate(1); end f(i,:) = chromosome(candidate(min_candidate(max_candidate)),:); else f(i,:) = chromosome(candidate(min_candidate(1)),:); end end } 7.1.1.4 Operatore genetico (genetic_operator.m) function f = genetic_operator(parent_chromosome,pro,mu,mum); [N,M] = size(parent_chromosome); switch pro case 1 M = 2; V = 6; case 2 M = 3; V = 12; end p = 1; was_crossover = 0; was_mutation = 0; l_limit = 0; u_limit = 1; for i = 1 : N if rand(1) < 0.9 child_1 = []; child_2 = []; parent_1 = round(N*rand(1)); if parent_1 < 1 parent_1 = 1; end parent_2 = round(N*rand(1)); 166 if parent_2 < 1 parent_2 = 1; end while isequal (parent_chromosome(parent_1,:),parent_chromosome(parent_2,:)) parent_2 = round(N*rand(1)); if parent_2 < 1 parent_2 = 1; end end parent_1 = parent_chromosome(parent_1,:); parent_2 = parent_chromosome(parent_2,:); for j = 1 : V %% SBX (Simulated Binary Crossover) % Generate a random number u(j) = rand(1); if u(j) <= 0.5 bq(j) = (2*u(j))^(1/(mu+1)); else bq(j) = (1/(2*(1 - u(j))))^(1/(mu+1)); end child_1(j) = ... 0.5*(((1 + bq(j))*parent_1(j)) + (1 - bq(j))*parent_2(j)); child_2(j) = ... 0.5*(((1 - bq(j))*parent_1(j)) + (1 + bq(j))*parent_2(j)); if child_1(j) > u_limit child_1(j) = u_limit; elseif child_1(j) < l_limit child_1(j) = l_limit; end if child_2(j) > u_limit child_2(j) = u_limit; elseif child_2(j) < l_limit child_2(j) = l_limit; end end child_1(:,V + 1: M + V) = evaluate_objective(child_1,pro); child_2(:,V + 1: M + V) = evaluate_objective(child_2,pro); was_crossover = 1; was_mutation = 0; else 167 parent_3 = round(N*rand(1)); if parent_3 < 1 parent_3 = 1; end % Make sure that the mutation does not result in variables out % of the search space. For both the MOP’s the range for decision % space is [0,1]. In case different variables have different % decision space each variable can be assigned a range. child_3 = parent_chromosome(parent_3,:); for j = 1 : V r(j) = rand(1); if r(j) < 0.5 delta(j) = (2*r(j))^(1/(mum+1)) - 1; else delta(j) = 1 - (2*(1 - r(j)))^(1/(mum+1)); end child_3(j) = child_3(j) + delta(j); if child_3(j) > u_limit child_3(j) = u_limit; elseif child_3(j) < l_limit child_3(j) = l_limit; end end child_3(:,V + 1: M + V) = evaluate_objective(child_3,pro); was_mutation = 1; was_crossover = 0; end if was_crossover child(p,:) = child_1; child(p+1,:) = child_2; was_cossover = 0; p = p + 2; elseif was_mutation child(p,:) = child_3(1,1 : M + V); was_mutation = 0; p = p + 1; end end f = child; } 168 7.1.1.5 Valutazione della funzione obiettivo (evaluate_objective.m) function f = evaluate_objective(x,problem) % Function to evaluate the objective functions for the given % input vector x. x has the decision variables switch problem case 1 f = []; %% Objective function one f(1) = 1 - exp(-4*x(1))*(sin(6*pi*x(1)))^6; sum = 0; for i = 2 : 6 sum = sum + x(i)/4; end %% Intermediate function g_x = 1 + 9*(sum)^(0.25); %% Objective function one f(2) = g_x*(1 - ((f(1))/(g_x))^2); case 2 f = []; %% Intermediate function g_x = 0; for i = 3 : 12 g_x = g_x + (x(i) - 0.5)^2; end %% Objective function one f(1) = (1 + g_x)*cos(0.5*pi*x(1))*cos(0.5*pi*x(2)); %% Objective function two f(2) = (1 + g_x)*cos(0.5*pi*x(1))*sin(0.5*pi*x(2)); %% Objective function three f(3) = (1 + g_x)*sin(0.5*pi*x(1)); end } 7.1.1.6 Operatore di selezione (replace_chromosome.m) function f = replace_chromosome(intermediate_chromosome,pro,pop) [N,V] = size(intermediate_chromosome); switch pro case 1 M = 2; V = 6; 169 case 2 M = 3; V = 12; end % Get the index for the population sort based on the rank [temp,index] = sort(intermediate_chromosome(:,M + V + 1)); % Now sort the individuals based on the index for i = 1 : N sorted_chromosome(i,:) = intermediate_chromosome(index(i),:); end % Find the maximum rank in the current population max_rank = max(intermediate_chromosome(:,M + V + 1)); % Start adding each front based on rank and crowing distance % until the whole population is filled. previous_index = 0; for i = 1 : max_rank current_index = max(find(sorted_chromosome(:,M + V + 1) == i)); if current_index > pop remaining = pop - previous_index; temp_pop = ... sorted_chromosome(previous_index + 1 : current_index, :); [temp_sort,temp_sort_index] = ... sort(temp_pop(:, M + V + 2),’descend’); for j = 1 : remaining f(previous_index + j,:) = temp_pop(temp_sort_index(j),:); end return; elseif current_index < pop f(previous_index + 1 : current_index, :) = ... sorted_chromosome(previous_index + 1 : current_index, :); else f(previous_index + 1 : current_index, :) = ... sorted_chromosome(previous_index + 1 : current_index, :); return; end previous_index = current_index; end } 170 7.1.1.7 Script principale (nsga_2.m) %% Main Script % Main program to run the NSGA-II MOEA. % initialize_variables has two arguments; First being the % population size and the second the problem number. % ’1’ corresponds to MOP1 and ’2’ corresponds to MOP2. %% Initialize the variables % Declare the variables and initialize their values % pop - population % gen - generations % pro - problem number function nsga_2(); pop = 500; gen = 1000; pro = 2; switch pro case 1 M = 2; V = 6; case 2 M = 3; V = 12; end chromosome = initialize_variables(pop,pro); %% Sort the initialized population % Sort the population using non-domination-sort. This returns % two columns for each individual which are the rank and the % crowding distance corresponding to their position in the % front they belong. chromosome = non_domination_sort_mod(chromosome,pro);for i=1:gen %% Select the parents % Parents are selected for reproduction to generate offspringd. % The original NSGA-II uses a binary tournament selection % based on the crowded-comparision operator. The arguments are % pool - size of the mating pool. It is common to have this to % be half the population size. % tour - Tournament size. Original NSGA-II uses a % binary tournament % selection, but to see the effect of tournament size this is % kept arbitary, to be choosen by the user. pool = round(pop/2); tour = 2; parent_chromosome = tournament_selection(chromosome,pool,tour); 171 %% Perfrom crossover and Mutation operator % The original NSGA-II algorithm uses Simulated Binary Crossover % (SBX) and Polynomial crossover. Crossover probability pc = 0.9 % and mutation probability is pm = 1/n, where n is the number % of decision variables. % Both real-coded GA and binary-coded GA are implemented in the % original algorithm, while in this program only the real-coded % GA is considered. % The distribution indeices for crossover and mutation % operators as mu = 20 % and mum = 20 respectively. mu = 20; mum = 20; offspring_chromosome = genetic_operator(parent_chromosome,pro,mu,mum); %% Intermediate population % Intermediate population is the combined population of parents % and offsprings of the current generation. The population size % is almost 1 and half times the initial population. [main_pop,temp] = size(chromosome); [offspring_pop,temp] = size(offspring_chromosome); intermediate_chromosome(1:main_pop,:) = chromosome; intermediate_chromosome... (main_pop+1:main_pop+offspring_pop,1:M+V)= ... offspring_chromosome; %% Non-domination-sort of intermediate population % The intermediate population is sorted again based on non- % % domination sort before the replacement operator is % performed on the intermediate population. intermediate_chromosome = ... non_domination_sort_mod(intermediate_chromosome,pro); %% Perform Selection % Once the intermediate population is sorted only the best % % solution is selected based on it rank and crowding % distance. % Each front is filled in % ascending order until the addition of population % size is reached. The % last front is included in the population based % on the individuals with % least crowding distance 172 Chromosome=replace_chromosome(intermediate_chromosome,pro,pop); if ~mod(i,10) fprintf(’%d\n’,i); end end save solution.txt chromosome -ASCII switch pro case 1 plot(chromosome(:,V + 1),chromosome(:,V + 2),’*’); title(’MOP1 using NSGA-II’); xlabel(’f(x_1)’); ylabel(’f(x_2)’); case 2 plot3(chromosome(:,V + 1),chromosome(:,V + 2),... chromosome(:,V+ 3),’*’); title(’MOP2 using NSGA-II’); xlabel(’f(x_1)’); ylabel(’f(x_2)’); zlabel(’f(x_3)’); end } 7.1.2 Raddrizzatore – Simulazione 1 7.1.2.1 Script principale (elaborato.m) % OTTIMIZZAZIONE DI UN CIRCUITO RETTIFICATORE clc clear all close all global T altezza diametro Rload Vin freq Omega nT muZero muFe… eta global Ripple Rratio val_obj val_Ripple val_Rratio x2 t2… dcValue x2alt %paramteri circuito Rload=10; % [Ohm] resistenza di carico Vin=15; % [Volt]tensione di alimentazione freq=50; % [Hertz] frequenza di alimentazione Omega=2*pi*freq; % [rad/s] pulsazione T=linspace(0,pi/Omega,100); % [s] periodo nT=10; 173 %parametri induttore altezza=30*1e-3; % [m] altezza induttore diametro=15*1e-3; % [m] diametro induttore muZero=4*pi*1e-7; muFe=2000; eta=0.0175e-6; % [Ohm m] sez_ini=0.0005*1e-6; % [mq] resistività del rame sezione iniziale conduttore % -------------------------------------------------------------- %Ricerca del minimo della funzione obiettivo e stampa %risultati P0=[sez_ini]; P=fminsearch('obj',P0); disp('==================================================='); disp('La sezione del filo di rame è : [mmq]'); sezione=P(1); sezione_mmq=P(1)/1e-6 disp('Il diametro del filo è : [mm]'); diam_filo=2*sqrt(sezione/pi); diam_filo_mm=diam_filo/1e-3 figure plot(val_obj,'k') xlabel('Iterazione') ylabel('Funzione obiettivo') title('FUNZIONE OBIETTIVO') Ripple2=val_Ripple .* 100; figure plot(Ripple2,'b') xlabel('Iterazione') ylabel('Ripple [%]') title('RIPPLE') Ppar=val_Rratio*100; figure plot(Ppar,'r') xlabel('Iterazione') ylabel('Potenza dissipata da Rpar [%]') 174 dei title('POTENZA DISSIPATA DA RPAR') figure plot(t2,x2*Rload,'k',t2,dcValue*Rload,'r--',t2,x2alt*Rload,'b:') xlabel('Tempo [s]') ylabel('Tensione [V]') axis([0 0.1 -1 11]) legend('Tensione sul carico','Componente continua','Componente … alternata'); title('TENSIONE IN USCITA') 7.1.2.2 Funzione obiettivo (obj.m) function obj=obj(P) global T altezza diametro Rload Vin freq Omega nT muZero muFe global val_obj val_Ripple val_Rratio x2 t2 dcValue x2alt eta %calcolo induttanza sezione=P(1); nSpire=(altezza/sqrt(sezione/pi))/2; L=(muZero*muFe*nSpire^2*pi*(diametro/2)^2)/altezza; %induttanza[Henry] %calcolo resistenza parassita lunghezza=pi*diametro*nSpire; Rpar=eta*lunghezza/sezione; %Calcolo corrente iL in 1 periodo (x) e in nT periodi (x2) Rtot=Rload+Rpar; Phi=atan(Omega*L/Rtot); A=2*Vin*sin(Phi)/((1-exp(-pi*Rtot/Omega/L))*… sqrt(Rtot^2+Omega^2*L^2)); x=A*exp(-Rtot/L.*T)+Vin/sqrt(Rtot^2+Omega^2*L^2)*… sin(Omega.*T-Phi); t2=linspace(0,pi/Omega*nT,100*nT)'; x2=repmat(x',nT,1); % Calcolo Valore medio e Valore efficace Vmedio=mean(x2); x2alt=x2-Vmedio; % Componente alternata 175 lenght=size(x2alt); Veff=sqrt(sum(x2alt.^2)./lenght(1,1)); dcValue=ones(100*nT,1)*Vmedio; % Calcolo del Ripple e del Rratio Ripple=Veff/Vmedio; Rratio=Rpar/(Rpar+Rload); % Valutazione funzione obiettivo con relativi pesi c1=1; % "Peso" di Ripple nella funzione obiettivo c2=0.15; % "Peso" di Rratio nella funzione obiettivo obj= c1 * Ripple + c2 * Rratio; % funzione obiettivo Ripple Rratio L nSpire Vmedio %Valutazione parametri per la stampa dei grafici i=length(val_obj)+1; val_obj(i)=obj; i1=length(val_Ripple)+1; val_Ripple(i1)=Ripple; i2=length(val_Rratio)+1; val_Rratio(i2)=Rratio; 7.1.3 Raddrizzatore – Simulazione 2 7.1.3.1 Funzione obiettivo (evaluate_objective.m) function f = evaluate_objective(x, M, V) f = []; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %paramteri circuito Rload=10; % [Ohm] resistenza di carico Vin=15; % [Volt] tensione di alimentazione freq=50; % [Hertz] frequenza di alimentazione Omega=2*pi*freq; % [rad/s] 176 pulsazione T=linspace(0,pi/Omega,100); % [s] periodo nT=10; %parametri induttore diametro_mm=15; altezza=30*1e-3; % [m] altezza induttore diametro=diametro_mm*1e-3; % [m] diametro induttore muZero=4*pi*1e-7; muFe=2000; eta=0.0175e-6; % [Ohm m] resistività del rame %calcolo induttanza diam_filo_mm=x(1); diam_filo=diam_filo_mm*1e-3; sezione=pi*(diam_filo/2)^2; nSpire=(altezza/sqrt(sezione/pi))/2; L=(muZero*muFe*nSpire^2*pi*(diametro/2)^2)/altezza; %induttanza[Henry] %calcolo resistenza parassita lunghezza=pi*diametro*nSpire; Rpar=eta*lunghezza/sezione; %Calcolo corrente iL in 1 periodo (x) e in nT periodi (x2) Rtot=Rload+Rpar; Phi=atan(Omega*L/Rtot); A=2*Vin*sin(Phi)/((1-exp(-pi*Rtot/Omega/L))… *sqrt(Rtot^2+Omega^2*L^2)); y=A*exp(-Rtot/L.*T)+Vin/sqrt(Rtot^2+Omega^2*L^2)*… sin(Omega.*T-Phi); t2=linspace(0,pi/Omega*nT,100*nT)'; y2=repmat(y',nT,1); % Calcolo Valore medio e Valore efficace Vmedio=mean(y2); y2alt=y2-Vmedio; % Componente alternata lenght=size(y2alt); Veff=sqrt(sum(y2alt.^2)./lenght(1,1)); dcValue=ones(100*nT,1)*Vmedio; % Calcolo del Ripple e del Rratio 177 Ripple=Veff/Vmedio; Rratio=Rpar/(Rpar+Rload); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% f(1)=Ripple; f(2)=Rratio; % Check for error if length(f) ~= M error('The number of decision variables does not match you… previous input. Kindly check your objective function'); end 7.1.4 Raddrizzatore – Simulazione 3 7.1.4.1 Funzione obiettivo (evaluate_objective.m) function f = evaluate_objective(x, M, V) f = []; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %paramteri circuito Rload=10; % [Ohm] resistenza di carico Vin=15; % [Volt] tensione di alimentazione freq=50; % [Hertz] frequenza di alimentazione Omega=2*pi*freq; % [rad/s] T=linspace(0,pi/Omega,100); % [s] pulsazione periodo nT=10; %parametri induttore diametro_mm=x(2); altezza_mm=x(3); % [m] diametro=diametro_mm*1e-3; % [m] altezza induttore diametro induttore altezza=altezza_mm*1e-3; muZero=4*pi*1e-7; muFe=2000; eta=0.0175e-6; 178 % [Ohm m] resistività del rame %calcolo induttanza diam_filo_mm=x(1); diam_filo=diam_filo_mm*1e-3; sezione=pi*(diam_filo/2)^2; nSpire=(altezza/sqrt(sezione/pi))/2; L=(muZero*muFe*nSpire^2*pi*(diametro/2)^2)/altezza; %induttanza[Henry] %calcolo resistenza parassita lunghezza=pi*diametro*nSpire; Rpar=eta*lunghezza/sezione; %Calcolo corrente iL in 1 periodo (x) e in nT periodi (x2) Rtot=Rload+Rpar; Phi=atan(Omega*L/Rtot); A=2*Vin*sin(Phi)/((1-exp(-pi*Rtot/Omega/L))*… sqrt(Rtot^2+Omega^2*L^2)); y=A*exp(-Rtot/L.*T)+Vin/sqrt(Rtot^2+Omega^2*L^2)*… sin(Omega.*T-Phi); t2=linspace(0,pi/Omega*nT,100*nT)'; y2=repmat(y',nT,1); % Calcolo Valore medio e Valore efficace Vmedio=mean(y2); y2alt=y2-Vmedio; % Componente alternata lenght=size(y2alt); Veff=sqrt(sum(y2alt.^2)./lenght(1,1)); dcValue=ones(100*nT,1)*Vmedio; % Calcolo del Ripple e del Rratio Ripple=Veff/Vmedio; Rratio=Rpar/(Rpar+Rload); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% f(1)=Ripple; f(2)=Rratio; f(3)=10-Vmedio*10; % Check for error 179 if length(f) ~= M error('The number of decision variables does not match you… previous input. Kindly check your objective function'); end 7.1.5 Buck converter - Simulazione 7.1.5.1 Funzione obiettivo (evaluate_objective.m) function f = evaluate_objective(x, M, V) f = []; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Dati in ingresso L=x(1)*10^-6; %[inserire l'induttanza in uH] f=x(2)*10^6; %[inserire la frequenza in MHz] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Rapporto di trasformazione Vin=5; %[V] Vo=3.3; %[V] D=Vo/Vin; %duty cicle ton=D/f; %[s]; essendo f=Vo/(Vin*ton) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Corrente nell'induttore Io=0.5; %[A] carico Ipp=(Vin-Vo)*Vo/(L*f*Vin); %[A]correntepicco-picco nell'induttore Ip=Io+Ipp/2; Iv=Io-Ipp/2; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Caratteristiche dell'induttore li=10*10^-3; 180 %[m] lunghezza dell'induttore mu=4*pi*10^-7; % Permeabilità magnetica del vuoto eta=0.017*10^-6; %[ohm m] Resistività del rame df=0.3*10^-3; %[m] diametro del filo N=li/df; % Numero di spire di=2*sqrt(li*L/(pi*mu*N^2));%[m] diametro dell'induttore Rl=4*eta*N*di/df^2; %[ohm] Resistenza parassita dell'induttore %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Parametri del problema Vgs=5; delta=82.5*10^-3;%[V] Ripple consentito in uscita (2.5 %) Ronp=0.032; %[ohm] Ron del PMOS Ronn=0.012; %[ohm] Ron del NMOS Rc=100*10^-3; %[ohm] Resistenza parassita del condensatore (a % bassa esr al tantalio) Rs=100*10^-3; %[ohm] Resistenza del sensore di carico Coss_p=345*10^-12; %[F] Capacità in uscita del PMOS Coss_n=400*10^-12; %[F] Capacità in uscita del NMOS Ciss_p=1670*10^-12;%[F] Capacità in ingresso del PMOS Ciss_n=1400*10^-12;%[F] Capacità in ingresso del NMOS tf_p=26*10^-9; %[s] Fall time del PMOS tf_n=16*10^-9; %[s] Fall time del NMOS k=10^-9; % Costante adimensionale del nucleo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Potenze Pq1=(Ip^2+Ip*Iv+Iv^2)*D*Ronp/3;%[W]Potenza PMOS in conduzione Pq2=(Ip^2+Ip*Iv+Iv^2)*(1-D)*Ronn/3; %[W]Potenza NMOS in conduzione Pwr=(Ip^2+Ip*Iv+Iv^2)*Rl/3;%[W] Potenza parassita dell'induttore Pesr=(Rc/12)*(Ip-Iv)^2; %[W] Potenza parassita del condensatore Psen=(Ip^2+Ip*Iv+Iv^2)*(1-D)*Rs/3; %[W] Potenza dissipata dal sensore Pton=(2/3)*(Coss_p+Coss_n)*Vin^2*f; %[W] Potenza dovuta al capacitive turn on Pover=(1/4)*Vin*(Ip*tf_p+Iv*tf_n)*f; %[W] Potenza dovuta al turn off overlapping 181 Pgate=(Ciss_p+Ciss_n)*Vgs^2*f; %[W] Potenza dovuta al gate drive Pcore=k*Ip^2*f; %[W] Potenza dovuta al nucleo %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Ploss=Pq1+Pq2+Pwr+Pesr+Psen+Pton+Pover+Pgate+Pcore; %[W] Potenza totale di perdita Pload=Io*Vo; %[W] Potenza sul caico E=Pload/(Pload+Ploss); %Rendimento C=[Vo*(1-D)]/(8*L*f^2*delta); %[F] Capacità minima richiesta %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Funzioni obiettivo f(1)=1-E; f(2)=C; f(3)=di; %% Check for error if length(f) ~= M error('The number of decision variables does not match you previous input. Kindly check your objective function'); end 182 Bibliografia [1] Christian Magele. “Optimization in Electrical Engineering”. Institute for Fundamentals and Theory in Electrical Engineering. Technical University of Graz [2] Gianni di Pillo, Laura Palagi. “Note per il corso di Ottimizzazione”. Università degli studi di Roma “La Sapienza” [3] A.Agnetis. “Introduzione all’ottimizzazione non vincolata”. Università di Siena [4] A.Agnetis. “Introduzione all’ottimizzazione vincolata”. Università di Siena [5] Gianluigi Folino, “Algoritmi evolutivi e programmazione genetica: strategie di progettazione e parallelizzazione” ICAR-CNR , 2003 [6] Hans-Georg Beyer, “Evolution Strategies” Vorarlberg University of Applied, 2007 [7] Hans-Georg Beyer, “The theory of Evolution Strategy” Springer-Verlag, 2001 [8] Kalyanmoy Deb, “An introduction to genetic algorithms” Indian Institute of Technology, Kanpur [9] G.P.Liu, J.B.Yang, J.F.Whidborne “Multiobjective optimization and control” Research studies press LTD [10] N.Marco, J.A. Desideri, S.Lanteri “Multiobjective optimization in CFD by genetic algoritms” INRIA, 1999 [11] G.Liuzzi, “Appunti delle lezioni di ottimizzazione -Programmazione multiobiettivo” Dipartimento di Informatica e sistemistica, Università di Roma/Main_Pagem, 2006 [12] M.Farina, “Cost-effective evolutionary strategies for pareto optimal front approximation in multiobjective shape design optimization of electromagnetic devices” Dipartimento di Ingegneria Elettrica, Università di PAvia, 2001 [13] C.A. Coello Coello, G.B. Lamont, D.A. Van Veldhuizen, “Evolutionary algorithms for solving multi-objective problems”, Springer, 2007 183 [14] M.Farina, A.Bramanti, P. Di Barba “Combining global and local search of nondominated solutions in inverse electromagnetism” Evolutionary methods for design, optimization and control, 2002 [15] T. Arslan, D. H. Horrocks, E. Ozdemir “Structural Synthesis of Cell-based VLSI Circuits using a Multi-Objective Genetic Algorithm”. IEE Electronic Letters, 32(7):651–652, March 1996 [16] T. Arslan, E. Ozdemir, M. S. Bright, D. H. Horrocks “Genetic Synthesis Techniques for Low-Power Digital Signal Processing Circuits”. In Proceedings Of The IEE Colloquium On Digital Synthesis, pages 7/1–7/5, London, UK, February 1996. IEE [17] M. S. Bright. “Evolutionary Strategies for the High-Level Synthesis of VLSI Based DSP Systems for Low Power” . PhD thesis, University Of Wales Cardiff, School Of Engineering, Circuits And Systems Research Group, Cardiff,Wales, UK, October 1998 [18] M. S. Bright and T. Arslan “Multi-Objective Design Strategies for HighLevel Low-Power Design of DSP Systems”. In IEEE International Symposium on Circuits and Systems, ISCAS 99, volume 1, pages 80–83, Florida, USA, May–June 1999. [19] I. J. Ramırez Rosado and J. L. Bernal Agustın. “Reliability and Cost Optimization for Distribution Networks Expansion Using an Evolutionary Algorithm”. IEEE Transactions on Power Systems, 16(1):111–118, February 2001. [20] I. J. Ramiırez Rosado, J. L. Bernal Agustiın, L. M. Barbosa Proenca, and V. Miranda. “Multiobjective Planning of Power Distribution Systems Using Evolutionary Algorithms”. In M. H. Hamza, editor, 8th IASTED International Conference on Modelling, Identification and Control—MIC’99, pages 185–188, Innsbruck, Austria, February 1999 [21] D. Nam, Y. D. Seo, L.-J. Park, C. H. Park, and B. Kim. “Parameter Optimization of a Voltage Reference Circuit using EP”. In D. B. Fogel, editor, Proceedings of the 1998 International Conference on Evolutionary Computation, pages 245–266, Piscataway, New Jersey, 1998. IEEE. [22] R. P. Dick and N. K. Jha. “MOGAC: A Multiobjective Genetic Algorithm for Hardware-Software Co-synthesis of Hierarchical Heterogeneous Distributed Embedded Systems”. IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, 17(10):920–935, October 1998. [23] P. Alotto, A. V. Kuntsevitch, C. Magele, G. Molinari, C. Paul, K. Preis, M. Repetto, and K. R. Richter. “Multiobjective Optimization in Magnetostatics: A Proposal for Benchmark Problems”. Technical report, Institut fur Grundlagen und Theorie Electrotechnik, Technische University at Graz, Graz, Austria, 1996. http://www-igte.tu-graz.ac.at/team/berl01.htm 184 [24] O. A. Mohammed and G. F. Uler. “Genetic Algorithms for the Optimal Design of Electromagnetic Devices”. In Conference on the Annual Review of Progress in Applied Computational Electromagnetics, volume 11, pages 386–393, 1995. [25] L. Saludjian, J. L. Coulomb, and A. Izabelle. “Genetic Algorithm and Taylor Development of the Finite Element Solution for Shape Optimization of Electromagnetic Devices” . IEEE Transactions on Magnetics, 34(5):2841–2844, September 1998. [26] D. S. Weile, E. Michielssen, and D. E. Goldberg. “Multiobjective synthesis of electromagnetic devices using nondominated sorting genetic algorithms”. In 1996 IEEE Antennas and Propagation Society International Symposium Digest, volume 1, pages 592–595, Baltimore, Maryland, July 1996. [27] N. Srinivas and K. Deb. “Multiobjective Optimization Using Nondominated Sorting in Genetic Algorithms”. Evolutionary Computation, 2(3):221–248, fall 1994. [28] D. S. Weile, E. Michielssen, and D. E. Goldberg. “Genetic algorithm design of Pareto optimal broadband microwave absorbers”. IEEE Transactions on Electromagnetic Compatibility, 38(3):518–525, August 1996. [29] J. Horn, N. Nafpliotis, and D. E. Goldberg. “A Niched Pareto Genetic Algorithm for Multiobjective Optimization”. In Proceedings of the First IEEE Conference on Evolutionary Computation, IEEE World Congress on Computational Intelligence, volume 1, pages 82–87, Piscataway, New Jersey, June 1994. IEEE Service Center. [30] R.E. Steuer. “Multiple Criteria Optimization: Theory, Computation, and Application”. John Wiley, New York, 1986. [31] D. S. Weile and E. Michielssen. “Integer coded Pareto genetic algorithm design of constrained antenna arrays”. Technical Report CCEM-13-96, Electrical and Computer Engineering Department, Center for Computational Electromagnetics, University of Illinois at Urbana-Champaign, November 1996. [32] D. S. Weile and E. Michielssen. “Integer coded Pareto genetic algorithm design of constrained antenna arrays”. Electronics Letters, 32(19):1744–1745, September 1996. [33] M. Thompson. “Application of Multi Objective Evolutionary Algorithms to Analogue Filter Tuning”. In E. Zitzler, K. Deb, L. Thiele, C. A. Coello Coello, and D. Corne, editors, First International Conference on Evolutionary MultiCriterion Optimization, pages 546–559. Springer-Verlag. Lecture Notes in Computer Science No. 1993, 2001. [34] M. Trefzer, J. Langeheine, K. Meier, and J. Schemmel. “Operational amplifiers: An example for multi-objective optimization on an analog evolvable hardware platform”. In J. M. Moreno, J. Madrenas, and J. Cosp, editors, Evolvable Systems: 185 From Biology to Hardware, 6th International Conference, ICES 2005, pages 86–97, Sitges, Spain, September 2005. Springer. Lecture Notes in Computer Science Vol. 3637. [35] R. S. Zebulum, M. A. Pacheco, and M. Vellasco. “Synthesis of CMOS operational amplifiers through Genetic Algorithms”. In Proceedings of the Brazilian Symposium on Integrated Circuits, SBCCI’98, pages 125–128, Rio de Janeiro, Brazil, September 1998. IEEE. [36] R. S. Zebulum, M. A. Pacheco, and M. Vellasco. “Artificial Evolution of Active Filters: A Case Study”. In Proceedings of the First NASA/DoD Workshop on Evolvable Hardware, pages 66–75, Los Alamitos, California, July 1999. IEEE Computer Society. [37] S. P. Harris and E. C. Ifeachor. “Nonlinear FIR Filter Design by Genetic Algorithm”. In 1st Online Conference on Soft Computing, August 1996. [38] T. Schnier, X. Yao, and P. Liu. “Digital Filter Design Using Multiple Pareto Fronts”. In D. Keymeulen, A. Stoica, J. Lohn, and R. Salem Zebulum, editors, Proceedings of the Third NASA/DoD Workshop on Evolvable Hardware, pages 136–145, Long Beach, California, July 2001. IEEE Computer Society Press. [39] T. J. Stanley and T. Mudge. “A Parallel Genetic Algorithm for Multiobjective Microprocessor Design”. In L. J. Eshelman, editor, Proceedings of the Sixth International Conference on Genetic Algorithms, pages 597–604, San Mateo, California, July 1995. Morgan Kaufmann Publishers. [40] P. Di Barba, M. Farina, and A. Savini. “Multiobjective Design Optimization of Real-Life Devices in Electrical Engineering: A Cost-Effective Evolutionary Approach”. In E. Zitzler, K. Deb, L. Thiele, C. A. Coello Coello, and D. Corne, editors, First International Conference on Evolutionary Multi-Criterion Optimization, pages 560–573. Springer-Verlag. Lecture Notes in Computer Science No. 1993, 2001. [41] K. Rodrıguez Vazquez and P. J. Fleming. “Functionality and Optimality in Circuit Design: A Genetic Programming Approach”. In Proceedings of the Third International Symposium on Adaptive Systems—Evolutionary Computation and Probabilistic Graphical Models, pages 23–28, Havana, Cuba, March 19–23 2001. Institute of Cybernetics, Mathematics and Physics. [42] J. Regnier, B. Sareni, and X. Roboam. “System optimization by multiobjective genetic algorithms and analysis of the coupling between variables, constraints and objectives”. COMPEL-The International Journal for Computation and Mathematics in Electrical and Electronic Engineering, 24(3):805–820, 2005. [43] C. A. Coello Coello, A. Hernandez Aguirre, and B. P. Buckles. “Evolutionary Multiobjective Design of Combinational Logic Circuits”. In J. Lohn, A. Stoica, D. Keymeulen, and S. Colombano, editors, Proceedings of the Second NASA/DoD Workshop on Evolvable Hardware, pages 161–170, Los Alamitos, California, July 2000. IEEE Computer Society. 186 [44] C. A. Coello Coello and A. Hernandez Aguirre. “Design of Combinational Logic Circuits through an Evolutionary Multiobjective Optimization Approach”. Artificial Intelligence for Engineering, Design, Analysis and Manufacture, 16(1):39–53, January 2002. [45] E. H. Luna, C. A. Coello Coello, and A. H. Aguirre. “On the Use of a Population-Based Particle Swarm Optimizer to Design Combinational Logic Circuits”. In R. S. Zebulum, D. Gwaltney, G. Hornby, D. Keymeulen, J. Lohn, and A. Stoica, editors, Proceedings of the 2004 NASA/DoD Conference on Evolvable Hardware, pages 183–190, Los Alamitos, California, USA, June 2004. IEEE Computer Society [46] A. Seshadri “Multiobjective optimization using evolutionary algorithms (MOEA)” [47] Hans-Georg Beyer and Kalyanmoy Deb, “On Self-Adaptive Features in RealParameter Evolutionary Algorithm” , IEEE Trabsactions on Evolutionary Computation 5 (2001), no. 3, 250 – 270. [48] Kalyanmoy Deb and R. B. Agarwal, “Simulated Binary Crossover for Continuous Search Space”, Complex Systems 9 (1995), 115 – 148. [49] Kalyanmoy Deb, Amrit Pratap, Sameer Agarwal, and T. Meyarivan, “A Fast Elitist Multiobjective Genetic Algorithm: NSGA-II”, IEEE Transactions on Evolutionary Computation 6 (2002), no. 2, 182 – 197 [50] M. M. Raghuwanshi and O. G. Kakde, “Survey on multiobjective evolutionary and real coded genetic algorithms”, Proceedings of the 8th Asia Pacific Symposium on Intelligent and Evolutionary Systems, 2004, pp. 150 – 161. [51] N. Srinivas and Kalyanmoy Deb, “Multiobjective Optimization Using Nondominated Sorting in Genetic Algorithms”, Evolutionary Computation 2 (1994), no. 3, 221 – 248. [52] Gary G. Yen and Haiming Lu, “Dynamic multiobjective evolutionary algorithm: adaptive cellbased rank and density estimation”, Evolutionary Computation, IEEE Transactions on 7 (2003), no. 3, 253 – 274. [53] V. Seydi Ghomsheh, m. Ahmadieh Khanehsar, M. Teshnehlab, “Improving the Non-dominate Sorting Genetic Algorithm For Multi-Objective Optimization”, 2007 International Conference on Coputational Intelligence and Security Workshops. [54] Lu ang, Sheng-Wu Xiong, Jie Yang, Ji-Shan Fan, “An improved elitist strategy multi-objective evolutionary algorithm” Proceedings of the fifth international conference on machine learning and cybernetics, Dalian, 13-16 August 2006. [55] I. Mayergoyz, D. Lawson “Introduction to electric circuits” 187 [56] N. Femia “Power design: a demanding challenge” – www.ilb2b.it [57] X. Zhou, T.G Wang, , F.C. Lee “Optimizing design for low voltage DC-DC converters”;Applied Power Electronics Conference and Exposition, 1997. APEC '97 Conference Proceedings 1997, Twelfth Annual Volume 2 , 23-27 Feb. 1997 Page(s):612-616 vol.2 Digital Object Identifier 10.1109/APEC.1997.575633 [58] R. Kollman, G. Collins, D. Plumton “10 MHz PWM converters with GaAs VFETs”; Applied Power Electronics Conference and Exposition, 1996. APEC '96. Conference Proceedings 1996. Eleventh Annual Volume 1, 3-7 March 1996 Page(s): 264-269 vol.1 Digital Object Identifier 10.1109/APEC.1996.500453 [59] B. Arbetter, R. Erickson, D. Maksimovic “DC-DC converter design for batteryoperated systems” Power Electronics Specialists Conference, 1995. PESC '95 Record. 26th Annual IEEE Volume 1 , 18-22 June 1995 Page(s):103-109 vol.1 Digital Object Identifier 10.1109/PESC.1995.474799 [60] T. G. Wang, B. Tomescu, F. C. Lee “Achieving high efficiency for a low voltage dc/dc converter with 1% to 100% load range” – VPEC Seminar ‘96 [61] K. Yao, Y. Qiu, M. Xu, F.C. Lee “A novel winding-coupled buck converter for high frequency, high step down dc-dc conversion” – IEEE Transactions on power electronics, Vol. 20 no.5, Settembre 2005 [62] G. Li, L. Quinghua, S. Zhibiao “A new design strategy for monolithic buck converter” – School of electronic and information engineering, Xi’an University, China [63] Y. Katayama, S. Sugahara, H. Nakazawa, M. Edo “High power density MHz switching monolithic dc-dc converter with thin film inductor” - Fuji Electric Corporate Research & Development, Ltd. 188