SlideShare una empresa de Scribd logo
1 de 123
Descargar para leer sin conexión
UNIVERSITA’ DEGLI STUDI DI TRIESTE
DIPARTIMENTO DI INGEGNERIA E ARCHITETTURA
CORSO DI LAUREA MAGISTRALE IN INGEGNERIA INFORMATICA
TESI DI LAUREA
IN
MODELLI DI OTTIMIZZAZIONE
DEFINIZIONE E SVILUPPO DI UN ALGORITMO
GENETICO MULTIOBIETTIVO PER PROBLEMI DI
PROGRAMMAZIONE LINEARE E OTTIMIZZAZIONE
COMBINATORIA
Relatore Laureando
Chiar.mo Prof. Lorenzo Castelli Stefano Costanzo
Correlatore
Dott. Alessandro Turco
Anno accademico 2012 – 2013
1
Indice di Tesi:
1. Introduzione ...................................................................................................... 3
2. Definizioni e Concetti fondamentali .............................................................. 7
2.1. Algoritmi Genetici...................................................................................... 7
2.2. Contesto: Problemi ingegneristici industriali ...................................... 27
3. Analisi della letteratura.................................................................................. 31
4. Progettazione dell’algoritmo......................................................................... 40
4.1. Insiemi di vincoli lineari.......................................................................... 45
4.2. Variabili intere e binarie.......................................................................... 54
4.3. Permutazioni............................................................................................. 57
5. Realizzazione dell’algoritmo......................................................................... 64
5.1. Elimination of Equalities......................................................................... 64
5.2. Preprocessing............................................................................................ 66
5.3. GENOCOP III ........................................................................................... 68
5.4. Paradigma a oggetti................................................................................. 71
5.5. Logica Multi obiettivo ............................................................................. 72
5.6. Fixer per le variabili intere...................................................................... 74
5.7. Fixer per le Permutazioni........................................................................ 75
6. Test e risultati .................................................................................................. 78
6.1. Problema vincolato singolo obiettivo.................................................... 80
6.2. Problema multiobiettivo privo di vincoli ............................................. 91
6.3. Problema vincolato multiobiettivo ........................................................ 99
2
6.4. Problema intero singolo e multi obiettivo .......................................... 106
6.5. Problema del commesso viaggiatore singolo obiettivo.................... 111
7. Conclusioni .................................................................................................... 116
8. Bibliografia e Sitografia................................................................................ 119
3
1. Introduzione
Lo scopo di questo lavoro di tesi è lo sviluppo di un approccio meta-euristico
basato sugli algoritmi genetici per la risoluzione di problemi multiobiettivo
sia di programmazione lineare continua che di ottimizzazione combinatoria.
Inoltre l’intrinseca complessità dovuta alla natura multiobiettivo dei
problemi richiede di spostare l’attenzione dai metodi deterministici
tradizionali a quelli evolutivi euristici. Viene quindi delineato il profilo di un
algoritmo genetico capace di elaborare problemi multiobiettivo con vincoli
lineari, non lineari, variabili intere e binarie. Particolare attenzione viene
dedicata alle fasi precedenti il ciclo di ottimizzazione di un algoritmo
genetico, introducendo delle procedure di semplificazione dei sistemi di
vincoli lineari e un metodo di eliminazione delle uguaglianze, notoriamente
ostiche per gli approcci evolutivi. Risultati sperimentali, su molteplici classi
di problemi test, vengono confrontati con quelli ottenuti da algoritmi genetici
esistenti mostrando dei comportamenti sicuramente incoraggianti per un
raffinamento ulteriore della strategia delineata.
Il presente progetto di tesi è nato da una collaborazione fra il dipartimento di
Ingegneria e Architettura dell’Università degli Studi di Trieste e la società
ESTECO S.p.A.. L’azienda citata opera nel settore della produzione software
e della ricerca e sviluppo sperimentale nel campo dell’ingegneria, ed é
interessata ad uno studio di approfondimento su tematiche inerenti la
programmazione lineare e ottimizzazione combinatoria.
4
Gli obiettivi del presente lavoro di tesi sono:
 definizione di una strategia per la costruzione di un algoritmo
euristico basato sugli algoritmi genetici in grado di risolvere problemi
multiobiettivo sia di programmazione lineare continua che intera;
 realizzazione di un prototipo dell’algoritmo, o delle varie parti che lo
costituiscono, al fine di poter testare l’efficacia dell’approccio
individuato;
 test delle caratteristiche e performance del prototipo, e una
presentazione dei risultati ottenuti confrontati con quelli di possibili
algoritmi competitori su un insieme esemplificativo delle classi di
problemi individuati.
Lo svolgimento del presente progetto di tesi ha prodotto come risultato la
delineazione di una logica di composizione per un algoritmo genetico capace
di adottare dei comportamenti adeguati all’elaborazione di precise strutture
delle variabili decisionali in ingresso. Con un leggero abuso notazionale si
farà riferimento d’ora in poi alle variabili soggette ad un insieme di vincoli,
in cui è possibile riconoscere delle caratteristiche comuni o una struttura, con
il termine di variabili strutturate (ad esempio un sistema di vincoli lineari che
definiscono la struttura di un grafo).
Il prototipo prodotto è un programma scritto in linguaggio Java
indipendente, capace di accettare un buon numero di tipologie di variabili in
input diverse. La scelta di utilizzare Java è stata influenzata dalle
caratteristiche dell’ambiente in cui esso si andrebbe a inserire in caso di una
valutazione positiva del lavoro.
Per lo svolgimento del lavoro di tesi si è usufruito di diverse piattaforme, la
cui scelta è stata strettamente influenzata dalle specifiche necessità di ogni
5
fase. Durante l’esplorazione dei metodi di risoluzione e dei comportamenti
dei diversi algoritmi sono stati impiegati principalmente due software di
ottimizzazione:
 FICO®
Xpress Optimization Suite – Student Edition
Programma per la risoluzione di problemi di programmazione lineare.
Esso mette a disposizione un valido linguaggio di modellazione per la
formulazione efficiente di modelli matematici.
 modeFRONTIER®
Piattaforma di integrazione per l’ottimizzazione multidisciplinare
singola e multiobiettivo. Mette a disposizione dell’utilizzatore un
vasto numero di strumenti di post processing, utili per indagini
statistiche, analisi dei dati e processo decisionale.
Il secondo è stato largamente utilizzato anche nelle fasi successive, sia per
l’ispezione e la valutazione dei risultati del prototipo realizzato,
opportunamente importati, sia per l’effettiva esecuzione degli algoritmi
genetici che sono stati impiegati come competitori per la valutazione dei test
effettuati. Altri programmi utilizzati da annoverare sono Netbeans IDE 7.3 e
Notepad++, strumenti largamente conosciuti e che quindi non necessitano di
dettagli aggiuntivi. Nello specifico le tecnologie impiegate per la
realizzazione dell’algoritmo, risultato di questo lavoro di tesi, sono state:
 Java Standard Edition Development Kit 7 [20]
 Git Repository [21]
Inoltre si è fatto utilizzo del linguaggio Mosel [22] durante l’utilizzo del
primo programma elencato.
6
Il presente lavoro di tesi verrà esposto nel corso dei cinque capitoli a seguire:
2. Sarà esposta una estrema sintesi dei concetti fondamentali sugli
algoritmi genetici e del contesto del progetto. Particolare
attenzione verrà posta nella trattazione degli strumenti
effettivamente impiegati dall’algoritmo prodotto;
3. Nel terzo capitolo si presenterà l’analisi svolta sulla letteratura e
una rapida presentazione dello stato dell’arte inerente l’ambito in
cui si andrà ad inserire il progetto di tesi;
4. Saranno esposte le motivazioni e i ragionamenti che hanno portato
alla definizione dell’algoritmo prodotto, trattando in modo
approfondito le tre macroaree di interesse;
5. Nel corso del quinto capitolo si entrerà nel dettaglio dello sviluppo
dell’algoritmo portando in evidenza le problematiche più
importanti affrontate durante l’implementazione;
6. Infine si esporranno i risultati ottenuti nel corso dei venti test
effettuati sull’algoritmo prodotto, raffrontandoli con le prestazioni
di competitor scelti adeguatamente per le cinque categorie
affrontate.
7
2. Definizioni e Concetti fondamentali
2.1. Algoritmi Genetici
“...the metaphor underlying genetic algorithms is that of natural evolution.
In evolution, the problem each species faces is one of searching for beneficial
adaptations to a complicated and changing environment. The ‘knowledge’
that each species has gained is embodied in the makeup of the chromosomes
of its members.” [2]
Gli algoritmi genetici rientrano nella classe delle euristiche, ovvero quegli
algoritmi che non garantiscono di ottenere la soluzione ottima, ma tendono
ad essere particolarmente efficaci nell’esplorazione di varie porzioni della
regione ammissibile e nell’evolvere gradualmente verso soluzioni sempre
migliori. Questa strategia è motivata dal fatto che gli algoritmi euristici
vengono solitamente impiegati quando un metodo di risoluzione esatto non
è possibile o sarebbe proibitivo in termini di tempo computazionale,
accontentandosi così di ricercare una soluzione sub ottimale in un tempo
ragionevole. Essi sono procedure complesse, adattative, finalizzate alla
risoluzione di problemi di ottimizzazione e basate concettualmente sui
principi che regolano l’evoluzione della specie. L’idea che sta alla base è
quindi quella di selezionare le soluzioni migliori e di ricombinarle in qualche
modo fra loro, in maniera tale che essere evolvano verso una soluzione
ottima. Tale tipologia di algoritmi è stata introdotta da John Holland [3] e da
allora sono stati sviluppati e applicati ad un insieme estremamente vasto di
problemi in svariati ambiti [4]. I risultati di queste ricerche hanno mostrato
l’elevato grado di robustezza di questa metodologia rispetto a quelle già
presenti in letteratura.
8
2.1.1. Principio di funzionamento
Si imposta il discorso generale sulla metafora dell’evoluzione della specie per
renderlo più intuitivo. In natura gli individui si riproducono mescolando i
propri patrimoni genetici, cioè i loro cromosomi. I nuovi individui generati
avranno pertanto un patrimonio genetico derivato in parte da ognuno dei
genitori. La selezione naturale fa sì che riescano a sopravvivere solo gli
individui più forti, e conseguentemente anche a riprodursi. Il grado di
conformità della popolazione all’ambiente quindi tenderà, generazione dopo
generazione, a salire; portando così la specie ad evolversi nel tempo e a
migliorarsi.
Allo stesso modo negli algoritmi genetici ogni possibile soluzione, costituita
dall’insieme di tutte le variabili che la generano, viene interpretata come il
cromosoma di un individuo. In base alle caratteristiche del problema
sottomesso si otterrà una valutazione di conformità denominata fitness per
ogni individuo. Su tale valore si attuerà una selezione degli individui più
idonei alla riproduzione, in base alla quale verranno generati i figli, prodotti
da incroci e mutazioni dei cromosomi dei genitori.
I principi fondamentali su cui si basa questa teoria sono i seguenti:
 Variabilità dei caratteri tra gli individui di una popolazione;
 Adattamento, secondo il quale gli individui che presentano caratteri
vantaggiosi ai fini della sopravvivenza e della riproduzione sono i più
consoni all’ambiente;
 Ereditarietà dei caratteri tra genitori e figli.
9
2.1.2. Passi intuitivi di un algoritmo genetico:
1. Generazione di una popolazione iniziale;
2. Creazione di una nuova popolazione:
a. selezionare una coppia di soluzioni genitori;
b. applicare con una certa probabilità gli operatori genetici
(crossover e mutazione) ai due individui estratti generando così
dei figli.
3. Calcolo del valore di fitness per tutte le soluzioni/individui;
4. Verifica che il criterio di arresto sia soddisfatto, in caso contrario
ritorno al punto 2.
Ognuno dei punti elencati può essere eseguito in più modi e le scelte migliori
sulle strategie da adottare saranno dipendenti dal problema in esame. Senza
soffermarsi ulteriormente su considerazioni troppo specifiche si procede con
una rapida vista del contenuto dei vari passi dell’algoritmo.
2.1.2.1. Generazione della popolazione iniziale
Nella maggior parte dei casi la scelta di una popolazione iniziale è effettuata
in modo del tutto casuale, senza imporre alcun tipo di vincolo e senza
pregiudicare la possibilità di convergenza dell’algoritmo. Tuttavia optando
per una generazione mirata alle zone dello spazio delle soluzioni dove è più
probabile la presenza di una soluzione ottima, si potrebbe portare ad
intraprendere una evoluzione più rapida verso tali regioni; o viceversa ad un
accumulo dannoso dei punti esplorati precludendo possibili buoni risultati
inattesi. D’altro canto una popolazione iniziale ben distribuita su tutto lo
spazio si può ottenere ricorrendo a tecniche di generazioni semi casuali,
10
come ad esempio il metodo basato sulle sequenze a bassa discrepanza di
Sobol [23].
Analoghe considerazioni valgono per la determinazione della dimensione
della popolazione iniziale. Una dimensione troppo ridotta potrebbe incorrere
nel rischio di non effettuare una adeguata esplorazione dello spazio delle
soluzioni. Per contro una popolazione troppo numerosa potrebbe
appesantire il peso computazionale di ogni singola generazione, rallentando
così la rapidità di convergenza dell’algoritmo alle soluzioni migliori.
Inizialmente gli studi avevano portato a correlare la dimensione del
problema con un andamento esponenziale della dimensione della
popolazione [26][27]. Fortunatamente lavori più recenti hanno dimostrato
che tale relazione non era vincolante, associando le dimensioni di 30, 50 o 100
individui alla maggioranza delle istanze, definendole come le dimensioni più
comuni [28]. Altri lavori mostrano come popolazioni di dimensioni molto
ridotte possono essere adeguati, almeno per GA codificati in binario [29].
2.1.2.2. Creazione di una nuova popolazione
2.1.2.2.a. Selezione
La probabilità di selezione di un individuo dipende dal valore assegnatogli
dalla funzione di fitness, ovvero l’indicatore della sua bontà per risolvere il
problema. Un valore più alto di valutazione implica una maggiore
probabilità di essere scelto come genitore per partecipare alla creazione della
nuova generazione. Uno dei criteri più utilizzati è quello di Holland [3] che
attribuisce una probabilità di scelta proporzionale al valore di fitness
dell’individuo. Grazie al meccanismo della selezione, le probabilità di
11
riprodursi vengono sbilanciate verso gli elementi migliori della popolazione
e quindi di trasmettere il loro genoma alle generazioni successive.
Sono importanti però le differenze che possono insorgere fra una scelta
diretta degli individui con alta valutazione o con lo sbilanciamento di
probabilità di selezione a favore degli stessi. Il secondo criterio, rispetto al
primo, permette di mantenere un più alto tasso di differenziazione genetica
all’interno della popolazione, dando la possibilità di riproduzione anche a
soggetti non buoni. Questa caratteristica permette all’algoritmo di esplorare
meglio lo spazio delle soluzioni, rendendo meno probabile la saturazione
della popolazione da parte di poche soluzioni molto buone ma poco distanti
fra loro. Riassumendo il criterio di selezione deve:
 Favorire la riproduzione di individui con valori alti di fitness;
 Preservare la diversità della popolazione in modo da esplorare lo
spazio di ricerca delle soluzioni.
Viene di seguito brevemente illustrato il funzionamento di tre tipologie
molto utilizzate di selezione:
Rank selection: la popolazione viene ordinata in ordine decrescente di fitness e
si attribuisce ad ogni individuo una probabilità in funzione della posizione in
classifica, indipendente dalle effettive differenze di valore di fitness. Tale
approccio assicura di evitare la convergenza prematura e la stagnazione
poiché nessun individuo otterrà una probabilità largamente superiore ad un
altro di essere selezionato. Per contro, questo metodo, soffre di una certa
pensantezza computazionale che porterà a un’individuazione più lenta degli
individui migliori, naturale conseguenza dei vantaggi descritti in
precedenza.
12
Roulette wheel selection: è un criterio di scelta di un individuo proporzionale al
suo valore di fitness. Se definiamo la fitness dell’individuo i-esimo, la
probabilità di essere selezionato dell’individuo i-esimo sarà definita come
, con N numero di individui della popolazione. Si veda un semplice
esempio in cui sono presenti solo quattro individui: ; con
probabilità di selezione 0.12, 0.18, 0.3, 0.4. Intuitivamente essi occupano una
porzione di roulette proporzionale alla loro probabilità di selezione. Nella
figura seguente, l’operatore genera un numero casuale e l’individuo
viene selezionato.
Tournament selection: rappresenta una evoluzione del metodo più semplice
possibile per una operazione di selezione, ovvero il pescaggio casuale a
probabilità uniforme dalla popolazione. Infatti viene definito un torneo con
essenzialmente due parametri: il numero di partecipanti e il criterio di scelta
del vincitore. Intuitivamente si procederà ad una scelta casuale dalla
popolazione di N partecipanti per il torneo da cui risulterà un vincitore che
verrà scelto per la riproduzione.
13
La scelta di un Tournament selection con N = 1 partecipanti equivale ad un
random uniforme. Un’interessante opzione invece è la possibilità di inserire
una probabilità con cui, ad ogni scontro diretto del torneo, riesca a prevalere
l’individuo peggiore. Questo per preservare la diversità all’interno delle
popolazioni senza aggiungere procedure computazionalmente pesanti, come
il riordino della intera popolazione per valore di fitness decrescente
necessario nella Rank Selection.
2.1.2.2.b. Crossover
L’operatore di crossover si può definire intuitivamente come una procedura
di incrocio dei cromosomi dei genitori selezionati per la riproduzione. Tale
composizione dà vita ai cromosomi figli e dunque a dei nuovi individui per
la popolazione in corso di formazione.
Per fornire un semplice esempio di funzionamento, prima di addentrarsi
nella visione di alcuni operatori di crossover specifici, si propone il One-
point crossover:
Definiti due cromosomi come e
appartenenti ai genitori coinvolti, si genera la seguente coppia di figli:
14
e con
punto di taglio scelto casualmente.
Si vedano velocemente alcuni tipi di crossover la cui conoscenza sarà utile
per lo svolgimento successivo del progetto di tesi, dato il loro effettivo
utilizzo nell’algoritmo sviluppato:
Simple crossover
È definito quasi allo stesso modo del già noto One-point crossover,
limitandone però l’utilizzo a punti di taglio validi (una rappresentazione in
floating point ad esempio non è divisibile in ogni punto). Esso viene
impiegato su problemi i cui vincoli definiscono un convex set come spazio
delle soluzioni. Però un incrocio semplice potrebbe dar vita a soluzioni
esterne alla zona dell’insieme convesso , perciò viene introdotto un
parametro tale che:
E conseguentemente
In diversi articoli visionati in letteratura si solleva il quesito della ricerca del
criterio di scelta più appropriato di , contrapposto al metodo effettivamente
utilizzato in questo lavoro, la generazione casuale del parametro.
15
Single arithmetical crossover
Partendo sempre dalle medesime premesse sui cromosomi dei genitori,
questo operatore viene definito come segue: (viene esplicitata la
formulazione di uno solo dei due figli, per l’altro il procedimento è analogo)
Dove è un parametro generato a caso da un dominio dinamico definito
come:
definito come limitazione valida inferiore della posizione k-esima in X
e similarmente come limitazione superiore.
Whole arithmetical crossover
Viene definito come una combinazione lineare degli interi cromosomi dei
genitori. Partendo dalle assunzioni di notazione adottate nei casi precedenti
si otterranno i seguenti cromosomi figli:
Il parametro è definito nuovamente come un numero casuale preso
dall’intervallo fra zero e uno, che garantisce di rimanere all’interno dello
spazio convesso delle soluzioni.
16
Heuristic Crossover
L’operatore di incrocio euristico sfrutta le valutazioni dei genitori per
provare a indirizzare i figli in una direzione che potrebbe essere migliore
delle altre. Ciò viene tentato sbilanciando la procedura a favore del
cromosoma del migliore dei due genitori sperando così di ereditare
caratteristiche migliori da quell’individuo.
Assumendo si definisce il figlio F ottenuto come:
2.1.2.2.c. Mutazione
Tale categoria di operatori genetici viene utilizzata per mantenere una certa
diversità nelle popolazioni. Essa viene attuata grazie a delle variazioni
pseudo casuali nella procedura di riproduzione. A parte l’intento di cercare
di migliorare il valore di fitness dei cromosomi mutati, si porta in primo
piano il ruolo fondamentale della mutazione per garantire la caratteristica di
robustezza agli algoritmi genetici. Infatti grazie a queste variazioni pseudo
casuali si potrà sperare di evitare la convergenza prematura dell’algoritmo a
punti di minimo o massimo locali.
Si vedano ora alcuni esempi di operatori genetici di mutazione che, come per
il caso precedente, verranno effettivamente utilizzati nella realizzazione
dell’algoritmo in sviluppo.
17
Uniform mutation
Viene selezionata una posizione in maniera casuale all’interno di
un cromosoma di un individuo . Il nuovo individuo mutato
verrà definito come dove viene cambiato con un
valore preso casualmente dall’intervallo a distribuzione uniforme.
è definito come limitazione valida inferiore della posizione k-esima in X
e similarmente come limitazione superiore.
Boundary mutation
Viene definita come una mutazione che opera come la precedente, però al
posto di selezionare casualmente a distribuzione uniforme il valore di
viene assegnato un valore, per l’appunto, al limite. Ovvero
scelto con equa probabilità il valore di o di .
Non-uniform mutation
Definito il cromosoma dell’individuo padre come , viene preso
casualmente un e dunque definito, come negli altri casi, il nuovo
individuo con
La funzione restituisce un valore nell’intervallo con una
probabilità che si avvicina a 0 all’incrementarsi del t tempo trascorso di
esecuzione dell’algoritmo. Questa caratteristica quindi impone un
andamento nel tempo estremamente adatto agli scopi di un algoritmo
genetico. Infatti causa una iniziale distribuzione uniforme sull’intervallo di
mutazione, che quindi ricercherà su tutto lo spazio delle soluzioni, per poi
18
costringere l’intervallo ad una distribuzione che comporterà una ricerca
sempre più stringente.
2.1.2.3. Funzione di Fitness
Il metodo più semplice per comprendere la funzione di fitness di un
algoritmo genetico è considerare che essa coincida con la funzione obiettivo
del problema in esame. Sono tuttavia da prendere in esame numerose
considerazioni che espandono la complessità di tale funzione, evidenziando
la sua rilevanza e il suo peso sulla qualità e sulla rapidità di convergenza
dell’esecuzione dell’algoritmo.
Nelle euristiche evolutive la considerazione della presenza di più funzioni
obiettivo e dell’effetto della violazione dei vincoli imposti dal problema nella
valutazione di una possibile soluzione è un problema sempre aperto. Questo
a causa della mancanza di uno standard de facto da adottare affrontando tali
problematiche, nonostante l’alto numero di possibili approcci definiti in
letteratura. In questo frangente è importante nominare gli algoritmi genetici
a cui si farà riferimento e che determinano l’attuale stato dell’arte:
 Non-dominated Sorting Genetic Algorithm, NSGA-II [24]
 Multi Objective Genetic Algorithm, MOGA-II [25]
Elitismo
A seguito di tutte le considerazioni appena affrontate si afferma che la
strategia degli algoritmi genetici può risultare poco conveniente in un ambito
di ottimizzazione. Questo perché dopo aver raggiunto una buona soluzione
si correrebbe il rischio di perderla qualora essa non rientri nel meccanismo
riproduttivo. Per ovviare a questo problema, De Jong introduce il concetto di
19
elitismo [30]. La strategia si basa sul garantire la sopravvivenza al ricambio
generazionale di un sottoinsieme di individui, identificati come i migliori. In
maniera molto intuitiva allora si può dimostrare che, per costruire un
algoritmo genetico convergente alla soluzione ottima, è sufficiente mantenere
un elite set di dimensione uno (mantenendo quindi il solo individuo migliore
della generazione). In questo modo si genera una successione non
decrescente di valori della funzione di fitness e, se questa è superiormente
limitata, allora essa è anche convergente. In letteratura è dimostrato che
l’impiego del concetto di elitismo negli algoritmi genetici migliora
sensibilmente la velocità di convergenza degli stessi [48][24].
2.1.2.4. Criteri di Arresto
Per quanto riguarda le condizioni di arresto di un algoritmo genetico
possono esserci molteplici alternative. La scelta più indicata è fortemente
influenzata dal contesto, e qui ci si limiterà a dare una rapida introduzione ai
metodi principali:
 Arresto basato sul numero massimo di generazioni eseguibili;
 Limitazione del tempo massimo di esecuzione dell’algoritmo;
 Criterio basato sul confronto tra il valore medio del fitness dell’intera
popolazione e il valore di fitness della migliore soluzione trovata;
questa strategia permette di legare l’arresto del programma alla
saturazione della popolazione su un insieme di valori pressoché
uniformi, sintomo dell’assenza di miglioramenti per più generazioni;
 Blocco dell’esecuzione in base ad un massimo di valutazioni della
funzione di fitness attuabili.
20
In questo lavoro di tesi sono state implementate solo le opzioni di controllo
sul primo e sul quarto criterio di arresto.
Come anticipato nel capitolo 2.1.2.3 per poter comprendere a pieno i discorsi
che verranno intrapresi successivamente sarà necessaria una breve
introduzione agli algoritmi genetici che determinano l’attuale stato dell’arte,
il MOGA-II e il NSGA-II.
2.1.3. NSGA-II
Il Non-dominated Sorting Genetic Algorithm [24] è definibile come un
algoritmo multiobiettivo che implementa i concetti di elitismo. Per poter
affrontare il flusso di evoluzione principale dell’NSGA-II però è necessario
introdurre preventivamente i seguenti concetti fondamentali:
 Fast Nondominated Sorting
 Crowding distance assignment
 Constrained Crowded Comparison Operator
21
2.1.3.1. Fast Nondominated Sorting - FNS
L’obiettivo dell’approccio di ordinamento presentato è quello di suddividere
una popolazione in sottogruppi denominati fronti. Fra essi deve sussistere
una relazione di dominanza di Pareto, ovvero la valutazione di ogni
funzione obiettivo di un individuo dominante deve eguagliare o superare
quella degli individui dominati (superare almeno una volta). In tale ottica si
potranno individuare fronti dominati, dominanti e assegnare ad ognuno un
rango pari al numero di fronti che li dominano. Intuitivamente quindi il
fronte di rango minore sarà quello composto dagli individui migliori della
popolazione. L’idea dell’FNS è dunque quello di fornire una procedura
rapida per svolgere una siffatta suddivisione in fronti. Si presentano i passi
principali di funzionamento nello pseudocodice a seguire.
22
2.1.3.2. Crowding distance assignment - CDA
Si introduce ora un nuovo concetto per la valutazione dei punti interni ai
fronti. Gli algoritmi genetici infatti desiderano, oltre a mantenere gli
individui migliori tramite il concetto di dominanza per una convergenza
verso il fronte di Pareto ottimale, avere dei fronti ben distribuiti nello spazio
evitando concentrazioni di punti. Per fare ciò nell’NSGA-II propone la
somma delle spezzate destre e sinistre di ogni individuo calcolata sui vicini
ordinati per valore dell’obiettivo, mediata su tutti gli obiettivi del problema.
In questo modo si assegnerà un valore più alto di crowding distance a chi
presenterà delle distanze elevate dai punti adiacenti. Ordinando ora un
fronte per valori decrescenti di crowding distance si otterrà una lista che
aumenta l’affollamento dei punti man mano che si scorre verso il basso. Si
veda la seguente immagine per chiarire il concetto della stima di densità
delle soluzioni nell’intorno di una particolare soluzione della popolazione.
Per essa si considera come crowding distance di i la stima del perimetro del
parallelepipedo formato dai vertici delle soluzioni vicine a i.
23
Ottenuto così un ordinamento dei fronti secondo un grado di affollamento
crescente sarà possibile effettuare confronti di qualità anche fra individui
equivalenti da un punto di vista della soddisfazione del problema. Infatti se
bisognasse effettuare una scelta fra due elementi appartenenti allo stesso
fronte ora sarebbe possibile prediligere quello con valore di crowding
distance più alto, così da incentivare la dispersione delle soluzioni. Ciò è
preferibile perché risulta probabile che un gruppo di soluzioni vicine tra loro
presentino molte caratteristiche in comune, non portando così ulteriore
informazione alla popolazione. Concludendo si presenta uno pseudo codice
al fine di chiarire il metodo effettivo di calcolo della procedura di CDA.
24
2.1.3.3. Constrained Crowded Comparison Operator - CCCO
L’operatore introdotto dal lavoro in analisi [24] viene indicato generalmente
con il simbolo . Esso permette la definizione di un ordinamento fra
individui utilizzando le definizioni appena esposte di fronti dominati e di
crowding distance. Per ogni elemento della popolazione vengono richiesti tre
diversi attributi: un coefficiente che misura la violazione dei vincoli; il rango
del fronte di appartenenza e la crowding distance dell’individuo.
A questo punto si procede con l’esplorazione del funzionamento
dell’operatore in un confronto fra due soluzioni.
 Se solamente una delle due è ammissibile l’operatore segnalerà quella
come preferibile;
 Se entrambe sono valide si segnalerà migliore quella con un rango
inferiore, se appartengono allo stesso fronte si predilige il valore di
crowding distance più alto;
 Nel caso siano ambedue non ammissibili si preferirà quella che
presenta un coefficiente di violazione inferiore;
 Se l’applicazione dei tre passi precedenti non ha fornito alcuna
preferenza ne viene restituita una casuale.
Il Costrained Crowded Comparison Operator rende possibile effettuare
scelte di preferenza fra coppie di individui, permettendo così di creare un
vero e proprio ordinamento di tutta la popolazione. Si porta all’attenzione
che, con l’applicazione di questo criterio, si effettuerà un ordinamento
separato per gli individui che violano i vincoli. Infatti essi saranno gli ultimi
presi in considerazione preferendo chiaramente le soluzioni ammissibili.
25
A seguito dell’introduzione dei tre concetti fondamentali, che sono stati
appena presentati, sarà affrontabile ora la spiegazione del flusso principale
dell’algoritmo NSGA-II.
Facendo riferimento esplicito alle fasi identificate per un algoritmo genetico
nel capitolo 2.1.2, si considera di iniziare la spiegazione avendo già generato
la popolazione iniziale (il metodo non è rilevante ai fini dell’algoritmo). Si
procede alla prima valutazione di tutti gli individui che in questo caso
comprenderà anche le fasi descritte nei capitoli 2.1.3.1 e 2.1.3.2., ossia la
suddivisione per fronti e il calcolo delle crowding distance. A questo punto
verrà impiegato un binary tournament selection, descritto nel 2.1.2.2.a, e una
successiva fase di riproduzione per la creazione dei nuovi individui. Si
sottolinea che durante la selezione il criterio di vittoria degli scontri diretti
del torneo funzionerà sulla base del CCCO. A questo punto interviene il
concetto di elitismo, descritto in 2.1.2.3, combinato alla valutazione delle
nuove soluzioni che comporranno la popolazione di dimensione doppia, da
riportare alla dimensione desiderata. Per effettuare tale operazione, prima di
ricominciare il flusso dell’algoritmo, si sfruttano le considerazioni spiegate in
precedenza e si taglia semplicemente alla dimensione desiderata dopo aver
riordinato completamente la popolazione doppia con FNS e CDA.
26
2.1.4. MOGA-II
Il Multi Objective Genetic Algoritm [25] è sostanzialmente meno complicato
dal punto di vista operativo confrontato all’NSGA-II.
Per esso è sufficiente determinare l’insieme delle soluzioni non dominate,
cioè quelle che comporrebbero il fronte di rango minimo per il FNS. Tale
insieme viene chiamato Elite Set ed è memorizzato in maniera indipendente
rispetto all’evoluzione consueta della popolazione. È mantenuto aggiornato
tramite il confronto diretto con i nuovi individui in cerca di ulteriori
soluzioni non dominate, inoltre la sua dimensione massima viene fissata a
priori dall’algoritmo stesso.
Un’ulteriore importante differenza rispetto l’algoritmo di Deb, esposto nel
capitolo 2.1.3, consiste nel differente metodo di applicazione degli operatori
di selezione e di riproduzione. Infatti nell’NSGA-II tali operazioni si
eseguono in sequenza mentre nel MOGA-II si applicano in parallelo. Per
ogni individuo viene estratto un numero casuale che decreterà l’ azione da
eseguire, in base alle probabilità di applicazione degli operatori.
Per quanto riguarda la violazione dei vincoli é adottata la strategia di
penalità del valore di fitness dell’individuo per la non ammissibilità. Questo
permette all’algoritmo di operare automaticamente la preferenza per le
soluzioni ammissibili senza prevedere logiche separate per tali soluzioni.
Non si ritiene necessario scendere nei dettagli dei passi principali del
MOGA-II poiché le uniche operazioni che si scostano da una gestione
standard di un algoritmo genetico riguardano l’utilizzo e il mantenimento
dell’elite set e l’applicazione parallela degli operatori, descritte nei paragrafi
precedenti.
27
2.2. Contesto: Problemi ingegneristici industriali
Il presente lavoro di tesi è stato sviluppato in un ambito ben preciso che
inevitabilmente ne ha pilotato alcune scelte strutturali. Si procede quindi ad
una rapida panoramica dei caratteri principali del contesto che serviranno
poi a comprendere alcune decisioni concettuali e operative attuate nei
capitoli successivi.
Il progetto nasce da una collaborazione universitaria con ESTECO S.p.A. che
ricopre un ruolo di primo piano a livello internazionale nel campo
dell’ottimizzazione multidisciplinare, sia come fornitore di software per
l’ottimizzazione che come fornitore di servizi avanzati per l’ingegneria.
Il principale prodotto software offerto da tale azienda è denominato
modeFRONTIER®
. È una piattaforma di integrazione che permette un
interfacciamento diretto con un gran numero di strumenti Computer-Aided
Design e Computer-Aided Engineering, dedicata all’ottimizzazione
multiobiettivo, all’automazione dei processi di progettazione ingegneristica,
all’analisi dei dati e al decision making in contesti multidisciplinari.
28
Della vasta scelta di algoritmi implementati all’interno del software appena
presentato però si prenderanno in considerazione solo gli algoritmi genetici.
Nello specifico solamente i due, già dettagliatamente spiegati, che verranno
utilizzati poi come competitori durante la fase dei test: MOGA-II [25] e
NSGA-II [24].
Nell’ottimizzazione industriale affrontata da modeFRONTIER®
è importante
sottolineare che, solitamente, le variabili possono presentarsi in molteplici
forme ma generalmente hanno sempre dei vincoli stringenti sul dominio.
Infatti per ogni variabile considerata, il software richiede l’inserimento di un
limite inferiore e un limite superiore coi quali operare. Essenziale inoltre
sottolineare la numerosità delle variabili, il numero dei vincoli e della
quantità di obiettivi mediamente presenti nei problemi di ottimizzazione
industriale. Si pensi intuitivamente alla progettazione di un nuovo pezzo di
un motore di cui si vogliono ottimizzare varie caratteristiche. In tal caso il
numero di parametri liberi su cui si potrà effettivamente operare decisioni
sarà estremamente limitato poiché i parametri di progetto e i limiti fisici
imposti nei simulatori saranno estremamente stringenti. È importante
chiarire che generalmente modeFRONTIER®
non ha accesso ai dettagli dei
simulatori né alle formule che genereranno gli output su cui dovrà
ottimizzare. Lo scenario risulta forse più chiaro visionando l’immagine
seguente ove è stato simbolicamente indicato il livello di valutazione degli
input con una blackbox.
29
Possiamo quindi quantificare le variabili decisionali in input come
nell’ordine delle decine (mediamente vanno dalla decina al centinaio).
Il numero degli obiettivi è solitamente inferiore alla decina, anche se
generalmente viene esplicitamente consigliato di effettuare ottimizzazioni
con al massimo due o tre obiettivi per limitare la difficoltà di gestione del
fronte di Pareto e delle decisioni successive.
I vincoli dei problemi sono anch’essi nell’ordine delle decine e solitamente in
quantità proporzionale al numero di variabili, escludendo i limiti inferiori e
superiori delle singole variabili. Inoltre si noti che la maggior parte dei
vincoli comunemente sottomessi a modeFRONTIER®
saranno applicati sulle
variabili in uscita dalla black box. Questo perché eredi dello scenario e della
presenza di complesse simulazioni a livello di fitness che rendono
impossibile esplicitare i vincoli sui risultati della blackbox in funzione delle
variabili decisionali in ingresso.
Risulta immediata la congiunzione delle caratteristiche appena esposte con
una iterazione di un algoritmo genetico. Ogni individuo definito come set di
valori delle variabili di input dovrà essere valutato e questa procedura
Variabili decisionali
BlackBox
Variabili in uscita
30
richiederà tempo di computazione della blackbox che potrà essere anche
molto lungo. Una normale quantificazione del tempo di calcolo necessario ad
una singola valutazione potrà infatti variare in media dall’ordine dei minuti
a quello delle ore. Ne consegue che l’obiettivo principale di un algoritmo sarà
di riuscire a produrre buoni risultati con un numero limitato di valutazioni,
poiché tale procedura è indiscutibilmente il collo di bottiglia computazionale
dell’intero processo.
31
3. Analisi della letteratura
Lo studio dei metodi di risoluzione dei problemi, che interessano questo
lavoro di laurea, è partito da una visione dei metodi principali affrontati nei
corsi universitari di Ricerca Operativa e di Modelli di Ottimizzazione, poi
analizzati più in dettaglio attraverso vari libri di testo [31][32][36].
Allo stesso modo si è proceduto all’esplorazione delle tematiche euristiche
degli algoritmi genetici. Grazie a delle ricerche in rete e a un corso
frequentato all’interno dell’azienda ospitante, ESTECO S.p.A., si è andati a
formare delle basi più che sufficienti per poter intraprendere una ricerca
autonoma in letteratura. Come per gli argomenti inerenti la ricerca operativa
si ritiene superfluo soffermarsi nuovamente sui caratteri standard degli
algoritmi genetici; preferendo invece una presentazione delle metodologie
riscontrate in letteratura per risolvere problemi di interesse o ad essi
riconducibili.
Innanzi tutto bisogna considerare che molti problemi di ottimizzazione
interessanti non dispongono di metodi esatti e/o di risoluzione in tempo
polinomiale a causa della loro complessità computazionale. Per queste
categorie di problemi, nella pratica, ogni soluzione vicina all’ottimo è
preferibile se ottenuta in tempi computazionali ragionevoli. Tale
considerazione motiva e apre la strada all’impiego di euristiche.
Molti dei problemi computazionalmente non trattabili sfruttano metodi di
ricerca probabilistici, ma questi non dispongono di una via generale per la
gestione dei vincoli.
In generale però i vincoli sono parte integrale della formulazione di ogni
problema. In [1] gli autori esprimono esaustivamente tale concetto con le
32
seguenti parole: “Virtually all decision making situations involve constraints.
What distinguish various types of problems is the form of these constraints.
Depending on how the problem is visualized, they can arise as rules, data
dependencies, algebraic expression, or other forms. Constraint satisfaction
problems (CSPs) have been studied extensively in the operations research
(OR) and artificial intelligence (AI) literature. In OR formulations constraints
are quantitative, and the solver (such as the Simplex algorithm) optimizes
(maximizes or minimizes) the value of a specified objective function subject
to the constraints. In constrast, AI research has focused on inference-based
approaches with mostly symbolic constraints. The inference mechanism
employed include theorem provers, production rule interpreters, and various
labeling procedures such as those used in truth maintenance systems.”
L’idea alla base di questo lavoro è quindi trovare un approccio per risolvere
problemi di ottimizzazione al cui interno siano presenti degli insiemi di
vincoli lineari basandosi sugli Algoritmi Genetici. Come già detto, queste
tecniche vengono di norma utilizzate per tentare di risolvere problemi di
ottimizzazione per i quali non si conoscono altri metodi efficienti di
complessità lineare o polinomiale.
Poiché l'approccio genetico, spiegato dettagliatamente nel capitolo 2.1, è
fondamentalmente una esplorazione dell’insieme delle soluzioni ammissibili,
introdurre vincoli può essere potenzialmente vantaggioso e può migliorare il
comportamento della ricerca limitando la regione ammissibile. Tuttavia
nessuno degli approcci tradizionali degli algoritmi genetici utilizza questa
strategia ma impiega tecniche volte a minimizzare l'effetto negativo dei
vincoli. In questo modo, si ricorre ad un allargamento dello spazio di ricerca
permettendo la scelta di soluzioni non ammissibili, esterne quindi alla
regione ammissibile, durante l’evoluzione dell’algoritmo. In alcune tecniche
33
di ottimizzazione, come nel metodo del simplesso [31][32], i vincoli di
uguaglianza vengono sfruttati poiché, se esiste, l’ottimo è situato sulla
superficie dell’insieme convesso generato dall’insieme dei vincoli. Le
diseguaglianze sono convertite in uguaglianze tramite l’aggiunta di variabili
di slack, e la tecnica risolutiva procede spostandosi da vertice a vertice
spostandosi sul bordo della superficie. Bisogna inoltre aggiungere una nota
importante perché nel contesto in cui questo lavoro si pone, presentato nel
corso del capitolo 2.2, l’algoritmo non dispone di alcuna conoscenza sulla
funzione obiettivo, ma può solamente richiedere il calcolo del suo valore alla
blackbox. Questo si contrappone a metodi come quello del simplesso che
guida la ricerca grazie ai valori introdotti dalla funzione obiettivo; oppure ad
altre tecniche della ricerca operativa che sfruttano informazioni estrapolate
dai pesi della formulazione matematica di tale funzione per limitare lo spazio
delle soluzioni e direzionarsi nella ricerca del valore ottimo. Quest’ultimo
criterio considera solo funzioni obiettivo lineari, ipotesi che purtroppo nel
presente contesto applicativo non possiamo garantire. Inoltre da un punto di
vista operativo, tutti gli algoritmi che lavorano effettivamente con delle
uguaglianze sono soggetti a possibili errori di natura numerica dei
calcolatori; condizione che introduce altri parametri di funzionamento, come
gli ordini di precisione e gli intervalli di controllo dei vincoli, per i
programmi che implementano tali algoritmi.
Per contrasto al discorso sul simplesso, in dei metodi che generano soluzioni
in maniera pseudo casuale sullo spazio delle soluzioni, i vincoli di
uguaglianza risultano un problema non ignorabile. Si può notare
semplicemente che gli algoritmi genetici rientrano in questa categoria, infatti
dallo studio bibliografico e pratico effettuato sui problemi di interesse,
classici della programmazione lineare e problemi combinatori, ne è risultato
34
che l’applicazione di un algoritmo genetico standard, per tali istanze, risulta
svantaggioso rispetto ad algoritmi esatti, come il Branch and Bound.
Questo fatto risulta forse più chiaro affrontando le difficoltà di generazione
di una soluzione ammissibile all’interno del dominio del problema per
istanze con un gran numero di vincoli. In tali casi la probabilità di
generazione di candidati non ammissibili è decisamente troppo grande per
poter essere ignorata. Un ottimo esempio, anche se banale, risulta la
costruzione di un circuito hamiltoniano per la soluzione di un classico
Traveling Saleman Problem [31][32]. Ogni applicazione diretta degli
operatori genetici standard di mutazione e di crossover, genera una
soluzione chiaramente non ammissibile con probabilità estremamente alta,
ipotizzando di non eseguire delle codifiche sulle variabili decisionali.
Le metodologie in assoluto più comuni ritrovate in letteratura sono
principalmente basate sul nascondere, all’interno di operatori genetici
specializzati, la logica del problema specifico [8][7][14][15][16][33][34][35],
andando a far lavorare l’algoritmo genetico solamente sullo spazio di
soluzioni ammissibili. Inoltre questa tecnica é spesso accoppiata da delle
procedure di local improvement che analizzano il cromosoma del candidato
per migliorarlo (tali procedure sono fortemente specializzate sull’istanza del
problema). Inutile sottolineare che una procedura di miglioramento locale
può agire in molteplici modi, ma esse sono generalmente costose da un
punto di vista computazionale. Inoltre una impostazione troppo rigida degli
operatori specializzati e delle meccaniche di miglioramento locale può
portare a delle restrizioni non volute dello spazio delle soluzioni, portando
irrimediabilmente l’esecuzione dell’algoritmo a incagliarsi su dei valori
ottimi locali.
35
Un altro metodo utilizzato di frequente per impostare un’istanza di un
problema avente delle variabili strutturate, è ricorrere a dei decoder
situazionali [7][32]. Essi mascherano problemi derivanti l’utilizzo di strutture
dati non convenzionali richieste però dal problema. Al pari dei local
improvement, anche i decoder possono diventare estremamente costosi
computazionalmente. Inoltre si deve anche considerare il potenziale
svantaggio di celare informazioni logiche, che potrebbero risultare utili dal
punto di vista decisionale per l’evoluzione dell’algoritmo, all’interno della
codifica. Un esempio intuitivo potrebbe essere un problema di ricerca su
grafo del cammino minimo dove i cromosomi sono set di archi numerati.
Con una codifica del genere la vicinanza di un numero che codifica un arco
al suo successivo non avrebbe per forza un senso logico per il modello, né
tantomeno l’ordinamento delle codifiche stesse. O l’assegnazione di processi
paralleli ad un insieme di processori [37] dove ogni possibile assegnamento
viene codificato da un valore non ordinato; privando così, anche in questo
caso, i possibili significati di vicinanza e di ordinamento fra due soluzioni
codificate vicine per possibili operatori genetici.
Un altro approccio documentato è costituito dalle procedure di riparazione
che vengono operate su candidati non ammissibili per essere riportati nello
spazio di ammissibilità [9][13][17]. Tali procedure vengono progettate con un
alto grado di specificità in base alla istanza del problema e, dipendentemente
da quest’ultimo, possono anche degenerare in complessità computazionale
fino a rasentare la difficoltà di risoluzione del problema stesso. Si vuole
evidenziare il caso dei problemi di ottimizzazione delle catene di montaggio
automobilistiche, contesto nel quale sono estremamente utilizzati all’interno
degli operatori di crossover specializzati [13][38].
36
Elaborate quindi le considerazioni, estrapolate dall’analisi della letteratura, si
opta per suddividere in macroaree le caratteristiche comuni individuabili nei
problemi di interesse. Questo permette una trattazione più semplice
dell’ispezione delle possibili metodologie risolutive adottabili per i tre
contesti di interesse così suddivisi:
 Insiemi di vincoli lineari;
 Variabili intere e binarie;
 Strutture dati: disposizioni e permutazioni.
Insiemi di vincoli lineari
Prima di procedere con l’elencazione delle opzioni individuate per affrontare
la presente macroarea si ricorda che nel contesto applicativo non si
dispongono di informazioni sulla funzione obiettivo. Data la ottimizzazione
black box quindi non sarà possibile trarre vantaggio dalle informazioni delle
eventuali strutture lineari dei vincoli sulle variabili in uscita e della funzione
obiettivo. Sotto questa ipotesi però sono disponibili varie alternative di
sfruttamento di tali strutture:
 eliminazione delle variabili riducendo la dimensione del problema;
 riparatori/miglioratori locali che cercano di perfezionare i risultati
inammissibili sfruttando la struttura lineare dei vincoli;
 adozione di operatori genetici custom;
 mantenimento degli approcci genetici standard.
37
Variabili intere e binarie
Permettere ad un algoritmo genetico di supportare problemi con variabili di
questo tipo non si concretizza in sostanziali differenze di funzionamento ma
semplicemente di prevedere un adeguato supporto operativo ad esse. Le
problematiche introdotte sono di performance, poiché le variabili discrete
introducono difficoltà di esplorazione dello spazio delle soluzioni. Inoltre la
maggior parte dei test case di questa categoria può venir modellizzata con
strutture dati più complesse che affronteremo nel prossimo paragrafo.
Si presentano comunque come alternative di sfruttamento delle variabili
intere e binarie:
 integrazione di improvement local euristici tratti dalle strategie di
programmazione intera;
 mantenimento della struttura generica di GA, arricchita della logica
operativa per operare con variabili intere e binarie;
 inserimento di procedure di repair all’interno di una struttura classica
degli algoritmi genetici;
 adozione di operatori genetici specializzati.
Strutture dati: disposizioni e permutazioni
Dall’analisi della letteratura é emersa una preferenza diffusa per le
procedure di decoder delle strutture dati estremamente vincolate. Essa si
concretizza con la definizione di uno schema di codifica di tutti gli elementi
validi del problema, andando poi ad utilizzare tali valori per riempire un
vettore di dimensione finita rappresentante una possibile soluzione. Un
esempio decisamente intuitivo può essere la codifica di una istanza del
commesso viaggiatore in cui si opera numerando tutte le città presenti nel
38
problema. Una possibile soluzione a questo punto diventa una sequenza di
numeri interi rappresentanti le città (codifica) che il commesso visita
nell’ordine in cui sono presentati all’interno del vettore, rendendo obbligato
il passo di collegamento fra l’ultima posizione della sequenza e la prima
creando così un circuito. Si ricorda che, per la formulazione del problema, il
commesso non può visitare due volte la stessa città. A questo punto si può
associare la definizione di disposizione senza ripetizione, o di permutazione,
al vettore codificato. Senza scendere ulteriormente nel dettaglio con esempi
di problemi che possono utilizzare una codifica di questo tipo si presentano i
metodi principali trovati per poter sfruttare questa struttura in un algoritmo
genetico:
 definizione di operatori specializzati per le disposizioni;
 adozione di un meccanismo di repair/fix, per ricostruire da un
individuo generato da un operatore una soluzione ammissibile al
problema;
 inserimento congiunto dei punti precedenti in un algoritmo genetico
che utilizza anche operatori non specializzati.
Permutazioni e disposizioni su grafo
Nonostante l’esempio portato all’attenzione nel paragrafo precedente
parlasse di un problema del commesso viaggiatore, nelle considerazioni
possibili inerenti allo sfruttamento delle permutazioni non si accennano
ragionamenti in merito alla struttura del grafo, chiaramente presente in una
formulazione di un TSP. Una importante parentesi viene dunque aperta sui
problemi che coinvolgono la presenza di alberi e grafi, dato che essi
costituiscono una importante fetta dei problemi di ottimizzazione
39
combinatoria. Si è voluto differenziare la categoria dei grafi delle sole
permutazioni poiché nella seconda rientrano anche possibili codifiche di
problemi che non coinvolgono grafi o alberi, un ottimo esempio si può
ritrovare nel Knapsack (problema dello zaino).
Con l’introduzione della presente categoria si prende in considerazione di
utilizzare l’enorme insieme di vincoli, che nei modelli lineari costruiscono la
struttura del grafo, come input semplificato ad uno dei due possibili metodi
che sfruttano tale struttura ai fini evoluzionistici:
 definizione di operatori specializzati che considerino i vincoli
strutturali del grafo;
 adozione di una procedura di riparazione che controlli l’integrità delle
soluzioni e le ripari in base all’input rappresentante il grafo.
Nel capitolo 4 si presenteranno le motivazioni che hanno supportato il
metodo scelto e la spiegazione dello stesso. Si ricorda che l’obiettivo
delineato è la trattazione di una opportuna branca di problemi
multiobiettivo, di programmazione lineare e ottimizzazione combinatoria,
tramite l’identificazione di una strategia generica che permetta ad un
algoritmo genetico di lavorare con problemi di tali tipologie sfruttandone le
strutture. Il target viene ampliato alla costruzione di livelli di funzionamento
aggregabili, per la necessità di guardare all’ottimizzazione di problemi misti,
in cui la parte riconducibile alle singole strutture possa risultare essere solo
un sottoinsieme del problema totale.
40
4. Progettazione dell’algoritmo
Nel corso del capitolo 3 sono state analizzate e presentate le possibili
alternative che si possono adottare per affrontare le varie tipologie di
problemi rientranti nelle categorie individuate. Si ricorda quindi la presenza
di tre macro aree delineate dall’accorpamento dei caratteri simili che
definiscono i problemi di interesse:
 Insiemi di vincoli lineari;
 Variabili intere e binarie;
 Strutture dati: permutazioni.
Bisogna quindi costruire un algoritmo genetico che possa trarre beneficio
dalla conoscenza a priori di questi possibili ingressi strutturati e lavori in
maniera standard per le altre tipologie di variabili in ingresso.
Ricapitolando si vuole costruire un GA che adotti diversi comportamenti in
base al tipo di variabili a lui sottoposte, prevedendo l’opzione di lavorare
anche con più tipologie allo stesso tempo. Viene in aiuto la struttura
particolarmente ben partizionata dei GA, la quale permette di definire delle
strategie diverse a livello degli operatori per governare in modo differente
sezioni del cromosoma di un individuo, meccanismo che favorisce una
applicazione parallela di più logiche di funzionamento. Sfruttando i concetti
introdotti nel capitolo 2 si veda il diagramma seguente proposto di
composizione:
41
1. Generazione di una popolazione iniziale;
2. Generazione nuova popolazione:
a. Selezionare una coppia di soluzioni genitori A e B;
b. Suddivisione dei cromosomi di A e B in gruppi rientranti nelle
categorie definite;
c. Applicazione del comportamento scelto ad ogni categoria
presente nella coppia di cromosomi.
3. Calcolo del valore di fitness per tutte le soluzioni/individui;
4. Verificare che il criterio di arresto sia soddisfatto, altrimenti tornare al
punto 2.
Questa struttura si può ricondurre per similitudine al funzionamento della
fase riproduttiva di un MOGA-II [25]; in cui gli operatori vengono applicati
in parallelo sul cromosoma in base ai parametri dell’algoritmo.
La domanda che può sorgere spontanea a questo punto è se ci sia qualche
indicazione teorica favorevole a questo tipo di approccio. L’obiettivo è creare
un GA generico che però assuma dei comportamenti potenzialmente più
idonei al presentarsi di determinate caratteristiche delle variabili in ingresso.
Intuitivamente possiamo presupporre che il comportamento standard in
assenza di tale condizione sarà da paragonarsi ad un qualsiasi GA blackbox
42
senza rivisitazione, ovvero che non sfrutta conoscenze a priori e che valuta
ogni punto dello spazio di ricerca al più una sola volta. Questa
generalizzazione del comportamento standard ci permette di chiamare in
causa il No Free Lunch Teorem [42]. Wolpert e Macready affermano, con tale
lavoro, che mediando sullo spazio di tutti i possibili problemi le prestazioni
di tutti gli algoritmi blackbox senza rivisitazione forniscono le medesime
prestazioni. Da esso si possono dunque ricavare due informazioni
estremamente importanti:
 Se si inventa un nuovo algoritmo che pare essere il migliore per una
certa classe di problemi, il prezzo da pagare è l’esistenza di altre classi
di problemi per cui esso risulta sotto la media;
 Per uno specifico problema è possibile aggirare il teorema del No Free
Lunch incorporando conoscenza specifica sul dominio nella soluzione.
Tali considerazioni giungono in risposta al quesito che ci si era posti poiché
ci permettono di dare un’impronta positiva all’approccio sopra descritto.
Esso infatti si comporterà in maniera generica per problemi che presentano
solo variabili non rientranti nelle tre categorie individuate, cosa che per il No
Free Lunch Teorem non comporta alcun tipo di svantaggio in termini di
prestazioni medie sull’intero orizzonte di problemi affrontabili. Invece per
istanze che propongono gruppi di variabili rientranti nelle categorie per cui è
previsto un raffinamento del comportamento dell’algoritmo, possiamo
affermare con ragionevole certezza che otterremo un comportamento
migliore sfruttando la conoscenza specifica a priori che esse portano. La
somma di queste due considerazioni finali ha fatto propendere il qui
presente lavoro per l’adozione di tale strategia di composizione per
l’algoritmo genetico in costruzione.
43
Prima di procedere con l’analisi effettiva dei metodi trovati per affrontare le
singole categorie di input strutturati è obbligatorio effettuare alcune
considerazioni che permetteranno di slegare le trattazioni specifiche dal
contesto globale; permettendo così una trattazione più semplice e leggibile.
Adottando la struttura di un algoritmo genetico si devono separare le
considerazioni sulle varie sue fasi, introdotte velocemente nel corso del
capitolo 2.1, e definire rigorosamente le relazioni fra le stesse. Una particolare
attenzione deve essere fatta per le relazioni con la fase di riproduzione degli
individui, ovvero quella che si sta andando a costruire. Si può suddividere il
flusso di un GA in cinque macro fasi senza tralasciare dettagli utili alle
seguenti considerazioni:
 Generazione della popolazione
è una fase molto importante per una rapida convergenza
dell’algoritmo genetico, come da considerazioni già effettuate, ma non
è rilevante dal punto di vista del suo funzionamento in senso stretto.
Esso si può definire isolato dato che non ha relazioni dirette di
funzionamento con alcuna delle altre fasi;
 Valutazione
Il calcolo della funzione di fitness ha un ruolo di primo piano nella
qualità delle capacità di ricerca del GA, e soprattutto sulla gestione dei
vincoli [6][7]. La letteratura è ricca di studi su tali tematiche ancora
aperte, e sulla gestione dei problemi multiobiettivo [18]. Il punto
importante però è che questa fase non è in alcun modo relazionata, in
senso di legami di struttura diretti, con l’applicazione gli operatori;
 Riordino e selezione degli individui
Sono entrambe procedure che sicuramente possono influire sulla
qualità del risultato dell’applicazione degli operatori, ma ciò
44
nonostante non impongono alcun vincolo alla fase di nostro interesse.
Si lasciano dunque in secondo piano scelte inerenti: la dimensione
della popolazione, il numero di generazioni da computare, l’utilizzo
di elitismo e altre strategie velocemente introdotte nel capitolo 2.1.2 .
 Controlli e Criteri di arresto
Come è intuibile essi determinano solo la durata dell’esecuzione
dell’algoritmo genetico, senza mantenere vincoli espliciti con nessuna
delle altre fasi.
Per esclusione la quinta fase risulta essere quella di nostro interesse: la
Riproduzione, ovvero dove verranno applicati gli operatori genetici e creati
quindi i nuovi individui. A seguito delle considerazioni sulle altre cinque
fasi, si può constatare che non ci sono vincoli diretti che impongano
accorgimenti particolari; nonostante la selezione e i metodi di generazione
della popolazione iniziale possano influire sul risultato degli operatori. È per
questo che nei prossimi paragrafi si procederà all’analisi dei metodi scelti per
affrontare le tre macroaree, circoscrivendo il discorso alle operazioni della
fase di riproduzione. Inoltre dalle considerazioni derivate dalla
composizione orizzontale del flusso di esecuzione, ereditate anche dalla
struttura degli operatori del MOGA-II [25], si potrà procedere a tali
spiegazioni in maniera mutuamente esclusiva e senza appesantire il discorso
con riferimenti obbligati alle tutte le altre categorie.
45
4.1. Insiemi di vincoli lineari
Questa categoria è forse quella che, anche intuitivamente, meglio si presta
all’aggiunta di metodologie specifiche e di considerazioni matematiche per la
semplificazione del problema sottoposto. Ci sono vari punti di forza che
permettono di adottare ragionamenti generali su insiemi di vincoli lineari
[31][32], ma i due principali sono:
 La possibilità di avanzare deduzioni, effettuare calcoli e
semplificazioni sui vincoli stessi, cosa che negli altri casi (come di non
linearità) sarebbe impossibile;
 Il punto più importante sfruttabile dalla struttura in analisi è che un
gruppo di vincoli di diseguaglianza lineari delinea sempre un insieme
convesso. Ed esso garantisce varie proprietà che possono essere
impiegate come base di partenza di calcoli nello spazio dei punti
interni all’insieme.
Oltre alle due considerazioni appena esposte si ricorda che sono disponibili
in letteratura anche molti metodi di semplificazione, eliminazione,
restringimento o aggiunta di vincoli lineari, chiamati Preprocessing [32][36],
ed hanno come obiettivo quello di rendere più efficienti i sistemi di vincoli
definiti nei problemi.
46
4.1.1.Sfruttamento della struttura lineare
In questo contesto è stato trovato, come miglior approccio aderente alle
esigenze dalla categoria in analisi, un algoritmo genetico singolo obiettivo
presentato da Michalewicz con il nome di Genetic Algorithm for Numerical
Optimization Problems, abbreviato a GENOCOP [11].
Esso prende in considerazione solo problemi che presentano in ingresso
vincoli lineari, sia di uguaglianza che di diseguaglianza. Non vengono invece
imposte limitazioni alla formulazione della funzione obiettivo. Il
funzionamento del Genocop è semplicemente riassumibile contando sul
supporto delle spiegazioni riportate nei capitoli precedenti. Si avvale di un
meccanismo matematico di riduzione del numero di variabili, esplicitandole
a partire dai vincoli di uguaglianza. Tale manovra lascia generalmente
l’istanza del problema priva di vincoli di uguaglianza e quindi solo con un
insieme di diseguaglianze. Importante sottolineare che un sistema così
composto produce per intersezione un insieme convesso. Da questa
considerazione, avvalorata dalla generazione di una popolazione iniziale
solo di individui ammissibili, si possono gestire gli operatori genetici in
maniera specializzata per sfruttare le proprietà dell’insieme convesso e
rimanere nella zona di ammissibilità del problema. Questo comporta dei
vantaggi enormi nella rapidità di esplorazione della regione ammissibile da
parte dell’algoritmo genetico. Vediamo ora in maniera sintetica il
funzionamento del nucleo logico del Genocop.
47
Algoritmo Genocop
Si definisce un problema di ottimizzazione come insieme di
Funzione obiettivo:
Dominio delle variabili:
Vincoli di uguaglianza:
Vincoli di diseguaglianza:
Si delinea la procedura di semplificazione delle uguaglianze con il nome di
“Elimination of Equalities” che opererà nel seguente modo:
preso un set di vincoli di uguaglianza si può suddividere A in
Si definisce quindi un nuovo set di diseguaglianze
Si suddivida a questo punto l’insieme di diseguaglianze di C
Il nuovo problema di ottimizzazione così delineato sarà composto da:
Funzione obiettivo:
Dominio delle variabili:
Vincoli:
48
Il mantenimento delle soluzioni all’interno della regione ammissibile è
possibile utilizzando il crossover algebrico [19]. Esso sfrutta la formulazione
della convessità per impostare il lavoro di incrocio dell’operatore, e viene
proposto anche nel corredo di operatori del GENOCOP [11].
I dettagli sulla formulazione degli operatori selezionati rientranti dell’ambito
di interesse sono già stati presentati più approfonditamente nella sezione
sugli operatori di crossover e mutazione, rispettivamente visti nel corso dei
capitoli 2.1.2.2.b e 2.1.2.2.c .
È stato dunque trovato un metodo di risoluzione che sembra adeguato ad
affrontare i problemi derivanti dalla presenza di uguaglianze per gli
algoritmi genetici, e si avvantaggia dalla struttura degli input sottoposti a
matrici di vincoli lineari senza collidere con il contesto applicativo.
Nonostante le ottime premesse però è necessario portare all’attenzione che
esso si muove esclusivamente in un ambito di ammissibilità, il che riduce
notevolmente le possibilità di applicazione generica e di automatizzazione
della procedura per istanze con input di varia natura. Fortunatamente
l’adattamento generale del GENOCOP a una generalizzazione con vincoli di
altro genere non è difficile, inoltre in letteratura si trovano altre due versioni
del sopracitato algoritmo. Il GENOCOP II sarà di scarsa utilità ai fini del
progetto, ma si è rilevato comunque utile per capire come la prima versione
dell’algoritmo potesse essere associata a meccaniche complesse quale il
Simulated Annealing [43]. Il GENOCOP III [12] invece applica una struttura
a due passi per la ricerca nello spazio delle soluzioni sull’insieme convesso
delineato dai vincoli lineari e successivamente inserisce un metodo genetico
standard per la ricerca delle soluzioni dell’intero problema, permettendo di
lavorare anche con vincoli non lineari. Questo approccio è semplice ed
efficace e viene adottato per la struttura base della soluzione ricercata in
49
questa sezione. Si veda ora in estrema sintesi il funzionamento del
GENOCOP_III facendo esplicito riferimento alla sua versione già presentata.
Esso si propone di ottimizzare un set di variabili decisionali
Lo spazio viene suddiviso nel seguente modo
search point space: regione ammissibile dei vincoli lineari
reference point space: regione ammissibile dell’intero problema
Il search point space è un politopo definito da
Aggiungendo vincoli si delimita :
Essi si dividono in quattro categorie, tipologia e linearità:
Equazioni Lineari LE Equazioni non lineari NE
Disequazioni lineari LI Disequazioni non lineari NI
L’algoritmo in esame opera normalmente su seguendo la procedura di
funzionamento della prima versione del GENOCOP, tentando di riparare le
soluzioni non appartenenti ad :
Soluzioni ammissibili
Soluzioni inammissibili
50
Esaminata dunque la struttura della terza versione dell’algoritmo si possono
notare delle peculiarità nella gestione della popolazione del reference point
space che non sono proprio in linea con le idee generali dei genetici. Inoltre
la possibilità di rimpiazzo va a modificare a mano le popolazioni all’interno
della stessa fase di riproduzione, potendo generare così delle riproduzioni di
individui nuovi; intuitivamente denominabile come balzo evolutivo. Si fa
notare che gli algoritmi appena presentati sono stati pensati solamente per le
ottimizzazioni singolo obiettivo, che non sono il target principale del
contesto di applicazione del progetto visto nel capitolo 2.2.
Siccome la struttura optata trae notevoli benefici dai domini delle variabili
contenute, dato che mantiene i valori delle stesse all’interno dei limiti
imposti, e che sfrutta meticolosamente l’insieme di vincoli lineari per
avvantaggiare l’evoluzione genetica, si rivela decisamente importante
sottoporgli istanze di problemi ben formulate. Per questo diventa
notevolmente rilevante la fase di semplificazione del sistema di vincoli e
dunque la possibile fase di preprocessing.
51
4.1.2.Preprocessing
I meccanismi rientranti sotto la nomenclatura di preprocessing hanno come
scopo generale la riduzione della dimensione dell’istanza del problema.
Infatti la complessità di risoluzione di un problema è largamente influenzata
dalla numerosità delle sue variabili e dei vincoli. Riuscire a ridurne il numero
dei secondi citati quindi può portare dei grossi benefici in termini
computazionali e di rapidità di convergenza. Importante spiegare che le
procedure rientranti nel preprocessing sono generalmente sequenze di
semplici operazioni iterate opportunamente al fine da trovare possibili
semplificazioni. A sua volta un sottoinsieme di singole procedure o
dell’intero procedimento può venir iterato per garantire una ricerca più
efficace di possibili semplificazioni multiple.
Si procede ora ad una rapida panoramica degli obiettivi esatti ricercati da
tale metodo di riduzione e quali tipi di procedure possono venir prese in
considerazione nell’ambito del lavoro attuale:
 Restringimento dei vincoli sulle variabili;
 Inserimento di vincoli logicamente vantaggiosi;
 Rendere costanti variabili tramite assegnamento;
 Rimozione di vincoli ridondanti o privi di informazione;
 Rilevare casi di problemi che non ammettono soluzioni.
Per effettuare ciò esistono numerose tecniche diverse, applicabili a livelli
differenti. Risulta banale ma doveroso sottolineare l’impossibilità di avvalersi
di tutte le tecniche di preprocessing che analizzano e sfruttano la funzione
obiettivo del problema per operare, questo a causa del contesto di
applicazione in ambito di ottimizzazione industriale.
52
Sono state introdotte, nel flusso creato per il preprocessing, delle possibili
fasi aggiuntive per sfruttare ulteriormente la struttura che verrà
effettivamente sottoposta all’algoritmo in costruzione. Questi prendono in
considerazione i limiti di dominio imposti ad ogni variabile in ingresso per
renderli più stringenti, se l’insieme di vincoli ne preclude comunque la
possibilità di assegnamento totale. Si veda ora la catena di procedure che
sono state scelte, ricordando che si potrà decidere di iterarne alcune,
sottogruppi o tutte a momento debito:
 Eliminazione dei Singleton
Consta semplicemente nel ricercare vincoli banali in cui compare una
singola variabile decisionale e farne assorbire l’informazione dai
rimanenti vincoli;
 Aggiornamento dei limiti inferiori e superiori delle variabili
Si tratta di effettuare considerazioni sui vincoli lineari e controllare i
valori minimi e massimi assumibili dalle variabili, questo per
confrontarli poi con i vincoli specifici di dominio (limite superiore e
inferiore della variabile);
 Controllo presenza di vincoli privi di significato
Può succedere che considerazioni effettuate esplicitando variabili nella
disequazione portino in evidenza vincoli che sanciscono relazioni fra
53
le variabili già presenti in altri, oppure restrizioni equivalenti ma più
permissive di altre già incluse nell’insieme;
 Aggiornamento vincoli
Generalmente si effettua una modifica restrittiva dei termini noti a
seguito di considerazioni similari a quelle applicate nel restringimento
dei domini delle variabili;
 Restringimento dei vincoli
Operazione che mira a effettuare delle modifiche ai coefficienti e dei
termini noti nei vincoli, senza alterare però i legami proporzionali fra
le variabili da essi sanciti;
 Procedura di semplificazione logica delle diseguaglianze
Forse la procedura più complessa che è stata presa in considerazione,
essa si articola nelle tre fasi evidenziate nel diagramma: generazione
di nuove diseguaglianze con criteri logici specifici, confronto a coppie
del nuovo insieme di vincoli espansi, semplificazione.
Se ci si sofferma a riflettere sulle prime quattro fasi evidenziate, esse
acquisiscono peso se l’intero flusso viene ripetuto iterativamente. Ogni
modifica di una delle singole fasi potrebbe aprire la possibilità di
individuazione di nuove semplificazioni anche per le successive. Nel
contesto in esame è accettabile dedicare un quantità di tempo di calcolo
importante al preprocessing, data la presenza del collo di bottiglia
computazionale che si crea durante le valutazioni dei singoli design.
54
4.2. Variabili intere e binarie
La seconda categoria individuata tratta le variabili a valori interi e binari,
esse purtroppo si presentano in modo ricorrente nei problemi di
ottimizzazione reale e non esistono sempre metodi di risoluzione efficaci.
Queste categorie di problemi sono individuati dalla sola presenza di variabili
il cui dominio appartiene all’insieme dei numeri razionali o interi. Invece si
può definire un problema di ottimizzazione binaria sulla presenza di
variabili decisionali che possono assumere solo valore di zero e di uno. Si
nota che da un punto di vista operativo sarebbe possibile definire un
problema binario come intero, inserendo ad ogni variabile razionale un
dominio compreso tra zero e uno inclusi. La caratteristica fondamentale di
tali problemi è quindi quella di avere insiemi ammissibili discreti, a
differenza dei classici problemi di programmazione lineare in cui l’insieme
ammissibile è continuo. Ciò comporta la necessità di tecniche d’ispezione
dello spazio delle soluzioni che agiscano in modo differente per problemi di
ottimizzazione intera e binaria.
Il nucleo del discorso è che la restrizione intera alle variabili decisionali in
questi problemi causa un tremendo aumento della difficoltà risolutiva dei
classici metodi che cercano soluzioni ottime o quasi-ottime. Il metodo più
popolare in letteratura risulta essere il Branch and Bound. Esso è un
algoritmo di risoluzione esponenziale che procede partizionando lo spazio
delle soluzioni in sottoinsiemi più piccoli, e risolvendo il problema di
ottimizzazione su ogni sotto-insieme. Questo viene fatto ricorsivamente,
dividendo a loro volta le regioni ammissibili dei sotto-problemi in
sottoinsiemi. Se tale ricorsione venisse svolta completamente, alla fine si
enumererebbero tutte le possibili soluzioni del problema. Questo presenta
55
due problemi: prima di tutto, se il problema ha infinite soluzioni ammissibili
l’enumerazione completa non é possibile, e anche se la regione ammissibile
contenesse un numero finito di punti, tale numero potrebbe essere
esponenzialmente grande; quindi enumerarlo richiederebbe un tempo non
sostenibile se non per istanze estremamente ridotte. L’algoritmo del Branch
and Bound cerca di esplorare solo aree promettenti della regione
ammissibile, mantenendo una limitazione superiore e una inferiore del
valore ottimo della soluzione in una certa area, e cercando di utilizzare tali
vincoli per scartare a priori certi sotto-problemi. Questo permette di ridurre,
in maniera rilevante, lo spazio di ricerca delle soluzioni per istanze di
problemi che soddisfano la legge della dispersione.
D’altro canto in queste tecniche si prevede di processare in maniera isolata
l’intera esecuzione dell’algoritmo, e non ci sono garanzie di funzionamento
nel caso questo processo venga operato congiuntamente all’interno di un
ambiente che preveda più tipi di variabili strutturate. Giunge in aiuto il
contesto di applicazione del lavoro qui esposto, il quale prevede un input
medio composto da un numero di variabili relativamente limitato ed
eterogenee. Ciò permette di svicolare dai problemi che risultano intrattabili
per colpa di una crescita di ordine di grandezza del numero di variabili
decisionali, e quindi la raggiunta dei punti critici di questa categoria. In un
ambito definito da euristiche evoluzionistiche, come quello che viene scelto
per il presente lavoro di tesi, alcune interessanti opzioni specifiche vengono
messe in evidenza nell’articolo di Deb, Reddy e Singh [34] che presentano un
possibile algoritmo genetico personalizzato per i problemi in esame.
Di particolare ispirazione è stata anche la trattazione successiva di Pal e Deb
[33] in cui analizzano in maniera esaustiva più metodi differenti per
approcciare problemi interi anche di grandi dimensioni con gli algoritmi
56
genetici. In essi si introduce un raffinamento del lavoro precedente con
l’aggiunta di tre metodi decisionali su un particolare metodo di
riproduzione, presentato come vasca di ricombinazione genetica.
Anche in questi due lavori il punto fondamentale rimane però la
specializzazione degli operatori dell’algoritmo.
Se si sommano le considerazioni già formulate ai problemi applicativi legati
allo sviluppo effettivo del progetto, risulta che in tutte le opzioni evidenziate
nel capitolo 4.1, si richiederà uno strato di logica separato legato ai valori
ammissibili delle variabili. Valutazione che, congiunta alla delineazione di
una casistica a parte per permutazioni, riduce di molto l’importanza
dell’adozione di metodologie dedicate a questa categoria nel presente
progetto, almeno in un primo momento. Viene quindi deciso di valutare nel
corso dello sviluppo degli operatori specializzati, presentati nelle numerose
fonti bibliografiche elencate per migliorare le prestazioni, ma tuttavia
limitare la strategia per affrontare questa categoria alla semplice possibilità
di sottomissione di variabili in essa rientranti. Ovvero, almeno nel primo
approccio, si ritiene che uno strato logico che permetta una corretta gestione
delle variabili intere e binarie, unita alla presenza della successiva categoria
delle permutazioni, sia sufficiente per fornire le basi su cui testare le
potenzialità dell’insieme e di eventuali operatori genetici specializzati.
57
4.3. Permutazioni
L’idea di isolare le permutazioni nasce da un iniziale approfondimento sulle
strutture dati ricorrenti nei problemi affrontati dalla ottimizzazione
combinatoria [31][32][36], visti anche in un’ottica di utilizzo con gli algoritmi
genetici [44]. Esse possono venir viste come una particolare codifica di
problemi combinatori che presentano un insieme estremamente vincolato di
variabili decisionali. Si possono chiamare in causa tipologie di problemi
molto famosi quali il problema dello zaino e tutti quelli che possono essere
schematizzati tramite una rappresentazione su grafo. La rappresentazione
delle soluzioni come vettore contenente una disposizione di un numero finito
di elementi del dominio delle variabili decisionali è una scelta vastamente
utilizzata in letteratura, specialmente nelle risoluzioni euristiche evolutive
[14].
Si tiene a segnalare l’ottima trattazione di una vasta gamma di possibili
codifiche per problemi di TSP ad opera di Michalewicz [7]. Da essa è stato
possibile ponderare con una visione di insieme i benefici e gli svantaggi che
una particolare codifica porta rispetto ad un’altra. Infatti si è deciso di
adottare delle strutture che verranno denominate permutazioni.
La possibilità di altri approcci è stata vagliata ma, ad esempio, l’adozione di
decoder che operino una codifica biunivoca delle soluzioni in variabili
singole creano delle inevitabili perdite di informazioni. Alcuni esempi
possono essere lo smarrimento della nozione di vicinanza fra specifiche
soluzioni, oppure l’ordinamento delle soluzioni iniziali potrebbe non avere
senso rapportato a quello della codifica una volta inserito nei ragionamenti
che muovono gli operatori genetici. La distanza fra soluzioni però è un
dettaglio che interessa mantenere ben inquadrato anche nella definizione di
58
un metodo che sfrutti la struttura dati delle permutazioni per operare la
ricerca nello spazio delle soluzioni. A questo fine si sono studiate diverse
possibilità per l’adozione di una distanza fra le soluzioni e, in caso, per
includere queste considerazioni nella logica di funzionamento di eventuali
operatori genetici specializzati o procedure di riparazione delle soluzioni.
È stata trovata una ottima trattazione in letteratura; uno studio che mette a
confronto vari tipi di distanze sul confronto fra stringhe applicate al name-
matching [45]. Fra queste erano presenti la distanza operativa di
Levenshtein, il coefficiente di similarità di Jaccard e altri metodologie ibride.
Vengono tenute in considerazione le due esplicitamente sopra citate e la
distanza di Hamming. Ciò potrà essere utilizzato nei criteri interni di
funzionamento di riparatori, operatori o metodi di miglioramento locale per
la categoria in analisi.
Procedendo con la progettazione dell’algoritmo genetico, che si sta
delineando mediante l’approfondimento di ogni singola componente, sono
emersi dei punti importanti che hanno avuto un peso rilevante nella
definizione della soluzione di questa ultima categoria. Infatti l’unica strategia
efficace di utilizzo di una codifica effettuata in un vettore permutazione è
l’impiego di metodi per mantenersi nelle soluzioni strutturalmente valide,
per poter usufruire poi della possibilità di inserire operatori specializzati più
consoni ad una corretta esplorazione spaziale. Le motivazioni di tale scelta
sono già state ampiamente discusse nel corso del capitolo 3.
Per l’utilizzo della categoria delle permutazioni si sceglie di adottare un
sistema di riparazione per mantenere gli insiemi di variabili decisionali in
linea con i vincoli strutturali che determinano questa partizione degli input,
ad esso ci si riferirà da qui in poi con l’appellativo di “fixer”. A tal fine
verranno decise in seguito delle logiche di riparazione che limitino la
riproducibilità della medesima soluzione valida a partire da una stessa
59
configurazione errata. Inoltre si vaglierà se implementare meccaniche legate
alle nozioni di distanza fra stringhe applicate a vettori di variabili decisionali.
È stata dunque deciso di adottare l’inserimento di un metodo generico
supportato da una procedura di riparazione a valle, possibilità illustrata nel
capitolo 3. Il metodo di riproduzione degli individui sarà raffinato in
maniera incrementale, ovvero sarà impostato un primo approccio dedito
all’utilizzo di semplici operatori standard; quali il crossover a singolo punto
di taglio e la mutazione uniforme. Tale scelta è stata presa al fine di poter
valutare l’effettiva efficacia della procedura di fixing, lasciando ad un passo
successivo il compito di inserire operatori specializzati. Questo perché
l’inserimento combinato di procedure quali il fixer e operatori custom
avrebbe potuto falsare i risultati soffrendo l’imparzialità portata dalla
caratteristica efficacia decisamente dipendente dal problema degli operatori
specializzati.
L’approccio decretato di riparazione ad ogni costo delle soluzioni però
potrebbe non essere in linea con la mentalità, già ampiamente esposta, degli
algoritmi euristici evolutivi. Viene incontro a tale idea la teoria
evoluzionistica definita da Lamarckian, espressa chiaramente nell’articolo
citato [9]. Tale approccio di riparazione nei genetici viene poi ampiamente
motivato e utilizzato anche nei lavori di Michalewicz [7]. La stessa meccanica
di funzionamento del GENOCOP III potrebbe essere vista in una ottica di
riparazione delle soluzioni; dopotutto le due popolazioni utilizzate per la
ricerca delle soluzioni operano in modo indipendente. In tale scenario la
procedura analoga al fixing potrebbe essere individuata nel livello che tenta
di creare un individuo ammissibile partendo dall’ammissibilità lineare e
cercando di arrivare a quella globale. Questo perché nella procedura solo le
soluzioni effettivamente ammissibili per il problema vengono accettate per la
reale popolazione, ovvero quella della reference point space [12].
60
La strategia è stata delineata ma rimane aperto un interrogativo ereditato
dalla struttura degli algoritmi genetici, ovvero dalla utilità di esplorare
qualche soluzione non ammissibile per convergere verso soluzioni ottime:
quanto è meglio riparare?
Definita quindi l’accettabilità delle riparazioni, bisogna stimare in che
quantità sarà consono applicare il fixer alle soluzioni non ammissibili.
Intuitivamente questa percentuale di applicazione avrà sicuramente un
limite inferiore sotto il quale non avrà senso riparare meno. Anche in questo
caso si è provveduto a cercare approcci e studi similari in letteratura. Tale
operazione ha portato alla luce lo studio di Davis sull’utilizzo di algoritmi
genetici con funzioni di riparazione per problemi di ottimizzazione vincolati
[17]. Fortunatamente parte della trattazione verteva su istanze di problemi di
ottimizzazione combinatoria e giungeva alla conclusione che, in seguito a
numerosi test, fosse sempre preferibile riparare una percentuale inferiore al
cento per cento delle soluzioni. Il parametro di riferimento del lavoro di
Davis però era riferito all’applicazione di operatori specializzati e una
percentuale di riparazione del cinque per cento, conclusione che ci permette
di estrapolare informazioni importanti; ma che non può essere applicata
direttamente al metodo scelto per affrontare la categoria in analisi.
Concludendo quindi si è deciso di adottare una struttura di riproduzione
che:
 Si basi su operatori standard, incrementabile in un secondo momento
con operatori specializzati;
 L’impiego massivo di una procedura di fix per riportare la
maggioranza delle soluzioni non ammissibili nello spazio delle
soluzioni ammissibili con metodi che garantiscano la non univoca
riparazione;
61
 L’applicazione del punto precedente verrà utilizzato su una
percentuale delle soluzioni sottoposte, maggiore di zero e minore del
cento per cento. Particolare attenzione sarà da attribuire, in una
seconda fase, nella fascia delineata dalla letteratura compresa fra il
cinque e il quindi per cento.
La trattazione specifica dei vari passi dell’algoritmo è stata completata, ora si
vuole costruire effettivamente lo schema generale di funzionamento
rimanendo in linea con le decisioni prese, il contesto evidenziato e la
struttura degli algoritmi genetici. Si presenta quindi a seguire una coppia di
diagrammi, in figura 4.1 e 4.2, che portano in luce il funzionamento globale e
i livelli di aggregazione di tutte le considerazioni fatte fino ad ora. È
importante sottolineare il fatto che il diagramma nella figura 4.2, della
schedulazione, rappresenta il flusso iterativo dell’algoritmo genetico,
approfondendo nel dettaglio la penultima componente del diagramma 4.1.
62Fig. 4.1 - Diagramma del flusso principale
63
Fig. 4.2 - Dettaglio della fase di schedulazione
64
5. Realizzazione dell’algoritmo
Lo sviluppo effettivo dell’algoritmo delineato nel corso del capitolo 4 ha
richiesto una evoluzione del codice progressiva, in cui si può individuare
una successione di punti cardine. Essa è stata possibile poiché la struttura
evidenziata presenta molti nodi di congiunzione fra tecniche diverse che
realizzano però la stessa fase nell’algoritmo. Inoltre gli algoritmi genetici
sono particolarmente indicati per le costruzioni isolate delle varie fasi poiché
ognuna di esse può esser vista come una scatola a se stante con determinati
input e output, cosa che si è rivelata particolarmente utile dato che il
linguaggio di programmazione utilizzato è stato Java.
Viene omessa la descrizione dettagliata delle fasi preliminari alla
composizione vera e propria dell’Algoritmo Genetico MultiObiettivo per
problemi con Input Strutturati, a cui per semplicità ci si riferirà d’ora in
avanti con l’acronimo MOGASI. Tali fasi consistevano in sviluppo di codice
mirato a punti specifici o al test di varie metodologie di risoluzione andate
poi scartate, e quindi di scarso interesse per l’approfondimento nei dettagli
del progetto realizzato.
5.1. Elimination of Equalities
L’effettiva struttura del MOGASI è andata a delinearsi partendo
dall’esoscheletro dell’algoritmo di Michalewicz, il GENOCOP nella sua
prima versione. Da esso è stata prelevata la procedura dell’Elimination of
Equalities e sopratutto la struttura matriciale che veniva fabbricata, come
ingresso dell’algoritmo, in base alla combinazione dei vincoli lineari del
65
problema sottomesso. Tale matrice è stata mantenuta con il nome originale di
Final Matrix ed è composta come segue:
Che risulta essere una composizione verticale di tutti i prodotti della
procedura di Elimination of Equalities descritta in precedenza durante
l’approfondimento dell’approccio GENOCOP. Importante specificare che
tale matrice presenta righe con n cardinalità dell’insieme delle variabili
lineari appartenenti al gruppo , ovvero quelle non eliminate. Quindi nella
prima sezione della stessa, si troveranno i limiti inferiori e superiori
rispettivamente in prima e in ultima posizione, mentre al centro sarà
presente una mappa di zeri e uni che indicherà a quale variabile è riferita la
coppia di limiti della riga. Nella seconda sezione, avendo appena spiegata la
disposizione nel primo caso, i limiti inferiori e superiori saranno nuovamente
in prima e ultima posizione, mentre all’interno saranno presenti i coefficienti
degli con , ottenuti sempre dalla semplificazione a monte. Infine
nella terza parte è importante sottolineare solo l’assenza di una limitazione
inferiore, che viene imposto di default al valore minimo assumibile da una
variabile dell’ambiente di lavoro.
L’importanza di questa matrice viene messa in evidenza una volta spiegato
che ogni operazione, quando vuole agire su un valore di una qualsiasi delle
variabili decisionali lineari, estrapolerà da essa i valori dei limiti applicabili
per tale operazione. Proprio per questo motivo si è deciso di prestare molta
attenzione nella cura e nella manutenzione di tale matrice durante
l’evoluzione dell’algoritmo.
66
5.2. Preprocessing
Vista la decisione di inserire una procedura di preprocessing, si è ritenuto
opportuno applicarne i concetti direttamente all’intera matrice denominata
“Final Matrix”, dato che essa conteneva tutte e sole le informazioni di cui le
tecniche selezionate necessitano.
La prima versione della procedura di preprocessing implementata consiste in
una applicazione ciclica di sole due componenti fra le sei proposte come
candidate nel capitolo 4.1.2. Tale riduzione si è effettuata per capire le
possibilità dell’approccio di semplificazione preventiva in un contesto
applicativo di ottimizzazione nuovo, e per evitare di sviluppare da zero una
procedura di preprocessing estremamente complicata prima di scoprire se i
problemi su cui si sarebbe andati ad operare sarebbero stati efficacemente
semplificabili. Vengono dunque selezionate le sole fasi di aggiornamento dei
limiti inferiori e superiori e dei vincoli. Data la struttura particolare della
final matrix si è ampliata l’applicazione dell’aggiornamento dei vincoli
andando a ritoccare anche il vincolo fittizio introdotto solo per questioni
operative della matrice. Ad ogni iterazione viene controllato su ognuno dei
vincoli se le limitazioni attuali delle variabili decisionali applicate
opportunamente permettono un valido restringimento dei termini noti in
entrambe le direzioni. A questo viene fatto seguire un procedimento di
esplicitazione delle variabili decisionali da ogni vincolo che, applicando in
maniera simile il ragionamento coi limiti delle altre variabili decisionali,
permette di controllare la presenza di possibili restringimenti dei singoli
domini. L’insieme delle due procedure viene iterato con un criterio di stop
condizionato su due fattori: la coppia di procedure è stata già applicata per
cinquanta volte, oppure nell’ultima iterazione non è stato possibile effettuare
alcuna modifica ai vincoli del problema.
67
Si è potuto notare durante i test che anche solo l’applicazione sistematica
delle due procedure più semplici ed intuitive, ha portato comunque in
numerosi casi ad un restringimento dello spazio delle soluzioni e quindi
dell’insieme convesso su cui l’algoritmo opera la ricerca. Determinando un
buon vantaggio sul confronto prestazionale con lo stesso GENOCOP.
Nell’esecuzione della procedura di preprocessing è stata prevista la
compilazione di un file di log che tenesse traccia di ogni operazione di
semplificazione applicata per poter approfondire l’analisi. Ciò si è rilevato
determinante per individuare una possibilità di miglioramento decisamente
importante. Si presentavano con alta frequenza comportamenti di
aggiornamenti ciclici che saturavano il numero massimo di applicazioni per
modifiche di ordine irrisorio. Tale fenomeno è stato eliminato
dall’introduzione di un controllo parametrizzato con un ordine di precisione
definito a priori come input del programma. L’adozione di tale parametro di
funzionamento ha permesso di aggregare alcune ricorsioni di aggiornamento
e di ignorarne altre, velocizzando dunque il preprocessing e lasciandolo
libero di sfruttare in modo più efficace il numero massimo di iterazioni
disponibili.
68
5.3. GENOCOP III
Risultava essenziale, per la risoluzione della prima categoria individuata
degli input strutturati, l’applicazione della logica evolutiva contenuta nella
terza versione del GENOCOP per istanze con vincoli anche di tipo non
lineare. Tale implementazione non si è rivelata particolarmente semplice
poiché gli esempi di codice del GENOCOP III disponibili erano circostanziati
dalle istanze che dovevano presentare e quindi il codice non era
generalizzato. Inoltre occorre sottolineare che non era presente una istanza
esemplificativa di problemi con vincoli lineari e non lineari che richiedessero
l’ausilio della procedura di Elimination of Equalities.
Nonostante il sorgente disponibile fosse stato fornito in linguaggio C è stata
sufficiente una completa traduzione in Java del codice originale e una
progressiva integrazione dei due punti precedentemente analizzati per
ottenere una versione prototipale funzionante del blocco che serviva al
MOGASI. In tale sede si è rilevato, effettuando i test di funzionamento, il
comportamento atipico che assumeva l’aggiornamento della popolazione
della reference point space. Infatti, come si è già spiegato in dettaglio nel
corso del capitolo 4.1.1, un individuo veniva sostituito dal figlio generato
dall’incrocio di se stesso con un elemento della search population, ma solo se
la valutazione del figlio superava quella del padre. Per effettuare un
confronto del genere si sarebbe dovuti ricorrere alla valutazione del nuovo
individuo; cosa non solo delocalizzata ma addirittura improponibile nel caso
di problemi multiobiettivo con gestioni similari all’NSGA-II, descritto nel
capitolo 2.1.3 .
Dopo attente analisi si è ritenuto meglio svincolare un così rigido
comportamento e ricondursi ad una gestione delle popolazioni più classica,
69
in cui ogni nuovo elemento ammissibile viene aggiunto momentaneamente
nella popolazione. Essa verrà poi regolarmente valutata e riordinata secondo
i criteri adottati, nella fase dedicata a tale procedura, per poi venir
ridimensionata alla sua dimensione fissata dal parametro apposito in input
all’algoritmo. Questo approccio incrementa già da un punto di vista intuitivo
la capacità di evoluzione della popolazione del reference point space. Per
quantificare però anche materialmente il miglioramento si propone
l’andamento ottenuto dall’applicazione del GENOCOP III al problema di
Keane con venti variabili denominato “t02”, i cui dettagli saranno disponibili
nel capitolo 6.1. Si può vedere dal grafico seguente che la rapidità di
convergenza al valore ottimo prossimo a 0.8 cambia radicalmente
dall’utilizzo originario del GENOCOP III (in grigio) e l’impiego della
valutazione e dello sfoltimento a posteriori (in rosso).
70
Tale miglioramento verrà poi messo in luce dai risultati conseguiti durante le
fasi di test, che verranno analizzati con la dovuta cura nel capitolo 6.
Viene presentato a seguire un diagramma di flusso che esplicita in maniera
dettagliata il funzionamento del nucleo logico del GENOCOP III così come è
stato implementato.
Diagramma di funzionamento della logica GIII
71
5.4. Paradigma a oggetti
Dettaglio di secondaria importanza per i contenuti algoritmici del codice, ma
di notevole peso da un punto di vista operativo, è stata l’evoluzione del
programma da un punto di vista del paradigma di programmazione
impiegato. Si pone in evidenza che inizialmente la struttura generale era
stata ereditata da traduzioni ed evoluzioni di codici C in Java. Le modifiche
successive raccontante in dettaglio nei paragrafi precedenti del capitolo 5
erano state applicate per comodità nello stesso stile di programmazione.
Al momento di dover però stratificare e generalizzare l’algoritmo anche alle
altre categorie di variabili e modificarne i comportamenti per istanze di
problemi multi obiettivo, si è preferito effettuare una riscrittura completa del
codice. Questo ha permesso di adottare un paradigma ad oggetti che ha
valso una semplificazione davvero degna di nota. Tale miglioria è stata
possibile grazie alla gestione interna agli oggetti della casistica di
funzionamento e del mantenimento allineato delle informazioni richieste agli
individui, cosa ben più importante data la struttura.
Il secondo punto di forza dell’approccio si è concretizzato in particolare nella
creazione dell’oggetto individuo denominato “Design”, che mantiene
consistenti le informazioni degli elementi della popolazione. Le possibili
ripercussioni, di una semplificazione operativa del genere, diventano forse
più chiare se si pensa alla possibilità di lavorare su un insieme ridotto delle
variabili decisionali dopo la procedura di eliminazione delle uguaglianze.
Questo sottoinsieme deve essere reso disponibile e mantenuto allineato per
tutte le procedure che modificano i valori delle variabili; al contempo invece
altre operazioni hanno bisogno del cromosoma completo per poter essere
applicate, che deve essere ricostruito adeguatamente in base alle modifiche
più recenti apportate.
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria

Más contenido relacionado

Similar a Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria

Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...
Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...
Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...DamianoRavalico
 
Sintesi automatica di una metrica di similarità tra stringhe tramite tecniche...
Sintesi automatica di una metrica di similarità tra stringhe tramite tecniche...Sintesi automatica di una metrica di similarità tra stringhe tramite tecniche...
Sintesi automatica di una metrica di similarità tra stringhe tramite tecniche...mfurlanetto
 
Classificazione di frasi in linguaggio naturale per il riconoscimento di inte...
Classificazione di frasi in linguaggio naturale per il riconoscimento di inte...Classificazione di frasi in linguaggio naturale per il riconoscimento di inte...
Classificazione di frasi in linguaggio naturale per il riconoscimento di inte...Marco Virgo
 
Stefano Bragaglia MSc Thesis, awarded as Best Italian thesis in AI 2009/2010
Stefano Bragaglia MSc Thesis, awarded as Best Italian thesis in AI 2009/2010Stefano Bragaglia MSc Thesis, awarded as Best Italian thesis in AI 2009/2010
Stefano Bragaglia MSc Thesis, awarded as Best Italian thesis in AI 2009/2010Stefano Bragaglia
 
Compressione di insiemi di espressioni regolari tramite programmazione geneti...
Compressione di insiemi di espressioni regolari tramite programmazione geneti...Compressione di insiemi di espressioni regolari tramite programmazione geneti...
Compressione di insiemi di espressioni regolari tramite programmazione geneti...Simone Cumar
 
Analisi e realizzazione di uno strumento per la verifica di conformità su sis...
Analisi e realizzazione di uno strumento per la verifica di conformità su sis...Analisi e realizzazione di uno strumento per la verifica di conformità su sis...
Analisi e realizzazione di uno strumento per la verifica di conformità su sis...Davide Bravin
 
Studio e implementazione di uno strumento di configurazione e visualizzazione...
Studio e implementazione di uno strumento di configurazione e visualizzazione...Studio e implementazione di uno strumento di configurazione e visualizzazione...
Studio e implementazione di uno strumento di configurazione e visualizzazione...Matteo Miotto
 
Progetto e realizzazione di un'interfaccia web interattiva per un sistema di ...
Progetto e realizzazione di un'interfaccia web interattiva per un sistema di ...Progetto e realizzazione di un'interfaccia web interattiva per un sistema di ...
Progetto e realizzazione di un'interfaccia web interattiva per un sistema di ...Pieredoardo Gabutti
 
Sviluppo e realizzazione di un sistema per la manipolazione di superfici trid...
Sviluppo e realizzazione di un sistema per la manipolazione di superfici trid...Sviluppo e realizzazione di un sistema per la manipolazione di superfici trid...
Sviluppo e realizzazione di un sistema per la manipolazione di superfici trid...Raffaele Bernardi
 
Analisi delle differenze strutturali nelle espressioni regolari costruite da ...
Analisi delle differenze strutturali nelle espressioni regolari costruite da ...Analisi delle differenze strutturali nelle espressioni regolari costruite da ...
Analisi delle differenze strutturali nelle espressioni regolari costruite da ...Marco Potok
 
Un simulatore in C++ basato su GEANT4 per lo studio di sensori nella Tomograf...
Un simulatore in C++ basato su GEANT4 per lo studio di sensori nella Tomograf...Un simulatore in C++ basato su GEANT4 per lo studio di sensori nella Tomograf...
Un simulatore in C++ basato su GEANT4 per lo studio di sensori nella Tomograf...fabio998
 
Complexity education by Valerio Eletti (3/4)
Complexity education by Valerio Eletti (3/4)Complexity education by Valerio Eletti (3/4)
Complexity education by Valerio Eletti (3/4)Valerio Eletti
 
Progetto e sviluppo di un’applicazione per la gestione di un reagentario per ...
Progetto e sviluppo di un’applicazione per la gestione di un reagentario per ...Progetto e sviluppo di un’applicazione per la gestione di un reagentario per ...
Progetto e sviluppo di un’applicazione per la gestione di un reagentario per ...Marko Paliska
 
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...artemedea
 
Progettazione e sviluppo di un'applicazione web per la gestione di dati di at...
Progettazione e sviluppo di un'applicazione web per la gestione di dati di at...Progettazione e sviluppo di un'applicazione web per la gestione di dati di at...
Progettazione e sviluppo di un'applicazione web per la gestione di dati di at...daniel_zotti
 
Evolutionary Fuzzy Systems for XAI
Evolutionary Fuzzy Systems for XAIEvolutionary Fuzzy Systems for XAI
Evolutionary Fuzzy Systems for XAICamillaGiaccari
 
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...Filippo Muscolino
 

Similar a Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria (20)

Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...
Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...
Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...
 
Sintesi automatica di una metrica di similarità tra stringhe tramite tecniche...
Sintesi automatica di una metrica di similarità tra stringhe tramite tecniche...Sintesi automatica di una metrica di similarità tra stringhe tramite tecniche...
Sintesi automatica di una metrica di similarità tra stringhe tramite tecniche...
 
Classificazione di frasi in linguaggio naturale per il riconoscimento di inte...
Classificazione di frasi in linguaggio naturale per il riconoscimento di inte...Classificazione di frasi in linguaggio naturale per il riconoscimento di inte...
Classificazione di frasi in linguaggio naturale per il riconoscimento di inte...
 
Progetto Euridice
Progetto EuridiceProgetto Euridice
Progetto Euridice
 
Stefano Bragaglia MSc Thesis, awarded as Best Italian thesis in AI 2009/2010
Stefano Bragaglia MSc Thesis, awarded as Best Italian thesis in AI 2009/2010Stefano Bragaglia MSc Thesis, awarded as Best Italian thesis in AI 2009/2010
Stefano Bragaglia MSc Thesis, awarded as Best Italian thesis in AI 2009/2010
 
Compressione di insiemi di espressioni regolari tramite programmazione geneti...
Compressione di insiemi di espressioni regolari tramite programmazione geneti...Compressione di insiemi di espressioni regolari tramite programmazione geneti...
Compressione di insiemi di espressioni regolari tramite programmazione geneti...
 
Analisi e realizzazione di uno strumento per la verifica di conformità su sis...
Analisi e realizzazione di uno strumento per la verifica di conformità su sis...Analisi e realizzazione di uno strumento per la verifica di conformità su sis...
Analisi e realizzazione di uno strumento per la verifica di conformità su sis...
 
Studio e implementazione di uno strumento di configurazione e visualizzazione...
Studio e implementazione di uno strumento di configurazione e visualizzazione...Studio e implementazione di uno strumento di configurazione e visualizzazione...
Studio e implementazione di uno strumento di configurazione e visualizzazione...
 
Progetto e realizzazione di un'interfaccia web interattiva per un sistema di ...
Progetto e realizzazione di un'interfaccia web interattiva per un sistema di ...Progetto e realizzazione di un'interfaccia web interattiva per un sistema di ...
Progetto e realizzazione di un'interfaccia web interattiva per un sistema di ...
 
Sviluppo e realizzazione di un sistema per la manipolazione di superfici trid...
Sviluppo e realizzazione di un sistema per la manipolazione di superfici trid...Sviluppo e realizzazione di un sistema per la manipolazione di superfici trid...
Sviluppo e realizzazione di un sistema per la manipolazione di superfici trid...
 
Analisi delle differenze strutturali nelle espressioni regolari costruite da ...
Analisi delle differenze strutturali nelle espressioni regolari costruite da ...Analisi delle differenze strutturali nelle espressioni regolari costruite da ...
Analisi delle differenze strutturali nelle espressioni regolari costruite da ...
 
Un simulatore in C++ basato su GEANT4 per lo studio di sensori nella Tomograf...
Un simulatore in C++ basato su GEANT4 per lo studio di sensori nella Tomograf...Un simulatore in C++ basato su GEANT4 per lo studio di sensori nella Tomograf...
Un simulatore in C++ basato su GEANT4 per lo studio di sensori nella Tomograf...
 
Axes/1
Axes/1Axes/1
Axes/1
 
Complexity education by Valerio Eletti (3/4)
Complexity education by Valerio Eletti (3/4)Complexity education by Valerio Eletti (3/4)
Complexity education by Valerio Eletti (3/4)
 
Progetto e sviluppo di un’applicazione per la gestione di un reagentario per ...
Progetto e sviluppo di un’applicazione per la gestione di un reagentario per ...Progetto e sviluppo di un’applicazione per la gestione di un reagentario per ...
Progetto e sviluppo di un’applicazione per la gestione di un reagentario per ...
 
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
 
Progettazione e sviluppo di un'applicazione web per la gestione di dati di at...
Progettazione e sviluppo di un'applicazione web per la gestione di dati di at...Progettazione e sviluppo di un'applicazione web per la gestione di dati di at...
Progettazione e sviluppo di un'applicazione web per la gestione di dati di at...
 
Evolutionary Fuzzy Systems for XAI
Evolutionary Fuzzy Systems for XAIEvolutionary Fuzzy Systems for XAI
Evolutionary Fuzzy Systems for XAI
 
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
Analisi e sviluppo di un sistema collaborativo simultaneo per la modifica di ...
 
Catalogo corsi Emerasoft 2013 - 2014
Catalogo corsi Emerasoft 2013 - 2014Catalogo corsi Emerasoft 2013 - 2014
Catalogo corsi Emerasoft 2013 - 2014
 

Más de Stefano Costanzo

Modular Multi-Objective Genetic Algorithm for Large Scale Bi-level Problems
Modular Multi-Objective Genetic Algorithm for Large Scale Bi-level ProblemsModular Multi-Objective Genetic Algorithm for Large Scale Bi-level Problems
Modular Multi-Objective Genetic Algorithm for Large Scale Bi-level ProblemsStefano Costanzo
 
A Modular Genetic Algorithm Specialized for Linear Constraints
A Modular Genetic Algorithm Specialized for Linear ConstraintsA Modular Genetic Algorithm Specialized for Linear Constraints
A Modular Genetic Algorithm Specialized for Linear ConstraintsStefano Costanzo
 
Exploiting Web Technologies to connect business process management and engine...
Exploiting Web Technologies to connect business process management and engine...Exploiting Web Technologies to connect business process management and engine...
Exploiting Web Technologies to connect business process management and engine...Stefano Costanzo
 
Modular Multi-Objective Genetic Algorithm for Large Scale Bi-level Problems
Modular Multi-Objective Genetic Algorithm for Large Scale Bi-level ProblemsModular Multi-Objective Genetic Algorithm for Large Scale Bi-level Problems
Modular Multi-Objective Genetic Algorithm for Large Scale Bi-level ProblemsStefano Costanzo
 
Multi strategy intelligent optimization algorithm for computationally expensi...
Multi strategy intelligent optimization algorithm for computationally expensi...Multi strategy intelligent optimization algorithm for computationally expensi...
Multi strategy intelligent optimization algorithm for computationally expensi...Stefano Costanzo
 
Il Mondo dell'Ottimizzazione
Il Mondo dell'OttimizzazioneIl Mondo dell'Ottimizzazione
Il Mondo dell'OttimizzazioneStefano Costanzo
 
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...Stefano Costanzo
 

Más de Stefano Costanzo (8)

Modular Multi-Objective Genetic Algorithm for Large Scale Bi-level Problems
Modular Multi-Objective Genetic Algorithm for Large Scale Bi-level ProblemsModular Multi-Objective Genetic Algorithm for Large Scale Bi-level Problems
Modular Multi-Objective Genetic Algorithm for Large Scale Bi-level Problems
 
A Modular Genetic Algorithm Specialized for Linear Constraints
A Modular Genetic Algorithm Specialized for Linear ConstraintsA Modular Genetic Algorithm Specialized for Linear Constraints
A Modular Genetic Algorithm Specialized for Linear Constraints
 
Exploiting Web Technologies to connect business process management and engine...
Exploiting Web Technologies to connect business process management and engine...Exploiting Web Technologies to connect business process management and engine...
Exploiting Web Technologies to connect business process management and engine...
 
ESTECO Company Overview
ESTECO Company OverviewESTECO Company Overview
ESTECO Company Overview
 
Modular Multi-Objective Genetic Algorithm for Large Scale Bi-level Problems
Modular Multi-Objective Genetic Algorithm for Large Scale Bi-level ProblemsModular Multi-Objective Genetic Algorithm for Large Scale Bi-level Problems
Modular Multi-Objective Genetic Algorithm for Large Scale Bi-level Problems
 
Multi strategy intelligent optimization algorithm for computationally expensi...
Multi strategy intelligent optimization algorithm for computationally expensi...Multi strategy intelligent optimization algorithm for computationally expensi...
Multi strategy intelligent optimization algorithm for computationally expensi...
 
Il Mondo dell'Ottimizzazione
Il Mondo dell'OttimizzazioneIl Mondo dell'Ottimizzazione
Il Mondo dell'Ottimizzazione
 
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi d...
 

Último

Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxlorenzodemidio01
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileNicola Rabbi
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaSalvatore Cianciabella
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxtecongo2007
 
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxlorenzodemidio01
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxlorenzodemidio01
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....giorgiadeascaniis59
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxtecongo2007
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.camillaorlando17
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................giorgiadeascaniis59
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................giorgiadeascaniis59
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoyanmeng831
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxtecongo2007
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxlorenzodemidio01
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereMarco Chizzali
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxtecongo2007
 

Último (16)

Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibile
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione Civica
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptx
 
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptx
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceo
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptx
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptx
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opere
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptx
 

Definizione e sviluppo di un algoritmo genetico multiobiettivo per problemi di programmazione lineare e ottimizzazione combinatoria

  • 1. UNIVERSITA’ DEGLI STUDI DI TRIESTE DIPARTIMENTO DI INGEGNERIA E ARCHITETTURA CORSO DI LAUREA MAGISTRALE IN INGEGNERIA INFORMATICA TESI DI LAUREA IN MODELLI DI OTTIMIZZAZIONE DEFINIZIONE E SVILUPPO DI UN ALGORITMO GENETICO MULTIOBIETTIVO PER PROBLEMI DI PROGRAMMAZIONE LINEARE E OTTIMIZZAZIONE COMBINATORIA Relatore Laureando Chiar.mo Prof. Lorenzo Castelli Stefano Costanzo Correlatore Dott. Alessandro Turco Anno accademico 2012 – 2013
  • 2. 1 Indice di Tesi: 1. Introduzione ...................................................................................................... 3 2. Definizioni e Concetti fondamentali .............................................................. 7 2.1. Algoritmi Genetici...................................................................................... 7 2.2. Contesto: Problemi ingegneristici industriali ...................................... 27 3. Analisi della letteratura.................................................................................. 31 4. Progettazione dell’algoritmo......................................................................... 40 4.1. Insiemi di vincoli lineari.......................................................................... 45 4.2. Variabili intere e binarie.......................................................................... 54 4.3. Permutazioni............................................................................................. 57 5. Realizzazione dell’algoritmo......................................................................... 64 5.1. Elimination of Equalities......................................................................... 64 5.2. Preprocessing............................................................................................ 66 5.3. GENOCOP III ........................................................................................... 68 5.4. Paradigma a oggetti................................................................................. 71 5.5. Logica Multi obiettivo ............................................................................. 72 5.6. Fixer per le variabili intere...................................................................... 74 5.7. Fixer per le Permutazioni........................................................................ 75 6. Test e risultati .................................................................................................. 78 6.1. Problema vincolato singolo obiettivo.................................................... 80 6.2. Problema multiobiettivo privo di vincoli ............................................. 91 6.3. Problema vincolato multiobiettivo ........................................................ 99
  • 3. 2 6.4. Problema intero singolo e multi obiettivo .......................................... 106 6.5. Problema del commesso viaggiatore singolo obiettivo.................... 111 7. Conclusioni .................................................................................................... 116 8. Bibliografia e Sitografia................................................................................ 119
  • 4. 3 1. Introduzione Lo scopo di questo lavoro di tesi è lo sviluppo di un approccio meta-euristico basato sugli algoritmi genetici per la risoluzione di problemi multiobiettivo sia di programmazione lineare continua che di ottimizzazione combinatoria. Inoltre l’intrinseca complessità dovuta alla natura multiobiettivo dei problemi richiede di spostare l’attenzione dai metodi deterministici tradizionali a quelli evolutivi euristici. Viene quindi delineato il profilo di un algoritmo genetico capace di elaborare problemi multiobiettivo con vincoli lineari, non lineari, variabili intere e binarie. Particolare attenzione viene dedicata alle fasi precedenti il ciclo di ottimizzazione di un algoritmo genetico, introducendo delle procedure di semplificazione dei sistemi di vincoli lineari e un metodo di eliminazione delle uguaglianze, notoriamente ostiche per gli approcci evolutivi. Risultati sperimentali, su molteplici classi di problemi test, vengono confrontati con quelli ottenuti da algoritmi genetici esistenti mostrando dei comportamenti sicuramente incoraggianti per un raffinamento ulteriore della strategia delineata. Il presente progetto di tesi è nato da una collaborazione fra il dipartimento di Ingegneria e Architettura dell’Università degli Studi di Trieste e la società ESTECO S.p.A.. L’azienda citata opera nel settore della produzione software e della ricerca e sviluppo sperimentale nel campo dell’ingegneria, ed é interessata ad uno studio di approfondimento su tematiche inerenti la programmazione lineare e ottimizzazione combinatoria.
  • 5. 4 Gli obiettivi del presente lavoro di tesi sono:  definizione di una strategia per la costruzione di un algoritmo euristico basato sugli algoritmi genetici in grado di risolvere problemi multiobiettivo sia di programmazione lineare continua che intera;  realizzazione di un prototipo dell’algoritmo, o delle varie parti che lo costituiscono, al fine di poter testare l’efficacia dell’approccio individuato;  test delle caratteristiche e performance del prototipo, e una presentazione dei risultati ottenuti confrontati con quelli di possibili algoritmi competitori su un insieme esemplificativo delle classi di problemi individuati. Lo svolgimento del presente progetto di tesi ha prodotto come risultato la delineazione di una logica di composizione per un algoritmo genetico capace di adottare dei comportamenti adeguati all’elaborazione di precise strutture delle variabili decisionali in ingresso. Con un leggero abuso notazionale si farà riferimento d’ora in poi alle variabili soggette ad un insieme di vincoli, in cui è possibile riconoscere delle caratteristiche comuni o una struttura, con il termine di variabili strutturate (ad esempio un sistema di vincoli lineari che definiscono la struttura di un grafo). Il prototipo prodotto è un programma scritto in linguaggio Java indipendente, capace di accettare un buon numero di tipologie di variabili in input diverse. La scelta di utilizzare Java è stata influenzata dalle caratteristiche dell’ambiente in cui esso si andrebbe a inserire in caso di una valutazione positiva del lavoro. Per lo svolgimento del lavoro di tesi si è usufruito di diverse piattaforme, la cui scelta è stata strettamente influenzata dalle specifiche necessità di ogni
  • 6. 5 fase. Durante l’esplorazione dei metodi di risoluzione e dei comportamenti dei diversi algoritmi sono stati impiegati principalmente due software di ottimizzazione:  FICO® Xpress Optimization Suite – Student Edition Programma per la risoluzione di problemi di programmazione lineare. Esso mette a disposizione un valido linguaggio di modellazione per la formulazione efficiente di modelli matematici.  modeFRONTIER® Piattaforma di integrazione per l’ottimizzazione multidisciplinare singola e multiobiettivo. Mette a disposizione dell’utilizzatore un vasto numero di strumenti di post processing, utili per indagini statistiche, analisi dei dati e processo decisionale. Il secondo è stato largamente utilizzato anche nelle fasi successive, sia per l’ispezione e la valutazione dei risultati del prototipo realizzato, opportunamente importati, sia per l’effettiva esecuzione degli algoritmi genetici che sono stati impiegati come competitori per la valutazione dei test effettuati. Altri programmi utilizzati da annoverare sono Netbeans IDE 7.3 e Notepad++, strumenti largamente conosciuti e che quindi non necessitano di dettagli aggiuntivi. Nello specifico le tecnologie impiegate per la realizzazione dell’algoritmo, risultato di questo lavoro di tesi, sono state:  Java Standard Edition Development Kit 7 [20]  Git Repository [21] Inoltre si è fatto utilizzo del linguaggio Mosel [22] durante l’utilizzo del primo programma elencato.
  • 7. 6 Il presente lavoro di tesi verrà esposto nel corso dei cinque capitoli a seguire: 2. Sarà esposta una estrema sintesi dei concetti fondamentali sugli algoritmi genetici e del contesto del progetto. Particolare attenzione verrà posta nella trattazione degli strumenti effettivamente impiegati dall’algoritmo prodotto; 3. Nel terzo capitolo si presenterà l’analisi svolta sulla letteratura e una rapida presentazione dello stato dell’arte inerente l’ambito in cui si andrà ad inserire il progetto di tesi; 4. Saranno esposte le motivazioni e i ragionamenti che hanno portato alla definizione dell’algoritmo prodotto, trattando in modo approfondito le tre macroaree di interesse; 5. Nel corso del quinto capitolo si entrerà nel dettaglio dello sviluppo dell’algoritmo portando in evidenza le problematiche più importanti affrontate durante l’implementazione; 6. Infine si esporranno i risultati ottenuti nel corso dei venti test effettuati sull’algoritmo prodotto, raffrontandoli con le prestazioni di competitor scelti adeguatamente per le cinque categorie affrontate.
  • 8. 7 2. Definizioni e Concetti fondamentali 2.1. Algoritmi Genetici “...the metaphor underlying genetic algorithms is that of natural evolution. In evolution, the problem each species faces is one of searching for beneficial adaptations to a complicated and changing environment. The ‘knowledge’ that each species has gained is embodied in the makeup of the chromosomes of its members.” [2] Gli algoritmi genetici rientrano nella classe delle euristiche, ovvero quegli algoritmi che non garantiscono di ottenere la soluzione ottima, ma tendono ad essere particolarmente efficaci nell’esplorazione di varie porzioni della regione ammissibile e nell’evolvere gradualmente verso soluzioni sempre migliori. Questa strategia è motivata dal fatto che gli algoritmi euristici vengono solitamente impiegati quando un metodo di risoluzione esatto non è possibile o sarebbe proibitivo in termini di tempo computazionale, accontentandosi così di ricercare una soluzione sub ottimale in un tempo ragionevole. Essi sono procedure complesse, adattative, finalizzate alla risoluzione di problemi di ottimizzazione e basate concettualmente sui principi che regolano l’evoluzione della specie. L’idea che sta alla base è quindi quella di selezionare le soluzioni migliori e di ricombinarle in qualche modo fra loro, in maniera tale che essere evolvano verso una soluzione ottima. Tale tipologia di algoritmi è stata introdotta da John Holland [3] e da allora sono stati sviluppati e applicati ad un insieme estremamente vasto di problemi in svariati ambiti [4]. I risultati di queste ricerche hanno mostrato l’elevato grado di robustezza di questa metodologia rispetto a quelle già presenti in letteratura.
  • 9. 8 2.1.1. Principio di funzionamento Si imposta il discorso generale sulla metafora dell’evoluzione della specie per renderlo più intuitivo. In natura gli individui si riproducono mescolando i propri patrimoni genetici, cioè i loro cromosomi. I nuovi individui generati avranno pertanto un patrimonio genetico derivato in parte da ognuno dei genitori. La selezione naturale fa sì che riescano a sopravvivere solo gli individui più forti, e conseguentemente anche a riprodursi. Il grado di conformità della popolazione all’ambiente quindi tenderà, generazione dopo generazione, a salire; portando così la specie ad evolversi nel tempo e a migliorarsi. Allo stesso modo negli algoritmi genetici ogni possibile soluzione, costituita dall’insieme di tutte le variabili che la generano, viene interpretata come il cromosoma di un individuo. In base alle caratteristiche del problema sottomesso si otterrà una valutazione di conformità denominata fitness per ogni individuo. Su tale valore si attuerà una selezione degli individui più idonei alla riproduzione, in base alla quale verranno generati i figli, prodotti da incroci e mutazioni dei cromosomi dei genitori. I principi fondamentali su cui si basa questa teoria sono i seguenti:  Variabilità dei caratteri tra gli individui di una popolazione;  Adattamento, secondo il quale gli individui che presentano caratteri vantaggiosi ai fini della sopravvivenza e della riproduzione sono i più consoni all’ambiente;  Ereditarietà dei caratteri tra genitori e figli.
  • 10. 9 2.1.2. Passi intuitivi di un algoritmo genetico: 1. Generazione di una popolazione iniziale; 2. Creazione di una nuova popolazione: a. selezionare una coppia di soluzioni genitori; b. applicare con una certa probabilità gli operatori genetici (crossover e mutazione) ai due individui estratti generando così dei figli. 3. Calcolo del valore di fitness per tutte le soluzioni/individui; 4. Verifica che il criterio di arresto sia soddisfatto, in caso contrario ritorno al punto 2. Ognuno dei punti elencati può essere eseguito in più modi e le scelte migliori sulle strategie da adottare saranno dipendenti dal problema in esame. Senza soffermarsi ulteriormente su considerazioni troppo specifiche si procede con una rapida vista del contenuto dei vari passi dell’algoritmo. 2.1.2.1. Generazione della popolazione iniziale Nella maggior parte dei casi la scelta di una popolazione iniziale è effettuata in modo del tutto casuale, senza imporre alcun tipo di vincolo e senza pregiudicare la possibilità di convergenza dell’algoritmo. Tuttavia optando per una generazione mirata alle zone dello spazio delle soluzioni dove è più probabile la presenza di una soluzione ottima, si potrebbe portare ad intraprendere una evoluzione più rapida verso tali regioni; o viceversa ad un accumulo dannoso dei punti esplorati precludendo possibili buoni risultati inattesi. D’altro canto una popolazione iniziale ben distribuita su tutto lo spazio si può ottenere ricorrendo a tecniche di generazioni semi casuali,
  • 11. 10 come ad esempio il metodo basato sulle sequenze a bassa discrepanza di Sobol [23]. Analoghe considerazioni valgono per la determinazione della dimensione della popolazione iniziale. Una dimensione troppo ridotta potrebbe incorrere nel rischio di non effettuare una adeguata esplorazione dello spazio delle soluzioni. Per contro una popolazione troppo numerosa potrebbe appesantire il peso computazionale di ogni singola generazione, rallentando così la rapidità di convergenza dell’algoritmo alle soluzioni migliori. Inizialmente gli studi avevano portato a correlare la dimensione del problema con un andamento esponenziale della dimensione della popolazione [26][27]. Fortunatamente lavori più recenti hanno dimostrato che tale relazione non era vincolante, associando le dimensioni di 30, 50 o 100 individui alla maggioranza delle istanze, definendole come le dimensioni più comuni [28]. Altri lavori mostrano come popolazioni di dimensioni molto ridotte possono essere adeguati, almeno per GA codificati in binario [29]. 2.1.2.2. Creazione di una nuova popolazione 2.1.2.2.a. Selezione La probabilità di selezione di un individuo dipende dal valore assegnatogli dalla funzione di fitness, ovvero l’indicatore della sua bontà per risolvere il problema. Un valore più alto di valutazione implica una maggiore probabilità di essere scelto come genitore per partecipare alla creazione della nuova generazione. Uno dei criteri più utilizzati è quello di Holland [3] che attribuisce una probabilità di scelta proporzionale al valore di fitness dell’individuo. Grazie al meccanismo della selezione, le probabilità di
  • 12. 11 riprodursi vengono sbilanciate verso gli elementi migliori della popolazione e quindi di trasmettere il loro genoma alle generazioni successive. Sono importanti però le differenze che possono insorgere fra una scelta diretta degli individui con alta valutazione o con lo sbilanciamento di probabilità di selezione a favore degli stessi. Il secondo criterio, rispetto al primo, permette di mantenere un più alto tasso di differenziazione genetica all’interno della popolazione, dando la possibilità di riproduzione anche a soggetti non buoni. Questa caratteristica permette all’algoritmo di esplorare meglio lo spazio delle soluzioni, rendendo meno probabile la saturazione della popolazione da parte di poche soluzioni molto buone ma poco distanti fra loro. Riassumendo il criterio di selezione deve:  Favorire la riproduzione di individui con valori alti di fitness;  Preservare la diversità della popolazione in modo da esplorare lo spazio di ricerca delle soluzioni. Viene di seguito brevemente illustrato il funzionamento di tre tipologie molto utilizzate di selezione: Rank selection: la popolazione viene ordinata in ordine decrescente di fitness e si attribuisce ad ogni individuo una probabilità in funzione della posizione in classifica, indipendente dalle effettive differenze di valore di fitness. Tale approccio assicura di evitare la convergenza prematura e la stagnazione poiché nessun individuo otterrà una probabilità largamente superiore ad un altro di essere selezionato. Per contro, questo metodo, soffre di una certa pensantezza computazionale che porterà a un’individuazione più lenta degli individui migliori, naturale conseguenza dei vantaggi descritti in precedenza.
  • 13. 12 Roulette wheel selection: è un criterio di scelta di un individuo proporzionale al suo valore di fitness. Se definiamo la fitness dell’individuo i-esimo, la probabilità di essere selezionato dell’individuo i-esimo sarà definita come , con N numero di individui della popolazione. Si veda un semplice esempio in cui sono presenti solo quattro individui: ; con probabilità di selezione 0.12, 0.18, 0.3, 0.4. Intuitivamente essi occupano una porzione di roulette proporzionale alla loro probabilità di selezione. Nella figura seguente, l’operatore genera un numero casuale e l’individuo viene selezionato. Tournament selection: rappresenta una evoluzione del metodo più semplice possibile per una operazione di selezione, ovvero il pescaggio casuale a probabilità uniforme dalla popolazione. Infatti viene definito un torneo con essenzialmente due parametri: il numero di partecipanti e il criterio di scelta del vincitore. Intuitivamente si procederà ad una scelta casuale dalla popolazione di N partecipanti per il torneo da cui risulterà un vincitore che verrà scelto per la riproduzione.
  • 14. 13 La scelta di un Tournament selection con N = 1 partecipanti equivale ad un random uniforme. Un’interessante opzione invece è la possibilità di inserire una probabilità con cui, ad ogni scontro diretto del torneo, riesca a prevalere l’individuo peggiore. Questo per preservare la diversità all’interno delle popolazioni senza aggiungere procedure computazionalmente pesanti, come il riordino della intera popolazione per valore di fitness decrescente necessario nella Rank Selection. 2.1.2.2.b. Crossover L’operatore di crossover si può definire intuitivamente come una procedura di incrocio dei cromosomi dei genitori selezionati per la riproduzione. Tale composizione dà vita ai cromosomi figli e dunque a dei nuovi individui per la popolazione in corso di formazione. Per fornire un semplice esempio di funzionamento, prima di addentrarsi nella visione di alcuni operatori di crossover specifici, si propone il One- point crossover: Definiti due cromosomi come e appartenenti ai genitori coinvolti, si genera la seguente coppia di figli:
  • 15. 14 e con punto di taglio scelto casualmente. Si vedano velocemente alcuni tipi di crossover la cui conoscenza sarà utile per lo svolgimento successivo del progetto di tesi, dato il loro effettivo utilizzo nell’algoritmo sviluppato: Simple crossover È definito quasi allo stesso modo del già noto One-point crossover, limitandone però l’utilizzo a punti di taglio validi (una rappresentazione in floating point ad esempio non è divisibile in ogni punto). Esso viene impiegato su problemi i cui vincoli definiscono un convex set come spazio delle soluzioni. Però un incrocio semplice potrebbe dar vita a soluzioni esterne alla zona dell’insieme convesso , perciò viene introdotto un parametro tale che: E conseguentemente In diversi articoli visionati in letteratura si solleva il quesito della ricerca del criterio di scelta più appropriato di , contrapposto al metodo effettivamente utilizzato in questo lavoro, la generazione casuale del parametro.
  • 16. 15 Single arithmetical crossover Partendo sempre dalle medesime premesse sui cromosomi dei genitori, questo operatore viene definito come segue: (viene esplicitata la formulazione di uno solo dei due figli, per l’altro il procedimento è analogo) Dove è un parametro generato a caso da un dominio dinamico definito come: definito come limitazione valida inferiore della posizione k-esima in X e similarmente come limitazione superiore. Whole arithmetical crossover Viene definito come una combinazione lineare degli interi cromosomi dei genitori. Partendo dalle assunzioni di notazione adottate nei casi precedenti si otterranno i seguenti cromosomi figli: Il parametro è definito nuovamente come un numero casuale preso dall’intervallo fra zero e uno, che garantisce di rimanere all’interno dello spazio convesso delle soluzioni.
  • 17. 16 Heuristic Crossover L’operatore di incrocio euristico sfrutta le valutazioni dei genitori per provare a indirizzare i figli in una direzione che potrebbe essere migliore delle altre. Ciò viene tentato sbilanciando la procedura a favore del cromosoma del migliore dei due genitori sperando così di ereditare caratteristiche migliori da quell’individuo. Assumendo si definisce il figlio F ottenuto come: 2.1.2.2.c. Mutazione Tale categoria di operatori genetici viene utilizzata per mantenere una certa diversità nelle popolazioni. Essa viene attuata grazie a delle variazioni pseudo casuali nella procedura di riproduzione. A parte l’intento di cercare di migliorare il valore di fitness dei cromosomi mutati, si porta in primo piano il ruolo fondamentale della mutazione per garantire la caratteristica di robustezza agli algoritmi genetici. Infatti grazie a queste variazioni pseudo casuali si potrà sperare di evitare la convergenza prematura dell’algoritmo a punti di minimo o massimo locali. Si vedano ora alcuni esempi di operatori genetici di mutazione che, come per il caso precedente, verranno effettivamente utilizzati nella realizzazione dell’algoritmo in sviluppo.
  • 18. 17 Uniform mutation Viene selezionata una posizione in maniera casuale all’interno di un cromosoma di un individuo . Il nuovo individuo mutato verrà definito come dove viene cambiato con un valore preso casualmente dall’intervallo a distribuzione uniforme. è definito come limitazione valida inferiore della posizione k-esima in X e similarmente come limitazione superiore. Boundary mutation Viene definita come una mutazione che opera come la precedente, però al posto di selezionare casualmente a distribuzione uniforme il valore di viene assegnato un valore, per l’appunto, al limite. Ovvero scelto con equa probabilità il valore di o di . Non-uniform mutation Definito il cromosoma dell’individuo padre come , viene preso casualmente un e dunque definito, come negli altri casi, il nuovo individuo con La funzione restituisce un valore nell’intervallo con una probabilità che si avvicina a 0 all’incrementarsi del t tempo trascorso di esecuzione dell’algoritmo. Questa caratteristica quindi impone un andamento nel tempo estremamente adatto agli scopi di un algoritmo genetico. Infatti causa una iniziale distribuzione uniforme sull’intervallo di mutazione, che quindi ricercherà su tutto lo spazio delle soluzioni, per poi
  • 19. 18 costringere l’intervallo ad una distribuzione che comporterà una ricerca sempre più stringente. 2.1.2.3. Funzione di Fitness Il metodo più semplice per comprendere la funzione di fitness di un algoritmo genetico è considerare che essa coincida con la funzione obiettivo del problema in esame. Sono tuttavia da prendere in esame numerose considerazioni che espandono la complessità di tale funzione, evidenziando la sua rilevanza e il suo peso sulla qualità e sulla rapidità di convergenza dell’esecuzione dell’algoritmo. Nelle euristiche evolutive la considerazione della presenza di più funzioni obiettivo e dell’effetto della violazione dei vincoli imposti dal problema nella valutazione di una possibile soluzione è un problema sempre aperto. Questo a causa della mancanza di uno standard de facto da adottare affrontando tali problematiche, nonostante l’alto numero di possibili approcci definiti in letteratura. In questo frangente è importante nominare gli algoritmi genetici a cui si farà riferimento e che determinano l’attuale stato dell’arte:  Non-dominated Sorting Genetic Algorithm, NSGA-II [24]  Multi Objective Genetic Algorithm, MOGA-II [25] Elitismo A seguito di tutte le considerazioni appena affrontate si afferma che la strategia degli algoritmi genetici può risultare poco conveniente in un ambito di ottimizzazione. Questo perché dopo aver raggiunto una buona soluzione si correrebbe il rischio di perderla qualora essa non rientri nel meccanismo riproduttivo. Per ovviare a questo problema, De Jong introduce il concetto di
  • 20. 19 elitismo [30]. La strategia si basa sul garantire la sopravvivenza al ricambio generazionale di un sottoinsieme di individui, identificati come i migliori. In maniera molto intuitiva allora si può dimostrare che, per costruire un algoritmo genetico convergente alla soluzione ottima, è sufficiente mantenere un elite set di dimensione uno (mantenendo quindi il solo individuo migliore della generazione). In questo modo si genera una successione non decrescente di valori della funzione di fitness e, se questa è superiormente limitata, allora essa è anche convergente. In letteratura è dimostrato che l’impiego del concetto di elitismo negli algoritmi genetici migliora sensibilmente la velocità di convergenza degli stessi [48][24]. 2.1.2.4. Criteri di Arresto Per quanto riguarda le condizioni di arresto di un algoritmo genetico possono esserci molteplici alternative. La scelta più indicata è fortemente influenzata dal contesto, e qui ci si limiterà a dare una rapida introduzione ai metodi principali:  Arresto basato sul numero massimo di generazioni eseguibili;  Limitazione del tempo massimo di esecuzione dell’algoritmo;  Criterio basato sul confronto tra il valore medio del fitness dell’intera popolazione e il valore di fitness della migliore soluzione trovata; questa strategia permette di legare l’arresto del programma alla saturazione della popolazione su un insieme di valori pressoché uniformi, sintomo dell’assenza di miglioramenti per più generazioni;  Blocco dell’esecuzione in base ad un massimo di valutazioni della funzione di fitness attuabili.
  • 21. 20 In questo lavoro di tesi sono state implementate solo le opzioni di controllo sul primo e sul quarto criterio di arresto. Come anticipato nel capitolo 2.1.2.3 per poter comprendere a pieno i discorsi che verranno intrapresi successivamente sarà necessaria una breve introduzione agli algoritmi genetici che determinano l’attuale stato dell’arte, il MOGA-II e il NSGA-II. 2.1.3. NSGA-II Il Non-dominated Sorting Genetic Algorithm [24] è definibile come un algoritmo multiobiettivo che implementa i concetti di elitismo. Per poter affrontare il flusso di evoluzione principale dell’NSGA-II però è necessario introdurre preventivamente i seguenti concetti fondamentali:  Fast Nondominated Sorting  Crowding distance assignment  Constrained Crowded Comparison Operator
  • 22. 21 2.1.3.1. Fast Nondominated Sorting - FNS L’obiettivo dell’approccio di ordinamento presentato è quello di suddividere una popolazione in sottogruppi denominati fronti. Fra essi deve sussistere una relazione di dominanza di Pareto, ovvero la valutazione di ogni funzione obiettivo di un individuo dominante deve eguagliare o superare quella degli individui dominati (superare almeno una volta). In tale ottica si potranno individuare fronti dominati, dominanti e assegnare ad ognuno un rango pari al numero di fronti che li dominano. Intuitivamente quindi il fronte di rango minore sarà quello composto dagli individui migliori della popolazione. L’idea dell’FNS è dunque quello di fornire una procedura rapida per svolgere una siffatta suddivisione in fronti. Si presentano i passi principali di funzionamento nello pseudocodice a seguire.
  • 23. 22 2.1.3.2. Crowding distance assignment - CDA Si introduce ora un nuovo concetto per la valutazione dei punti interni ai fronti. Gli algoritmi genetici infatti desiderano, oltre a mantenere gli individui migliori tramite il concetto di dominanza per una convergenza verso il fronte di Pareto ottimale, avere dei fronti ben distribuiti nello spazio evitando concentrazioni di punti. Per fare ciò nell’NSGA-II propone la somma delle spezzate destre e sinistre di ogni individuo calcolata sui vicini ordinati per valore dell’obiettivo, mediata su tutti gli obiettivi del problema. In questo modo si assegnerà un valore più alto di crowding distance a chi presenterà delle distanze elevate dai punti adiacenti. Ordinando ora un fronte per valori decrescenti di crowding distance si otterrà una lista che aumenta l’affollamento dei punti man mano che si scorre verso il basso. Si veda la seguente immagine per chiarire il concetto della stima di densità delle soluzioni nell’intorno di una particolare soluzione della popolazione. Per essa si considera come crowding distance di i la stima del perimetro del parallelepipedo formato dai vertici delle soluzioni vicine a i.
  • 24. 23 Ottenuto così un ordinamento dei fronti secondo un grado di affollamento crescente sarà possibile effettuare confronti di qualità anche fra individui equivalenti da un punto di vista della soddisfazione del problema. Infatti se bisognasse effettuare una scelta fra due elementi appartenenti allo stesso fronte ora sarebbe possibile prediligere quello con valore di crowding distance più alto, così da incentivare la dispersione delle soluzioni. Ciò è preferibile perché risulta probabile che un gruppo di soluzioni vicine tra loro presentino molte caratteristiche in comune, non portando così ulteriore informazione alla popolazione. Concludendo si presenta uno pseudo codice al fine di chiarire il metodo effettivo di calcolo della procedura di CDA.
  • 25. 24 2.1.3.3. Constrained Crowded Comparison Operator - CCCO L’operatore introdotto dal lavoro in analisi [24] viene indicato generalmente con il simbolo . Esso permette la definizione di un ordinamento fra individui utilizzando le definizioni appena esposte di fronti dominati e di crowding distance. Per ogni elemento della popolazione vengono richiesti tre diversi attributi: un coefficiente che misura la violazione dei vincoli; il rango del fronte di appartenenza e la crowding distance dell’individuo. A questo punto si procede con l’esplorazione del funzionamento dell’operatore in un confronto fra due soluzioni.  Se solamente una delle due è ammissibile l’operatore segnalerà quella come preferibile;  Se entrambe sono valide si segnalerà migliore quella con un rango inferiore, se appartengono allo stesso fronte si predilige il valore di crowding distance più alto;  Nel caso siano ambedue non ammissibili si preferirà quella che presenta un coefficiente di violazione inferiore;  Se l’applicazione dei tre passi precedenti non ha fornito alcuna preferenza ne viene restituita una casuale. Il Costrained Crowded Comparison Operator rende possibile effettuare scelte di preferenza fra coppie di individui, permettendo così di creare un vero e proprio ordinamento di tutta la popolazione. Si porta all’attenzione che, con l’applicazione di questo criterio, si effettuerà un ordinamento separato per gli individui che violano i vincoli. Infatti essi saranno gli ultimi presi in considerazione preferendo chiaramente le soluzioni ammissibili.
  • 26. 25 A seguito dell’introduzione dei tre concetti fondamentali, che sono stati appena presentati, sarà affrontabile ora la spiegazione del flusso principale dell’algoritmo NSGA-II. Facendo riferimento esplicito alle fasi identificate per un algoritmo genetico nel capitolo 2.1.2, si considera di iniziare la spiegazione avendo già generato la popolazione iniziale (il metodo non è rilevante ai fini dell’algoritmo). Si procede alla prima valutazione di tutti gli individui che in questo caso comprenderà anche le fasi descritte nei capitoli 2.1.3.1 e 2.1.3.2., ossia la suddivisione per fronti e il calcolo delle crowding distance. A questo punto verrà impiegato un binary tournament selection, descritto nel 2.1.2.2.a, e una successiva fase di riproduzione per la creazione dei nuovi individui. Si sottolinea che durante la selezione il criterio di vittoria degli scontri diretti del torneo funzionerà sulla base del CCCO. A questo punto interviene il concetto di elitismo, descritto in 2.1.2.3, combinato alla valutazione delle nuove soluzioni che comporranno la popolazione di dimensione doppia, da riportare alla dimensione desiderata. Per effettuare tale operazione, prima di ricominciare il flusso dell’algoritmo, si sfruttano le considerazioni spiegate in precedenza e si taglia semplicemente alla dimensione desiderata dopo aver riordinato completamente la popolazione doppia con FNS e CDA.
  • 27. 26 2.1.4. MOGA-II Il Multi Objective Genetic Algoritm [25] è sostanzialmente meno complicato dal punto di vista operativo confrontato all’NSGA-II. Per esso è sufficiente determinare l’insieme delle soluzioni non dominate, cioè quelle che comporrebbero il fronte di rango minimo per il FNS. Tale insieme viene chiamato Elite Set ed è memorizzato in maniera indipendente rispetto all’evoluzione consueta della popolazione. È mantenuto aggiornato tramite il confronto diretto con i nuovi individui in cerca di ulteriori soluzioni non dominate, inoltre la sua dimensione massima viene fissata a priori dall’algoritmo stesso. Un’ulteriore importante differenza rispetto l’algoritmo di Deb, esposto nel capitolo 2.1.3, consiste nel differente metodo di applicazione degli operatori di selezione e di riproduzione. Infatti nell’NSGA-II tali operazioni si eseguono in sequenza mentre nel MOGA-II si applicano in parallelo. Per ogni individuo viene estratto un numero casuale che decreterà l’ azione da eseguire, in base alle probabilità di applicazione degli operatori. Per quanto riguarda la violazione dei vincoli é adottata la strategia di penalità del valore di fitness dell’individuo per la non ammissibilità. Questo permette all’algoritmo di operare automaticamente la preferenza per le soluzioni ammissibili senza prevedere logiche separate per tali soluzioni. Non si ritiene necessario scendere nei dettagli dei passi principali del MOGA-II poiché le uniche operazioni che si scostano da una gestione standard di un algoritmo genetico riguardano l’utilizzo e il mantenimento dell’elite set e l’applicazione parallela degli operatori, descritte nei paragrafi precedenti.
  • 28. 27 2.2. Contesto: Problemi ingegneristici industriali Il presente lavoro di tesi è stato sviluppato in un ambito ben preciso che inevitabilmente ne ha pilotato alcune scelte strutturali. Si procede quindi ad una rapida panoramica dei caratteri principali del contesto che serviranno poi a comprendere alcune decisioni concettuali e operative attuate nei capitoli successivi. Il progetto nasce da una collaborazione universitaria con ESTECO S.p.A. che ricopre un ruolo di primo piano a livello internazionale nel campo dell’ottimizzazione multidisciplinare, sia come fornitore di software per l’ottimizzazione che come fornitore di servizi avanzati per l’ingegneria. Il principale prodotto software offerto da tale azienda è denominato modeFRONTIER® . È una piattaforma di integrazione che permette un interfacciamento diretto con un gran numero di strumenti Computer-Aided Design e Computer-Aided Engineering, dedicata all’ottimizzazione multiobiettivo, all’automazione dei processi di progettazione ingegneristica, all’analisi dei dati e al decision making in contesti multidisciplinari.
  • 29. 28 Della vasta scelta di algoritmi implementati all’interno del software appena presentato però si prenderanno in considerazione solo gli algoritmi genetici. Nello specifico solamente i due, già dettagliatamente spiegati, che verranno utilizzati poi come competitori durante la fase dei test: MOGA-II [25] e NSGA-II [24]. Nell’ottimizzazione industriale affrontata da modeFRONTIER® è importante sottolineare che, solitamente, le variabili possono presentarsi in molteplici forme ma generalmente hanno sempre dei vincoli stringenti sul dominio. Infatti per ogni variabile considerata, il software richiede l’inserimento di un limite inferiore e un limite superiore coi quali operare. Essenziale inoltre sottolineare la numerosità delle variabili, il numero dei vincoli e della quantità di obiettivi mediamente presenti nei problemi di ottimizzazione industriale. Si pensi intuitivamente alla progettazione di un nuovo pezzo di un motore di cui si vogliono ottimizzare varie caratteristiche. In tal caso il numero di parametri liberi su cui si potrà effettivamente operare decisioni sarà estremamente limitato poiché i parametri di progetto e i limiti fisici imposti nei simulatori saranno estremamente stringenti. È importante chiarire che generalmente modeFRONTIER® non ha accesso ai dettagli dei simulatori né alle formule che genereranno gli output su cui dovrà ottimizzare. Lo scenario risulta forse più chiaro visionando l’immagine seguente ove è stato simbolicamente indicato il livello di valutazione degli input con una blackbox.
  • 30. 29 Possiamo quindi quantificare le variabili decisionali in input come nell’ordine delle decine (mediamente vanno dalla decina al centinaio). Il numero degli obiettivi è solitamente inferiore alla decina, anche se generalmente viene esplicitamente consigliato di effettuare ottimizzazioni con al massimo due o tre obiettivi per limitare la difficoltà di gestione del fronte di Pareto e delle decisioni successive. I vincoli dei problemi sono anch’essi nell’ordine delle decine e solitamente in quantità proporzionale al numero di variabili, escludendo i limiti inferiori e superiori delle singole variabili. Inoltre si noti che la maggior parte dei vincoli comunemente sottomessi a modeFRONTIER® saranno applicati sulle variabili in uscita dalla black box. Questo perché eredi dello scenario e della presenza di complesse simulazioni a livello di fitness che rendono impossibile esplicitare i vincoli sui risultati della blackbox in funzione delle variabili decisionali in ingresso. Risulta immediata la congiunzione delle caratteristiche appena esposte con una iterazione di un algoritmo genetico. Ogni individuo definito come set di valori delle variabili di input dovrà essere valutato e questa procedura Variabili decisionali BlackBox Variabili in uscita
  • 31. 30 richiederà tempo di computazione della blackbox che potrà essere anche molto lungo. Una normale quantificazione del tempo di calcolo necessario ad una singola valutazione potrà infatti variare in media dall’ordine dei minuti a quello delle ore. Ne consegue che l’obiettivo principale di un algoritmo sarà di riuscire a produrre buoni risultati con un numero limitato di valutazioni, poiché tale procedura è indiscutibilmente il collo di bottiglia computazionale dell’intero processo.
  • 32. 31 3. Analisi della letteratura Lo studio dei metodi di risoluzione dei problemi, che interessano questo lavoro di laurea, è partito da una visione dei metodi principali affrontati nei corsi universitari di Ricerca Operativa e di Modelli di Ottimizzazione, poi analizzati più in dettaglio attraverso vari libri di testo [31][32][36]. Allo stesso modo si è proceduto all’esplorazione delle tematiche euristiche degli algoritmi genetici. Grazie a delle ricerche in rete e a un corso frequentato all’interno dell’azienda ospitante, ESTECO S.p.A., si è andati a formare delle basi più che sufficienti per poter intraprendere una ricerca autonoma in letteratura. Come per gli argomenti inerenti la ricerca operativa si ritiene superfluo soffermarsi nuovamente sui caratteri standard degli algoritmi genetici; preferendo invece una presentazione delle metodologie riscontrate in letteratura per risolvere problemi di interesse o ad essi riconducibili. Innanzi tutto bisogna considerare che molti problemi di ottimizzazione interessanti non dispongono di metodi esatti e/o di risoluzione in tempo polinomiale a causa della loro complessità computazionale. Per queste categorie di problemi, nella pratica, ogni soluzione vicina all’ottimo è preferibile se ottenuta in tempi computazionali ragionevoli. Tale considerazione motiva e apre la strada all’impiego di euristiche. Molti dei problemi computazionalmente non trattabili sfruttano metodi di ricerca probabilistici, ma questi non dispongono di una via generale per la gestione dei vincoli. In generale però i vincoli sono parte integrale della formulazione di ogni problema. In [1] gli autori esprimono esaustivamente tale concetto con le
  • 33. 32 seguenti parole: “Virtually all decision making situations involve constraints. What distinguish various types of problems is the form of these constraints. Depending on how the problem is visualized, they can arise as rules, data dependencies, algebraic expression, or other forms. Constraint satisfaction problems (CSPs) have been studied extensively in the operations research (OR) and artificial intelligence (AI) literature. In OR formulations constraints are quantitative, and the solver (such as the Simplex algorithm) optimizes (maximizes or minimizes) the value of a specified objective function subject to the constraints. In constrast, AI research has focused on inference-based approaches with mostly symbolic constraints. The inference mechanism employed include theorem provers, production rule interpreters, and various labeling procedures such as those used in truth maintenance systems.” L’idea alla base di questo lavoro è quindi trovare un approccio per risolvere problemi di ottimizzazione al cui interno siano presenti degli insiemi di vincoli lineari basandosi sugli Algoritmi Genetici. Come già detto, queste tecniche vengono di norma utilizzate per tentare di risolvere problemi di ottimizzazione per i quali non si conoscono altri metodi efficienti di complessità lineare o polinomiale. Poiché l'approccio genetico, spiegato dettagliatamente nel capitolo 2.1, è fondamentalmente una esplorazione dell’insieme delle soluzioni ammissibili, introdurre vincoli può essere potenzialmente vantaggioso e può migliorare il comportamento della ricerca limitando la regione ammissibile. Tuttavia nessuno degli approcci tradizionali degli algoritmi genetici utilizza questa strategia ma impiega tecniche volte a minimizzare l'effetto negativo dei vincoli. In questo modo, si ricorre ad un allargamento dello spazio di ricerca permettendo la scelta di soluzioni non ammissibili, esterne quindi alla regione ammissibile, durante l’evoluzione dell’algoritmo. In alcune tecniche
  • 34. 33 di ottimizzazione, come nel metodo del simplesso [31][32], i vincoli di uguaglianza vengono sfruttati poiché, se esiste, l’ottimo è situato sulla superficie dell’insieme convesso generato dall’insieme dei vincoli. Le diseguaglianze sono convertite in uguaglianze tramite l’aggiunta di variabili di slack, e la tecnica risolutiva procede spostandosi da vertice a vertice spostandosi sul bordo della superficie. Bisogna inoltre aggiungere una nota importante perché nel contesto in cui questo lavoro si pone, presentato nel corso del capitolo 2.2, l’algoritmo non dispone di alcuna conoscenza sulla funzione obiettivo, ma può solamente richiedere il calcolo del suo valore alla blackbox. Questo si contrappone a metodi come quello del simplesso che guida la ricerca grazie ai valori introdotti dalla funzione obiettivo; oppure ad altre tecniche della ricerca operativa che sfruttano informazioni estrapolate dai pesi della formulazione matematica di tale funzione per limitare lo spazio delle soluzioni e direzionarsi nella ricerca del valore ottimo. Quest’ultimo criterio considera solo funzioni obiettivo lineari, ipotesi che purtroppo nel presente contesto applicativo non possiamo garantire. Inoltre da un punto di vista operativo, tutti gli algoritmi che lavorano effettivamente con delle uguaglianze sono soggetti a possibili errori di natura numerica dei calcolatori; condizione che introduce altri parametri di funzionamento, come gli ordini di precisione e gli intervalli di controllo dei vincoli, per i programmi che implementano tali algoritmi. Per contrasto al discorso sul simplesso, in dei metodi che generano soluzioni in maniera pseudo casuale sullo spazio delle soluzioni, i vincoli di uguaglianza risultano un problema non ignorabile. Si può notare semplicemente che gli algoritmi genetici rientrano in questa categoria, infatti dallo studio bibliografico e pratico effettuato sui problemi di interesse, classici della programmazione lineare e problemi combinatori, ne è risultato
  • 35. 34 che l’applicazione di un algoritmo genetico standard, per tali istanze, risulta svantaggioso rispetto ad algoritmi esatti, come il Branch and Bound. Questo fatto risulta forse più chiaro affrontando le difficoltà di generazione di una soluzione ammissibile all’interno del dominio del problema per istanze con un gran numero di vincoli. In tali casi la probabilità di generazione di candidati non ammissibili è decisamente troppo grande per poter essere ignorata. Un ottimo esempio, anche se banale, risulta la costruzione di un circuito hamiltoniano per la soluzione di un classico Traveling Saleman Problem [31][32]. Ogni applicazione diretta degli operatori genetici standard di mutazione e di crossover, genera una soluzione chiaramente non ammissibile con probabilità estremamente alta, ipotizzando di non eseguire delle codifiche sulle variabili decisionali. Le metodologie in assoluto più comuni ritrovate in letteratura sono principalmente basate sul nascondere, all’interno di operatori genetici specializzati, la logica del problema specifico [8][7][14][15][16][33][34][35], andando a far lavorare l’algoritmo genetico solamente sullo spazio di soluzioni ammissibili. Inoltre questa tecnica é spesso accoppiata da delle procedure di local improvement che analizzano il cromosoma del candidato per migliorarlo (tali procedure sono fortemente specializzate sull’istanza del problema). Inutile sottolineare che una procedura di miglioramento locale può agire in molteplici modi, ma esse sono generalmente costose da un punto di vista computazionale. Inoltre una impostazione troppo rigida degli operatori specializzati e delle meccaniche di miglioramento locale può portare a delle restrizioni non volute dello spazio delle soluzioni, portando irrimediabilmente l’esecuzione dell’algoritmo a incagliarsi su dei valori ottimi locali.
  • 36. 35 Un altro metodo utilizzato di frequente per impostare un’istanza di un problema avente delle variabili strutturate, è ricorrere a dei decoder situazionali [7][32]. Essi mascherano problemi derivanti l’utilizzo di strutture dati non convenzionali richieste però dal problema. Al pari dei local improvement, anche i decoder possono diventare estremamente costosi computazionalmente. Inoltre si deve anche considerare il potenziale svantaggio di celare informazioni logiche, che potrebbero risultare utili dal punto di vista decisionale per l’evoluzione dell’algoritmo, all’interno della codifica. Un esempio intuitivo potrebbe essere un problema di ricerca su grafo del cammino minimo dove i cromosomi sono set di archi numerati. Con una codifica del genere la vicinanza di un numero che codifica un arco al suo successivo non avrebbe per forza un senso logico per il modello, né tantomeno l’ordinamento delle codifiche stesse. O l’assegnazione di processi paralleli ad un insieme di processori [37] dove ogni possibile assegnamento viene codificato da un valore non ordinato; privando così, anche in questo caso, i possibili significati di vicinanza e di ordinamento fra due soluzioni codificate vicine per possibili operatori genetici. Un altro approccio documentato è costituito dalle procedure di riparazione che vengono operate su candidati non ammissibili per essere riportati nello spazio di ammissibilità [9][13][17]. Tali procedure vengono progettate con un alto grado di specificità in base alla istanza del problema e, dipendentemente da quest’ultimo, possono anche degenerare in complessità computazionale fino a rasentare la difficoltà di risoluzione del problema stesso. Si vuole evidenziare il caso dei problemi di ottimizzazione delle catene di montaggio automobilistiche, contesto nel quale sono estremamente utilizzati all’interno degli operatori di crossover specializzati [13][38].
  • 37. 36 Elaborate quindi le considerazioni, estrapolate dall’analisi della letteratura, si opta per suddividere in macroaree le caratteristiche comuni individuabili nei problemi di interesse. Questo permette una trattazione più semplice dell’ispezione delle possibili metodologie risolutive adottabili per i tre contesti di interesse così suddivisi:  Insiemi di vincoli lineari;  Variabili intere e binarie;  Strutture dati: disposizioni e permutazioni. Insiemi di vincoli lineari Prima di procedere con l’elencazione delle opzioni individuate per affrontare la presente macroarea si ricorda che nel contesto applicativo non si dispongono di informazioni sulla funzione obiettivo. Data la ottimizzazione black box quindi non sarà possibile trarre vantaggio dalle informazioni delle eventuali strutture lineari dei vincoli sulle variabili in uscita e della funzione obiettivo. Sotto questa ipotesi però sono disponibili varie alternative di sfruttamento di tali strutture:  eliminazione delle variabili riducendo la dimensione del problema;  riparatori/miglioratori locali che cercano di perfezionare i risultati inammissibili sfruttando la struttura lineare dei vincoli;  adozione di operatori genetici custom;  mantenimento degli approcci genetici standard.
  • 38. 37 Variabili intere e binarie Permettere ad un algoritmo genetico di supportare problemi con variabili di questo tipo non si concretizza in sostanziali differenze di funzionamento ma semplicemente di prevedere un adeguato supporto operativo ad esse. Le problematiche introdotte sono di performance, poiché le variabili discrete introducono difficoltà di esplorazione dello spazio delle soluzioni. Inoltre la maggior parte dei test case di questa categoria può venir modellizzata con strutture dati più complesse che affronteremo nel prossimo paragrafo. Si presentano comunque come alternative di sfruttamento delle variabili intere e binarie:  integrazione di improvement local euristici tratti dalle strategie di programmazione intera;  mantenimento della struttura generica di GA, arricchita della logica operativa per operare con variabili intere e binarie;  inserimento di procedure di repair all’interno di una struttura classica degli algoritmi genetici;  adozione di operatori genetici specializzati. Strutture dati: disposizioni e permutazioni Dall’analisi della letteratura é emersa una preferenza diffusa per le procedure di decoder delle strutture dati estremamente vincolate. Essa si concretizza con la definizione di uno schema di codifica di tutti gli elementi validi del problema, andando poi ad utilizzare tali valori per riempire un vettore di dimensione finita rappresentante una possibile soluzione. Un esempio decisamente intuitivo può essere la codifica di una istanza del commesso viaggiatore in cui si opera numerando tutte le città presenti nel
  • 39. 38 problema. Una possibile soluzione a questo punto diventa una sequenza di numeri interi rappresentanti le città (codifica) che il commesso visita nell’ordine in cui sono presentati all’interno del vettore, rendendo obbligato il passo di collegamento fra l’ultima posizione della sequenza e la prima creando così un circuito. Si ricorda che, per la formulazione del problema, il commesso non può visitare due volte la stessa città. A questo punto si può associare la definizione di disposizione senza ripetizione, o di permutazione, al vettore codificato. Senza scendere ulteriormente nel dettaglio con esempi di problemi che possono utilizzare una codifica di questo tipo si presentano i metodi principali trovati per poter sfruttare questa struttura in un algoritmo genetico:  definizione di operatori specializzati per le disposizioni;  adozione di un meccanismo di repair/fix, per ricostruire da un individuo generato da un operatore una soluzione ammissibile al problema;  inserimento congiunto dei punti precedenti in un algoritmo genetico che utilizza anche operatori non specializzati. Permutazioni e disposizioni su grafo Nonostante l’esempio portato all’attenzione nel paragrafo precedente parlasse di un problema del commesso viaggiatore, nelle considerazioni possibili inerenti allo sfruttamento delle permutazioni non si accennano ragionamenti in merito alla struttura del grafo, chiaramente presente in una formulazione di un TSP. Una importante parentesi viene dunque aperta sui problemi che coinvolgono la presenza di alberi e grafi, dato che essi costituiscono una importante fetta dei problemi di ottimizzazione
  • 40. 39 combinatoria. Si è voluto differenziare la categoria dei grafi delle sole permutazioni poiché nella seconda rientrano anche possibili codifiche di problemi che non coinvolgono grafi o alberi, un ottimo esempio si può ritrovare nel Knapsack (problema dello zaino). Con l’introduzione della presente categoria si prende in considerazione di utilizzare l’enorme insieme di vincoli, che nei modelli lineari costruiscono la struttura del grafo, come input semplificato ad uno dei due possibili metodi che sfruttano tale struttura ai fini evoluzionistici:  definizione di operatori specializzati che considerino i vincoli strutturali del grafo;  adozione di una procedura di riparazione che controlli l’integrità delle soluzioni e le ripari in base all’input rappresentante il grafo. Nel capitolo 4 si presenteranno le motivazioni che hanno supportato il metodo scelto e la spiegazione dello stesso. Si ricorda che l’obiettivo delineato è la trattazione di una opportuna branca di problemi multiobiettivo, di programmazione lineare e ottimizzazione combinatoria, tramite l’identificazione di una strategia generica che permetta ad un algoritmo genetico di lavorare con problemi di tali tipologie sfruttandone le strutture. Il target viene ampliato alla costruzione di livelli di funzionamento aggregabili, per la necessità di guardare all’ottimizzazione di problemi misti, in cui la parte riconducibile alle singole strutture possa risultare essere solo un sottoinsieme del problema totale.
  • 41. 40 4. Progettazione dell’algoritmo Nel corso del capitolo 3 sono state analizzate e presentate le possibili alternative che si possono adottare per affrontare le varie tipologie di problemi rientranti nelle categorie individuate. Si ricorda quindi la presenza di tre macro aree delineate dall’accorpamento dei caratteri simili che definiscono i problemi di interesse:  Insiemi di vincoli lineari;  Variabili intere e binarie;  Strutture dati: permutazioni. Bisogna quindi costruire un algoritmo genetico che possa trarre beneficio dalla conoscenza a priori di questi possibili ingressi strutturati e lavori in maniera standard per le altre tipologie di variabili in ingresso. Ricapitolando si vuole costruire un GA che adotti diversi comportamenti in base al tipo di variabili a lui sottoposte, prevedendo l’opzione di lavorare anche con più tipologie allo stesso tempo. Viene in aiuto la struttura particolarmente ben partizionata dei GA, la quale permette di definire delle strategie diverse a livello degli operatori per governare in modo differente sezioni del cromosoma di un individuo, meccanismo che favorisce una applicazione parallela di più logiche di funzionamento. Sfruttando i concetti introdotti nel capitolo 2 si veda il diagramma seguente proposto di composizione:
  • 42. 41 1. Generazione di una popolazione iniziale; 2. Generazione nuova popolazione: a. Selezionare una coppia di soluzioni genitori A e B; b. Suddivisione dei cromosomi di A e B in gruppi rientranti nelle categorie definite; c. Applicazione del comportamento scelto ad ogni categoria presente nella coppia di cromosomi. 3. Calcolo del valore di fitness per tutte le soluzioni/individui; 4. Verificare che il criterio di arresto sia soddisfatto, altrimenti tornare al punto 2. Questa struttura si può ricondurre per similitudine al funzionamento della fase riproduttiva di un MOGA-II [25]; in cui gli operatori vengono applicati in parallelo sul cromosoma in base ai parametri dell’algoritmo. La domanda che può sorgere spontanea a questo punto è se ci sia qualche indicazione teorica favorevole a questo tipo di approccio. L’obiettivo è creare un GA generico che però assuma dei comportamenti potenzialmente più idonei al presentarsi di determinate caratteristiche delle variabili in ingresso. Intuitivamente possiamo presupporre che il comportamento standard in assenza di tale condizione sarà da paragonarsi ad un qualsiasi GA blackbox
  • 43. 42 senza rivisitazione, ovvero che non sfrutta conoscenze a priori e che valuta ogni punto dello spazio di ricerca al più una sola volta. Questa generalizzazione del comportamento standard ci permette di chiamare in causa il No Free Lunch Teorem [42]. Wolpert e Macready affermano, con tale lavoro, che mediando sullo spazio di tutti i possibili problemi le prestazioni di tutti gli algoritmi blackbox senza rivisitazione forniscono le medesime prestazioni. Da esso si possono dunque ricavare due informazioni estremamente importanti:  Se si inventa un nuovo algoritmo che pare essere il migliore per una certa classe di problemi, il prezzo da pagare è l’esistenza di altre classi di problemi per cui esso risulta sotto la media;  Per uno specifico problema è possibile aggirare il teorema del No Free Lunch incorporando conoscenza specifica sul dominio nella soluzione. Tali considerazioni giungono in risposta al quesito che ci si era posti poiché ci permettono di dare un’impronta positiva all’approccio sopra descritto. Esso infatti si comporterà in maniera generica per problemi che presentano solo variabili non rientranti nelle tre categorie individuate, cosa che per il No Free Lunch Teorem non comporta alcun tipo di svantaggio in termini di prestazioni medie sull’intero orizzonte di problemi affrontabili. Invece per istanze che propongono gruppi di variabili rientranti nelle categorie per cui è previsto un raffinamento del comportamento dell’algoritmo, possiamo affermare con ragionevole certezza che otterremo un comportamento migliore sfruttando la conoscenza specifica a priori che esse portano. La somma di queste due considerazioni finali ha fatto propendere il qui presente lavoro per l’adozione di tale strategia di composizione per l’algoritmo genetico in costruzione.
  • 44. 43 Prima di procedere con l’analisi effettiva dei metodi trovati per affrontare le singole categorie di input strutturati è obbligatorio effettuare alcune considerazioni che permetteranno di slegare le trattazioni specifiche dal contesto globale; permettendo così una trattazione più semplice e leggibile. Adottando la struttura di un algoritmo genetico si devono separare le considerazioni sulle varie sue fasi, introdotte velocemente nel corso del capitolo 2.1, e definire rigorosamente le relazioni fra le stesse. Una particolare attenzione deve essere fatta per le relazioni con la fase di riproduzione degli individui, ovvero quella che si sta andando a costruire. Si può suddividere il flusso di un GA in cinque macro fasi senza tralasciare dettagli utili alle seguenti considerazioni:  Generazione della popolazione è una fase molto importante per una rapida convergenza dell’algoritmo genetico, come da considerazioni già effettuate, ma non è rilevante dal punto di vista del suo funzionamento in senso stretto. Esso si può definire isolato dato che non ha relazioni dirette di funzionamento con alcuna delle altre fasi;  Valutazione Il calcolo della funzione di fitness ha un ruolo di primo piano nella qualità delle capacità di ricerca del GA, e soprattutto sulla gestione dei vincoli [6][7]. La letteratura è ricca di studi su tali tematiche ancora aperte, e sulla gestione dei problemi multiobiettivo [18]. Il punto importante però è che questa fase non è in alcun modo relazionata, in senso di legami di struttura diretti, con l’applicazione gli operatori;  Riordino e selezione degli individui Sono entrambe procedure che sicuramente possono influire sulla qualità del risultato dell’applicazione degli operatori, ma ciò
  • 45. 44 nonostante non impongono alcun vincolo alla fase di nostro interesse. Si lasciano dunque in secondo piano scelte inerenti: la dimensione della popolazione, il numero di generazioni da computare, l’utilizzo di elitismo e altre strategie velocemente introdotte nel capitolo 2.1.2 .  Controlli e Criteri di arresto Come è intuibile essi determinano solo la durata dell’esecuzione dell’algoritmo genetico, senza mantenere vincoli espliciti con nessuna delle altre fasi. Per esclusione la quinta fase risulta essere quella di nostro interesse: la Riproduzione, ovvero dove verranno applicati gli operatori genetici e creati quindi i nuovi individui. A seguito delle considerazioni sulle altre cinque fasi, si può constatare che non ci sono vincoli diretti che impongano accorgimenti particolari; nonostante la selezione e i metodi di generazione della popolazione iniziale possano influire sul risultato degli operatori. È per questo che nei prossimi paragrafi si procederà all’analisi dei metodi scelti per affrontare le tre macroaree, circoscrivendo il discorso alle operazioni della fase di riproduzione. Inoltre dalle considerazioni derivate dalla composizione orizzontale del flusso di esecuzione, ereditate anche dalla struttura degli operatori del MOGA-II [25], si potrà procedere a tali spiegazioni in maniera mutuamente esclusiva e senza appesantire il discorso con riferimenti obbligati alle tutte le altre categorie.
  • 46. 45 4.1. Insiemi di vincoli lineari Questa categoria è forse quella che, anche intuitivamente, meglio si presta all’aggiunta di metodologie specifiche e di considerazioni matematiche per la semplificazione del problema sottoposto. Ci sono vari punti di forza che permettono di adottare ragionamenti generali su insiemi di vincoli lineari [31][32], ma i due principali sono:  La possibilità di avanzare deduzioni, effettuare calcoli e semplificazioni sui vincoli stessi, cosa che negli altri casi (come di non linearità) sarebbe impossibile;  Il punto più importante sfruttabile dalla struttura in analisi è che un gruppo di vincoli di diseguaglianza lineari delinea sempre un insieme convesso. Ed esso garantisce varie proprietà che possono essere impiegate come base di partenza di calcoli nello spazio dei punti interni all’insieme. Oltre alle due considerazioni appena esposte si ricorda che sono disponibili in letteratura anche molti metodi di semplificazione, eliminazione, restringimento o aggiunta di vincoli lineari, chiamati Preprocessing [32][36], ed hanno come obiettivo quello di rendere più efficienti i sistemi di vincoli definiti nei problemi.
  • 47. 46 4.1.1.Sfruttamento della struttura lineare In questo contesto è stato trovato, come miglior approccio aderente alle esigenze dalla categoria in analisi, un algoritmo genetico singolo obiettivo presentato da Michalewicz con il nome di Genetic Algorithm for Numerical Optimization Problems, abbreviato a GENOCOP [11]. Esso prende in considerazione solo problemi che presentano in ingresso vincoli lineari, sia di uguaglianza che di diseguaglianza. Non vengono invece imposte limitazioni alla formulazione della funzione obiettivo. Il funzionamento del Genocop è semplicemente riassumibile contando sul supporto delle spiegazioni riportate nei capitoli precedenti. Si avvale di un meccanismo matematico di riduzione del numero di variabili, esplicitandole a partire dai vincoli di uguaglianza. Tale manovra lascia generalmente l’istanza del problema priva di vincoli di uguaglianza e quindi solo con un insieme di diseguaglianze. Importante sottolineare che un sistema così composto produce per intersezione un insieme convesso. Da questa considerazione, avvalorata dalla generazione di una popolazione iniziale solo di individui ammissibili, si possono gestire gli operatori genetici in maniera specializzata per sfruttare le proprietà dell’insieme convesso e rimanere nella zona di ammissibilità del problema. Questo comporta dei vantaggi enormi nella rapidità di esplorazione della regione ammissibile da parte dell’algoritmo genetico. Vediamo ora in maniera sintetica il funzionamento del nucleo logico del Genocop.
  • 48. 47 Algoritmo Genocop Si definisce un problema di ottimizzazione come insieme di Funzione obiettivo: Dominio delle variabili: Vincoli di uguaglianza: Vincoli di diseguaglianza: Si delinea la procedura di semplificazione delle uguaglianze con il nome di “Elimination of Equalities” che opererà nel seguente modo: preso un set di vincoli di uguaglianza si può suddividere A in Si definisce quindi un nuovo set di diseguaglianze Si suddivida a questo punto l’insieme di diseguaglianze di C Il nuovo problema di ottimizzazione così delineato sarà composto da: Funzione obiettivo: Dominio delle variabili: Vincoli:
  • 49. 48 Il mantenimento delle soluzioni all’interno della regione ammissibile è possibile utilizzando il crossover algebrico [19]. Esso sfrutta la formulazione della convessità per impostare il lavoro di incrocio dell’operatore, e viene proposto anche nel corredo di operatori del GENOCOP [11]. I dettagli sulla formulazione degli operatori selezionati rientranti dell’ambito di interesse sono già stati presentati più approfonditamente nella sezione sugli operatori di crossover e mutazione, rispettivamente visti nel corso dei capitoli 2.1.2.2.b e 2.1.2.2.c . È stato dunque trovato un metodo di risoluzione che sembra adeguato ad affrontare i problemi derivanti dalla presenza di uguaglianze per gli algoritmi genetici, e si avvantaggia dalla struttura degli input sottoposti a matrici di vincoli lineari senza collidere con il contesto applicativo. Nonostante le ottime premesse però è necessario portare all’attenzione che esso si muove esclusivamente in un ambito di ammissibilità, il che riduce notevolmente le possibilità di applicazione generica e di automatizzazione della procedura per istanze con input di varia natura. Fortunatamente l’adattamento generale del GENOCOP a una generalizzazione con vincoli di altro genere non è difficile, inoltre in letteratura si trovano altre due versioni del sopracitato algoritmo. Il GENOCOP II sarà di scarsa utilità ai fini del progetto, ma si è rilevato comunque utile per capire come la prima versione dell’algoritmo potesse essere associata a meccaniche complesse quale il Simulated Annealing [43]. Il GENOCOP III [12] invece applica una struttura a due passi per la ricerca nello spazio delle soluzioni sull’insieme convesso delineato dai vincoli lineari e successivamente inserisce un metodo genetico standard per la ricerca delle soluzioni dell’intero problema, permettendo di lavorare anche con vincoli non lineari. Questo approccio è semplice ed efficace e viene adottato per la struttura base della soluzione ricercata in
  • 50. 49 questa sezione. Si veda ora in estrema sintesi il funzionamento del GENOCOP_III facendo esplicito riferimento alla sua versione già presentata. Esso si propone di ottimizzare un set di variabili decisionali Lo spazio viene suddiviso nel seguente modo search point space: regione ammissibile dei vincoli lineari reference point space: regione ammissibile dell’intero problema Il search point space è un politopo definito da Aggiungendo vincoli si delimita : Essi si dividono in quattro categorie, tipologia e linearità: Equazioni Lineari LE Equazioni non lineari NE Disequazioni lineari LI Disequazioni non lineari NI L’algoritmo in esame opera normalmente su seguendo la procedura di funzionamento della prima versione del GENOCOP, tentando di riparare le soluzioni non appartenenti ad : Soluzioni ammissibili Soluzioni inammissibili
  • 51. 50 Esaminata dunque la struttura della terza versione dell’algoritmo si possono notare delle peculiarità nella gestione della popolazione del reference point space che non sono proprio in linea con le idee generali dei genetici. Inoltre la possibilità di rimpiazzo va a modificare a mano le popolazioni all’interno della stessa fase di riproduzione, potendo generare così delle riproduzioni di individui nuovi; intuitivamente denominabile come balzo evolutivo. Si fa notare che gli algoritmi appena presentati sono stati pensati solamente per le ottimizzazioni singolo obiettivo, che non sono il target principale del contesto di applicazione del progetto visto nel capitolo 2.2. Siccome la struttura optata trae notevoli benefici dai domini delle variabili contenute, dato che mantiene i valori delle stesse all’interno dei limiti imposti, e che sfrutta meticolosamente l’insieme di vincoli lineari per avvantaggiare l’evoluzione genetica, si rivela decisamente importante sottoporgli istanze di problemi ben formulate. Per questo diventa notevolmente rilevante la fase di semplificazione del sistema di vincoli e dunque la possibile fase di preprocessing.
  • 52. 51 4.1.2.Preprocessing I meccanismi rientranti sotto la nomenclatura di preprocessing hanno come scopo generale la riduzione della dimensione dell’istanza del problema. Infatti la complessità di risoluzione di un problema è largamente influenzata dalla numerosità delle sue variabili e dei vincoli. Riuscire a ridurne il numero dei secondi citati quindi può portare dei grossi benefici in termini computazionali e di rapidità di convergenza. Importante spiegare che le procedure rientranti nel preprocessing sono generalmente sequenze di semplici operazioni iterate opportunamente al fine da trovare possibili semplificazioni. A sua volta un sottoinsieme di singole procedure o dell’intero procedimento può venir iterato per garantire una ricerca più efficace di possibili semplificazioni multiple. Si procede ora ad una rapida panoramica degli obiettivi esatti ricercati da tale metodo di riduzione e quali tipi di procedure possono venir prese in considerazione nell’ambito del lavoro attuale:  Restringimento dei vincoli sulle variabili;  Inserimento di vincoli logicamente vantaggiosi;  Rendere costanti variabili tramite assegnamento;  Rimozione di vincoli ridondanti o privi di informazione;  Rilevare casi di problemi che non ammettono soluzioni. Per effettuare ciò esistono numerose tecniche diverse, applicabili a livelli differenti. Risulta banale ma doveroso sottolineare l’impossibilità di avvalersi di tutte le tecniche di preprocessing che analizzano e sfruttano la funzione obiettivo del problema per operare, questo a causa del contesto di applicazione in ambito di ottimizzazione industriale.
  • 53. 52 Sono state introdotte, nel flusso creato per il preprocessing, delle possibili fasi aggiuntive per sfruttare ulteriormente la struttura che verrà effettivamente sottoposta all’algoritmo in costruzione. Questi prendono in considerazione i limiti di dominio imposti ad ogni variabile in ingresso per renderli più stringenti, se l’insieme di vincoli ne preclude comunque la possibilità di assegnamento totale. Si veda ora la catena di procedure che sono state scelte, ricordando che si potrà decidere di iterarne alcune, sottogruppi o tutte a momento debito:  Eliminazione dei Singleton Consta semplicemente nel ricercare vincoli banali in cui compare una singola variabile decisionale e farne assorbire l’informazione dai rimanenti vincoli;  Aggiornamento dei limiti inferiori e superiori delle variabili Si tratta di effettuare considerazioni sui vincoli lineari e controllare i valori minimi e massimi assumibili dalle variabili, questo per confrontarli poi con i vincoli specifici di dominio (limite superiore e inferiore della variabile);  Controllo presenza di vincoli privi di significato Può succedere che considerazioni effettuate esplicitando variabili nella disequazione portino in evidenza vincoli che sanciscono relazioni fra
  • 54. 53 le variabili già presenti in altri, oppure restrizioni equivalenti ma più permissive di altre già incluse nell’insieme;  Aggiornamento vincoli Generalmente si effettua una modifica restrittiva dei termini noti a seguito di considerazioni similari a quelle applicate nel restringimento dei domini delle variabili;  Restringimento dei vincoli Operazione che mira a effettuare delle modifiche ai coefficienti e dei termini noti nei vincoli, senza alterare però i legami proporzionali fra le variabili da essi sanciti;  Procedura di semplificazione logica delle diseguaglianze Forse la procedura più complessa che è stata presa in considerazione, essa si articola nelle tre fasi evidenziate nel diagramma: generazione di nuove diseguaglianze con criteri logici specifici, confronto a coppie del nuovo insieme di vincoli espansi, semplificazione. Se ci si sofferma a riflettere sulle prime quattro fasi evidenziate, esse acquisiscono peso se l’intero flusso viene ripetuto iterativamente. Ogni modifica di una delle singole fasi potrebbe aprire la possibilità di individuazione di nuove semplificazioni anche per le successive. Nel contesto in esame è accettabile dedicare un quantità di tempo di calcolo importante al preprocessing, data la presenza del collo di bottiglia computazionale che si crea durante le valutazioni dei singoli design.
  • 55. 54 4.2. Variabili intere e binarie La seconda categoria individuata tratta le variabili a valori interi e binari, esse purtroppo si presentano in modo ricorrente nei problemi di ottimizzazione reale e non esistono sempre metodi di risoluzione efficaci. Queste categorie di problemi sono individuati dalla sola presenza di variabili il cui dominio appartiene all’insieme dei numeri razionali o interi. Invece si può definire un problema di ottimizzazione binaria sulla presenza di variabili decisionali che possono assumere solo valore di zero e di uno. Si nota che da un punto di vista operativo sarebbe possibile definire un problema binario come intero, inserendo ad ogni variabile razionale un dominio compreso tra zero e uno inclusi. La caratteristica fondamentale di tali problemi è quindi quella di avere insiemi ammissibili discreti, a differenza dei classici problemi di programmazione lineare in cui l’insieme ammissibile è continuo. Ciò comporta la necessità di tecniche d’ispezione dello spazio delle soluzioni che agiscano in modo differente per problemi di ottimizzazione intera e binaria. Il nucleo del discorso è che la restrizione intera alle variabili decisionali in questi problemi causa un tremendo aumento della difficoltà risolutiva dei classici metodi che cercano soluzioni ottime o quasi-ottime. Il metodo più popolare in letteratura risulta essere il Branch and Bound. Esso è un algoritmo di risoluzione esponenziale che procede partizionando lo spazio delle soluzioni in sottoinsiemi più piccoli, e risolvendo il problema di ottimizzazione su ogni sotto-insieme. Questo viene fatto ricorsivamente, dividendo a loro volta le regioni ammissibili dei sotto-problemi in sottoinsiemi. Se tale ricorsione venisse svolta completamente, alla fine si enumererebbero tutte le possibili soluzioni del problema. Questo presenta
  • 56. 55 due problemi: prima di tutto, se il problema ha infinite soluzioni ammissibili l’enumerazione completa non é possibile, e anche se la regione ammissibile contenesse un numero finito di punti, tale numero potrebbe essere esponenzialmente grande; quindi enumerarlo richiederebbe un tempo non sostenibile se non per istanze estremamente ridotte. L’algoritmo del Branch and Bound cerca di esplorare solo aree promettenti della regione ammissibile, mantenendo una limitazione superiore e una inferiore del valore ottimo della soluzione in una certa area, e cercando di utilizzare tali vincoli per scartare a priori certi sotto-problemi. Questo permette di ridurre, in maniera rilevante, lo spazio di ricerca delle soluzioni per istanze di problemi che soddisfano la legge della dispersione. D’altro canto in queste tecniche si prevede di processare in maniera isolata l’intera esecuzione dell’algoritmo, e non ci sono garanzie di funzionamento nel caso questo processo venga operato congiuntamente all’interno di un ambiente che preveda più tipi di variabili strutturate. Giunge in aiuto il contesto di applicazione del lavoro qui esposto, il quale prevede un input medio composto da un numero di variabili relativamente limitato ed eterogenee. Ciò permette di svicolare dai problemi che risultano intrattabili per colpa di una crescita di ordine di grandezza del numero di variabili decisionali, e quindi la raggiunta dei punti critici di questa categoria. In un ambito definito da euristiche evoluzionistiche, come quello che viene scelto per il presente lavoro di tesi, alcune interessanti opzioni specifiche vengono messe in evidenza nell’articolo di Deb, Reddy e Singh [34] che presentano un possibile algoritmo genetico personalizzato per i problemi in esame. Di particolare ispirazione è stata anche la trattazione successiva di Pal e Deb [33] in cui analizzano in maniera esaustiva più metodi differenti per approcciare problemi interi anche di grandi dimensioni con gli algoritmi
  • 57. 56 genetici. In essi si introduce un raffinamento del lavoro precedente con l’aggiunta di tre metodi decisionali su un particolare metodo di riproduzione, presentato come vasca di ricombinazione genetica. Anche in questi due lavori il punto fondamentale rimane però la specializzazione degli operatori dell’algoritmo. Se si sommano le considerazioni già formulate ai problemi applicativi legati allo sviluppo effettivo del progetto, risulta che in tutte le opzioni evidenziate nel capitolo 4.1, si richiederà uno strato di logica separato legato ai valori ammissibili delle variabili. Valutazione che, congiunta alla delineazione di una casistica a parte per permutazioni, riduce di molto l’importanza dell’adozione di metodologie dedicate a questa categoria nel presente progetto, almeno in un primo momento. Viene quindi deciso di valutare nel corso dello sviluppo degli operatori specializzati, presentati nelle numerose fonti bibliografiche elencate per migliorare le prestazioni, ma tuttavia limitare la strategia per affrontare questa categoria alla semplice possibilità di sottomissione di variabili in essa rientranti. Ovvero, almeno nel primo approccio, si ritiene che uno strato logico che permetta una corretta gestione delle variabili intere e binarie, unita alla presenza della successiva categoria delle permutazioni, sia sufficiente per fornire le basi su cui testare le potenzialità dell’insieme e di eventuali operatori genetici specializzati.
  • 58. 57 4.3. Permutazioni L’idea di isolare le permutazioni nasce da un iniziale approfondimento sulle strutture dati ricorrenti nei problemi affrontati dalla ottimizzazione combinatoria [31][32][36], visti anche in un’ottica di utilizzo con gli algoritmi genetici [44]. Esse possono venir viste come una particolare codifica di problemi combinatori che presentano un insieme estremamente vincolato di variabili decisionali. Si possono chiamare in causa tipologie di problemi molto famosi quali il problema dello zaino e tutti quelli che possono essere schematizzati tramite una rappresentazione su grafo. La rappresentazione delle soluzioni come vettore contenente una disposizione di un numero finito di elementi del dominio delle variabili decisionali è una scelta vastamente utilizzata in letteratura, specialmente nelle risoluzioni euristiche evolutive [14]. Si tiene a segnalare l’ottima trattazione di una vasta gamma di possibili codifiche per problemi di TSP ad opera di Michalewicz [7]. Da essa è stato possibile ponderare con una visione di insieme i benefici e gli svantaggi che una particolare codifica porta rispetto ad un’altra. Infatti si è deciso di adottare delle strutture che verranno denominate permutazioni. La possibilità di altri approcci è stata vagliata ma, ad esempio, l’adozione di decoder che operino una codifica biunivoca delle soluzioni in variabili singole creano delle inevitabili perdite di informazioni. Alcuni esempi possono essere lo smarrimento della nozione di vicinanza fra specifiche soluzioni, oppure l’ordinamento delle soluzioni iniziali potrebbe non avere senso rapportato a quello della codifica una volta inserito nei ragionamenti che muovono gli operatori genetici. La distanza fra soluzioni però è un dettaglio che interessa mantenere ben inquadrato anche nella definizione di
  • 59. 58 un metodo che sfrutti la struttura dati delle permutazioni per operare la ricerca nello spazio delle soluzioni. A questo fine si sono studiate diverse possibilità per l’adozione di una distanza fra le soluzioni e, in caso, per includere queste considerazioni nella logica di funzionamento di eventuali operatori genetici specializzati o procedure di riparazione delle soluzioni. È stata trovata una ottima trattazione in letteratura; uno studio che mette a confronto vari tipi di distanze sul confronto fra stringhe applicate al name- matching [45]. Fra queste erano presenti la distanza operativa di Levenshtein, il coefficiente di similarità di Jaccard e altri metodologie ibride. Vengono tenute in considerazione le due esplicitamente sopra citate e la distanza di Hamming. Ciò potrà essere utilizzato nei criteri interni di funzionamento di riparatori, operatori o metodi di miglioramento locale per la categoria in analisi. Procedendo con la progettazione dell’algoritmo genetico, che si sta delineando mediante l’approfondimento di ogni singola componente, sono emersi dei punti importanti che hanno avuto un peso rilevante nella definizione della soluzione di questa ultima categoria. Infatti l’unica strategia efficace di utilizzo di una codifica effettuata in un vettore permutazione è l’impiego di metodi per mantenersi nelle soluzioni strutturalmente valide, per poter usufruire poi della possibilità di inserire operatori specializzati più consoni ad una corretta esplorazione spaziale. Le motivazioni di tale scelta sono già state ampiamente discusse nel corso del capitolo 3. Per l’utilizzo della categoria delle permutazioni si sceglie di adottare un sistema di riparazione per mantenere gli insiemi di variabili decisionali in linea con i vincoli strutturali che determinano questa partizione degli input, ad esso ci si riferirà da qui in poi con l’appellativo di “fixer”. A tal fine verranno decise in seguito delle logiche di riparazione che limitino la riproducibilità della medesima soluzione valida a partire da una stessa
  • 60. 59 configurazione errata. Inoltre si vaglierà se implementare meccaniche legate alle nozioni di distanza fra stringhe applicate a vettori di variabili decisionali. È stata dunque deciso di adottare l’inserimento di un metodo generico supportato da una procedura di riparazione a valle, possibilità illustrata nel capitolo 3. Il metodo di riproduzione degli individui sarà raffinato in maniera incrementale, ovvero sarà impostato un primo approccio dedito all’utilizzo di semplici operatori standard; quali il crossover a singolo punto di taglio e la mutazione uniforme. Tale scelta è stata presa al fine di poter valutare l’effettiva efficacia della procedura di fixing, lasciando ad un passo successivo il compito di inserire operatori specializzati. Questo perché l’inserimento combinato di procedure quali il fixer e operatori custom avrebbe potuto falsare i risultati soffrendo l’imparzialità portata dalla caratteristica efficacia decisamente dipendente dal problema degli operatori specializzati. L’approccio decretato di riparazione ad ogni costo delle soluzioni però potrebbe non essere in linea con la mentalità, già ampiamente esposta, degli algoritmi euristici evolutivi. Viene incontro a tale idea la teoria evoluzionistica definita da Lamarckian, espressa chiaramente nell’articolo citato [9]. Tale approccio di riparazione nei genetici viene poi ampiamente motivato e utilizzato anche nei lavori di Michalewicz [7]. La stessa meccanica di funzionamento del GENOCOP III potrebbe essere vista in una ottica di riparazione delle soluzioni; dopotutto le due popolazioni utilizzate per la ricerca delle soluzioni operano in modo indipendente. In tale scenario la procedura analoga al fixing potrebbe essere individuata nel livello che tenta di creare un individuo ammissibile partendo dall’ammissibilità lineare e cercando di arrivare a quella globale. Questo perché nella procedura solo le soluzioni effettivamente ammissibili per il problema vengono accettate per la reale popolazione, ovvero quella della reference point space [12].
  • 61. 60 La strategia è stata delineata ma rimane aperto un interrogativo ereditato dalla struttura degli algoritmi genetici, ovvero dalla utilità di esplorare qualche soluzione non ammissibile per convergere verso soluzioni ottime: quanto è meglio riparare? Definita quindi l’accettabilità delle riparazioni, bisogna stimare in che quantità sarà consono applicare il fixer alle soluzioni non ammissibili. Intuitivamente questa percentuale di applicazione avrà sicuramente un limite inferiore sotto il quale non avrà senso riparare meno. Anche in questo caso si è provveduto a cercare approcci e studi similari in letteratura. Tale operazione ha portato alla luce lo studio di Davis sull’utilizzo di algoritmi genetici con funzioni di riparazione per problemi di ottimizzazione vincolati [17]. Fortunatamente parte della trattazione verteva su istanze di problemi di ottimizzazione combinatoria e giungeva alla conclusione che, in seguito a numerosi test, fosse sempre preferibile riparare una percentuale inferiore al cento per cento delle soluzioni. Il parametro di riferimento del lavoro di Davis però era riferito all’applicazione di operatori specializzati e una percentuale di riparazione del cinque per cento, conclusione che ci permette di estrapolare informazioni importanti; ma che non può essere applicata direttamente al metodo scelto per affrontare la categoria in analisi. Concludendo quindi si è deciso di adottare una struttura di riproduzione che:  Si basi su operatori standard, incrementabile in un secondo momento con operatori specializzati;  L’impiego massivo di una procedura di fix per riportare la maggioranza delle soluzioni non ammissibili nello spazio delle soluzioni ammissibili con metodi che garantiscano la non univoca riparazione;
  • 62. 61  L’applicazione del punto precedente verrà utilizzato su una percentuale delle soluzioni sottoposte, maggiore di zero e minore del cento per cento. Particolare attenzione sarà da attribuire, in una seconda fase, nella fascia delineata dalla letteratura compresa fra il cinque e il quindi per cento. La trattazione specifica dei vari passi dell’algoritmo è stata completata, ora si vuole costruire effettivamente lo schema generale di funzionamento rimanendo in linea con le decisioni prese, il contesto evidenziato e la struttura degli algoritmi genetici. Si presenta quindi a seguire una coppia di diagrammi, in figura 4.1 e 4.2, che portano in luce il funzionamento globale e i livelli di aggregazione di tutte le considerazioni fatte fino ad ora. È importante sottolineare il fatto che il diagramma nella figura 4.2, della schedulazione, rappresenta il flusso iterativo dell’algoritmo genetico, approfondendo nel dettaglio la penultima componente del diagramma 4.1.
  • 63. 62Fig. 4.1 - Diagramma del flusso principale
  • 64. 63 Fig. 4.2 - Dettaglio della fase di schedulazione
  • 65. 64 5. Realizzazione dell’algoritmo Lo sviluppo effettivo dell’algoritmo delineato nel corso del capitolo 4 ha richiesto una evoluzione del codice progressiva, in cui si può individuare una successione di punti cardine. Essa è stata possibile poiché la struttura evidenziata presenta molti nodi di congiunzione fra tecniche diverse che realizzano però la stessa fase nell’algoritmo. Inoltre gli algoritmi genetici sono particolarmente indicati per le costruzioni isolate delle varie fasi poiché ognuna di esse può esser vista come una scatola a se stante con determinati input e output, cosa che si è rivelata particolarmente utile dato che il linguaggio di programmazione utilizzato è stato Java. Viene omessa la descrizione dettagliata delle fasi preliminari alla composizione vera e propria dell’Algoritmo Genetico MultiObiettivo per problemi con Input Strutturati, a cui per semplicità ci si riferirà d’ora in avanti con l’acronimo MOGASI. Tali fasi consistevano in sviluppo di codice mirato a punti specifici o al test di varie metodologie di risoluzione andate poi scartate, e quindi di scarso interesse per l’approfondimento nei dettagli del progetto realizzato. 5.1. Elimination of Equalities L’effettiva struttura del MOGASI è andata a delinearsi partendo dall’esoscheletro dell’algoritmo di Michalewicz, il GENOCOP nella sua prima versione. Da esso è stata prelevata la procedura dell’Elimination of Equalities e sopratutto la struttura matriciale che veniva fabbricata, come ingresso dell’algoritmo, in base alla combinazione dei vincoli lineari del
  • 66. 65 problema sottomesso. Tale matrice è stata mantenuta con il nome originale di Final Matrix ed è composta come segue: Che risulta essere una composizione verticale di tutti i prodotti della procedura di Elimination of Equalities descritta in precedenza durante l’approfondimento dell’approccio GENOCOP. Importante specificare che tale matrice presenta righe con n cardinalità dell’insieme delle variabili lineari appartenenti al gruppo , ovvero quelle non eliminate. Quindi nella prima sezione della stessa, si troveranno i limiti inferiori e superiori rispettivamente in prima e in ultima posizione, mentre al centro sarà presente una mappa di zeri e uni che indicherà a quale variabile è riferita la coppia di limiti della riga. Nella seconda sezione, avendo appena spiegata la disposizione nel primo caso, i limiti inferiori e superiori saranno nuovamente in prima e ultima posizione, mentre all’interno saranno presenti i coefficienti degli con , ottenuti sempre dalla semplificazione a monte. Infine nella terza parte è importante sottolineare solo l’assenza di una limitazione inferiore, che viene imposto di default al valore minimo assumibile da una variabile dell’ambiente di lavoro. L’importanza di questa matrice viene messa in evidenza una volta spiegato che ogni operazione, quando vuole agire su un valore di una qualsiasi delle variabili decisionali lineari, estrapolerà da essa i valori dei limiti applicabili per tale operazione. Proprio per questo motivo si è deciso di prestare molta attenzione nella cura e nella manutenzione di tale matrice durante l’evoluzione dell’algoritmo.
  • 67. 66 5.2. Preprocessing Vista la decisione di inserire una procedura di preprocessing, si è ritenuto opportuno applicarne i concetti direttamente all’intera matrice denominata “Final Matrix”, dato che essa conteneva tutte e sole le informazioni di cui le tecniche selezionate necessitano. La prima versione della procedura di preprocessing implementata consiste in una applicazione ciclica di sole due componenti fra le sei proposte come candidate nel capitolo 4.1.2. Tale riduzione si è effettuata per capire le possibilità dell’approccio di semplificazione preventiva in un contesto applicativo di ottimizzazione nuovo, e per evitare di sviluppare da zero una procedura di preprocessing estremamente complicata prima di scoprire se i problemi su cui si sarebbe andati ad operare sarebbero stati efficacemente semplificabili. Vengono dunque selezionate le sole fasi di aggiornamento dei limiti inferiori e superiori e dei vincoli. Data la struttura particolare della final matrix si è ampliata l’applicazione dell’aggiornamento dei vincoli andando a ritoccare anche il vincolo fittizio introdotto solo per questioni operative della matrice. Ad ogni iterazione viene controllato su ognuno dei vincoli se le limitazioni attuali delle variabili decisionali applicate opportunamente permettono un valido restringimento dei termini noti in entrambe le direzioni. A questo viene fatto seguire un procedimento di esplicitazione delle variabili decisionali da ogni vincolo che, applicando in maniera simile il ragionamento coi limiti delle altre variabili decisionali, permette di controllare la presenza di possibili restringimenti dei singoli domini. L’insieme delle due procedure viene iterato con un criterio di stop condizionato su due fattori: la coppia di procedure è stata già applicata per cinquanta volte, oppure nell’ultima iterazione non è stato possibile effettuare alcuna modifica ai vincoli del problema.
  • 68. 67 Si è potuto notare durante i test che anche solo l’applicazione sistematica delle due procedure più semplici ed intuitive, ha portato comunque in numerosi casi ad un restringimento dello spazio delle soluzioni e quindi dell’insieme convesso su cui l’algoritmo opera la ricerca. Determinando un buon vantaggio sul confronto prestazionale con lo stesso GENOCOP. Nell’esecuzione della procedura di preprocessing è stata prevista la compilazione di un file di log che tenesse traccia di ogni operazione di semplificazione applicata per poter approfondire l’analisi. Ciò si è rilevato determinante per individuare una possibilità di miglioramento decisamente importante. Si presentavano con alta frequenza comportamenti di aggiornamenti ciclici che saturavano il numero massimo di applicazioni per modifiche di ordine irrisorio. Tale fenomeno è stato eliminato dall’introduzione di un controllo parametrizzato con un ordine di precisione definito a priori come input del programma. L’adozione di tale parametro di funzionamento ha permesso di aggregare alcune ricorsioni di aggiornamento e di ignorarne altre, velocizzando dunque il preprocessing e lasciandolo libero di sfruttare in modo più efficace il numero massimo di iterazioni disponibili.
  • 69. 68 5.3. GENOCOP III Risultava essenziale, per la risoluzione della prima categoria individuata degli input strutturati, l’applicazione della logica evolutiva contenuta nella terza versione del GENOCOP per istanze con vincoli anche di tipo non lineare. Tale implementazione non si è rivelata particolarmente semplice poiché gli esempi di codice del GENOCOP III disponibili erano circostanziati dalle istanze che dovevano presentare e quindi il codice non era generalizzato. Inoltre occorre sottolineare che non era presente una istanza esemplificativa di problemi con vincoli lineari e non lineari che richiedessero l’ausilio della procedura di Elimination of Equalities. Nonostante il sorgente disponibile fosse stato fornito in linguaggio C è stata sufficiente una completa traduzione in Java del codice originale e una progressiva integrazione dei due punti precedentemente analizzati per ottenere una versione prototipale funzionante del blocco che serviva al MOGASI. In tale sede si è rilevato, effettuando i test di funzionamento, il comportamento atipico che assumeva l’aggiornamento della popolazione della reference point space. Infatti, come si è già spiegato in dettaglio nel corso del capitolo 4.1.1, un individuo veniva sostituito dal figlio generato dall’incrocio di se stesso con un elemento della search population, ma solo se la valutazione del figlio superava quella del padre. Per effettuare un confronto del genere si sarebbe dovuti ricorrere alla valutazione del nuovo individuo; cosa non solo delocalizzata ma addirittura improponibile nel caso di problemi multiobiettivo con gestioni similari all’NSGA-II, descritto nel capitolo 2.1.3 . Dopo attente analisi si è ritenuto meglio svincolare un così rigido comportamento e ricondursi ad una gestione delle popolazioni più classica,
  • 70. 69 in cui ogni nuovo elemento ammissibile viene aggiunto momentaneamente nella popolazione. Essa verrà poi regolarmente valutata e riordinata secondo i criteri adottati, nella fase dedicata a tale procedura, per poi venir ridimensionata alla sua dimensione fissata dal parametro apposito in input all’algoritmo. Questo approccio incrementa già da un punto di vista intuitivo la capacità di evoluzione della popolazione del reference point space. Per quantificare però anche materialmente il miglioramento si propone l’andamento ottenuto dall’applicazione del GENOCOP III al problema di Keane con venti variabili denominato “t02”, i cui dettagli saranno disponibili nel capitolo 6.1. Si può vedere dal grafico seguente che la rapidità di convergenza al valore ottimo prossimo a 0.8 cambia radicalmente dall’utilizzo originario del GENOCOP III (in grigio) e l’impiego della valutazione e dello sfoltimento a posteriori (in rosso).
  • 71. 70 Tale miglioramento verrà poi messo in luce dai risultati conseguiti durante le fasi di test, che verranno analizzati con la dovuta cura nel capitolo 6. Viene presentato a seguire un diagramma di flusso che esplicita in maniera dettagliata il funzionamento del nucleo logico del GENOCOP III così come è stato implementato. Diagramma di funzionamento della logica GIII
  • 72. 71 5.4. Paradigma a oggetti Dettaglio di secondaria importanza per i contenuti algoritmici del codice, ma di notevole peso da un punto di vista operativo, è stata l’evoluzione del programma da un punto di vista del paradigma di programmazione impiegato. Si pone in evidenza che inizialmente la struttura generale era stata ereditata da traduzioni ed evoluzioni di codici C in Java. Le modifiche successive raccontante in dettaglio nei paragrafi precedenti del capitolo 5 erano state applicate per comodità nello stesso stile di programmazione. Al momento di dover però stratificare e generalizzare l’algoritmo anche alle altre categorie di variabili e modificarne i comportamenti per istanze di problemi multi obiettivo, si è preferito effettuare una riscrittura completa del codice. Questo ha permesso di adottare un paradigma ad oggetti che ha valso una semplificazione davvero degna di nota. Tale miglioria è stata possibile grazie alla gestione interna agli oggetti della casistica di funzionamento e del mantenimento allineato delle informazioni richieste agli individui, cosa ben più importante data la struttura. Il secondo punto di forza dell’approccio si è concretizzato in particolare nella creazione dell’oggetto individuo denominato “Design”, che mantiene consistenti le informazioni degli elementi della popolazione. Le possibili ripercussioni, di una semplificazione operativa del genere, diventano forse più chiare se si pensa alla possibilità di lavorare su un insieme ridotto delle variabili decisionali dopo la procedura di eliminazione delle uguaglianze. Questo sottoinsieme deve essere reso disponibile e mantenuto allineato per tutte le procedure che modificano i valori delle variabili; al contempo invece altre operazioni hanno bisogno del cromosoma completo per poter essere applicate, che deve essere ricostruito adeguatamente in base alle modifiche più recenti apportate.