Elaborato - Emanuelecipolla.net
Elaborato - Emanuelecipolla.net
Elaborato - Emanuelecipolla.net
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Università degli Studi di Palermo<br />
Facoltà di Ingegneria<br />
Corso di Laurea Magistrale in Ingegneria Informatica<br />
Tesina per l‟insegnamento di Intelligenza Artificiale<br />
Titolare del corso: Prof. Salvatore Gaglio<br />
Tutor: Ing. Alessandra De Paola<br />
A cura di<br />
Emanuele Cipolla (matricola 0578327)<br />
Nicolò Monte (matricola 0584439)<br />
A.A. 2011/2012
Sommario<br />
1. Introduzione ............................................................................................................................................... 4<br />
2. Gli algoritmi ge<strong>net</strong>ici ..................................................................................................................................... 4<br />
2.1. Introduzione ............................................................................................................................................ 4<br />
2.2. Panoramica ............................................................................................................................................. 5<br />
2.2. Funzionamento ....................................................................................................................................... 6<br />
2.2.1. Inizializzazione e fitness .................................................................................................................. 7<br />
2.2.2. Selezione .......................................................................................................................................... 8<br />
2.2.3. Ricombinazione ............................................................................................................................. 12<br />
2.2.4. Mutazione ...................................................................................................................................... 16<br />
2.2.5. Rimpiazzamento ............................................................................................................................ 17<br />
2.2.5. Condizione di arresto e criteri di convergenza .............................................................................. 18<br />
3. Algoritmi multi-obbiettivo .......................................................................................................................... 19<br />
3.1. Le funzioni obbiettivo ......................................................................................................................... 19<br />
3.2. La dominanza ....................................................................................................................................... 20<br />
3.3. L‟insieme ottimo di Pareto ................................................................................................................... 21<br />
3.4. NSGA II................................................................................................................................................ 22<br />
3.4.1. Panoramica generale ...................................................................................................................... 22<br />
3.4.2. Pseudo-codifica ............................................................................................................................. 25<br />
4. Ambiente di sviluppo .................................................................................................................................. 27<br />
5. Risultati........................................................................................................................................................ 30<br />
5.1. Configurazione di riferimento .......................................................................................................... 30<br />
5.2. Velocità d‟esecuzione ....................................................................................................................... 30<br />
5.3. Prestazioni dell‟algoritmo ................................................................................................................. 30<br />
5.4. Confronto con politiche alternative non basate sull‟intelligenza artificiale ..................................... 32<br />
6. Sviluppi futuri .............................................................................................................................................. 34<br />
6.1. Parallelizzazione del codice .............................................................................................................. 34<br />
6.2. Altre tecniche di IA .......................................................................................................................... 34<br />
6.3. Comfort ambientale spinto ............................................................................................................... 34<br />
6.4. Interventi a funzioni di fitness .......................................................................................................... 34<br />
6.5. Pianificatore e occupazione delle zone ............................................................................................. 35<br />
7. Appendici .................................................................................................................................................... 36<br />
7.1. DesignBuilder .................................................................................................................................. 36<br />
7.2. EnergyPlus ....................................................................................................................................... 40<br />
7.3. BCVTB ............................................................................................................................................ 43<br />
7.4. MLE+ .............................................................................................................................................. 43<br />
2
7.5. MATLAB ........................................................................................................................................ 44<br />
7.6. Interfacciamento .............................................................................................................................. 44<br />
7.7 Organizzazione del sistema realizzato ............................................................................................. 50<br />
8. Bibliografia .............................................................................................................................................. 52<br />
3
1. Introduzione<br />
L‟oggetto di questo lavoro è l‟utilizzo di una tecnica di intelligenza artificiale per il coordinamento del<br />
sistema di condizionamento di edifici. L‟obbiettivo principale è stato valutare le performance di un algoritmo<br />
ge<strong>net</strong>ico multi obbiettivo, dove le funzioni di fitness discriminano gli individui in base a due vincoli<br />
strettamente correlati tra di loro: temperatura interna all‟edificio e dispendio energetico. Verrà proposta nella<br />
sezione 2 una introduzione formale agli algoritmi ge<strong>net</strong>ici, mentre nella terza verrà presentato in dettaglio<br />
l‟algoritmo NSGA-II; sarà prerogativa della quarta sezione mostrare come l‟algoritmo sia stato sfruttato per<br />
i nostri scopi, e descrivere sommariamente l‟ambiente costruito, atto allo studio del comportamento delle<br />
variabili in gioco all‟interno di un sistema edificio-HVAC: una descrizione a livello implementativo di come<br />
tali tecnologie eterogenee siano state coadiuvate tra loro è rimandata all‟ appendice. Infine, le sezioni 5 e 6<br />
mostreranno i risultati sperimentali ottenuti e i possibili sviluppi futuri.<br />
2. Gli algoritmi ge<strong>net</strong>ici<br />
2.1. Introduzione<br />
Un algoritmo ge<strong>net</strong>ico è una procedura euristica di ricerca e ottimizzazione il cui appellativo deriva dal forte<br />
richiamo alla teoria evoluzionistica darwiniana, ragion per cui si suole descriverlo utilizzando un lessico di<br />
tipo biologico: in questo lavoro ci si ispirerà alla visione biologica, in quanto più intuitiva ed efficace ad<br />
inquadrarne gli aspetti salienti, fine ultimo di tale introduzione.<br />
I primi esempi di quelli che adesso chiameremmo algoritmi ge<strong>net</strong>ici sono comparsi tra la fine degli anni<br />
Cinquanta ed i primi anni Sessanta, programmati da biologi evoluzionisti che cercavano di modellare<br />
esplicitamente alcuni aspetti dell'evoluzione naturale. Pionieristici, in questo senso, furono gli esperimenti di<br />
Nils Aall Barricelli, un matematico italo-norvegese, presso l'Institute of Advanced Study di Princeton.<br />
Nel 1962 vi furono, invece, le prime applicazioni a problemi di ottimizzazione di funzioni e di machine<br />
learning da parte di ricercatori quali G.E.P. Box, G.J. Friedman, W.W. Bledsoe ed H.J. Bremermann, che<br />
giunsero a formulare algoritmi ispirati dall'evoluzione in maniera indipendente.<br />
Uno sviluppo di maggior successo si ebbe nel 1965, quando Ingo Rechenberg, che all'epoca lavorava alla<br />
Technische Universität Berlin, introdusse una tecnica da lui definita strategia dell'evoluzione, sebbene fosse<br />
più simile ad un algoritmo di ricerca in salita che agli algoritmi ge<strong>net</strong>ici. In questa tecnica non si parlava di<br />
popolazione o di crossover; un genitore veniva mutato in un discendente, ed il migliore dei due veniva<br />
mantenuto per diventare il genitore del turno successivo di mutazione. Nelle versioni successive venne<br />
introdotta l'idea di popolazione. Le strategie dell'evoluzione vengono a tutt'oggi impiegate da ingegneri e<br />
scienziati, specialmente in Germania.<br />
Un ulteriore sviluppo di grande importanza si ebbe nel 1966, quando L.J. Fogel, A.J. Owens and M.J. Walsh<br />
introdussero, negli Stati Uniti, una tecnica chiamata programmazione evolutiva. In questo metodo le possibili<br />
soluzioni ai problemi venivano rappresentate come semplici macchine a stati finiti: in maniera simile alla<br />
strategia di Rechenberg, il loro algoritmo funzionava mutando una delle macchine simulate e mantenendo la<br />
migliore delle due. Anche la programmazione evolutiva è materia di ricerca ai giorni nostri.<br />
Quel che manca alle due tecniche presentate è il riconoscimento dell'importanza del crossover.<br />
4
Sin dal 1962, il lavoro di John Holland sui sistemi adattivi aveva gettato le fondamenta per gli sviluppi<br />
successivi; tra le altre cose, Holland fu il primo a proporre esplicitamente il crossover ed altri operatori di<br />
ricombinazione. Tuttavia è solo nel 1975, con la pubblicazione del libro "Adaptation in Natural and<br />
Artificial Systems", basato su ricerche precedenti e su pubblicazioni scientifiche di Holland stesso e dei suoi<br />
colleghi dell'Università del Michigan, che si ottiene una prima presentazione rigorosa e sistematica del<br />
concetto di sistemi digitali adattivi che utilizzano la mutazione, la selezione ed il crossover, simulando i<br />
processi dell'evoluzione biologica, come strategia per la risoluzione di problemi. In questo libro si tentò<br />
anche di porre le prime basi teoretiche per gli algoritmi, introducendo la nozione di schemi. In quello stesso<br />
anno un'importante dissertazione di Ken<strong>net</strong>h De Jong impose gli algoritmi ge<strong>net</strong>ici, mostrando che essi<br />
avevano un buon comportamento con una grande varietà di funzioni di test, tra cui quelle definite su<br />
landscape di ricerca rumorosi, discontinui e multimodali.<br />
La pubblicazione di queste opere comportò un interesse diffuso nell'elaborazione evoluzionistica. Nella<br />
prima metà degli anni Ottanta si applicarono gli algoritmi ge<strong>net</strong>ici alle situazioni più disparate, da problemi<br />
astratti quali la colorazione dei grafi e il bin packing, a quelli concreti di ingegneria come il controllo di<br />
flusso delle tubazioni (1983), la progettazione di reti (1987), la classificazione ed il riconoscimento di<br />
pattern, l'ottimizzazione strutturale, fino ad arrivare, negli anni Novanta, alla programmazione automatica<br />
(1992) ed alla modellazione di ecosistemi (1995).<br />
All'inizio, queste applicazioni erano principalmente teoretiche. Tuttavia, con il proliferare della ricerca, gli<br />
algoritmi ge<strong>net</strong>ici entrarono nel settore commerciale, sostenuti dalla crescita esponenziale della potenza di<br />
elaborazione e dallo sviluppo di Inter<strong>net</strong>. Oggi, l'elaborazione evoluzionistica è un settore in fermento, e gli<br />
algoritmi ge<strong>net</strong>ici vengono utilizzati per risolvere problemi in campi quali la predizione del mercato e la<br />
pianificazione del portafoglio azionario, l'ingegneria aerospaziale, la progettazione di microchip, la<br />
biochimica, la biologia molecolare, la programmazione delle attività aeroportuali e delle catene di<br />
montaggio.<br />
2.2. Panoramica<br />
Così come osservato da studi naturalistici, l‟idea che sta alla base di un algoritmo ge<strong>net</strong>ico è quella di far<br />
evolvere una popolazione iniziale di individui, selezionandone quelli più idonei via via nella creazione delle<br />
nuove generazioni.<br />
L‟evoluzione ha inizio a partire da una generazione iniziale di individui il cui patrimonio ge<strong>net</strong>ico è scelto in<br />
maniera causale; ogni individuo, sulla base del proprio patrimonio, sarà più o meno idoneo a sopravvivere ,<br />
e quindi adatto a riprodursi: vengono allora selezionati gli individui che presentano maggiore idoneità, i quali<br />
a coppie combineranno il loro patrimonio ge<strong>net</strong>ico per crearne dei figli; un numero modesto di altri<br />
individui verrà selezionato per subire mutazioni ge<strong>net</strong>iche, così da generare un nuovo individuo, quindi senza<br />
alcuna discriminazione di valor di idoneità.<br />
Una volta combinati gli individui scelti come genitori e mutati alcuni dei rimanenti altri, l‟algoritmo avrà a<br />
disposizione un numero di individui doppio rispetto a quelli di partenza: dalla totalità degli individui a<br />
disposizione, verranno selezionati nuovamente solo quelli più idonei e quindi più meritevoli, i quali<br />
costituiranno la seconda generazione, e così via. L‟algoritmo prosegue iterando un numero prestabilito di<br />
volte, finchè non si manifesta una condizione di arresto: intuitivamente si può scorgere come così facendo,<br />
l‟idoneità media delle generazioni crescerà, grazie alla selezione degli individui in base al valore di idoneità.<br />
Inoltre una capacità esplorativa dell‟algoritmo è garantita dalla presenza di mutazioni del patrimonio<br />
ge<strong>net</strong>ico di alcuni individui della generazione corrente, in maniera trasparente al loro grado di idoneità,<br />
5
cercando così di ottenere caratteristiche non ancora manifestatesi. In tal senso l‟algoritmo ge<strong>net</strong>ico si<br />
configura come tecnica euristica di ricerca e ottimizzazione.<br />
2.2. Funzionamento<br />
L‟esecuzione dell‟algoritmo ge<strong>net</strong>ico procede per iterazioni finché un‟opportuna condizione d‟arresto non si<br />
manifesta; ogni iterazione prevede l‟esecuzione di operazioni secondo un ordine ben preciso. Prima di<br />
mostrare un‟analisi dettagliata delle varie fase, risulta doveroso spendere qualche parola riguardo la codifica<br />
di un individuo. In generale, un algoritmo ge<strong>net</strong>ico permette di trovare un insieme di soluzioni ottime per il<br />
problema di partenza; un individuo dell‟algoritmo ne costituisce quindi una soluzione, all‟interno dello<br />
spazio delle possibili soluzioni. Per poter operare, l‟algoritmo ha bisogno di rappresentare in qualche<br />
maniera i propri individui, allora assegna ad ogni individuo un‟opportuna stringa che lo rappresenta, detta<br />
cromosoma: un cromosoma è formato da più componenti detti geni ciascuno dei quali rappresenta una<br />
singola caratteristica della soluzione, detta, in altri termini, fattore di controllo. Il numero di componenti<br />
presenti in ogni stringa è intrinseco al problema stesso: in termini più rigorosi, diciamo che il numero delle<br />
componenti è pari alla dimensione dello spazio delle soluzioni.<br />
Tra i tipi di codifiche esistono:<br />
Codifica binaria, ottale, esadecimale e reale:<br />
1010010|0001000|00010<br />
10<br />
52|10|12<br />
Figura 1 - Esempi di codifica binaria, ottale, esadecimale e reale<br />
I geni possono essere codificati mediante numeri rappresentati in base 2, 8, 16.<br />
Codifica per valore: i geni possono essere qualsiasi tipo di simboli; ciò si fa per certi tipi di<br />
problemi in cui le stringhe numeriche non bastano per rappresentare un mapping efficace tra<br />
cromosoma e soluzione reale del problema. Per tale tipo di codifica dovranno quindi essere<br />
specificati degli operatori specifici di combinazione e mutazione.<br />
Codifica ad albero: ogni cromosoma è un albero di oggetti; è utile se gli oggetti sono comandi o<br />
funzioni di un particolare programma, per questo spesso è usata in contesti di programmazione<br />
ge<strong>net</strong>ica. In figura viene mostrano come si presenta un cromosoma con tale codifica.<br />
6<br />
122|8|A<br />
(avanti)|(avanti)|(indietro)| (sotto) 23--4BF|++ABD--|0-++---<br />
Figura 2 - Esempi di codifica per valore<br />
82|8|10
2.2.1. Inizializzazione e fitness<br />
L‟algoritmo crea individui, dove è detta dimensione della popolazione, con patrimonio ge<strong>net</strong>ico del tutto<br />
casuale: questa scelta, assieme a quella per cui si introducono le mutazioni, garantisce la convergenza<br />
dell‟algoritmo verso soluzioni ottime; ciò si può spiegare intuitivamente considerando che un patrimonio<br />
ge<strong>net</strong>ico eterogeneo significa dare la possibilità all‟algoritmo, di spaziare su tutto lo spazio delle possibili<br />
soluzioni. In qualche caso raro, come si può leggere in [1], viene specificata una particolare euristica per<br />
costituire la prima generazione.<br />
101|001 101|110 110|001 100|111 101|000 111|101 101|001 101|001<br />
Figura 4 - Generazione casuale<br />
Subito dopo aver creato la prima generazione, una particolare funzione obbiettivo, detta funzione di fitness,<br />
ne testa l‟idoneità: il dominio di una tale funzione sarà l‟insieme di tutti i possibili geni che compongono le<br />
stringhe, mentre il codominio sarà un valore numerico intero o reale.<br />
Si può intuire immediatamente come la scelta di una funzione di fitness appropriata sia cruciale al<br />
funzionamento dell‟algoritmo ge<strong>net</strong>ico stesso, sia da un punto di vista qualitativo, inteso come<br />
raggiungimento o meno di soluzioni ottime, che in termini di velocità d‟esecuzione: si ricordi che l‟algoritmo<br />
prevede il calcolo del fitness di ogni individuo di ogni generazione.<br />
Per giustificare ulteriormente quanto appena asserito, consideriamo la figura in basso che mostra un grafico<br />
in cui l‟asse delle ascisse rappresenta le soluzioni, mentre quello delle ordinate i valori assunti dalle prime.<br />
Ipotizzando un problema di minimizzazione, la soluzione ottima al problema si trova nell‟area indicata in<br />
corrispondenza del punto 2, visto che è lì che si raggiunge il minor valore di fitness. L‟area invece indicata<br />
dal punto 1 è invece un minimo locale, per cui se ad una certa iterazione dell‟algoritmo, la popolazione è<br />
costituita interamente da individui appartenenti all‟area 2, l‟algoritmo convergerà verso queste soluzioni che<br />
non sono quelle ottime: ancora una volta, risalta l‟importanza del patrimonio ge<strong>net</strong>ico casuale alla prima<br />
generazione .<br />
7<br />
Prendi(A,B)<br />
Posa(A) Sposta(A)<br />
Prendi(B,C) Posa(A)<br />
Figura 3 - Codifica ad albero<br />
Muovi(Dx)
2.2.2. Selezione<br />
Figura 5 - Esempio di minimi locali<br />
Si vogliono determinare le coppie di individui che verranno scelte per ricombinare il proprio patrimonio<br />
ge<strong>net</strong>ico: l‟insieme di tali individui è detto mating pool (letteralmente piscina d‟accoppiamento). La<br />
selezione partecipa attivamente all‟obbiettivo principale dell‟algoritmo secondo cui si tenta di generare<br />
individui sempre più idonei al problema di partenza; inoltre se la selezione è progettata in maniera tale che si<br />
favoriscono maggiormente agli individui pesantemente più idonei, si dirà che questa ha una grande influenza<br />
di selezione (selection pressure in inglese) e ciò, velocizzerà di gran lunga la convergenza dell‟algoritmo:<br />
d‟altro canto, una influenza di selezione troppo elevata potrebbe causare problemi di minimo o massimo<br />
locale.<br />
Si noti, infine, che una influenza di selezione bassa non preclude una convergenza comunque veloce, anche<br />
se ciò accadrà con una probabilità certamente inferiore. Sotto viene riportato un breve excursus sulle più note<br />
tecniche di selezione, come esempio si porterà un insieme di individui col proprio fitness noto, come in<br />
figura in basso<br />
8 1 6 2<br />
3<br />
2<br />
13<br />
19<br />
101|001 101|110 110|001 100|111 101|000 100|101 101|001 101|001<br />
Figura 6 - Attribuzione dei valori di fitness<br />
A. Selezione a troncamento: Una tecnica immediata è quella per cui si ordinano gli individui secondo<br />
il fitness crescente, se ne prendono i primi nel caso di problemi di minimizzazione (oppure gli<br />
ultimi per quelli di massimizzazione); nella figura in basso vengono selezionati i migliori tre<br />
individui più idonei.<br />
1 2 2 3<br />
6 8 13 19<br />
101|110 100|111 100|101 101|000 110|001 101|001 101|001 101|001<br />
Figura 7 - Individui individui ordinati secondo selezionati la fitness; quelli in rosso sono selezionati per il mating pool<br />
8
Questa tecnica, sebbene immediata e semplice da implementare, il più delle volte comporta problemi<br />
di minimo o massimo locale, e tronca la capacità esplorativa dell‟algoritmo in quanto è pesantemente<br />
influenzata dal valore di fitness. Tuttavia, come si legge in [2] questa tecnica risulta efficace per<br />
alcuni problemi.<br />
B. Selezione a roulette: si associa ad ogni individuo una probabilità di essere selezionato, quest‟ultima<br />
proporzionale al valore di fitness. La probabilità di un individuo i-esimo è funzione del valore di<br />
proprio di fitness e della fitness totale di tutti gli individui della popolazione. In basso le formule per<br />
il caso di problemi di minimo:<br />
E per il problema di massimo:<br />
Scegliere individui con questo meccanismo, equivale a disporli su una roulette, assegnando ad ogni<br />
individuo un arco di circonferenza la cui lunghezza è proporzionale alla propria probabilità. La roulette viene<br />
fatta ruotare un numero di volte pari al numero di individui della popolazione, ed ogni individuo selezionato<br />
farà parte di quelli che ricombinati costituiranno la nuova generazione (a meno di eventuali mutazioni da<br />
tenere in considerazione).<br />
9
Figura 8 - Selezione a roulette<br />
La selezione a roulette supera il problema della tecnica precedente perché da un‟opportunità, anche se<br />
minima, di sopravvivenza anche agli individui poco idonei, caratteristica che non si scontra con la velleità<br />
esplorativa dell‟algoritmo (oltre ad emulare in maniera più accurata l‟andamento della selezione naturale).<br />
Purtroppo, nel caso in cui i valori di fitness siano molto diversi tra di loro, questo non sarà più vero, perché<br />
verranno scelti, salvo sporadici casi, sempre gli stessi individui, cioè quelli più idonei.<br />
Per gli individui riportati nell‟esempio la fitness totale avrà valore 1/64, allora e di conseguenza le<br />
probabilità assegnate ad ogni individuo sono quelle riportate in verde.<br />
1 1/64 2 1/128 2 1/128 3 1/192 6 1/384 8 1/512 13 1/1920 19 1/5760<br />
101|110 100|111 100|101 101|000 110|001 101|001 101|001 101|001<br />
Individuo 1 Individuo 2 Individuo 3 Individuo 4<br />
Individuo 5<br />
Figura 9 - Attribuzione di probabilità agli individui<br />
10<br />
Individuo 6<br />
Individuo 7<br />
Individuo 8
Figura 10 - Grafico relativo alla roulette per gli individui proposti<br />
C. Selezione a rango: E‟ una variante della tecnica precedente, ne risolve il problema da cui è affetta:<br />
la probabilità assegnata ad ogni individuo non è più calcolata rispetto alla fitness totale della<br />
popolazione ma sarà proporzionale alla fitness relativa. In altri termini, si assegna un rango ad ogni<br />
individuo valutandoli a coppie.<br />
Nell‟esempio in basso l‟individuo chiamato chromosome1 ha una fitness poco superiore al secondo<br />
individuo perciò dopo il ranking presenterà una probabilità simile. Quando si valuta il secondo<br />
rispetto al terzo c‟è una differenza di fitness marcata, per cui la provabilità del terzo si discosterà in<br />
maniera più significativa rispetto al secondo, e così via.<br />
Figura 11 - Selezione a roulette vs. selezione a rango<br />
Dopo questa operazione, anche gli individui con fitness bassa avranno buone opportunità di essere<br />
selezionati; ciò si paga col rischio quasi certo di rallentare la convergenza dell‟algoritmo in quanto il<br />
grado di influenza di selezione risulta diminuito.<br />
D. Selezione a torneo: Una strategia ancora più efficiente è quella per cui si impartiscono dei tornei, in<br />
ognuno dei quali si sceglie un numero di individui (la scelta avviene con probabilità uniforme), i<br />
quali entreranno in competizione. Ad ogni torneo farà parte del mating pool solo l‟individuo con<br />
fitness maggiore o i primi , a seconda dell‟implementazione. Si iterano dei tornei finché il mating<br />
pool non è saturo. Questa è una delle tecniche preferite perché così come quella di rango supera i<br />
problemi di possibili massimi locali (in atri termini di una convergenza troppo veloce), risulta<br />
inoltre parallelizzabile.<br />
11<br />
Individuo 1<br />
Individuo 2<br />
Individuo 3<br />
Individuo 4<br />
Individuo 5<br />
Individuo 6<br />
Individuo 7<br />
Individuo 8
E. Selezione sigma: E‟ una variante della selezione a rango in cui si utilizza la deviazione standard<br />
come fattore di scala delle probabilità da assegnare a ciascun individuo: in questa maniera il grado di<br />
influenza di fitness viene mantenuto piuttosto costante tra una generazione e l‟altra.<br />
F. Elitarismo: Viene selezionato il miglior individuo o gli „n‟ migliori e inseriti nella popolazione<br />
successiva senza passare per alcun ulteriore fase di selezione. Ciò è utile per prevenire che durante le<br />
varie generazioni venga, anche se con scarsa probabilità, scartate soluzioni molto idonee: infatti tale<br />
strategia incrementa significativamente le performance dell‟algoritmo.<br />
G. Selezione stocastica universale: è una variante della tecnica a roulette, in cui ad ogni individuo si<br />
assegna un segmento di lunghezza proporzionale alla propria probabilità, tali segmenti vengono<br />
disposti su una retta formando così un segmento frutto dell‟unione di quelli relativi agli individui.<br />
Un insieme di punti equidistanti, tanti quanti sono quelli necessari a formare il mating pool verranno<br />
disposti su tale linea, selezionando così gli individui che in cui è caduto almeno uno dei punti.<br />
In termini di roulette equivale a compiere una sola rotazione completa per tutto il processo di<br />
selezione, in cui la rotazione stessa è scandita da step, dove è pari al numero di punti, e la<br />
distanza tra una rotazione e l‟altra è paria a gradi.<br />
Nell‟esempio in basso si suppongono 3 individui necessari a costituire il mating pool, di<br />
conseguenza si avranno tre punti con distanza l‟uno rispetto all‟altro pari alla lunghezza del<br />
segmento mostrato diviso 3: il posizionamento del primo punto si può scegliere in maniera random.<br />
Come è evidente dalla figura, vengono scelti i tre individui con fitness maggiore e ciò perché<br />
l‟esempio mostrato presenta forti differenze tra gli individui più idonei e quelli meno idonei. Infatti<br />
tale tecnica eredita i problemi di quella da cui deriva, garantendo però che la frequenza attesa con cui<br />
un individuo viene selezionato corrisponda a quella determinata dalla probabilità attribuitagli.<br />
1 1/64 2 1/128 2 1/128 3 1/192 6 1/384 8 1/512 13 1/1920 19 1/5760<br />
101|110 100|111 100|101 101|000 110|001 101|001 101|001 101|001<br />
2.2.3. Ricombinazione<br />
Figura 12 - (in alto) Individui con il fitness e la probabilità assegnata;<br />
(in basso) Grafico relativo alla selezione stocastica: i cerchi in rosso<br />
indicano i punti equidistanti di selezione<br />
Una volta predisposto il mating pool grazie alla fase di selezione, gli individui scelti potranno ricombinare il<br />
proprio patrimonio ge<strong>net</strong>ico, quest‟ultima operazione espletata da un particolare operatore chiamato<br />
operatore di cross-over. Gli operatori di cross-over possono presentarsi in diverse tipologie, accomunate dal<br />
fatto di garantire che l patrimonio ge<strong>net</strong>ico del figlio sia simile a quello dei propri genitori; come giustamente<br />
osservato da [3] ciò permette di mantenere la convergenza anche dopo la fase di selezione in quanto, i figli<br />
avranno molto probabilmente un patrimonio ge<strong>net</strong>ico tale da renderli idonei. A nostro avviso ciò non inficia<br />
12
la capacità esplorativa dell‟algoritmo sia perché a monte rimane la presenza di sporadiche mutazione, sia<br />
perché il patrimonio ge<strong>net</strong>ico di un figlio non è del tutto identico a quello del padre salvo casi fortuiti .<br />
In qualsiasi tipologia di operatore di cross-over possiamo individuare una prima fase di selezione delle parti<br />
dei patrimoni di trasmettere, e una seconda di ricombinazione di quest‟ultimi.<br />
Il parametro che rappresenta quanto spesso l‟operatore di cross-over opererà, è chiamato probabilità di crossover;<br />
quando questa avrà valore 1, allora tutti i figli saranno frutto di ricombinazione ge<strong>net</strong>ica, mentre<br />
quando sarà nulla gli individui della nuova generazione saranno generati dalle copie esatte del patrimonio<br />
ge<strong>net</strong>ico della generazione precedente: ciò non significa che la nuova generazione sarà la copia delle<br />
precedente in quanto sarà compito della fase di Sostituzione comporre la generazione successiva; in questo<br />
caso la fase di ricombinazione degenererà in una di selezione pura.<br />
Come si vedrà in seguito, invece i vari operatori si diversificheranno tramite le ultime due fasi cioè in base a<br />
come selezionano il patrimonio ge<strong>net</strong>ico da trasferire e la modalità con cui eseguono il trasferimento.<br />
Nella descrizione dei vari operatori di cross-over ci si riferirà quasi sempre alla codifica binaria perché è<br />
quello che emula maggiormente il corrispondente approccio biologico; da qui in poi le astine all‟interno<br />
degli individui indicheranno i punti di taglio dell‟operatore.<br />
2.2.3.1. Crossover ad un punto<br />
Si individua in maniera casuale e univocamente per ogni genitore, un punto di taglio da cui si divideranno le<br />
corrispondenti stringhe; supponendo che il numero di geni nelle stringhe sia e che il numero di componenti<br />
delle stringa sia pari ad uno, effettuato il taglio si avranno quattro sottostringhe, di cui due contenenti i primi<br />
elementi delle stringhe da cui deriva, e le restanti sottostringhe, gli ultimi geni. Infine per formare i<br />
figli si combineranno le sottostringhe ad incrocio, in altri termini un figlio avrà i primi geni del primo<br />
genitore e gli altri del secondo.<br />
1001|11<br />
1010|11<br />
2.2.3.2. Cross-over a due punti<br />
1001 11<br />
1010 01<br />
Tecnica simile alla precedente in cui i genitori vengono segmentati in tre porzioni tramite due punti di taglio<br />
per ciascun individuo. Rispetto alla prima se un genitore possiede buone caratteristiche sia alla testa che alla<br />
coda ma non nella parte centrale, queste potranno essere inglobate in un unico individuo generando molto<br />
probabilmente un individuo migliore.<br />
10|01|11<br />
10|10|01<br />
10 01 11<br />
10 10 01<br />
13<br />
100101<br />
101011<br />
Figura 13 - Crossover ad un punto: all'estrema sinistra i genitori, al centro le porzioni di codice ge<strong>net</strong>ico<br />
da trasmettere, all'estrema destra i figli<br />
101011<br />
100101<br />
Figura 14 - Crossover a due punti: all'estrema sinistra i genitori, al centro le porzioni di codice ge<strong>net</strong>ico da<br />
trasmettere, all'estrema destra i figli
2.2.3.3. Cross-over a n-punti<br />
Si può estendere tutto ciò a più punti, ottenendo così l‟esplorazione nello spazio di ricerca. Tuttavia<br />
esagerando nell‟aumento del numero di punti, si potrebbero ridurre le prestazioni dell‟algoritmo nel senso<br />
che geni che messi l‟uno accanto all‟altro costituirebbero una caratteristica buona dell‟individuo, potrebbero<br />
essere separati dall‟operatore. Tale fenomeno, da evitare il più possibile, è detto fenomeno di distorsione<br />
dell‟operatore.<br />
2.2.3.4. Cross-over uniforme<br />
Risolve il problema appena sollevato, infatti ogni gene dei figli (i figli generati sono tipicamente due) è una<br />
copia di un gene di uno dei due genitori; la scelta dei geni da copiare avviene in maniera casuale, per mezzo<br />
di una maschera binaria con numero di bit pari alla lunghezza della stringa, cioè al numero di geni: se il bit<br />
nella posizione i-esima assume valore pari ad uno, il gene i-esimo del primo figlio sarà quello della stessa<br />
posizione del primo genitore mentre per il secondo figlio il gene, sempre nella stessa posizione ma dal<br />
secondo genitore. La casualità sta nella scelta della maschera. Questa tecnica è quella preferita perché<br />
l‟euristica ha dimostrato possedere una maggior capacità esplorativa. E‟ facile intuire come questa tecnica<br />
sebbene raccomandata possegga una alta probabilità di distorsione in quanto blocchi di geni appartenenti ad<br />
un genitore verranno quasi sicuramente smembrati.<br />
10110011<br />
00011010<br />
Figura 15 - Crossover uniforme<br />
2.2.3.4. Cross-over a tre genitori<br />
maschera 10011010<br />
11010110<br />
14<br />
00110011
Vengono scelti casualmente tre genitori dal mating-pool. Ogni bit del primo genitore è confrontato col<br />
relativo nel secondo: se sono uguali allora tale sarà il bit corrispondente del figlio altrimenti si seleziona il bit<br />
corrispondente dal terzo genitore.<br />
11010001<br />
01101001<br />
01101100<br />
2.2.3.4. Cross-over a mistura<br />
È una variante di quello uniforme, in cui vengono ridisposti casualmente i bit ereditati dai genitori: ciò aiuta<br />
ad evitare il fenomeno di distorsione poiché riordinando i geni, c‟è la possibilità che blocchi di essi,<br />
costituenti caratteristiche buone, vengano ricomposti.<br />
2.2.3.4. Cross-over a ordinamento<br />
È un crossover a due punti in cui il primo figlio eredita la testa e la coda dal primo genitore e la parte centrale<br />
anche ma con la sequenza di geni nell‟ordine in cui compaiono nel secondo. In maniera analoga viene<br />
formato il secondo figlio. Nella prossima figura la codifica reale risulterà più adatta a cogliere le parti<br />
ereditate.<br />
2.2.3.4. Cross-over aritmetico<br />
01101001<br />
Figura 16 – Crossover a tre genitori: : all'estrema sinistra i genitori, a destra il figlio: quest’ultimo eredita<br />
solo i bit di posizione 2 dal terzo genitore<br />
42|13|65<br />
23|14|56<br />
Figura 17 - Crossover a ordinamento<br />
423165<br />
234156<br />
Questa non è proprio una tecnica, bensì una famiglia che comprende molte delle tecniche già analizzate: si<br />
caratterizza per il fatto che, i geni selezionati per essere ereditati verranno dati in pasto ad un‟operazione<br />
aritmetica per generare i nuovi individui.<br />
15
2.2.4. Mutazione<br />
È la fase che avviene immediatamente dopo quella di ricombinazione. L‟operatore di mutazione si<br />
diversifica da quello di cross-over per il fatto che mentre il secondo ricombina blocchi di patrimonio<br />
ge<strong>net</strong>ico già esistente, il primo muta quanto ereditato andando a creare, salvo casi sporadici, nuovo<br />
patrimonio ge<strong>net</strong>ico. Si nota subito come tale operatore accresca la capacità esplorativa dell‟algoritmo e ne<br />
eviti la convergenza verso minimi locali. D‟altra parte eccessive occorrenze di tale operatore potrebbero<br />
peggiorare le performance dell‟algoritmo fino a causare la perdita di convergenza, per cui la probabilità di<br />
mutazione è mantenuta molto bassa: secondo [1] è buona norma mantenerla pari ad , dove rappresenta<br />
la lunghezza dei cromosomi; secondo [3] è, invece, consigliato mantenerla entro l‟intervallo [0.001, 0.01]. Se<br />
la probabilità fosse pari ad uno l‟intero cromosoma verrebbe modificato, mentre se fosse pari al 50% solo<br />
metà dei geni del cromosoma verrebbero cambiati. In analogia a quanto visto per il cross-over anche gli<br />
operatori di mutazione possono trovarsi in diverse varianti a seconda di quale geni vengono scelti per essere<br />
mutati e come questi vengono mutati.<br />
Si noti che la mutazione avviene solo sugli individui della prima generazione: in altri termini, né su quelli<br />
appartenenti al mating-pool e nemmeno sui figli e in tal senso un individuo da mutare farà da genitore a se<br />
stesso mutato.<br />
2.2.4.1. Flipping<br />
Vengono invertiti alcuni bit secondo una maschera generata casualmente per mezzo dell‟operatore logico<br />
XOR.<br />
genitore<br />
10110101<br />
maschera<br />
10001001<br />
2.2.4.2. Interscambio<br />
00111100<br />
Figura 18 - Mutazione per flipping: in rosso i bit risultato dello<br />
XOR<br />
Vengono scelte due posizioni casualmente e i bit relativi vengono scambiati.<br />
10110101<br />
Figura 19 - Mutazione per interscambio<br />
figlio<br />
111110001<br />
16
2.2.4.3. Inversione<br />
Viene scelta casualmente una posizione nel cromosoma: tutti i bit nelle posizioni successive verranno<br />
invertiti.<br />
10110101 10110010<br />
Figura 20 - Mutazione per inversione<br />
2.2.5. Rimpiazzamento<br />
In questa fase vengono scelti quanti e quali individui comporranno la prossima generazione; i possibili<br />
candidati sono da ricercare sia negli individui delle generazione corrente, che in quelli frutto della<br />
ricombinazione e della mutazione. Il numero di individui appartenenti alle ultime due categorie influenza in<br />
maniera significativa la velocità di convergenza in quanto, un numero basso di questi individui significa un<br />
basso ricambio generazionale, per cui saranno necessarie più iterazioni per giungere a individui ottimi.<br />
D‟altro canto, un eccessivo ricambio di individui renderebbe l‟algoritmo instabile nel senso che parecchi<br />
individui buoni trovati nelle generazioni precedenti verrebbero sostituiti con dei nuovi non necessariamente<br />
idonei. I metodi che verranno mostrai a breve, prendono in considerazione solo i genitori e i relativi figli ma<br />
ciò non esclude la possibilità di implementare tecniche che prendano in considerazione anche gli individui<br />
della generazione corrente che non hanno generato figli, selezionati mediante una delle tecniche di selezione<br />
presentate.<br />
2.2.5.1 Rimpiazzamento dei genitori<br />
E‟ la tecnica più semplice: la coppia di figli sostituisce quella dei relativi genitori; è una tecnica che<br />
sicuramente non può essere accoppiata ad una tecnica di selezione a monte, che esclude gli individui più<br />
deboli; se così fosse un‟iterazione selezionerebbe gli individui più idonei i quali verrebbero rimpiazzati dai<br />
figli (molto probabilmente meno idonei) per costituire la generazione successiva.<br />
2.2.5.2 Rimpiazzamento dei genitori deboli<br />
Si valutano le due coppie genitori-individui e andranno alla generazione successiva solo i due più forti.<br />
Questa tecnica incrementa la fitness totale della popolazione se accoppiata ad una fase di ricombinazione in<br />
cui la selezione dal mating-pool considera sia individui forti che individui deboli: se anche la strategia di<br />
selezione dal mating-pool privilegiasse gli individui più forti, si strozzerebbe la capacità esplorativa<br />
dell‟algoritmo e si propagherebbero sempre le stesse “buone” caratteristiche.<br />
17
2.2.5.3 Rimpiazzamento casuale<br />
È prevista anche una tecnica affidata totalmente al caso, in cui i figli prendono il posto di due qualsiasi<br />
individui della popolazione; mantiene bene la capacità esplorativa dell‟algoritmo in quanto anche individui<br />
poco idonei possono continuare a sopravvivere.<br />
Le fasi di ricombinazione e Sostituzione si possono anche progettare come un‟unica fase. Sotto quest‟ottica è<br />
possibile distinguere due tecniche per costituire la generazione successiva:<br />
Aggiornamenti generazionali: dalla popolazione costituita da individui vengono prodotti figli<br />
che quindi rimpiazzeranno per intero la popolazione corrente. In alternativa si può pensare una<br />
variante meno brutale, in cui solo individui faranno da genitori, i quali produrranno figli con<br />
. A questo punto solo i migliori individui tra i padri e i figli formeranno la prossima<br />
generazione.<br />
Aggiornamenti stabili: nuovi individui vengono inseriti nella popolazione non appena vengono<br />
creati; ciò necessita il Sostituzione di individui della generazione precedente. Gli individui da<br />
rimpiazzare possono essere scelti come quelli meno idonei nella popolazione precedente (ciò<br />
incrementa il grado di selezione), oppure quelli che da più tempo vengono riproposti via via nelle<br />
varie generazioni.<br />
2.2.5. Condizione di arresto e criteri di convergenza<br />
Le condizioni di arresto fanno capo spesso ad esigenze di tipo pratico. Tra queste citiamo:<br />
Numero massimo di generazioni: l‟algoritmo termina non appena un prefissato numero di<br />
generazioni è stato generato.<br />
Tempo scaduto: il tempo ad disposizione per eseguire l‟algoritmo è stato esaurito.<br />
Stallo generazionale: l‟algoritmo termina perché la funzione obbiettivo non riesce più a ottenere<br />
miglioramenti tra generazioni consecutive.<br />
Stallo generazionale nel tempo: al posto di considerare generazioni consecutive si analizza il<br />
problema in un‟opportuna finestra temporale.<br />
Invarianza di fitness: se per un certo numero di generazioni non c‟è una variazione della fitness<br />
migliore registrata all‟interno della popolazione.<br />
Esistono anche dei criteri per cui si ritiene che l‟algoritmo abbia subito convergenza, tali criteri se soddisfatti<br />
allora causeranno l‟arresto dell‟algoritmo.<br />
Convergenza del miglior individuo: è il criterio secondo cui l‟algoritmo verrà stoppato non<br />
appena la popolazione corrente presenterà la fitness minore (ricordiamo che nei problemi di<br />
minimo minore è la fitness maggiore è l‟idoneità) al di sotto di un valore di convergenza, a<br />
monte stabilito. L‟algoritmo allora convergerà velocemente garantendo almeno una buona<br />
soluzione.<br />
Convergenza del peggior individuo: la convergenza sarà raggiunta non appena l‟individuo<br />
meno idoneo, cioè con la fitness più alta, non avrà la propria fitness al di sotto del valore di<br />
convergenza. Ciò garantisce che l‟intera popolazione abbia almeno una certa idoneità. Ciò non<br />
significa che l‟ndividuo più idoneo sia abbastanza migliore dei quello meno idoneo.<br />
18
Somma dei valori di fitness: La convergenza è soddisfatta se la somma delle fitness di tutti gli<br />
individui della popolazione è minore o uguale di un certo valore; ciò assicura che ogni individuo<br />
della popolazione stia in un certo intorno di valore di fitness. Questo criterio di convergenza si<br />
presta bene, se accoppiato ad una tecnica di Sostituzione che elimina gli individui peggiori: se<br />
fosse accoppiato con una tecnica di Sostituzione opposta, si avrebbe un grandissimo<br />
rallentamento dell‟algoritmo (per giungere alla convergenza) o addirittura non convergerebbe<br />
mai.<br />
Convergenza in media: Come la precedente eccetto che solo la metà degli individui della<br />
popolazione soddisfino il criterio.<br />
3. Algoritmi multi-obbiettivo<br />
Un algoritmo ge<strong>net</strong>ico multi-obbiettivo persegue più obbiettivi nel senso che, un individuo viene considerato<br />
più o meno idoneo in relazione a più criteri; ciò non si riduce al solo banale incremento del numero di<br />
funzioni obbiettivo da ottimizzare, ma come si vedrà, questa variante degli algoritmi ge<strong>net</strong>ici si<br />
particolarizza aspetti e problematiche peculiari.<br />
Quando si formalizza un problema in termini di algoritmi ge<strong>net</strong>ici multi-obbiettivo, bisogna aver cura del<br />
fatto che spesso, quelli che inizialmente sembrerebbero obbiettivi diversi, in realtà potrebbero ridursi ad un<br />
singola funzione obbiettivo: le condizioni per cui la variante multi-obbiettivo dell‟algoritmo ge<strong>net</strong>ico, risulta<br />
allora indispensabile, sono che i problemi da ottimizzare devono essere più di uno e devono risultare in<br />
conflitto tra loro.<br />
A questo punto, a differenza degli algoritmi ge<strong>net</strong>ici finora visti, non ci si aspetta più un‟unica soluzione<br />
ottima, ma si avrà un insieme di soluzioni ottime. Allora una prima problematica è quella di trovare dei<br />
criteri per specificare una preferenza di una soluzione piuttosto che un‟altra.<br />
3.1. Le funzioni obbiettivo<br />
Come esempio anticipiamo sin da ora, che riguardo il nostro caso di studio, desideravamo ottimizzare sia il<br />
confort ambientale, individuato dalla temperatura ambientale, che il consumo energetico, quest‟ultimo<br />
fortemente peggiorato dalla prima (poiché maggiore è la temperatura in un edificio, maggiore sarà il<br />
dispendio energetico); entrambi gli obbiettivi risultano allora in conflitto.<br />
Un esempio altrettanto valido di una tale situazione è presente in [3], nel quale si tratta il problema del<br />
percorso minimo a costo minimo.<br />
Dati due punti A e B nel piano cartesiano, si vuole trovare il percorso a distanza minima che abbia anche un<br />
costo minimo: entrambi sono in conflitto in quanto spesso il percorso a distanza minima non è detto che sia a<br />
costo minimo e viceversa. Il problema è stato affrontato utilizzando le due seguenti funzioni obbiettivo da<br />
minimizzare dove indica l‟angolo tra i due punti:<br />
La prima funzione è quella relativa alla distanza, mentre la seconda al costo dello spostamento da A a B. Per<br />
ispezione diretta, si può notare come il valore di minimo della prima sia raggiunto in corrispondenza<br />
dell‟angolo nullo, e quello della seconda in corrispondenza dell‟angolo pari a 2.<br />
19
Figura 21 - Grafico dello spazio di ricerca: andamento delle funzioni di fitness<br />
Sopra è riportato il grafico dello spazio di ricerca (della stessa tipologia di quello in figura 5) in cui un asse<br />
rappresenta i valori della variabile indipendente delle funzioni obbiettivo, l‟altro invece, i valori assunti dalle<br />
funzioni obbiettivo: le soluzioni ottime dell‟esempio, saranno in un intervallo [0,2]; ad un grafico come<br />
questo, si preferisce quasi sempre quello dello spazio degli obbiettivi, come nella prossima figura:<br />
Figura 22 - Grafico nello spazio delle soluzioni<br />
Questo grafico invece, mostra l‟insieme delle soluzioni dal punto di vista delle funzioni obbiettivo, infatti<br />
per ogni asse vengono riportati i valori di una funzione obbiettivo. In particolare nella figura sopra, i punti<br />
e sono le soluzioni ottime rispettivamente per la distanza e per il costo, mentre il punto è una buona<br />
soluzione dal punto da entrambi i punti di vista. Un confronto più interessante risulta tra i punti e : poiché<br />
è una soluzione per cui entrambi gli obbiettivi sono minori, possiamo affermare che questa è una soluzione<br />
più idonea rispetto a . Dal grafico si può nuotare come i punti , e giacciano su un segmento più scuro;<br />
tale segmento indica l‟insieme delle soluzioni per cui non è possibile stabilire delle soluzioni migliori<br />
rispetto le altre, ovvero quelle soluzioni idonee alla stessa maniera.<br />
Per stabilire se una soluzione sia più idonea rispetto ad un‟altra, sarà necessario un meccanismo di ranking,<br />
che non sarà banalmente la ricaduta del proprio valore di fitness su ogni individuo, ma dovrà tener conto<br />
della presenza di più obbiettivi.<br />
3.2. La dominanza<br />
20
Quello della dominanza è un concetto cruciale per la realizzazione del ranking degli algoritmi multiobbiettivo,<br />
in quanto come abbiamo già potuto intuire, il valore di fitness non basta più per discriminare gli<br />
individui avendo più obbiettivi: mentre l‟attribuzione di un valore di fitness, coincide col ranking per gli<br />
algoritmi a singolo obbiettivo, invece per quelli multi-obbiettivo il ranking è qualcosa che va oltre<br />
l‟attribuzione del fitness, quest‟ultima operazione ancora necessaria ma non sufficiente al funzionamento<br />
dell‟algoritmo.<br />
Supponiamo di dover risolvere un problema di ottimizzazione con „m‟ obbiettivi, e di aver già trovato un<br />
insieme di soluzioni, per cui quella i-esima viene denotata da .<br />
Secondo il concetto di dominanza allora una soluzione domina (nel caso di problemi di massimo) se<br />
valgono entrambe le relazioni:<br />
1. ;<br />
2. per almeno un valore di<br />
Si noti come la dominanza debba essere valutata per ogni obbiettivo, in quanto dire che la soluzione<br />
domina quella per un solo obbiettivo non da alcuna indicazione su quale soluzione preferire, poiché<br />
nulla si sta asserendo riguardo gli altri obbiettivi. Ciò accade perché la dominanza in se, non supera il<br />
problema di “fondere” assieme gli obbiettivi tra di loro, per cui la dominanza si utilizza ogni qualvolta non si<br />
esprime una preferenza tra i singoli obbiettivi.<br />
Nel caso in cui valga la prima relazione ma non la seconda, si dirà che le soluzioni sono da preferire<br />
indistintamente; nell‟esempio in basso le soluzioni , , , ed dominano le restanti, ma non si dominano<br />
a vicenda. I gruppi di soluzioni che non si dominano a vicenda vengono detti fronti: per cui al primo fronte<br />
faranno parte tutte quelle soluzioni che dominano tutte le altre, al secondo quelle che dominano tutte le altre<br />
tranne quelle nel primo, e così via.<br />
3.3. L’insieme ottimo di Pareto<br />
Figura 23 - Grafico nello spazio delle soluzioni: in grigio le soluzioni dominanti<br />
È chiaro che le soluzioni ottime per un algoritmo multi-obbiettivo saranno quelle sul primo fronte, cioè<br />
quello contenente tutte le soluzioni non-dominate. In base a teli osservazioni, si può definire insieme ottimo<br />
21
di Pareto, l‟insieme di tutte le soluzioni ottime del problema multi-obbiettivo, su tutto lo spazio ricerca<br />
ammissibile. Quasi sempre tale insieme conterrà un infinito numero di elementi, per cui lo scopo ultimo<br />
dell‟algoritmo sarà quello di costruire un insieme di soluzioni ottime che inoltre rappresenti l‟insieme ottimo<br />
di Pareto. Poiché l‟insieme di Pareto è infinito, per formare l‟insieme che meglio lo rappresenti, purtroppo<br />
non basteranno mai le soluzioni del primo fronte, quindi bisognerà attingere anche da quelle dei fronti<br />
successivi.<br />
Come le soluzioni vengono scelte dai vari fronti, risulta peculiarità di ogni algoritmo multi-obbiettivo a se<br />
stante, ragion per cui si analizzerà nella prossima sezione, la tecnica sfruttata da NSGA-II.<br />
Tornando al meccanismo di ranking in generale, si possono sfruttare alternative alla tecnica di dominanza,<br />
cioè possono essere implementati dei meccanismi di preferenza degli obbiettivi, per esempio assegnando<br />
opportuni pesi ad ogni obbiettivo: questa è una strada che il più delle volte è impraticabile perché non<br />
sempre si può in qualche maniera quantificare l‟importanza da dare ai vari obbiettivi, per cui si preferisce<br />
“accontentarsi” del concetto di dominanza e di una rappresentazione dell‟insieme di Pareto. Possiamo<br />
concludere dicendo che spesso il compito di un algoritmo ge<strong>net</strong>ico finisce con la determinazione<br />
dell‟insieme di soluzioni e che la scelta di quest‟ultime viene effettuata o selezionando dall‟insieme di Pareto<br />
(o a caso o secondo una strategia premeditata) oppure per ispezione diretta da parte dell‟utente, quindi senza<br />
mettere a frutto alcun metodo non soggettivo.<br />
3.4. NSGA II<br />
NSGA è un algoritmo ge<strong>net</strong>ico basato sulla non-dominanza per l'ottimizzazione multi-obiettivo, evoluzione<br />
del precedente NSGA, da cui si differenzia per l'algoritmo di ordinamento utilizzato e per la selezione a<br />
elitarismo nella fase di sostituzione delle generazioni.<br />
Per cominciare si fornirà una panoramica teorica generale dell‟algoritmo, ricalcandone le fasi costituenti,<br />
così come abbiamo fatto per gli algoritmi ge<strong>net</strong>ici a singolo obbiettivo; a conclusione di tale sezione se ne<br />
presenterà una descrizione sotto forma di pseudo-codice.<br />
3.4.1. Panoramica generale<br />
3.4.1.1. Inizializzazione<br />
Come negli algoritmi ge<strong>net</strong>ici a singolo obiettivo, la popolazione viene inizializzata in maniera<br />
pseudocasuale, tenendo conto delle caratteristiche del problema.<br />
3.4.1.2. Ranking e Ordinamento<br />
In seguito, agli individui del primo fronte si assegna un valore di fitness pari ad 1, a quelli del secondo un<br />
valore pari a 2 e così via.<br />
22
Essendo NSGA-II un algoritmo multi-obiettivo, non basta assegnare la fitness: per cui verrà utilizzato il<br />
concetto di insieme ottimo di Pareto ad ogni iterazione, per discriminare gli individui dominati da quelli non<br />
dominati.<br />
NSGA-II, purtroppo implementa la tecnica più semplice per costruire i fronti, la quale ha una complessità<br />
pari a ): si considera la soluzione i-esima e la si confronta con tutte le altre - se risulta dominata da<br />
almeno una di esse, si passa alla i+1-esima, altrimenti la si aggiunge all‟insieme delle soluzioni non<br />
dominate.<br />
NSGA-II garantisce inoltre una buona distribuzione delle soluzioni per rappresentare al meglio l‟insieme<br />
ottimo di Pareto. Bisogna, perciò, costituire un insieme di soluzioni che sia il più eterogeneo possibile. La<br />
politica perseguita è quella secondo cui gli individui dovranno essere il più possibile prelevati da zone a<br />
bassa densità di soluzioni: allora in corrispondenza di zone affollate da soluzioni verrà data una bassa<br />
priorità di prelevamento. In questo modo si evita la formazione di gruppi di individui vicini tra loro,<br />
privilegiando invece una loro distribuzione il più possibile uniforme.<br />
Tutto ciò è realizzato tramite l‟operatore matematico crowding distance: l‟idea di base dietro tale tecnica è<br />
quella di trovare la distanza euclidea tra ciascun individuo in un fronte basandosi sui suoi m valori della<br />
funzione obiettivo nell‟iperspazio m-dimensionale. A livello analitico, la crowding distance si presenta come<br />
una particolare misura di distanza in cui gli individui da confrontare vengono posti sui lati di un cuboide.<br />
Ogni lato è, quindi, legato ad un obiettivo, e per ricavare la lunghezza si considera la differenza tra i valori<br />
obiettivo della soluzione precedente e della successiva, normalizzata rispetto alla distanza tra le soluzioni<br />
estreme del fronte. Per queste ultime non è possibile costruire il cuboide, per cui la crowding distance<br />
assume valore infinito (∞).<br />
Figura 24 - Crowing distance<br />
Essa viene attribuita in maniera univoca per ciascun fronte: la comparazione della crowding distance tra due<br />
individui appartenenti a fronti diversi non ha quindi senso.<br />
3.4.1.3. Selezione<br />
Il rango e la crowding distance appena assegnati vengono utilizzati in un processo di selezione a torneo, il<br />
cui risultato sarà la scelta dei genitori degli individui della generazione successiva: questa operazione di<br />
selezione viene effettuata mediante un operatore, definito appositamente, detto crowded comparison<br />
operator, indicato con . Il confronto viene effettuato in base a:<br />
1. Il rango di non dominanza : gli individui del fronte avranno rango .<br />
2. La crowding distance .<br />
23
Accadrà infatti che se, alternativamente:<br />
se p e q appartengono allo stesso fronte , , ovvero la crowding distance di p è<br />
maggiore di quella di q<br />
Informalmente, si può dire che fra due individui si sceglierà quello con il rango inferiore, oppure, in caso di<br />
parità di quest‟ultimo, quello con la maggiore crowding distance.<br />
3.4.1.4. Ricombinazione dei geni<br />
La popolazione selezionata genererà discendenti mediante gli operatori di crossover e di mutazione, che<br />
verrà trattata nel dettaglio a breve.<br />
L‟operatore di crossover utilizzato è il Simulated Binary Crossover : si tratta di un operatore ad un punto, con<br />
una tecnica casuale di prelevamento dei singoli geni dei genitori, secondo una precisa distribuzione di<br />
probabilità.<br />
Dati i genitori e i geni dei due figli, e , saranno scelti come segue:<br />
La quantità è detta fattore di trasmissione, ed è estratta da un insieme casuale avente densità di probabilità<br />
Questa distribuzione si può ottenere da un numero casuale u campionato nell‟intervallo (0,1). è l‟indice<br />
che controlla quanto i figli saranno simili ai genitori: maggiore è questo indice, più i figli saranno simili.<br />
Il grafico sotto mostra l‟andamento di tale distribuzione al variare dell‟indice:<br />
24
Figura 25 - Distribuzione di probabilità del fattore di trasmissione<br />
La mutazione invece avviene per mezzo dell‟operatorie di mutazione polinomiale: sia la componente del<br />
figlio da mutare, varrà che:<br />
e sono rispettivamente i limiti inferiore e superiore dello spazio decisionale per quella particolare<br />
componente; è una piccola variazione calcolata a partire da una distribuzione polinomiale così fatta:<br />
dove è un numero casuale campionato uniformemente nell‟intervallo (0, 1) ed è l‟indice della<br />
distribuzione per la mutazione.<br />
3.4.1.5. Rimpiazzamento degli individui<br />
La popolazione di discendenti è combinata con quella della generazione corrente; viene effettuata una<br />
selezione, che sfrutta l‟elitarismo, per determinare gli individui della generazione successiva; l‟elitarismo si<br />
baserà sulla non-dominanza.<br />
Gli individui si scelgono inizialmente da quelli del primo fronte: in seguito se ne scelgono ancora dagli altri<br />
fronti basandosi sulla crowding distance, in ordine decrescente, finchè la dimensione della popolazione non<br />
raggiunge N.<br />
3.4.2. Pseudo-codifica<br />
Di seguito i dettagli dei singoli passaggi dell‟algoritmo.<br />
1. Inizializzazione della popolazione: La popolazione viene inizializzata in base al range del<br />
problema ed ai suoi vincoli (se ve ne sono).<br />
2. Ordinamento basato sulla non-dominanza: La popolazione inizializzata viene ordinata in base alla<br />
25
non-dominanza tramite il seguente algoritmo:<br />
per ogni individuo p della popolazione principale P:<br />
i. Porre . Questo insieme conterrà tutti gli individui dominati da p.<br />
ii. Porre . Questo sarà il numero di individui che dominano p.<br />
iii. Per ciascun individuo q appartenente a P<br />
o Se p domina q, aggiungi q all‟insieme : ;<br />
o In caso contrario, incrementa il contatore di dominanza per p: .<br />
iv. Se , ovvero nessun individuo domina p, allora p appartiene al primo fronte; si<br />
setta il rango dell‟individuo p ad uno, ovvero . Aggiorna l‟insieme del<br />
primo fronte aggiungendo p al fronte 1: ;<br />
per ogni fronte i-esimo non vuoto (ovvero )<br />
i. Porre .. Questo insieme conterrà gli individui del fronte -esimo.<br />
ii. Per ciascun individuo q appartenente a<br />
o Per ciascun individuo q appartenente a P<br />
a. Decrementa il contatore della dominanza per l‟individuo q:<br />
b. Se allora nessuno degli individui nei fronti susseguenti<br />
potrebbe dominare q. Allora si setta . Aggiorna<br />
l‟insieme Q con l‟individuo q: ;<br />
iii. Incrementa il contatore del fronte di uno.<br />
iv. Adesso l‟insieme Q è il prossimo fronte e quindi .<br />
La crowding distance si calcola come segue:<br />
Per ciascun fronte , composto da n individui:<br />
o Inizializza a zero la distanza per tutti gli individui: , dove j indica l‟individuo j-<br />
esimo del fronte .<br />
o Per ciascuna funzione obiettivo m:<br />
Ordina gli individui del fronte in base all‟obiettivo m: .<br />
Assegna distanza infinita ai valori di confine per ciascun individuo di :<br />
, .<br />
Per i restanti k individui si assegna la distanza con la seguente relazione:<br />
dove è il valore della m-esima funzione obiettivo del k-esimo individuo di I.<br />
26
4. Ambiente di sviluppo<br />
Adesso si vuole dare una descrizione, in termini generali, del sistema di simulazione, al fine di rendere<br />
chiaro quali entità fanno da costituenti al primo e quali variabili vengono veicolate per collegarle tra di loro.<br />
Al concludersi si tale sezione il lettore avrà una visione d‟insieme sulle tecnologie adottate e su come siano<br />
state collegate: per chi fosse interessato ai dettagli implementativi rimandiamo all‟appendice e quindi a come<br />
fosse stato possibile collegarle, rimandiamo all‟appendice.<br />
Figura 26 - Panoramica del sistema proposto<br />
Come mostra la figura in alto, gli attori principali sono l‟ambiente di calcolo Matlab e il simulatore di edifici<br />
EnergyPlus, un software che prevede come input un file che rappresenta tutte le info relative all‟edificio (file<br />
con estensione .idf), e un file climatico relativo all‟ipotetica zone in cui il primo è sito. L‟interfacciamento<br />
con Matlab avviene tramite una libreria, MLE+, la quale sfruttando la tecnologia BCVTB permette di<br />
estrapolare le variabili di EnergyPlus di interesse dell‟utente, e metterle al servizio di Matlab. Nel nostro<br />
caso di studio l‟edificio è stato reso architetturalmente il più elementare possibile, al fine di poter effettuare<br />
uno studio controllistico più immediato.<br />
27
Figura 27 - Modello dell'edificio utilizzato durante le fasi di test: a destra una visione esterna, a sinistra una ripartizione delle<br />
zone virtuali<br />
L‟edificio come mostrano le figure è un volume monoblocco in cui si distinguono quattro zone virtuali: il<br />
termine virtuale sta a significare che, contrariamente a quanto potrebbe suggerire l‟immagine a destra, non<br />
esistono delle pareti di alcun tipo ma sono delle delimitazioni alle zone stesse: a ciascuna zona corrisponde<br />
un sistema HVAC e quindi sarà possibile registrarne una propria temperatura.<br />
Le variabili di EnergyPlus di nostro interesse sono:<br />
1. la temperatura esterna all‟edificio;<br />
2. le temperature delle zone dell‟edificio;<br />
3. le temperature di set-point di riscaldamento e di raffrescamento delle quattro zone;<br />
4. i consumi energetici delle zone.<br />
Lo scambio di variabili è permesso dalla tecnologia BCVTB (per ulteriori dettagli si guardi l‟appendice) ed<br />
espletato da Matlab tramite la libreria MLE+. Così facendo durante la simulazione, Matlab sarà in grado di<br />
intercettare dall‟ingente quantità di output fornita di default da EnergyPlus, solo tali variabili, quest‟ultime<br />
quindi alla mercè dell‟utente. Matlab di canto suo, fornisce al simulatore una soluzione costituita da una<br />
delle possibili combinazioni delle temperature di set-point. A questo punto risulta ovvio l‟inserimento<br />
dell‟algoritmo ge<strong>net</strong>ico NSGAII all‟interno dell‟architettura informativa: questo sfrutterà il simulatore per<br />
calcolare la fitness di ogni individuo ovvero di ogni soluzione generata; l‟obbiettivo dell‟algoritmo sarà<br />
convergere ad una soluzione che mantenga un confort ambientale vicino a quello ottimale (individuato in una<br />
temperatura di riferimento) e minimizzi il consumo energetico.<br />
Discorso a parte merita invece il tempo di simulazione, che viene sì specificato nel file .idf mandato in input<br />
al simulatore, ma scandito a discrezione dell‟utente: i nostri test, come verrà mostrato, si baseranno su timestep<br />
pari al quarto di ora.<br />
Abbiamo scritto inoltre del codice per il plottaggio di grafici sia dell‟andamento dei valori delle variabili di<br />
scambio durante il tempo di simulazione, sia di grandezze da questi derivati, tra cui: la temperatura media<br />
dell‟edifico, il consumo totale di riscaldamento, il consumo totale di raffrescamento e la temperatura media<br />
dell‟intero edificio.<br />
Infine, per implementare l‟algoritmo NSGA-II è stata utilizzata l‟omonima libreria resa disponibile da<br />
Aravind Seshadri mediante il sito dei contributi utente Mathworks. Nella nostra implementazione un<br />
individuo è rappresentato da una stringa composta da 24*4*2, geni in cui ogni gene è un intero<br />
nell‟intervallo [0-40]; ogni gene indica un temperatura di setpoint, per cui ogni condizionatore possiede un<br />
28
set-point di riscaldamento e uno di raffrescamento; i sistemi HVAC presenti nel nostro edificio sono quattro;<br />
una giornata di simulazione è scandita in 24 ore: allora un individuo rappresenta una possibile combinazione<br />
dei set-point di tutti i sistemi HVAC presenti nell‟edificio, per ogni ora della giornata.<br />
La valutazione degli individui avviene per mezzo di una simulazione di durata settimanale, e le funzioni di<br />
fitness sono le seguenti:<br />
Una funzione che cerca di minimizzare la differenza tra la temperatura media dell‟edificio causata da<br />
un individuo e quella desiderata pari a 18 gradi centigradi<br />
Una funzione che cerca di minimizzare il valore del consumo energetico causato dall‟individuo<br />
corrente: il consumo energetico è stato calcolato facendo una media delle medie temporali dei valori<br />
della variabili di EnergyPlus che indicano il consumo istantaneo (secondo il time-step) di ogni<br />
HVAC.<br />
Una modifica introdotta alla libreria è quella per cui si evita di far generare all‟algoritmo individui illegali:<br />
un individuo illegale, per il nostro caso di studio, è quello per cui la temperatura di raffrescamento sia<br />
inferiore a quella di riscaldamento.<br />
Abbiamo inoltre creato script di supporto per testare singole soluzioni e per la produzione di alcuni grafici.<br />
29
5. Risultati<br />
In questo capitolo vengono presentati gli esperimenti effettuati sul sistema informativo predisposto: in tal<br />
senso si è tenuto conto prima di tutto, delle prestazioni velocistiche dell‟algoritmo, individuate nel tempo di<br />
esecuzione prima del raggiungimento di una certo numero di generazioni fissato; una sotto sezione è invece<br />
dedicata ad un confronto tra le migliori soluzioni trovate dalla nostra implementazione, e tra una politica di<br />
gestione del sistema HVAC, già implementata nella libreria MLE+.<br />
5.1. Configurazione di riferimento<br />
La configurazione di riferimento è stata scelta tra i sistemi a nostra disposizione durante la fase di sviluppo e<br />
messa a punto . In particolare, abbiamo utilizzato per la fase di test un sistema desktop con la seguente<br />
configurazione:<br />
CPU AMD Athlon(tm) II X4 630 funzionante alla frequenza di 2812.936 Mhz per core;<br />
3966 MB di memoria RAM;<br />
Sistema operativo Debian GNU/Linux 6.0 “Squeeze”;<br />
MATLAB 7.10.0.499 (r2010a) edizione AMD64.<br />
La scelta di non effettuare i test su un sistema Windows - benchè nulla vi sia di legato alla piattaforma nel<br />
nostro lavoro in sé - è stata motivata dal fatto che, perché l‟esecuzione del simulatore vada a buon fine, è<br />
stato necessario aggiungere un ritardo artificiale di alcuni secondi all‟esecuzione della funzione di fitness<br />
(ovvero EnergyPlus) esclusivamente su questa piattaforma: è stato infatti rilevato che era necessario<br />
attendere del tempo affinchè il simulatore potesse chiudere tutti i file temporanei da esso stesso aperti.<br />
Tale ritardo non ha un grande peso per un singolo individuo, ma diventa significativo se si considera un<br />
numero importante di generazioni ed un cospicuo numero di individui per generazione.<br />
5.2. Velocità d’esecuzione<br />
Sono state richieste ad NSGA-II 200 iterazioni con 50 individui ciascuna. I valori di setpoint ammessi erano<br />
tutti e soli gli interi del range [16, 22].<br />
Per il completamento della simulazione sono state richieste all‟incirca 9,4 ore (l‟incertezza è dovuta alla<br />
mancata precisione di calcolo della coppia di funzioni tic/toc di MATLAB). Una singola generazione viene<br />
valutata in circa 3 minuti, mentre per l‟esecuzione di EnergyPlus su una configurazione di setpoint sono<br />
richiesti all‟incirca 5 secondi, a cui devono essere aggiunti in media almeno 4 per la memorizzazione dei<br />
dati.<br />
Un discorso a parte merita la convergenza: stando ai test effettuati, l‟algoritmo risulta convergente,<br />
producendo tutte soluzioni che si trovano sul primo fronte, dopo 10 generazioni: questo significa che sarebbe<br />
possibile interromperne l‟esecuzione dopo 30 minuti.<br />
5.3. Prestazioni dell’algoritmo<br />
Tra i 50 individui dell‟ultima generazione (la duecentesima) sono stati scelti, del tutto arbitrariamente i tre<br />
individui segnati sul grafico che segue, realizzando sovrapponendo tre screenshot di MATLAB.<br />
30
Figura 28 - Fronte della 200-esima generazione: evidenziati gli individui scelti arbitrariamente<br />
Si è poi proceduto ad estrarre la temperatura media raggiunta da ciascuno dei tre individui per metterla a<br />
confronto con la temperatura desiderata. Come si potrà notare, la differenza tra ciascuna delle soluzioni<br />
scelte e la richiesta dell‟utente è soltanto di circa ½ di grado.<br />
31
Figura 29 - Grafico riportante temperature medie e consumi totali dei tre individui scelti per ispezione diretta del grafico in figura<br />
28<br />
5.4. Confronto con politiche alternative non basate sull’intelligenza artificiale<br />
5.4.1. Introduzione<br />
Nonostante gli algoritmi ge<strong>net</strong>ici vengano codificati al solo scopo di presentare sic et simpliciter delle<br />
soluzioni per un dato problema, è sembrato opportuno, agli autori in questo contesto, presentare<br />
un’alternativa basata su premesse differenti, in modo tale da determinare, per quanto possibile, se la scelta<br />
di utilizzare un algoritmo ge<strong>net</strong>ico sia opportuna.<br />
Abbiamo adattato una strategia d’esempio fornita con il toolkit MLE+ in modo tale che risultasse<br />
manipolabile in maniera analoga a quanto possibile mediante la funzione di fitness fornita, ma si facesse<br />
uso della temperatura esterna come discrimine per il cambiamento di setpoint durante una fascia d’orario<br />
lavorativa (dalle 6 alle 18) e di un insieme di setpoint predeterminato per le rimanenti ore del giorno.<br />
Dalle 6 alle 18 ciascun setpoint da applicare ad ogni timestep vengono sono i due valori<br />
[20, max(TCRooLow, min(TCRooHi, TCRooLow + (outputs(:,k) -<br />
TOutLow)*ratio))]<br />
32
Le costanti cui si fa riferimento per il secondo valore sono:<br />
TCRooLow = 22; % Limite inferiore della temperatura di zona<br />
TCRooHi = 26; % Limite superiore della temperatura di zona<br />
TOutLow = 22; % Limite inferiore della temperatura esterna<br />
TOutHi = 24; % Limite superiore della temperatura esterna<br />
ratio = (TCRooHi - TCRooLow)/(TOutHi - TOutLow);<br />
Dalle 18 alle 6 del giorno successivo si utilizzano i setpoint [16 30] per tutti i condizionatori.<br />
Per quel che riguarda la fascia d’orario lavorativa, si può notare che il range di valori ammessi si<br />
sovrappone solo parzialmente a quello indicato per la generazione pseudocasuale di cromosomi nel<br />
contesto dell’algoritmo ge<strong>net</strong>ico.<br />
È stata prevista anche una variante ulteriormente semplificata di questa strategia, con setpoint statici scelti<br />
arbitrariamente per le ore lavorative e pari alla minima temperatura impostabile in simulazione per quelle<br />
notturne.<br />
5.4.2. Confronto<br />
Il confronto tra le soluzioni prodotte mediante l’algoritmo ge<strong>net</strong>ico e quelle fornite è stato effettuato<br />
rispetto agli stessi tre individui scelti nel paragrafo precedente:<br />
Figura 30 - Grafico riportante temperature medie e consumi totali dei tre individui scelti per ispezione diretta del grafico in figura<br />
28, confrontati con i valori delle politiche alternative<br />
33
La politica semplificata è chiaramente quella a dare consumo più basso al prezzo di una temperatura media<br />
inaccettabilmente inferiore; la politica d‟esempio di MLE+, invece, ottiene risultati paragonabili agli<br />
individui generati, al prezzo del consumo più alto fra tutte le configurazioni confrontate.<br />
6. Sviluppi futuri<br />
Questa sezione mostra alcuni interventi sia progettuali che implementativi, a nostro avviso immediati<br />
sbocchi futuri del nostro lavoro; ne sarà fornita una descrizione di carattere “filosofico”, senza quindi alcuna<br />
pretesa di rigore, in quanto gli interventi che si proporranno non sono stati esplorati in questo lavoro: gli<br />
interessati dovranno quindi intenderli come raccomandazioni per il proseguo al nostro progetto.<br />
6.1. Parallelizzazione del codice<br />
In merito ai risultati velocistici mostrati precedentemente, sarà interessante fornire un‟implementazione<br />
alternativa dell‟algoritmo, in modo di sfruttare la presenza di più dei processori attualmente in commercio.<br />
Tale intervento sicuramente dovrà essere progettata ad hoc per evitare problemi di sincronizzazione, in<br />
primis quelli delle generazioni di individui della stessa generazione; tuttavia, sotto un aspetto meramente<br />
tecnico, ancora una volta la suite di sviluppo Matlab viene in ausilio al programmatore, offrendo delle<br />
librerie di supporto alla parallelizzazione del codice.<br />
6.2. Altre tecniche di IA<br />
Un altro aspetto interessante da investigare, sarebbe quello di paragonare le prestazioni dell‟algoritmo<br />
NSGA-II con un‟altra tecnica di intelligenza artificiale, piuttosto che una politica specifica votata al<br />
condizionamento ambiente, così comevmostrato. Un possibile confronto potrebbe essere quello tra<br />
l‟algoritmo studiato in questo lavoro ed una rete neurale, quest‟ultima supportata per mezzo di svariate<br />
librerie da parte di Matlab.<br />
6.3. Comfort ambientale spinto<br />
Sicuramente il lavoro può essere reso più preciso estrapolando ulteriori variabili da EnergyPlus tra cui<br />
l‟umidità delle zone e la velocità delle ventole dei quattro condizionatori: in situazioni più realistiche, tali<br />
grandezze infatti, concorrono al confort ambientale all‟interno dell‟ edificio. Si potrebbe anche pensare di<br />
complicare la struttura dell‟edificio.<br />
6.4. Interventi a funzioni di fitness<br />
Si potrebbe anche effettuare uno studio riguardo le funzioni di fitness, cercando di predisporne di diverse,<br />
pur porgendo attenzione agli effetti negativi, che un intervento del genere potrebbe avere sulle prestazioni<br />
velocistiche. In alternativa o in accoppiata a ciò, si potrebbe implementare una tecnica di gestione dei<br />
risultati delle funzioni di fitness per mezzo della logica fuzzy, per esempio esprimendo un‟appartenenza o<br />
meno ad un insieme, al variare del modulo delle differenza tra temperatura desiderata e temperatura fornita<br />
34
dalla soluzione che si sta valutando. Proponiamo solo questo intervento all‟algoritmo, perché è l‟unico<br />
permesso affinché si possa continuare a parlare di NSGA-II.<br />
6.5. Pianificatore e occupazione delle zone<br />
Esistono inoltre delle variabili in EnergyPlus che tengono conto della presenza di persone nelle zone<br />
dell‟edificio e al variare del tempo di simulazione. Detto questo, si potrebbe allora implementare un<br />
pianificatore che tenga conto dell‟andamento di tale grandezza all‟interno dell‟edifcio, per settarne<br />
opportunatamente il sistemi di condizionamento. A tal si potrebbe attingere alle svariate pubblicazioni<br />
presenti in letteratura, riguardanti la rappresentazione di tale grandezza: si potrebbe allora implementare un<br />
modello matematico che modelli la presenza delle persone nelle stanze, prendendo spunto da quanto già<br />
disponibile presso la comunità scientifica, e accoppiarlo col pianificatore. Ovviamente non è da escludere un<br />
lavoro che in prima battuta cerchi di creare un modello matematico ex novo, e poi il pianificatore che lo<br />
sfrutti.<br />
Durante la progettazione dell‟edificio, persino mediante programmi per la realizzazione di edifici (si guardi<br />
l‟appendice nella sezione DesignBuilder) è possibile impostare la presenza delle persone: in basso lo<br />
screenshot della scheda che permette di fare ciò offerta dal programma DesignBuilder.<br />
Figura 31 - Finestra di dialogo per la specifica della presenza di individui<br />
35
7. Appendici<br />
7.1. DesignBuilder<br />
Per la progettazione dell‟edificio di esempio si è fatto uso della versione trial del software DesignBuilder 3.0,<br />
sviluppato e commercializzato da DesignBuilder Software Ltd. Si tratta di una suite integrata che combina<br />
caratteristiche di modellazione rapida degli edifici con la possibilità di effettuare simulazioni di efficienza<br />
energetica: infatti, DesignBuilder integra una versione appositamente modificata del software di simulazione<br />
EnergyPlus, che verrà analizzata fra breve.<br />
L‟integrazione fra EnergyPlus e DesignBuilder non è stata utile per il perseguimento del progetto, in quanto è<br />
stato necessario un controllo molto fine sul ciclo di esecuzione del simulatore, come abbiamo già detto in<br />
precedenza. L‟utilità di DesignBuilder si è manifestata, però, allo stadio di progettazione dell‟edificio di<br />
riferimento da simulare: infatti, le sue funzionalità di produttività rapida hanno consentito a utenti inesperti<br />
di modellare un edificio abbastanza articolato in tempi brevi.<br />
DesignBuilder, infatti, include un modellatore solido basato su OpenGL, che permette di assemblare modelli<br />
di edifici posizionando, ridimensionando e tagliando “blocchi” in uno spazio tridimensionale. Realistici<br />
elementi 3-D forniscono un feedback visuale dello spessore di ciascun elemento e dei volumi e delle aree<br />
delle stanze; sebbene l‟edificio d‟esempio fornito presenti delle stanze rettangolari, non ci sono limitazioni di<br />
forma o superficie di alcun genere.<br />
I tempi di progettazione sono stati ulteriormente ridotti grazie alla presenza di modelli di dati che consentono<br />
di caricare all‟interno del design i più comuni modelli di edifici, attività svolte, sistemi HVAC e di<br />
illuminazione mediante una semplice selezione in un menu a tendina – volendo, è possibile fornire modelli<br />
generati dall‟utente. Questa caratteristica, combinata con l‟ereditarietà dei dati, permette di effettuare<br />
cambiamenti globali a livello di edificio, blocco o zona. Si può anche controllare il livello di dettaglio di<br />
ciascun edificio, cosa che permette l‟utilizzo del tool in ognuno dei diversi stadi del processo di valutazione<br />
del design.<br />
DesignBuilder è stato utilizzato in questo progetto per delineare la struttura dell'edificio: a modellazione<br />
ultimata, è stato esportato un file IDF per l'uso del modello con il software di simulazione EnergyPlus,<br />
oggetto del prossimo paragrafo.<br />
Riteniamo opportuno mostrare le schede che maggiormente hanno avuto impatto sull‟edificio, per quanto<br />
riguarda il suo utilizzo all‟interno del simulatore.<br />
36
Figura 32 - Sistema di acqua calda sanitaria<br />
Una delle di queste è quella mostrata nella figura in alto: come si può vedere è possibile settare la presenza o<br />
meno del sistema di acqua calda sanitaria, specificando il coefficiente di efficienza. È possibile settare<br />
direttamente da DesignBuilder i set-point di riscaldamento e raffrescamento (compito che si rimanda<br />
all‟algoritmo ge<strong>net</strong>ico) e addirittura la presenza di un sistema di illuminazione e il consumo da associare a<br />
questo. Esiste anche un‟opzione curiosa, la prima nella scheda, quella relativa alla presenza o meno di un<br />
periodo di vacanza: sarà compito di un‟altra piccola scheda, descriverne il collocamento annuale e<br />
l‟intervallo temporale in giorni.<br />
37
Figura 33 - Sistema di illuminazione<br />
Quest‟altra scheda invece entra in dettaglio riguardo l‟illuminazione ambientale: come si può vedere anche<br />
in questo senso DesignBuilder mostra grande versatilità. Non è stato nostro compito sondare questo aspetto,<br />
che però rimane interessante visto che tecniche di intelligenza artificiale potrebbero da un lato essere<br />
sfruttate per coordinare il sistema di illuminazione, quest‟ultimo componente di un certo peso del consumo<br />
energetico totale della maggior parte di edifici.<br />
38
Figura 34 - Configurazione sistema HVAC<br />
In alto invece la schermata che ha richiesto maggiore perizia: tramite questa abbiamo specificato la tipologia<br />
di HVAC da utilizzare: si è fatto riferimento ai sistemi di condizionamento tipici delle abitazioni civili, i<br />
quali si riconoscono dalla valvola radiale posta all‟esterno dell‟edificio.<br />
Abbiamo settato il coefficiente di efficienza termica e quello per il consumo, entrambi inoltre riportarti<br />
all‟interno degli script per il plottaggio dei consumi energetici.<br />
39
Figura 35 - Parametri di simulazione EnergyPlus guidata da DesignBuilder<br />
Tramite quest‟ultima scheda è possibile rendersi conto, di come DesignBuilder non sia solamente un<br />
programma di disegno CAD e specificazione dei materiali (di cui abbiamo tralasciato di mostrar le relative<br />
chede), ma che sia stato progettato per interfacciarsi in maniera immediata con EnergyPlus. Già a livello di<br />
progetto dell‟edificio, l‟utente può discriminare l‟output di EnergyPlus (declinato in una ingente quantità di<br />
file) che sarà restituito per quel particolare edificio.<br />
7.2. EnergyPlus<br />
EnergyPlus è un software che si occupa di effettuare analisi di tipo energetico e simulazioni di carico termico<br />
sulla base di una descrizione, fornita dall‟utente, di un edificio. Tale descrizione, contenente informazioni di<br />
carattere fisico e sistemico, viene fornita sotto forma di un file nel formato IDF.<br />
Sulla base del modello fornito EnergyPlus calcola i carichi di riscaldamento e di raffrescamento necessari a<br />
mantenere dei setpoint di controllo termico, le condizioni sotto le quali quest‟ultimi sono raggiunti nel<br />
sottosistema HVAC, i carichi dei ventilconvettori ed il consumo energetico delle componenti. L‟integrazione<br />
simultanea di queste informazioni (e di molte altre) assicurano che la simulazione di EnergyPlus non dia<br />
risultati difformi da quelli che fornirebbe l‟edificio reale.<br />
Alcune delle caratteristiche di EnergyPlus sono le seguenti:<br />
1. Soluzione integrata, simultanea in cui la risposta dell'edificio è strettamente integrata con quella dei<br />
sistemi al suo interno;<br />
40
2. Timestep definibili dall'utente in termini di frazioni di ora per l'interazione tra le zone termiche e<br />
l'ambiente; timestep variabili per l'interazione tra le zone termiche ed i sistemi HVAC, modificati in<br />
automatico per assicurare la stabilità della soluzione;<br />
3. File di input, output e climatici in formato ASCII che includono le condizioni ambientali in termini<br />
di ora o di frazioni di ora, e report standard e definibili dall'utente;<br />
4. Tecnica di costruzione dei carichi dell'edificio basata sul bilanciamento del calore che permette il<br />
calcolo simultaneo degli effetti radianti e convettivi, sia dell'interno che della superficie esterno durante<br />
ciascun timestep;<br />
5. Conduzione transiente del calore attraverso elementi dell'edificio quali muri, tetti, pavimenti<br />
mediante funzioni di trasferimento conduttivo;<br />
6. Modellazione del trasferimento di calore del terreno mediante collegamenti a modelli tridimensionali<br />
alle differenze finite e tecniche analitiche semplificate;<br />
7. Trasferimento combinato di calore e massa che tiene conto dell'assorbimento/rilascio dell'umidità o<br />
come integrazione livello per livello nelle funzioni di trasferimento di calore per conduzione o come un vero<br />
e proprio modello di profondità della pe<strong>net</strong>razione dell'umidità;<br />
8. Modelli di comfort termico basati sull'attività, termometro interno, umidità;<br />
9. Modello del cielo anisotropico, per un calcolo migliorato della radiazione solare diffusa su superfici<br />
inclinate;<br />
10. Calcoli avanzati sulla disposizione delle finestre, tra cui veneziane controllabili, vetri elettrocromici,<br />
bilanciamenti di calore livello per livello che permettono un assegnazione appropriata dell'energia solare<br />
assorbita dai vetri delle finestre: queste ultime possono essere modellate mediante gli appositi template<br />
forniti;<br />
11. Controlli sull'illuminazione naturale, tra cui calcoli sull'illuminamento interno, simulazione e<br />
controllo della riflettanza delle superfici, controlli sulle lampade e sull'effetto della riduzione<br />
dell'illuminazione artificiale su riscaldamento e raffrescamento;<br />
12. Calcoli sull'inquinamento atmosferico che predicono la produzione di CO2, SO2, NO2, CO,<br />
particolato ed idrocarburi per la produzione di energia sul posto e remota. EnergyPlus fornisce, nella sola<br />
edizione Windows, un'interfaccia grafica per la specificazione degli input in caso di utilizzo interattivo.<br />
41
Figura 36 - EP-Launch<br />
Sulle altre piattaforme oppure nel caso si desiderino specificare parametri la cui gestione non è consentita<br />
tramite questa interfaccia grafica è tassativamente necessario adattare un template di script d'esecuzione<br />
RunEPlus.bat (RunEPlus.sh su sistemi di tipo UNIX) alle proprie esigenze.<br />
Per l'utilizzo automatico è necessario sfruttare software di terze parti che effettuano il parsing dei file di testo<br />
di output generati, o che permettono, tramite l'interfaccia esterna Ptolemy II, il controllo diretto delle<br />
variabili.<br />
42
7.3. BCVTB<br />
Il Building Controls Virtual Test Bed (BCVTB) è un ambiente software che permette agli utenti di:<br />
• accoppiare software eterogenei a scopo di co-simulazione;<br />
• collegare hardware reale a del software di simulazione.<br />
Per esempio, BCVTB permette di simulare un edificio con EnergyPlus ed i sistemi di controllo ed HVAC<br />
con MATLAB, garantendo lo scambio di dati tra i software durante la simulazione.<br />
I flussi di comunicazione tra i software supportati vengono gestiti mediante un file XML che contiene le<br />
descrizioni degli endpoint di ciascuno di essi e le modalità per accedervi. EnergyPlus permette, mediante<br />
appositi campi nel file IDF utilizzato per la simulazione, di specificare quali delle grandezze simulate devono<br />
essere rese disponibili mediante l'interfaccia esterna BCVTB.<br />
7.4. MLE+<br />
MLE+ è una toolbox MATLAB, sviluppata da Truong X. Nghiem, per la co-simulazione con EnergyPlus: si<br />
presenta sotto forma di oggetti nativi MATLAB che nascondono al ricercatore gran parte delle complesse<br />
operazioni necessarie alla lettura e all'invio di dati a EnergyPlus mediante BCVTB; si presuppone che<br />
entrambi questi software siano stati installati correttamente e siano eseguibili dalla toolbox stessa.<br />
mlepClose.m<br />
mlepCreate.m -<br />
mlepDecodePacket.m<br />
mlepEncodeData.m<br />
mlepEncodeRealData.m<br />
mlepEncodeStatus.m<br />
mlepExchangeData.m<br />
mlepProcess.m<br />
43
mlepReadData.m<br />
mlepWriteData.m<br />
mlepWriteEPModel.m -<br />
utils/mlepLoadEPResults.m<br />
44<br />
Output:Variable<br />
L'utilizzo di MLE+ ha permesso di progettare il “controllore” (nel nostro caso la funzione di fitness per<br />
l'algoritmo ge<strong>net</strong>ico) interamente in MATLAB pur mantenendo un completo controllo su ciascuna<br />
simulazione di EnergyPlus eseguita. I dati raccolti sono poi stati sottoposti a processing in MATLAB stesso<br />
per modificare opportunamente il comportamento dell'algoritmo stesso.<br />
7.5. MATLAB<br />
MATLAB è un ambiente interattivo e un linguaggio di calcolo tecnico di alto livello per lo sviluppo di<br />
algoritmi, la rappresentazione grafica dei dati, l'analisi dei dati e il calcolo numerico.<br />
MATLAB può essere utilizzato in una vasta gamma di applicazioni, incluse l'elaborazione di immagini e<br />
segnali, le comunicazioni, la progettazione di sistemi di controllo, test e misurazioni, l'analisi e la creazione<br />
di modelli finanziari e la biologia computazionale. I toolbox (raccolte di specifiche funzioni MATLAB,<br />
disponibili separatamente) ampliano l'ambiente MATLAB per risolvere particolari classi di problemi in<br />
queste aree applicative.<br />
MATLAB offre agli utenti una serie di funzioni per documentare e condividere il proprio lavoro. Il codice<br />
MATLAB può essere integrato con altri linguaggi e applicazioni, dando così la possibilità di distribuire le<br />
applicazioni e gli algoritmi MATLAB.<br />
7.6. Interfacciamento<br />
La necessità di mettere in relazione i software di cui sopra ha reso necessaria un'attenta fase di<br />
pianificazione. Lo schema che segue descrive il sistema realizzato nella sua interezza.
Figura 37 - Diagramma del sistema realizzato<br />
Per rendere possibile la comunicazione tra EnergyPlus e MATLAB è stato necessario svolgere le seguenti<br />
operazioni:<br />
1. Modificare il file IDF abilitando l'interfaccia esterna e mutando gli scheduler esportati da<br />
DesignBuilder in oggetti ExternalInterface:Schedule accessibili mediante BCVTB;<br />
! MODIFICA NOSTRA: attiva ptolemy II<br />
ExternalInterface,<br />
PtolemyServer;<br />
[...]<br />
ExternalInterface:Schedule,<br />
Blocco1:Zona2 Heating SP Sch, !- Name<br />
Temperature, !- Schedule Type Limits Name<br />
24; !- Initial Value<br />
45
[...]<br />
ExternalInterface:Schedule,<br />
[...]<br />
Blocco1:Zona2 Cooling SP Sch, !- Name<br />
Temperature, !- Schedule Type Limits Name<br />
24; !- Initial Value<br />
ExternalInterface:Schedule,<br />
[...]<br />
Blocco1:Zona1 Heating SP Sch, !- Name<br />
Temperature, !- Schedule Type Limits Name<br />
24; !- Initial Value<br />
ExternalInterface:Schedule,<br />
[...]<br />
Blocco1:Zona1 Cooling SP Sch, !- Name<br />
Temperature, !- Schedule Type Limits Name<br />
24; !- Initial Value<br />
ExternalInterface:Schedule,<br />
[...]<br />
Blocco1:Zona1/1 Heating SP Sch, !- Name<br />
Temperature, !- Schedule Type Limits Name<br />
24; !- Initial Value<br />
ExternalInterface:Schedule,<br />
[...]<br />
Blocco1:Zona1/1 Cooling SP Sch, !- Name<br />
Temperature, !- Schedule Type Limits Name<br />
24; !- Initial Value<br />
ExternalInterface:Schedule,<br />
Blocco1:Zona2/1 Heating SP Sch, !- Name<br />
Temperature, !- Schedule Type Limits Name<br />
46
[...]<br />
24; !- Initial Value<br />
ExternalInterface:Schedule,<br />
Blocco1:Zona2/1 Cooling SP Sch, !- Name<br />
Temperature, !- Schedule Type Limits Name<br />
24; !- Initial Value<br />
2. Creare il file XML variables.cfg contenente le variabili di schedule modificate al punto 1 (ed ogni<br />
altra variabile d'interesse generata in output da EnergyPlus) ed i corrispondenti mapping in termini di<br />
variabili di BCVTB. Questi ultimi vengono poi direttamente mappati mediante la toolbox MLE+ in variabili<br />
native MATLAB.<br />
47
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
48
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
49
7.7 Organizzazione del sistema realizzato<br />
La necessità di mettere in relazione tramite MATLAB software eterogenei di diversa provenienza ha<br />
suggerito di inserire in una directory apposita tutti gli script creati ex novo, e quelli della libreria modificati<br />
sulla base delle esigenze degli autori:<br />
confronta_tre.m<br />
confronta_tre_esempio_semplif<br />
icata.m<br />
creato Crea un grafico in cui è possibile fruire<br />
visivamente della differenza tra la temperatura<br />
media fornita da tre individui scelti ad arbitrio di<br />
una data generazione e quella desiderata<br />
creato Simile al precedente, aggiunge ai grafici anche le<br />
politiche d i confronto descritte.<br />
estrai_individuo.m creato Estrae dalla struttura dati contenente tutti gli<br />
individui della generazione quello dato<br />
evaluate_objective.m modificato Valuta le funzioni obiettivo per ogni individuo<br />
dato<br />
fitness.m creato Invoca EnergyPlus mediante MLE+ e restituisce<br />
le informazioni necessarie ad evaluate_objective<br />
ge<strong>net</strong>ic_operator.m modificato File originariamente presente in NSGA-II,<br />
modificato per tenere conto delle relazioni tra<br />
setpoint di riscaldamento e raffrescamento quando<br />
è necessario generare un nuovo individuo<br />
grafico_fronti.m creato Mostra su un grafico i fronti costituiti dagli<br />
individui di una data generazione<br />
initialize_variables.m modificato File originariamente presente in NSGA-II,<br />
modificato per tenere conto delle relazioni tra<br />
setpoint di riscaldamento e raffrescamento quando<br />
si prepara la prima generazione<br />
migliore_della_generazione_pe<br />
r_consumo.m<br />
creato File di esempio per la scelta arbitraria di un<br />
individuo: sceglie quello sul primo fronte con<br />
consumo minore<br />
mlepInit.m modificato File presente originariamente in MLE+, è stato<br />
modificato inserendovi il path per EnergyPlus ed<br />
MLE+<br />
nsga_2.m modificato File presente originariamente in NSGA-II, è stato<br />
modificato in modo tale che salvi ciascuna<br />
generazione effettuata su un file .MAT differente,<br />
per poter valutare l'evoluzione<br />
objective_description_functio<br />
n.m<br />
modificato File presente originariamente in NSGA-II, è stato<br />
modificato fornendo il numero di funzioni<br />
obiettivo e variabili di decisione necessarie<br />
50
parametri_energyplus.m creato In questo script devono essere specificati i file<br />
IDF e climatico da usare, i coefficienti di<br />
performance HVAC, il numero di timestep e la<br />
durata della simulazione<br />
pulisci_file_energyplus.m creato Cancella i file prodotti durante un'esecuzione<br />
precedente di EnergyPlus<br />
quando_converge.m creato Sulla base dei file contenenti le generazioni,<br />
determina in quale di esse l‟algoritmo comincia a<br />
convergere.<br />
test_individuo.m creato Sottopone un dato individuo a simulazione<br />
mediante EnergyPlus e genera alcuni grafici sulla<br />
base delle informazioni rilevate.<br />
test_miglior_individuo.m creato File di esempio per la scelta arbitraria di un<br />
individuo: esegue<br />
migliore_della_generazione_per_consumo.m su<br />
un dato insieme di individui ed, estrattone uno, lo<br />
sottopone a test_individuo.m<br />
valori_riferimento.m creato Contiene i valori di riferimento da utilizzare nel<br />
contesto delle simulazioni (in questa sede viene<br />
presa in considerazione soltanto la temperatura<br />
desiderata).<br />
Per garantire che vengano aggiunti al PATH di MATLAB sia la directory sorgenti/ che quelle contenenti<br />
NSGA-II ed MLE+, è stato predisposto uno script apposito prepara_ambiente.m che dev'essere eseguito<br />
necessariamente prima di ogni sessione MATLAB in cui si preveda di utilizzare l'algoritmo ge<strong>net</strong>ico.<br />
51
8. Bibliografia<br />
1. Sivanandam, S.N. e Deepa, S.N. Introduction to ge<strong>net</strong>ic algorithms. s.l. : Springer, 2007. ISBN-10:<br />
354073189X.<br />
2. Dyer, D. Evolutionary Computation in Java - A practical guide to the Watchmaker framework.<br />
Watchmaker Framework. [Online] 2010. [Riportato: 1 Giugno 2012.]<br />
http://watchmaker.uncommons.org/manual/index.html.<br />
3. Simi, A., Implementazione di algoritmi ge<strong>net</strong>ici distribuiti multiobiettivo in MATLAB(R). Dipartimento di<br />
Ingegneria dell'Informazione, Università di Pisa. 2007. Tesi di laurea specialistica in Ingegneria Informatica.<br />
4. Srnivas N., e Kalyanmoy, D., Using Nondominated Sorting. 1994, Evolutionary Computation.<br />
5. Kalyanmoy, D. e Agarwal, R.B.,., Simulated Binary Crossover for Continuous Search Space. 1994,<br />
Complex Systems.<br />
6. Beyer, H. e Kalyanmoy, D., On Self-Adaptive Features in Real-Parameter Evolutionary Algorithm. 2001.<br />
IEEE Transactions on Evolutionary Computation.<br />
7. Raghuwanshi, M. e Kakde, O. Survey on multiobjective evolutionary and real coded ge<strong>net</strong>ic algorithms.<br />
2004. Proceedings of the 8th Asia Pacific Symposium on Intelligent and Evolutionary Systems. p. 150-161.<br />
8. Kalyanmoy, D. e Amarendra, K.. Real-coded Ge<strong>net</strong>ic Algorithms with Simulated Binary Crossover:<br />
Studies on Multimodal and Multiobjective Problems. 1995, St udies on Mu ltimodal and M ultiobj ective<br />
Problems.<br />
9. Kalyanmoy, D., et al. A Fast Elitist Multi-objective Ge<strong>net</strong>ic Algorithm: NSGA-II. 2002. IEEE<br />
Transactions on Evolutionary Computation.<br />
10. Serra, Roberto. Introduzione alla complessità – Modello di Hopfield – Reti neurali – Percettroni e<br />
Sistemi a classificatori. Facoltà di Scienze della comunicazione e dell'economia, Università degli studi di<br />
Modena e Reggio Emilia. 2004. Appunti dal corso di “Introduzione alla complessità” svolto da Roberto<br />
Serra e redatti da Alessandro Filisetti e Chiara Damiani.<br />
11. Nilsson, N. e Gaglio, S.. Intelligenza artificiale. s.l. : Apogeo, 2002. ISBN 9788873037460.<br />
52