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