Metodi di Ottimizzazione per la Logistica e la Produzione Parte I

Download Report

Transcript Metodi di Ottimizzazione per la Logistica e la Produzione Parte I

Metodi di Ottimizzazione
per la Logistica
e la Produzione
Parte I
Manuel Iori
Dipartimento di Scienze e Metodi dell’Ingegneria
Università di Modena e Reggio Emilia
MOLP – Parte I
1 / 89
Contenuto della Parte I del Corso
1. Programma
2. Introduzione e Richiami di Ricerca Operativa
3. Cenni sulla Teoria della Complessità
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi Euristici e di Ricerca Locale
Applicazione al problema dell’Equicut
Algoritmi a soglia e Simulated Annealing
Algoritmi Genetici
Tabu Search
Ant Colony Optimization
MOLP – Parte I
2 / 89
1. Programma
Struttura del Corso
Durata
81 ore totali (9 crediti), divise approssimativamente in:
40/41 ore di lezioni ed eventuali seminari
40/41 ore di laboratorio informatico e casi di studio
Modalità d’esame
1) Tesina:
Progetto informatico da sviluppare in gruppo utilizzando il software Xpress
Assegnata ad ogni gruppo durante il corso, con una precisa data di consegna
L’elaborato richiede una presentazione da parte degli studenti
È indispensabile ottenere un voto positivo per poter passare al successivo
esame orale
Gli studenti non frequentanti possono chiedere una tesina da svolgere da soli
inviando una richiesta via email
2) Esame orale:
domande su tutto il programma trattato nelle ore di lezione e di laboratorio
MOLP – Parte I
3 / 89
1. Programma
Materiale didattico e informazioni
Materiale didattico
Tutte le slide e gli esercizi svolti sono disponibili su:
Sito web dolly dedicato al corso
www.or.unimore.it/corsi/MOLP/MOLP.htm
Tutte le informazioni sulle tesine e sugli esami orali su:
Sito web dolly dedicato al corso
www.or.unimore.it/corsi/MOLP/MOLP-Esami.htm
Sono a disposizione vari esempi di tesine svolte da studenti negli anni passati
e varie presentazioni di casi di studio risolti con metodi di ottimizzazione
Per dubbi e chiaramenti
Email: [email protected]
Ricevimento il lunedi alle ore 15 (previa richiesta via email), presso il piano
rialzato del Padiglione Morselli
MOLP – Parte I
4 / 89
1. Programma
Propedeuticità e Testi
Propedeuticità (consigliate, ma non obbligatorie)
Ricerca Operativa
Modelli e Metodi per il Supporto alle Decisioni I
Alcuni testi consigliati
-) Per approfondire le proprie basi di Ricerca Operativa:
R. Baldacci, M. Dell’Amico, Fondamenti di Ricerca Operativa, Pitagora
S. Martello, Ricerca Operativa per la Laurea Magistrale, Progetto Leonardo
A. Colorni, M. Bruglieri, Ricerca Operativa, Edizioni Zanichelli
P. Serafini, Ottimizzazione, Zanichelli
D. Bertsimas, J.N. Tsitsiklis, Introduction to Linear Optimization, Athena
Scientific
-) Per approfondire il programma del corso:
F. Glover, G.A. Kochenberger, Handbook of Metaheuristics, Kluwer
G. Ghiani, R. Musmanno, Modelli e metodi per l’organizzazione dei sistemi
logistici, Pitagora
P. Toth, D. Vigo, Vehicle Routing: Problems, Methods, and Applications, SIAM
Y. Pochet, L. Wolsey, Production Planning by Mixed Integer Programming,
Springer
MOLP – Parte I
5 / 89
1. Programma
Programma
Parte I – Metodi e Modelli
1. Introduzione alle tematiche del corso
1
2
3
Problemi affrontati
Tecniche risolutive proposte
Richiami di Ricerca Operativa
2. Introduzione all’uso del software Xpress (Laboratorio)
1
2
3
La programmazione in Xpress
Utilizzo di Xpress per la Programmazione Lineare e Lineare Intera
Soluzione di alcuni esercizi di base
3. Cenni sulla teoria della complessità
1
2
3
La complessità degli algoritmi
La complessità dei problemi di ottimizzazione
P vs N P
MOLP – Parte I
6 / 89
1. Programma
4. Modelli Matematici ed Algoritmi Euristici (Laboratorio)
1
2
3
Presentazione di alcuni problemi di base, sviluppo di modelli matematici e di
semplici algoritmi euristici per la loro soluzione:
– Knapsack Problem
– Bin Packing Problem
– Parallel Processor Scheduling Problem
– Set Covering Problem
– Traveling Salesman Problem, . . .
Implementazione dei modelli e degli algoritmi in Xpress
Studio della complessità degli algoritmi proposti
5. Algoritmi metaeuristici
1
2
3
4
5
6
7
8
9
Classificazione
Algoritmi costruttivi e di ricerca locale
Algoritmo Multi Start
Applicazione al problema dell’Equicut
Algoritmi a soglia
Simulated Annealing
Algoritmi Genetici
Tabu Search
Ant Colony Optimization
MOLP – Parte I
7 / 89
1. Programma
Parte II – Logistica e Distribuzione
6. I problemi di trasporto e distribuzione
1
2
3
Breve introduzione
Vincoli e complicazioni
Vehicle Routing Problem (VRP) ed estensioni
7. Algoritmi esatti per il VRP
1
2
3
4
5
6
Formulazione 2-indici
Formulazione di tipo Set Partitioning
Formulazione 2-commodity
Metodi esatti di tipo branch-and-cut
Casi di studio
Laboratorio
MOLP – Parte I
8 / 89
1. Programma
8. Algoritmi euristici per il VRP
1
2
3
4
5
6
7
Euristici costruttivi
Metodi sequenziali e paralleli
Ricerca locale
Esempi di algoritmi efficaci sviluppati in letteratura
Tabu Search per il VRP
Casi di studio
Laboratorio
9. Localizzazione di Servizi
1
2
3
4
5
Problemi di localizzazione di facilities
Algoritmi euristici
Modelli matematici
Casi di studio
Laboratorio
MOLP – Parte I
9 / 89
1. Programma
Parte III – Produzione e la Schedulazione
10. La pianificazione della produzione
1
2
3
4
5
6
Breve introduzione
Dimensionamento e bilanciamento delle linee di produzione
Modelli di produzione aggregati
Il problema della disaggregazione
Casi di studio
Laboratorio
11. Schedulazione
1
2
3
4
5
6
7
8
Gli elementi della schedulazione
Problemi a macchina singola e a macchine parallele
Shop problems
La classificazione dei problemi di schedulazione
Dispatching rules
Esempi di algoritmi esatti polinomiali
Casi di studio
Laboratorio
MOLP – Parte I
10 / 89
2. Introduzione e Richiami di Ricerca Operativa
Breve Introduzione
Molti problemi reali possono essere formulati come problemi di ottimizzazione
nel modo seguente:
Minimize
f (x)
subject to
x∈X
dove f è definita funzione obiettivo e X ⊆ ℜn è l’insieme delle soluzioni
ammissibili dettate dai vincoli del problema.
Se esiste una soluzione x∗ ∈ X tale che:
f (x∗ ) ≤ f (x),
∀x ∈ X
allora x∗ è detta soluzione ottima (o minimo globale).
Analogamente nei problemi di massimo x∗ è soluzione ottima (o massimo
globale) se f (x∗ ) ≥ f (x), ∀x ∈ X .
MOLP – Parte I
11 / 89
2. Introduzione e Richiami di Ricerca Operativa
Per f (x) ed X qualsiasi si è nel caso della Programmazione Matematica, per
cui non esiste un algoritmo esatto omnicomprensivo.
Esistono fortunatamente alcuni casi particolari di Programmazione
Matematica in cui è possibile determinare la soluzione ottima. In questo
corso tratteremo i seguenti casi:
Programmazione Lineare;
Programmazione Lineare Intera.
Se f (x) e i vincoli definenti X sono lineari e x ∈ ℜn siamo nell’ambito della
Programmazione Lineare:
Minimize
c ′x
subject to
Ax = b
Senza perdita di generalità ci si può ricondurre a variabili non negative:
Minimize
subject to
c ′x
Ax = b
x≥0
MOLP – Parte I
12 / 89
2. Introduzione e Richiami di Ricerca Operativa
Esitono algoritmi ottimi per la risoluzione di problemi di Programmazione
Lineare, ad esempio:
Metodo grafico (2, massimo 3 dimensioni);
Algoritmo del simplesso.
Se inoltre x può assumere solo valori interi, allora rientriamo nell’ambito della
Programmazione Lineare Intera:
c ′x
Minimize
subject to
Ax = b
x ≥ 0, intero
La programmazione lineare intera è definita NP-difficile
Non si conoscono algoritmi esatti polinomiali;
I tempi di esecuzione possono essere molto elevati.
MOLP – Parte I
13 / 89
2. Introduzione e Richiami di Ricerca Operativa
Un grandissimo numero di problemi industriali e gestionali (decisionali) può
essere formulato come Programmazione Lineare Intera.
Esempio: Vehicle Routing Problem (VRP):
Dato un deposito di partenza, una flotta di veicoli, una rete stradale e un
insieme di clienti richiedenti una data quantità di merce, determinare gli
instradamenti dei veicoli che soddisfino le richieste con la minima spesa.
Algoritmo più performante per il VRP:
Soluzione ottima fino a 200 clienti;
Tempi di risoluzione di alcune ore su un PC standard.
In generale, l’obiettivo è quello di determinare una soluzione ottima con
metodi esatti.
Ad esempio si costruisce il modello matematico del problema e lo si risolve
tramite un software dedicato.
Spesso le istanze di interesse pratico hanno dimensioni tali da rendere
proibitivo l’utilizzo di algoritmi esatti.
MOLP – Parte I
14 / 89
2. Introduzione e Richiami di Ricerca Operativa
In tali casi ci si accontenta di una buona soluzione fra le soluzioni ammissibili.
Si utilizzano gli algoritmi euristici, che permettono di trovare in tempi brevi
soluzioni ammissibili di buona qualità.
Gli algoritmi euristici possono essere classificati come segue:
Algoritmi euristici costruttivi: usano regole di “buon senso” per produrre
velocemente una soluzione al problema;
Algoritmi di ricerca locale: partono da una soluzione ottenuta tipicamente con
un algoritmo costruttivo, e cercano di migliorarla il più possibile effettuando
piccoli cambiamenti;
Algoritmi metaeuristici: estendono nei modi più svariati i concetti usati nei
costruttivi e nelle ricerche locali, proseguendo la ricerca di una buona soluzione
anche per tempi elevati.
Sono efficaci non solo per problemi di Programmazione Lineare Intera, ma
anche per altri problemi di Programmazione Matematica e Ottimizzazione
Combinatoria generica.
MOLP – Parte I
15 / 89
2. Introduzione e Richiami di Ricerca Operativa
Si posso sviluppare approcci basati direttamente sulla struttura del problema
affrontato, oppure usare framework generali per la risoluzione di classi di
problemi simili
Per l’utilizzo degli euristici è necessario trovare un giusto compromesso tra la
qualità della soluzione e il tempo di calcolo richiesto:
Nei problemi di ottimizzazione che affronteremo nel corso, l’andamento tipico
è asintotico;
Gli algoritmi ottengono miglioramenti importanti nella qualità della soluzione
nei primi istanti di esecuzione, ma poi si attestano su miglioramenti sempre più
radi.
Nei problemi di minimo, il valore della soluzione fornita da un euristico (zeur )
non è mai più basso del valore della soluzione ottima del problema (zopt ). Si
dice quindi che l’algoritmo euristico fornisce un upper bound al problema
(zopt ≤ zeur ).
MOLP – Parte I
16 / 89
2. Introduzione e Richiami di Ricerca Operativa
Per valutare la soluzione euristica ottenuta si usa abitualmente una stima
(lower bound, zlb , per problemi di minimo):
Limite inferiore al valore raggiungibile dalla soluzione ottima;
Esempi: rilassamento continuo, rilassamento lagrangiano, . . .
Se il valore della soluzione euristica è uguale al lower bound, allora è anche
ottimo. Altrimenti ci da una stima dell’approssimazione ottenuta. Si parla in
tal caso di gap assoluto (zeur − zlb ) o gap percentuale ((zeur − zlb )/zeur )
Esempio, metaeuristici per VRP:
In pochi minuti di esecuzione su un PC si ottengono soluzioni di valore molto
buono;
Gap percentuale raramente al di sopra del 5% dal lower bound, e praticamente
sempre entro un 1% dal valore ottimo, se conosciuto.
E’ da notare che per i problemi di massimo (ad esempio: massimizzazione dei
profitti) vale il ragionamento contrario a quello visto per i problemi di minimo.
Ovvero l’euristico fornisce una stima per difetto (quindi un lower bound)
mentre il rilassamento una stima per eccesso (quindi un upper bound).
MOLP – Parte I
17 / 89
2. Introduzione e Richiami di Ricerca Operativa
Obiettivi del corso
I principali obiettivi del corso sono:
Fornire una buona conoscenza delle tecniche di ottimizzazione basate sulla
programmazione matematica e sugli algoritmi euristici e metaeuristici;
Studiare l’applicazione di tali tecniche a problemi di natura gestionale, con
particolare riferimento alla logistica dei trasporti, alla localizzazione di
depositi, alla produzione di beni o servizi e alla schedulazione di lavorazioni o
di personale;
Analizzarne in dettaglio i contributi ottenuti per alcuni casi di studio rilevanti;
Essere in grado di migliorare la performance aziendale su problemi decisionali
rilevanti.
MOLP – Parte I
18 / 89
3. Cenni sulla Teoria della Complessità
Cenni sulla Teoria della Complessità
x1=0
x2=0
x1=1
x2=0
xn=0
x2=1
xn=1
MOLP – Parte I
19 / 89
3. Cenni sulla Teoria della Complessità
Definizioni
Definiamo:
P = un problema di ottimizzazione.
Dato un insieme di soluzioni possibili, determinare quella di costo minimo (o
di profitto massimo).
Esempi: Knapsack Problem (KP01), Bin Packing Problem (BPP), cammino
minimo (Shortest Path Problem, SPP), minimo albero ricoprente (Minimum
Spanning Tree, MST), Traveling Salesman Problem (TSP), Vehicle Routing
Problem (VRP), . . . .
A = un particolare algoritmo per la risoluzione ottimale di P.
Ovvero una particolare sequenza di operazioni che ci permetta di determinare
la soluzione ottima del problema P.
I = un’istanza di P.
Ovvero un caso numerico associato al problema P.
MOLP – Parte I
20 / 89
3. Cenni sulla Teoria della Complessità
Alcuni problemi di ottimizzazione
Alcuni problemi trattati durante il corso:
Knapsack Problem (KP01): dati n oggetti j, con profitto pj e peso wj
(j = 1, . . . , n) e un contenitore (knapsack, zaino) di capacità c, determinare un
sottoinsieme di oggetti il cui peso non ecceda c e il cui profitto sia massimo.
Bin Packing Problem (BPP): Dati n oggetti j con peso wj (j = 1, . . . , n) e un
numero abbastanza grande m di contenitori (bin) aventi ognuno capacità c,
impaccare gli oggetti nel minor numero di contenitori, in modo che la somma
dei pesi degli oggetti assegnati ad ogni contenitore non ecceda la capacità.
Shortest Path Problem (cammino minimo, SPP): dato un grafo G = (V , A)
con costo cij su ogni arco (i, j) ∈ A, trovare un cammino di costo minimo che
colleghi un vertice sorgente s a un vertice destinazione t.
Minimum Spanning Tree (minimo albero ricoprente, MST): dato un grafo
G = (V , E ) con costi cij su ogni lato (i, j) ∈ E , trovare un sottografo che
colleghi tutti i vertici tra loro (albero completo) e abbia costo minimo.
Traveling Salesman Problem (TSP): dato un grafo G = (V , A), con costo cij
su ogni arco (i, j) ∈ A, trovare un circuito hamiltoniano (circuito che visita
tutti i vertici una e una sola volta) di costo minimo.
MOLP – Parte I
21 / 89
3. Cenni sulla Teoria della Complessità
Obiettivi
L’obiettivo della teoria della complessità è duplice:
1
Determinare l’efficienza di uno specifico algoritmo A per la risoluzione
ottimale del problema P. In tal modo, qualora si abbiano a disposizione più
algoritmi esatti per P, si potrà scegliere quello più efficiente.
2
Determinare la complessità di un problema P come la complessità
dell’algoritmo A più efficiente per P. In questo modo si può valutare la
difficoltà intrinseca di un problema. Per problemi “facili” andremo sempre
alla ricerca della soluzione ottima, mentre per problemi “difficili” ci
accontentermo, eventualmente, di soluzioni approssimate.
MOLP – Parte I
22 / 89
3. Cenni sulla Teoria della Complessità
Complessità di un algoritmo
La compessità di un algoritmo A può essere vista come la misura del tempo
necessario per la sua esecuzione su una data istanza del problema P.
Con questo criterio la complessità risulterebbe strettamente dipendente dalla
macchina risolutrice utilizzata. Più veloce è il computer utilizzato, più veloce
risulta la ricerca dell’ottimo.
Vogliamo esprimere la complessità come misura indipendente dal processore
utilizzato.
Definiamo una operazione elementare come:
⊲ un assegnamento;
⊲ un confronto;
⊲ un’operazione aritmetica.
Definiamo infine la compessità di un algoritmo A come il numero di
operazioni elementari necessarie per portare a termine A su una determinata
istanza I.
MOLP – Parte I
23 / 89
3. Cenni sulla Teoria della Complessità
Stima della complessità
E’ importante notare come il numero di operazioni sia dipendente da quella
che è la grandezza dell’istanza I presa in considerazione.
In linea generale, più l’istanza è grande, più sarà elevato il numero di
operazioni richieste per A.
La dimensione dell’istanza I, ovvero dell’input del nostro algoritmo A,
corrisponde al numero di bit necessari a codificare l’input stesso.
Di solito si considera il numero di valori numerici (in seguito rappresentato da
n) che appaiono in I, il quale è proporzionale al numero di bit.
Notiamo inoltre come sia difficile determinare in modo esatto il numero di
operazioni elementari richieste da un algoritmo.
Inoltre non è necessario arrivare ad un tale livello di precisione. Ciò che conta
è avere una stima del numero di operazioni.
Al fine di ottenere una tale stima, introduciamo alcune funzioni di interesse.
MOLP – Parte I
24 / 89
3. Cenni sulla Teoria della Complessità
Ordine di . . .
Date due funzioni f , g : N → N, si ha:
f (n) = O(g (n))
se esiste una costante k ∈ N, k > 0, tale che f (n) ≤ kg (n) per ogni n ∈ N.
In altre parole g (n) è un limite superiore, o un upper bound, di f (n) a meno
di una costante moltiplicativa.
Esempio:
f (n) = 5n3 + 3n2 + 2n + 6
avremo che g (n) = n3 e f (n) = O(g (n)) = O(n3 ), in quanto per k ≥ 16 ho
f (n) ≤ kg (n).
Esempio:
f (n) = 2n + n2
avremo che g (n) = 2 e f (n) = O(g (n)) = O(2n ), in quanto per k ≥ 3 ho
f (n) ≤ kg (n).
n
Il nostro obiettivo è quello di stimare la complessità di un algoritmo con una
data funzione O(g (n)), dove tipicamente n rappresenta la grandezza di I.
MOLP – Parte I
25 / 89
3. Cenni sulla Teoria della Complessità
Dimensione di un’istanza
Forniamo alcuni esempi di problemi e corrispondenti dimensioni di istanze I.
In un’istanza I di un BPP con n oggetti, l’input consiste di n valori per i pesi
degli oggetti piú un valore per la capacità del bin, per un totale di n + 1 valori.
Stimiamo la dimensione dell’istanza I con il valore n.
La stima è ragionevole, in quanto andiamo ad esprimere la complessità con
un O(·), dove le costanti saranno tutte trascurate.
In un’istanza I di un KP01 con n oggetti, abbiamo come input 2n valori (n
profitti e n pesi) più un valore per la capacità del contenitore.
Con ragionamento analogo al precedente, stimamo la dimensione di I con n.
Dato un grafo G = (V , E ) di n vertici, la dimensione dell’istanza è definita
ancora da n. (Il numero di archi è al massimo n2 , si trovano studi di
complessità che usano un numero esplicito di archi m).
Tale grafo G può essere un input di problemi di ottimizzazione di varia
natura, tra i quali SPP, MST, TSP, . . .
MOLP – Parte I
26 / 89
3. Cenni sulla Teoria della Complessità
Esempio: ricerca di un numero
Dati n interi {a1 , . . . , an } e un intero b, determinare se ∃i : ai = b.
La dimensione dell’istanza è n + 1 approssimabile a n.
Un algoritmo immediato è quello che confronta via via tutti i numeri, dal
primo all’ultimo, fermandosi non appena trova un valore uguale a b (se lo
trova):
for (i := 1 to n) do
if (ai = b) then return(i )
end do
return(∅)
Il numero di operazioni è proporzionale al numero di iterazioni i compiute dal
ciclo for (che nel caso peggiore è eseguito n volte).
Tale algoritmo di ricerca ha quindi complessità O(n).
Tale complessità viene definita lineare nella dimensione dell’input.
MOLP – Parte I
27 / 89
3. Cenni sulla Teoria della Complessità
Esempio: ordinamento di un vettore
Si consideri l’ordinamento un vettore a = (ai ) di n numeri in senso decrescente.
L’algoritmo più semplice (e non più efficiente) per tale problema determina il
massimo elemento del vettore e lo inserisce in prima posizione. Determina poi
il secondo massimo elemento e lo inserisce in seconda posizione, e cosı̀ via:
for (i := 1 to n) usedi := 0
for (j := 1 to n) do
max := −∞
for (i := 1 to n) do
if (usedi = 0 and ai > max) then
max := ai ; imax := i
end if
end do
bj := aimax ; usedimax := 1
end do
return(b)
L’algoritmo ha complessità O(n2 ), ovvero complessità quadratica.
Esistono algoritmi più efficienti, che possono risolvere il problema
dell’ordinamento in O(n log n) e che sono quindi preferibili.
MOLP – Parte I
28 / 89
3. Cenni sulla Teoria della Complessità
Algoritmi con complessità esponenziale
Gli esempi presentati fino ad ora hanno tutti complessità polinomiale nella
dimensione dell’istanza. Tali algoritmi sono quindi portati a termine molto
velocemente in tempi computazionali molto brevi.
Ne risulta che i problemi affrontati sono problemi di facile risoluzione.
Altri algoritmi hanno invece complessità esponenziale nella dimensione di I.
Portare a termine un algoritmo di questo tipo può richiedere uno sforzo
computazionale elevatissimo.
MOLP – Parte I
29 / 89
3. Cenni sulla Teoria della Complessità
Esempio: Enumerazione per il KP01
Schema di enumerazione completa (o albero di enumerazione completa) per il
Knapsack Problem (KP01):
A ogni livello j, per j da 1 a n, si sceglie se inserire o meno l’oggetto j nel
knapsack
x1=0
x2=0
x1=1
x2=0
xn=0
x2=1
xn=1
MOLP – Parte I
30 / 89
3. Cenni sulla Teoria della Complessità
Il numero di foglie (nodi all’ultimo livello n) è pari a 2n , mentre il numero di
nodi complessivi è 2n+1 .
Nel caso peggiore l’algoritmo è costretto ad esplorare tutti i nodi.
Supponendo di avere ad ogni nodo un numero fisso k di operazioni da
svolgere (indipendente da n), la complessità risulta essere O(2n ).
L’algoritmo di enumerazione completa per il knapsack è un algoritmo con
complessità esponenziale. (Inseriremo successivamente il knapsack tra i
problemi cosiddetti “N P-difficili”.)
Nota: l’algoritmo di enumerazione completa è noto con il nome di
branch-and-bound qualora si inserisca il calcolo di un valido bound (lower
bound per problemi di minimo, upper bound per massimo) a ogni nodo.
Analogamente, l’algoritmo branch-and-bound “standard” per i problemi di
programmazione lineare intera ha complessità esponenziale.
MOLP – Parte I
31 / 89
3. Cenni sulla Teoria della Complessità
Esempio: Enumerazione per il TSP
Schema di enumerazione per il Traveling Salesman Problem (TSP):
Si parte dal vertice 1 e al primo livello ci si muove verso un vertice i.
Ai livelli successivi si sceglie via via verso quali altri vertici muoversi, tenendo
in considerazione il fatto che alcuni vertici sono già stati visitati.
x11=0
x1n=1
x1i=1
(n-1)
xin=1
xi1=0
xij=1
(n-1)(n-2)
(n-1)(n-2)(n-3)
(....)
(n-1)!
MOLP – Parte I
32 / 89
3. Cenni sulla Teoria della Complessità
Al primo livello si hanno n − 1 possibili scelte (i nodi 2, . . . , n).
Al livello 2 si hanno n − 2 nodi (in quanto devo eliminare il vertice già scelto)
per ognuno degli n − 1 nodi del livello precedente.
Cosı̀ via fino all’ultimo livello, nel quale devo semplicemente raggiungere
l’ultimo vertice non ancora scelto.
Il numero di foglie è quindi (n − 1)(n − 2)(. . . )(2)(1) = (n − 1)!, con una
complessità che risulta essere O((n − 1)!). (Si possono trovare riferimenti in
letteratura a una complessità di O(n!), valida quando la numerazione dei
vertici parte da 0.)
MOLP – Parte I
33 / 89
3. Cenni sulla Teoria della Complessità
Evoluzione dei tempi di calcolo
Supponiamo che per eseguire un’operazione elementare su un dato computer sia
necessario un tempo di 1E-9 secondi (un miliardesimo di secondo). Le evoluzioni
dei tempi di calcolo in secondi sono rappresentate in tabella.
n
1
10
20
30
40
50
100
O(n)
(∃ai = b)
1,00E-09
1,00E-08
2,00E-08
3,00E-08
4,00E-08
5,00E-08
1,00E-07
O(n2 )
O(n3 )
1,00E-09
1,00E-07
4,00E-07
9,00E-07
1,60E-06
2,50E-06
1,00E-05
1,00E-09
1,00E-06
8,00E-06
2,70E-05
6,40E-05
1,25E-04
1,00E-03
MOLP – Parte I
O(2n )
(KP01)
1,00E-09
1,02E-06
1,05E-03
1,07E+00
1,10E+03
1,13E+06
1,27E+21
O(n!)
(TSP)
1,00E-09
3,63E-03
2,43E+09
2,65E+23
8,16E+38
3,04E+55
9,33E+148
34 / 89
3. Cenni sulla Teoria della Complessità
I tempi in tabella non sono accettabili in pratica. (L’età dell’universo è
approssimabile in 1,6E+17 secondi.)
La difficoltà rimane elevata anche con l’aumento della velocità dei computer.
Supponendo di avere un computer 1000 volte più veloce, a parità di tempo di
calcolo:
per O(n) si risolve un’istanza 1000 volte più grande;
per O(2n ) si risolve un’istanza solo 10 volte più grande.
Sarebbe quindi di fondamentale importanza produrre algoritmi polinomiali
per problemi di ottimizzazione.
Purtroppo questo non sembra essere sempre possibile, come descritto dalla
successiva analisi della complessità dei problemi.
MOLP – Parte I
35 / 89
3. Cenni sulla Teoria della Complessità
Complessità dei problemi
La complessità di un problema P è uguale alla complessità dell’algoritmo A
più efficiente per la risoluzione ottimale di P (qui gli euristici non contano).
I problemi che affrontiamo in questo corso si classificano in due categorie in
base alla loro complessità:
Problemi cosiddetti “facili”:
− problemi Polinomiali;
− Esiste un algoritmo polinomiale per la loro risoluzione;
− Vengono raggruppati all’interno della classe P.
Problemi cosiddetti “difficili”:
− problemi Non-Deterministici Polinomiali Completi;
− Non è noto un algoritmo polinomiale per la loro risoluzione;
− Sono quindi risolti tramite algoritmi esponenziali (o pseudopolinomiali).
− Sono raggruppati all’interno della classe dei problemi N P-completi (o
N P-difficili, o N P-hard).
MOLP – Parte I
36 / 89
3. Cenni sulla Teoria della Complessità
Non è difficile inventarsi degli algoritmi esponenziali per problemi polinomiali
(ad esempio per l’ordinamento: genera tutte le n! permutazioni del vettore a
e verifica quale è ordinata in senso decrescente).
Questo non deve far concludere che il problema P non sia polinomiale, in
quanto devo considerare l’algoritmo A più efficiente per P.
Esistono anche problemi non ancora catalogati, classificati come problemi
aperti, le cui complessità sono attualmente in studio (ad esempio, il pallet
packing).
Le definizioni date sopra delle classi P e N P-completi non sono
naturalmente definizioni formali (per le quali avremmo bisogno di ulteriori
notazioni) ma solo intuitive.
MOLP – Parte I
37 / 89
3. Cenni sulla Teoria della Complessità
P vs N P
La non esistenza di un algoritmo polinomiale per i problemi N P-completi è in
verità un problema aperto.
Fino ad ora non è mai stato trovato un algoritmo polinomiale nonostante
innumerevoli tentativi, per cui oggi si sospetta fortemente che un tale
algoritmo non esista.
La ricerca si è ridiretta (sempre senza ottenere risultati) nel tentativo di
dimostrare che tale algoritmo non possa esistere.
“Si sospetta fortemente che non esista”, o anche “P vs N P”, è uno dei
problemi fondamentali della matematica attuale ad è irrisolto da più di 40
anni.
MOLP – Parte I
38 / 89
3. Cenni sulla Teoria della Complessità
“P vs N P” è indicato tra i “Millennium Problems”:
⊲ http://www.claymath.org/millennium/
⊲ In tutto i millennium problems sono sei (originalmente erano sette, ma uno è
stato risolto recentemente dal russo Perelman);
⊲ Premio per la risoluzione di ognuno di questi: 1.000.000 $.
Per una trattazione completa della complessità: Computers and Intractability:
A Guide to the Theory of NP-Completeness, M. R. Garey e D. S. Johnson,
Series of Books in the Mathematical Sciences.
Notiamo infine che se si trovasse un algoritmo polinomiale anche per uno solo
dei problemi N P-completi, allora lo si sarebbe trovato per tutti i problemi
N P-completi.
MOLP – Parte I
39 / 89
3. Cenni sulla Teoria della Complessità
Trasformabilità
Ogni problema N P-completo è trasformabile polinomialmente in qualsiasi
altro problema N P-completo.
Trasformabilità: un problema P1 è trasformabile polinomialmente in un
problema P2 , se esiste un algoritmo polinomiale che trasforma un’istanza di
P1 in un’istanza di P2 che ha “stessa” soluzione.
Esempio:
Circuito Hamiltoniano (HC): dato un grafo G = (V , E ), connesso e non pesato
(e non completo) determinare se esiste un circuito che parte da un vertice,
visita tutti gli altri vertici una e una sola volta, e torna al vertice di partenza.
Trasformazione di HC in TSP: creo un nuovo grafo G ′ = (V , E ′ ), completo e
pesato, dove ce = 0 se e ∈ E , 1 altrimenti.
Se la soluzione ottima del TSP su G ′ ha valore 0, allora ho trovato una
soluzione per HC (esiste un circuito hamiltoniano). Se la soluzione è maggiore
di 0, allora non esiste nessun circuito hamiltoniano.
MOLP – Parte I
40 / 89
3. Cenni sulla Teoria della Complessità
Se si trovasse un algoritmo polinomiale per uno solo dei problemi
N P-completi, chiamiamolo P0 , si sarebbe trovato un algoritmo in grado di
risolverli tutti in tempo polinomiale.
Infatti, dato un problema P, basterebbe trasformarlo in tempo polinomiale in
P0 , risolvere P0 , e poi ristrasformare in tempo polinomiale il risultato di P0 in
P.
MOLP – Parte I
41 / 89
3. Cenni sulla Teoria della Complessità
Elenco di alcuni problemi P e N P-difficili
classe P
Shortest Path Problem
classe N P-hard
Knapsack Problem
Minimum Spanning Tree
Bin Packing Problem
Assegnamento lineare
Traveling Salesman Problem
Flusso massimo
Vehicle Routing Problem
Flusso di costo minimo
Facility Location Problem
Cammino più lungo su
su un grafo aciclico (CPM)
Parallel Processor
Scheduling Problem
...
...
MOLP – Parte I
42 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi Euristici e di Ricerca Locale
Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Start
Start
Tabu search
MOLP – Parte I
43 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi Euristici e di Ricerca Locale
Classificazione (Parziale) degli Algoritmi Metaeuristici
Esistono numerose tipologie di tecniche metaeuristiche, fra le quali:
Simulated Annealing (Kirkpatrik, Gelatt e Vecchi 1983)
Tabu Search (Glover, 1986)
Algoritmi Genetici (Rechenberg 1973, Holland 1975)
Variable Neighborhood Search (Mladenović, Labbé e Hansen 1990s)
Ant Colony Optimization − ACO (Colorni, Dorigo e Maniezzo 1992)
Scatter Search (Glover 1965)
Path Relinking (Glover 1965)
Greedy Randomized Adaptive Search Procedure − GRASP (Feo e Resende
1989)
Guided Local Search − GLS (Voudouris and Tsang 1990s)
Artificial Neural Networks (Hopfield e Tank 1985, Mc Culloch and Pitts 1922)
Memetic Algorithms (Moscato 1989)
...
Molte metaeuristiche si basano su ripetute chiamate a euristici costruttivi e
metodi di ricerca locale.
MOLP – Parte I
44 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi Euristici e di Ricerca Locale
Euristici Costruttivi
Usano regole di “buon senso” per produrre velocemente una soluzione al
problema. Qual’ora la regola sia quella di prendere la decisione immediata più
conveniente, a scapito delle decisioni che dovranno essere presi nei passi
successivi, il costruttivo viene detto greedy (goloso).
Consideriamo a titolo di esempio il Travelling Salesman Problem (TSP, dato
un grafo con costi sugli archi, trovare il circuito Hamiltoniano di costo
minimo). Il greedy più classico consiste nel partire dal nodo di partenza e
dirigersi verso il vertice più vicino, reiterando fino a quando tutti i vertici
siano stati selezionati (tale algoritmo è detto closest neighbor ed è riportato
in dettaglio nelle slide per il laboratorio).
Algoritmi di questo tipo sono molto veloci e hanno tempi tipicamente
polinomiali. Purtroppo la loro performance, intesa come gap dall’ottimo,
varia molto a seconda dell’istanza presa in considerazione.
MOLP – Parte I
45 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi Euristici e di Ricerca Locale
Ricerca locale
Algoritmi che cercano di migliorare la soluzione prodotta dall’euristico
provando piccoli cambiamenti che portino a miglioramenti “locali”, e
reiterando fino a quando un miglioramento sia possibile.
Si basano sul concetto di Neighborhood (detto anche Vicinato o Intorno):
Per ogni soluzione x ∈ X , si definisce il neighborhood N(x) ⊆ X come
l’insieme di soluzioni vicine ad x.
Esempio per il TSP: scambiare due vertici nella sequenza prodotta dal greedy
(algoritmo Swap, descritto brevemente di seguito in queste slide).
MOLP – Parte I
46 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi Euristici e di Ricerca Locale
Algoritmo di Ricerca Locale
Versione per max f (x)
Step 1. Genera una soluzione iniziale e
x ∈ X;
Step 2. Trova x′ ∈ N(e
x) tale che f (x′ ) > f (x̃), se esiste,
altrimenti poni x′ = ∅;
(alternativa: trova x′ = arg max{f (x) : x ∈ N(e
x)});
Step 3. If x′ 6= ∅ then e
x = x′ , goto Step 2;
Step 4. Restituisci e
x.
MOLP – Parte I
47 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi Euristici e di Ricerca Locale
Algoritmo Multi Start
Un algoritmo di ricerca può essere migliorato facilmente applicandolo e
diverse soluzioni iniziali.
Le soluzioni iniziali possono essere create in modo casuale o in modo guidato.
Per problemi N P-difficili non si è mai sicuri di coprire tutte le soluzioni.
In figura nessuna soluzione cade nel bacino di attrazione del “picco più alto”.
Per alcuni problemi il “picco più alto” è molto stretto oppure esistono
moltissimi picchi (in numero esponenziale).
MOLP – Parte I
48 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi Euristici e di Ricerca Locale
Esempi di neighborhood per il TSP
Swap: Data una soluzione euristica del TSP, si scelgono due vertici non
contigui nella soluzione, e li si scambiano tra loro (si veda pseudocodice nelle
slide per il laboratorio).
0
P1
P2
…
Pj-1
Pj
Pj+1
…
Pi-1
Pi
Pi+1
…
0
0
P1
P2
…
Pj-1
Pi
Pj+1
…
Pi-1
Pj
Pi+1
…
0
MOLP – Parte I
49 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi Euristici e di Ricerca Locale
Esempi di neighborhood per il TSP
2-opt: Data una soluzione euristica del TSP, si scelgono due lati/archi (in
tutti i modi possibili), li si eliminano e si richiude il circuito (nell’unico modo
possibile).
j
j
i
i
l
k
l
MOLP – Parte I
k
50 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi Euristici e di Ricerca Locale
Esempi di neighborhood per il TSP
3-opt: Data una soluzione euristica del TSP, Si scelgono tre lati/archi (in
tutti i modi possibili), li si eliminano e poi si richiude il circuito (provando i
vari modi possibili).
m
j
m
j
n
i
n
i
1
1
l
k
l
MOLP – Parte I
k
51 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi Euristici e di Ricerca Locale
Esempi di neighborhood per il TSP
Or-opt: Data una soluzione euristica del TSP, si sceglie una sequenza di al
massimo tre vertici, si prova ad inserirla in tutte le altre posizioni nella route,
e poi si richiude il circuito (nell’unico modo possibile).
i
a
m
j
i
j
n
p
a
m
n
p
b
b
MOLP – Parte I
52 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi Euristici e di Ricerca Locale
Esempi di neighborhood per il 1|rj |C max
1|rj |C max è il seguente problema di scheduling: dato un insieme di Job J di
durata pj e tempo di rilascio rj , ed un processore singolo, assegnare i job al
processore in modo da minimizzare il makespan (istante di completamento
dell’ultima lavorazione).
Inserzione (Insert move): seleziona un task alla volta e prova a spostarlo in
tutte le altre posizioni nella lista di job schedulati.
J1
r1
J2
r3
J1
r1
r2
J3
r3
J3
r2
r4
J2
J4
r5
J4
r4
MOLP – Parte I
J5
J5
r5
53 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi Euristici e di Ricerca Locale
Esempi di neighborhood per il 1|rj |C max
Scambio (Swap move): seleziona una copia di job alla volta, e prova a
scambiare l’ordine della loro schedulazione.
J1
r1
J2
r3
r2
J3
r1
r3
J3
r2
r4
J4
r5
J2
J1
r4
MOLP – Parte I
J5
J4
J5
r5
54 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi Euristici e di Ricerca Locale
Dimensione dei neighborhood
Swap: per ogni vertice (≃ n) considero tutti i vertici non contigui successivi
(≃ n): n × n = O(n2 ) mosse.
2-Opt: per ogni lato (≃ n) devo tentare tutti i lati successivi (≃ n):
n × n = O(n2 ) mosse.
3-Opt: per ogni lato (≃ n) devo tentare tutti i lati successivi (≃ n), e per
ciascuno di questi ancora una volta tutti i lati successivi (≃ n):
n × n × n = O(n3 ) mosse.
Per un grafo di 100 nodi (piccolo) ogni esplorazione dell’intorno 3-Opt
richiede ≃ 1.000.000 di tentativi.
Occorre implementare in maniera efficace l’esame dell’intorno.
Più il neighborhood è grande più è approfondita la ricerca e più aumenta il
tempo di calcolo.
k-opt: generalizzazione di 2-opt e 3-opt:
Se poniamo k = n l’intorno contiene tutti i possibili Circuiti Hamiltoniani
(n × (n − 1) × (n − 2) × · · · × 2 × 1 = n!);
Equivale ad esplorare tutte le soluzioni.
MOLP – Parte I
55 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi Euristici e di Ricerca Locale
Trade-off tra accuratezza e tempo di calcolo
Nel trade-off tra accuratezza e tempo di calcolo risulta molto importante
scegliere correttamente la dimensione dell’intorno.
Diversificazione:
Esplorare regioni diverse tra loro;
Ad esempio usare intorni piccoli ma spendere tempo nell’approccio multi-start
per provare molti punti di partenza.
Intensificazione:
Esplorare a fondo un unica regione;
Ad esempio utilizzare 3-opt invece di 2-opt.
La scelta tra una e l’altra dipende dalle performance dell’algoritmo per il
particolare problema affrontato: Non esiste una regola di decisione unica, ma
sono necessari test computazionali preliminari per il settaggio dei parametri.
Scelta della mossa:
First improvement: appena trovo uno scambio che migliora la soluzione, se
esiste, lo effettuo (vedere lo step 2 nell’algoritmo di ricerca locale);
Best improvement: considero tutti i possibili scambi ed effettuo quello che
porta al massimo miglioramento, se esiste (vedi alternativa per lo step 2
nell’algoritmo di ricerca locale).
MOLP – Parte I
56 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Applicazione al problema dell’Equicut
Un’applicazione: il problema dell’Equicut
Definizione di Equicut: Dato un grafo G = (V , E ) con |V | pari, pesato sui
lati (a, b) con pesi wab , si trovi la partizione (A, B) dei vertici tale per cui:
|A| = |B|
X
wij sia minima.
la somma w (δ(A)) =
i ∈A,j∈B
Esempio utile perchè
affrontato in letteratura
con svariati algoritmi
costruttivi, di ricerca
locale e metaeuristici.
MOLP – Parte I
57 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Applicazione al problema dell’Equicut
L’Equicut appare come problema di base in numerose applicazioni più
complesse
Very Large Scale Integration (VLSI)
Facility Lay Out Optimization
MOLP – Parte I
58 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Applicazione al problema dell’Equicut
Un modello matematico per l’Equicut
Per ogni vertice i ∈ V definiamo la variabile decisionale:
1 se i ∈ A;
xi =
0 altrimenti
Per ogni coppia di vertici i ∈ V , j ∈ V , j > i definiamo la variabile decisionale:
1 se i e j non sono nello stesso sotto-insieme della partizione;
yij =
0 altrimenti
Il problema dell’Equicut può essere modellato come segue.
X
X
z = min
wij yij
i ∈V
j∈V :j>i
X
s.t.
xi = |V |/2
i ∈V
yij ≥ xi − xj ,
yij ≥ xj − xi ,
∀i ∈ V , j ∈ V : j > i
∀i ∈ V , j ∈ V : j > i
xi ∈ {0, 1},
yij ∈ {0, 1},
MOLP – Parte I
∀i ∈ V
∀i ∈ V , j ∈ V : j > i
(1)
(2)
(3)
(4)
(5)
(6)
59 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Applicazione al problema dell’Equicut
Algoritmi euristici per l’Equicut
Euristico costruttivo per Equicut:
Comment: n := |V |;
Seleziona due “semi” (vertici) e assegnali uno ad A e uno a B;
for (i := 1 to n/2 − 1) do
Seleziona la coppia di vertici a e b non ancora selezionati che, qualora aggiunti
rispettivamente ad A e B, minimizzino l’incremento della funzione obiettivo;
Assegna a ad A e b a B;
end for
MOLP – Parte I
60 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Alcune definizioni:
Somma costi esterni: Ea =
X
X
Applicazione al problema dell’Equicut
w (a, j)
j∈B
somma costi interni: Ia =
w (a, j)
j∈A
variazione se a si sposta da A a B: Da = Ea − Ia
definizioni analoghe per Eb , Ib e Db
Ea
Ia
a
MOLP – Parte I
61 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Applicazione al problema dell’Equicut
Ricerca locale Swap per Equicut
Ricerca locale di scambio (swap):
1
2
Parti da una soluzione euristica;
Per ogni coppia di vertici a ∈ A e b ∈ B valuta:
guadagno(a, b) = Da + Db − 2w (a, b);
3
4
Tra tutte le coppie aventi guadagno positivo (se ve ne sono) scegli quella che
da guadagno massimo;
Reitera fino a quando non esistono più guadagni positivi.
MOLP – Parte I
62 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Applicazione al problema dell’Equicut
Algoritmo Kernighan e Lin per Equicut
Algoritmo Kernighan e Lin (KL):
1
2
3
4
5
6
Individua due vertici, a(1) ∈ A e b(1) ∈ B, tali per cui il guadagno
g (1) = Da(1) + Db(1) − 2w (a(1), b(1)) sia massimo;
Scambia a(1) e b(1) e aggiorna Ei , Ii e Di ∀i;
Fissa a(1) e b(1) impedendo ulteriori spostamenti;
Individua una seconda coppia di vertici a(2) e b(2) che siano diversi dai
precedenti e che massimizzino g (2), scambiabili e fissali (g (2) può anche
essere negativo);
Reitera il punto 4 fino a quando non ci sono più vertici scambiabili tra di loro
(ovvero per n/2 − 1 volte);
k
X
g (i);
Individua il valore k che massimizza G =
i =1
7
Se G > 0, allora scambia i vertici a(1), . . . , a(k) e b(1), . . . , b(k) nel grafo
originale e torna al passo 1. Se invece G ≤ 0 termina la procedura.
Algoritmo KL è più efficace dell’Algoritmo di Swap, ma richiede un maggior
tempo di calcolo
MOLP – Parte I
63 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Applicazione al problema dell’Equicut
Esempio di Applicazione dell’Algoritmo KL
1
1
3
2
1
1
3
4
1
1
2
1
5
2
E ()
I ()
D()
1
6
2
8
1
3
4
-1
1
2
4
4
0
3
0
3
-3
4
1
1
0
5
3
2
1
6
3
1
2
7
0
2
-2
8
0
3
-3
7
g (1) = 0 vertici = 2, 4
g (2) = 3 vertici = 1, 7 (dopo l’aggiornamento di Ei , Ii , Di )
g (3) = −4 vertici = 3, 5 (dopo l’aggiornamento di Ei , Ii , Di )
G = 0 + 3 = 3 ⇒ scambio 2-4 e 1-7
1
4
1
1
1
1
7
5
1
1
2
3
1
2
8
1
3
6
2
2
MOLP – Parte I
64 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi a soglia e Simulated Annealing
Algoritmi a soglia (threshold algorithms)
Consideriamo problemi in forma di minimo.
Algoritmo threshold:
Individua una soluzione euristica x;
k := 0;
xbest := x;
Repeat
Genera una in modo casuale una soluzione x′ ∈ N(x);
if (f (x′ ) − f (x) < tk ) then
x := x′ ;
if (f (x) < f (xbest )) then
xbest := x;
end-if
end if
k := k + 1;
Until(criterio di stop)
MOLP – Parte I
65 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi a soglia e Simulated Annealing
Ponendo il valore tk > 0 si accettano anche soluzioni peggiori di x.
La soglia tk è aggiornata secondo diverse tecniche.
Da notare che nella ricerca locale pura, si ha tk = 0 (solo soluzioni
miglioranti sono accettate).
Regola più comune (threshold accepting ):
t0 > 0,
tk ≥ tk+1 ,
limk→∞ tk = 0
Inizialmente si accettano soluzioni che peggiorano anche di molto la soluzione
attuale. Nel seguito si riduce sempre più la disponibilità a peggiorare.
MOLP – Parte I
66 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi a soglia e Simulated Annealing
Simulated Annealing
Simulated Annealing : tk aggiornata probabilisticamente:
La probabiltà di accettazione più usata è:
(
1 se f (x′ ) ≤ f (x)
′
f (x′ )−f (x)
P(accettazione di x ) =
−
tk
se f (x′ ) > f (x)
e
(7)
P(accettazione x')
1
f(x') - f(x)
tk cala col tempo e quindi cala la probabilità di accettare peggioramenti.
Teorema di convergenza: se tk diminuisce “abbastanza lentamente” al
tendere del tempo di esecuzione all’infinito, la probabiltà di individuare
l’ottimo globale è pari a 1.
MOLP – Parte I
67 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi a soglia e Simulated Annealing
Analogia fisica
Procedimento usato dai fisici per ottenere solidi a bassa energia:
Scaldare il solido fino alla temperatura di fusione;
Abbassare la temperatura lentamente;
Nel liquido le particelle rimangono disposte in modo casuale, nel solido che si
forma si dispongono secondo strutture atomiche rigide a bassa energia.
Questo processo viene simulato con metodi di simulazione Monte Carlo.
Supponiamo che lo stato attuale i abbia energia Ei , e lo stato successivo i ′
abbia energia Ei ′ , allora:
Se Ei ′ ≤ Ei , lo stato i ′ è sempre accettato
Se Ei ′ > Ei , lo stato i ′ è accettato con probabilità:
e
−
E ′ −Ei
i
kT
B
dove: T = temperatura iniziale, kB = costante di Boltzman.
Dato un problema di ottimizzazione combinatoria:
Le soluzioni corrispondono agli stati fisici;
Il valore della funzione obiettivo corrisponde all’energia.
MOLP – Parte I
68 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi a soglia e Simulated Annealing
Implementazioni pratiche
Per garantire la validità del teorema di convergenza spesso occorre un
numero di iterazioni (k) superiore al numero di soluzioni del problema:
Per il TSP occorre:
2n−1
k = O(nn
)
Le soluzioni ammissibili di TSP sono n! quindi occorre meno tempo per
un’enumerazione completa che per approssimare bene la soluzione ottima con
il Simulated Annealing.
In pratica si usano implementazioni che riducono il tempo di calcolo,
perdendo però le proprietà teoriche che garantiscono la convergenza.
Strategia di raffreddamento (Cooling Scheme): metodo pratico per la
diminuzione della temperatura che porta l’algoritmo ad operare in un tempo
finito.
Occorre definire:
Un valore iniziale del parametro di controllo t0
Una funzione per diminuire tk nel tempo
Un criterio di arresto (valore finale di tk )
Un numero di iterazioni nelle quali tk rimanga fisso.
MOLP – Parte I
69 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi a soglia e Simulated Annealing
Schema statico di raffreddamento
E’ l’implementazione più usuale della strategia di raffreddamento:
1. Valore iniziale di t0 : valore abbastanza alto, ad esempio stimato come la
massima differenza tra i valori delle funzioni obiettivo di due soluzioni
2. Funzione per diminuire tk nel tempo:
tk+1 = αtk
con α < 1, tipicamente α ∈ [0.8, 0.99]
3. Criterio di arresto: valore di tk (piccolo), normalmente correlato alla minima
differenza tra i valori delle funzioni obiettivo di due soluzioni
4. Numero di iterazioni senza variare tk : numero fisso
tk
t0
k
MOLP – Parte I
70 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi a soglia e Simulated Annealing
Pesudocodice Algoritmo Simulated Annealing
Algoritmo SA:
x := soluzione euristica iniziale
x ∗ := x; t := t0 ; iter := 0; k := 0
while (iter < itermax ) do
Genera una soluzione x ′ ∈ N(x)
if (c(x ′ ) < c(x)) then
x := x ′ ; iter := 0 (nota: first improvement)
if (c(x ′ ) < c(x ∗ )) then x ∗ := x ′ end-if
else
pr := valore casuale in [0, 1]
c(x ′ )−c(x)
)
t
) then
if (pr ≤ e −(
′
x := x ; iter := 0
else
iter := iter + 1
end-if
end-if
k := k + 1
if (k = ∆k ) then
t := αt; k := 0
end-if
end-while
MOLP – Parte I
71 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi a soglia e Simulated Annealing
Dettagli dello pseudocodice.
Input:
t0 (temperatura iniziale);
itermax (massimo numero di iterazioni senza miglioramenti);
α (parametro per il raffreddamento di t);
∆k (numero di iterazioni con stesso valore di t)
Output:
x ∗ (miglior soluzione trovata)
MOLP – Parte I
72 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi a soglia e Simulated Annealing
Distribuzione probabilità per Simulated Annealing
Tabella: Distribuzione di Probabilità
′
f (x) − f (x)
1
2
5
10
20
30
40
50
60
70
80
90
100
T
60
0.9835
0.9672
0.9200
0.8465
0.7165
0.6065
0.5134
0.4346
0.3679
0.3114
0.2636
0.2231
0.1889
30
0.9672
0.9355
0.8465
0.7165
0.5134
0.3679
0.2636
0.1889
0.1353
0.0970
0.0695
0.0498
0.0357
15
0.9355
0.8752
0.7165
0.5134
0.2636
0.1353
0.0695
0.0357
0.0183
0.0094
0.0048
0.0025
0.0013
7
0.8669
0.7515
0.4895
0.2397
0.0574
0.0138
0.0033
0.0008
0.0002
0.0000
0.0000
0.0000
0.0000
MOLP – Parte I
3
0.7165
0.5134
0.1889
0.0357
0.0013
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
2
0.6065
0.3679
0.0821
0.0067
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
1
0.3679
0.1353
0.0067
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
73 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi a soglia e Simulated Annealing
Probabiltà di Accettazione (P)
1,0
0,8
60
30
15
7
3
2
1
P
0,6
0,4
0,2
0,0
1
2
5
10
20
30
40
50
60
70
80
90
100
f(x)-f(x')
MOLP – Parte I
74 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi Genetici
Algoritmi genetici
Gli algoritmi genetici (Holland 1975) si ispirano al processo evolutivo degli
organismi in natura.
Questi algoritmi mantengo ad ogni iterazione un insieme di soluzioni (o
individui), chiamato popolazione, che viene aggiornato durante le varie
iterazioni.
L’aggiornamento avviene ricombinando sottoinsiemi della popolazione,
definiti parent set (tipicamente coppie di individui), per ottenere nuove
soluzioni. L’operazione che, dato un parent set, permette di generare un
nuovo individuo è definita crossover.
Un’operazione di mutazione è probabilisticamente effettuata sui nuovi
individui della popolazione al fine di diversificare il processo. Un altro metodo
usato per la diversificazione è noto con il nome di immigrazione.
MOLP – Parte I
75 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi Genetici
Algoritmi genetici
I nuovi individui generati vengono introdotti nella popolazione tramite
opportune modifiche della popolazione stessa.
Le soluzioni sono dette cromosomi e sono codificate come stringhe. Si usano
tipicamente due metodi di codifica:
- Codifica binaria 0/1 (utili per problemi si/no quali il KP01)
- Codifica come permutazione di n valori (utili per problemi quali il TSP).
Un testo di riferimento è il libro di Goldberg (1989), che contiene lo schema
theorem che giustifica teoricamente il metodo (ma solo sotto certe assunzioni
statistiche).
MOLP – Parte I
76 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi Genetici
Pseudocodice Algoritmo Genetico
Genera una popolazione P di soluzioni iniziali;
Valuta il costo f (x), ∀x ∈ P (f : funzione di fitness);
repeat
Selezione dei genitori: in base alla fitness di ogni individuo, seleziona un
sottoinsieme G di coppie di soluzioni dall’insieme P;
Crossover: costruisci un insieme PG di soluzioni combinando fra di loro i
genitori in G ;
Mutazione: modifica casualmente alcune soluzioni in PG ;
Immigrazione: eventualmente inserisci nuovi individui, in modo casuale oppure
guidato;
Sia P̄G il nuovo insieme di soluzioni;
Eventualmente applica ricerca locale ad ogni individuo in P̄G (scelta libera tra
first e best improvement, questo passo viene a volte chiamato educazione);
Valuta la fitness per il nuovo insieme P̄G ;
Selezione della popolazione: costruisci una nuova popolazione P̄ sostituendo
tutti o alcuni individui della popolazione P utilizzando l’insieme P̄G ;
Poni P = P̄;
until <condizione di terminazione>.
MOLP – Parte I
77 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi Genetici
Operatori di crossover e mutazione
Esempio: Codifica di una soluzione come stringa binaria 0/1
(0
0
0
0
1
1
Single Crossover
1)
(0
(0
1
0
1
0
1
0)
(0
0
0
0
1
(0
1
0
1
0
0
0
0
0
1
0)
(0
1
0
1
1
1
1)
1
Double Crossover
(0
1)
0
0
1
1
1
1)
1
0)
1
0
0
0
1
0)
(0
(0
⇒
⇒
(0
Mutazione
0 0 0 1
↓
1 1 0 0 1
1
MOLP – Parte I
0)
0)
78 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Algoritmi Genetici
Filtro (Repair Method)
Metodo che rende ammissibile una soluzione inammissibile.
Esempio per Equicut. Codifica:
0 se i ∈ A
xi =
1 se i ∈ B
(8)
Esempio di filtro:
greedy che seleziona il
vertice il cui
spostamento è meno
sconveniente, lo sposta,
e re-itera fino a
ottenere una soluzione
bilanciata.
MOLP – Parte I
79 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Tabu Search
Tabu Search
Il Tabu Search (Glover 1986) esce dai minimi locali muovendosi sulla migliore
soluzione dell’intorno ad ogni iterazione, anche se peggiore della corrente
La ricerca locale opera sempre in best improvement
Una struttura di memoria (tabu list) impedisce di tornare su soluzioni già
visitate.
Step 1.
Step 2.
Step 3.
Step 4.
Pseudocodice Algoritmo Tabu Search
Genera una soluzione iniziale x ∈ X
Poni x∗ := x e inizializza TL := ∅;
(x ∗ è la miglior soluzione trovata; TL è la tabu List);
Trova x′ ∈ N(x), tale per cui
f (x′ ) := min{f (x′′ ), ∀x′′ ∈ N(x), x′′ ∈
/ TL};
TL := TL ∪ {x′ };
x := x′ ;
if (f (x) < f (x∗ )) then
x∗ := x
end-if
if not (condizione di terminazione) goto Step 2
MOLP – Parte I
80 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Tabu Search
Ricerca locale vs Tabu Search
n of local search methods
Ricerca Locale
Tabu Search
Iteration 2
Iteration 7
Iteration 1
Iteration 4
Iteration 5
Iteration 3
Start
Start
Iteration 6
Tabu search
Random restart
MOLP – Parte I
81 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Tabu Search
Alcune caratteristiche del Tabu Search
Tabu List:
Memorizzare soluzioni complete:
Non si ritorna (generalmente) sui propri passi
Tempo computazionale elevato.
Memorizzare solo alcuni attributi:
Lunghezza tabu list finita
Possibilità di ritornare sui propri passi
Tempo computazionale limitato.
La scelta di memorizzare solo alcuni attributi è in pratica sempre la scelta
vincente rispetto alla memorizzazione delle soluzioni complete.
Memorizzazione:
Lista vera e propria
Vettore o matrice che memorizzano l’iterazione della mossa.
MOLP – Parte I
82 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Tabu Search
Esempio implementazione Tabu List
Scheduling 1|rj |C max: intorno dato dallo scambio (swap) di due lavori.
iterazione
1
2
3
4
5
6
job scambiati (2,5) (3,7) (4,6) (1,12) (9,10) (14,15)
1 2
3
4
5
6
7
8
9 10 11 12 13 14 15
1 - −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞ 4 −∞ −∞ −∞
2 - - −∞ −∞ 1 −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞
3 - - −∞ −∞ −∞ 2 −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞
4 - - −∞ 3 −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞
- −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞
5 - 6 - - −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞
7 - - −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞
8 - - −∞ −∞ −∞ −∞ −∞ −∞ −∞
9 - 5 −∞ −∞ −∞ −∞ −∞
10 - - −∞ −∞ −∞ −∞ −∞
11 - - −∞ −∞ −∞ −∞
12 - - −∞ −∞
13 - - −∞
14 - 6
MOLP – Parte I
83 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Tabu Search
Esempio implementazione Tabu List
2,5
3,7
4,6
1,12
9,10
14,15
start
Se la seguente condizione è verificata
Iterazione corrente − TL(i, j) ≤ tabu tenure
allora la mossa (i, j) è dicharata tabu
MOLP – Parte I
84 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Tabu Search
Implementazioni usuali Tabu List
Tabu Tenure:
Per quante iterazioni una mossa è considerata tabu
Corta: intensificazione preferita a diversificazione
Lunga: diversificazione preferita a intensificazione
Compromesso a volte adottatao: lunghezza dinamica.
Short and Long Memory:
La memoria a breve consiste essenzialmente nella Tabu List
La memoria a lungo termine (opzionale) tiene conto di informazioni su tutta la
ricerca compiuta.
Diversificazione:
Possibilità di usare penalità per attributi troppo ricorrenti. Ad esempio si
possono usare matrici simili a quelle usate per memorizzare la tabu list
Possibilità di applicare multi-start per regioni poco visitate.
Criteri di Aspirazione:
Criterio tipico: una soluzione migliore dell’incumbent viene accettata sempre,
anche se tabu. Questo comporta che anche le mosse tabu siano valutate prima
di essere possibilmente scartate
Altri possibili criteri possono dipendere dalla storia dell’evoluzione o scelte
ulteriori.
MOLP – Parte I
85 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Ant Colony Optimization
Ant Colony Optimization
Idea di base dell’algoritmo:
E’ un particolare metaeuristico che simula il comportamento di una colonia di
formiche.
Ha avuto varie evoluzioni. Le versioni piú recenti sono note con il nome di
Ant Systems.
Ogni formica sceglie un percorso per la ricerca del cibo, basandosi sullo
studio del terreno vicino e sulla quantità di feromoni lasciati dalle formiche
precedenti lungo i vari percorsi.
MOLP – Parte I
86 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Ant Colony Optimization
Pseudocodice algoritmo ACO
Pseudo-codice:
x ∗ = ∅;
Inizializzazione feromoni;
for (t := 1 to tmax ) do
for (k := 1 to nants ) do
k−esima formica genera una soluzione x(k) tramite
un algoritmo euristico costruttivo
la soluzione x(k) è eventualmente migliorata tramite
una o più ricerche locali
if (c(x(k)) < c(x ∗ )) then
x ∗ := x(k)
end-if
end-for
Aggiorna feromoni
end-for
return(x ∗ )
MOLP – Parte I
87 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Ant Colony Optimization
Algoritmo euristico costruttivo
Consideriamo il caso di un ACO applicato a un problema di minimizzazione
dei costi su un grafo G = (V , A), con costi cij associati a ogni arco (i, j) ∈ A.
L’algoritmo usato dalle formiche è di tipo probabilistico. In particolare, una
formica sceglie di muoversi lungo un arco (i, j) con probabilità:
τij ηij
T
(9)
1
= desiderabilità dell’arco;
cij
(10)
pij =
dove
ηij =
τij = feromone presente sull’arco;
X
τij ηij = parametro di normalizzazione.
T =
(11)
(12)
(i ,j)∈A
MOLP – Parte I
88 / 89
4. Algoritmi Euristici, di Ricerca Locale e Metaeuristici
Ant Colony Optimization
Aggiornamento feromoni
In inizializzazione τij = ε, ∀(i, j) ∈ A, con ε valore molto piccolo.
Nelle iterazioni successive:
τij = ρτij + ∆(τij )
(13)
ρ < 1 = evaporazione del feromone sull’arco;
(14)
∀(i, j) ∈ A, dove
∆(τij ) =
1
c(x(k))
0
se formica k usa arco (i, j),
altrimenti.
MOLP – Parte I
(15)
89 / 89