12.06.2013 Views

Elaborato - Emanuelecipolla.net

Elaborato - Emanuelecipolla.net

Elaborato - Emanuelecipolla.net

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!