5. Algoritmi di Ricerca Locale e Metaeuristici
5. Algoritmi di Ricerca Locale e Metaeuristici
5. Algoritmi di Ricerca Locale e Metaeuristici
Trasformi i suoi PDF in rivista online e aumenti il suo fatturato!
Ottimizzi le sue riviste online per SEO, utilizza backlink potenti e contenuti multimediali per aumentare la sua visibilità e il suo fatturato.
parison of local search methods<br />
Start<br />
Tabu search<br />
Start
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 1<br />
<strong>Metaeuristici</strong><br />
Diverse tipologie <strong>di</strong> tecnoche metaeuristiche sono state presentate<br />
in letteratura, fra le quali:<br />
– Simulated Annealing [Kirkpatrik, Gelatt e Vecchi 1983]<br />
– Tabu Search [Glover, 1986]<br />
– <strong>Algoritmi</strong> Genetici [Rechenberg 1973, Holland 1975]<br />
– Variable Neighborhood Search [Mladenović, Labbé e Hansen<br />
1990s]<br />
– Ant Colony Optimization − ACO [Colorni, Dorigo e Maniezzo<br />
1992]<br />
– Scatter Search [Glover 1965]<br />
– Path Relinking [Glover 1965]<br />
– Greedy Randomized Adaptive Search Procedure − GRASP [Feo<br />
e Resende 1989]<br />
– Guided Local Search − GLS [Voudouris and Tsang 1990s]<br />
– Artificial Neural Networks [Hopfield e Tank 1985, Mc Culloch<br />
and Pitts 1922]<br />
– Memetic Algorithms [Moscato 1989]<br />
– . . .<br />
Molte metaeuristiche si basano su ripetute chiamate a meto<strong>di</strong> <strong>di</strong><br />
ricerca locale<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 2<br />
<strong>Ricerca</strong> locale<br />
Neighborhood (Vicinato, Intorno):<br />
– Per ogni soluzione x ∈ X, si definisce N(x) ⊂ X, insieme <strong>di</strong><br />
soluzioni vicine ad x<br />
Algoritmo <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong><br />
Comm: Versione per maxf(x);<br />
Step 1. Genera una soluzione iniziale x ∈ X;<br />
Step 2. Trova x ′ ∈ N( x) tale che f(x ′ ) > f(˜x), se esiste,<br />
altrimenti poni x ′ = ∅;<br />
(alternativa: trova x ′ = arg max{f(x) : x ∈ N( x)});<br />
Step 3. If x ′ = ∅ then x = x ′ , goto Step 2;<br />
Step 4. Restituisci x.<br />
L’aggiornamento della soluzione (Step 3) è detto mossa da x a x ′<br />
L’algoritmo può facilmente terminare in un ottimo locale (f(x ∗ ) ≤<br />
f(x), ∀x ∈ N(x ∗ ) per problemi <strong>di</strong> minimo; f(x ∗ ) ≥ f(x), ∀x ∈<br />
N(x ∗ ) per problemi <strong>di</strong> massimo) ma non globale<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 3<br />
Multi Start<br />
Un algoritmo <strong>di</strong> ricerca può essere migliorato facilmente applicandolo<br />
e <strong>di</strong>verse soluzioni iniziali<br />
Costruzione soluzioni:<br />
– In modo casuale<br />
– In modo guidato<br />
Non si è sicuri <strong>di</strong> coprire tutto lo spazio delle soluzioni<br />
In figura nessuna soluzione cade nel bacino <strong>di</strong> attrazione del “picco<br />
più alto” (ottimo globale)<br />
Per alcuni problemi il “picco più alto” è molto stretto oppure esistono<br />
numerosissimi picchi<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 4<br />
Esempi <strong>di</strong> neighborhood: TSP<br />
Travelling Salesman Problem: dato un grafo pesato, trovare il circuito<br />
Hamiltoniano <strong>di</strong> costo minimo. Supponiamo la matrice dei<br />
pesi (costi) sia simmetrica.<br />
Costruzione <strong>di</strong> una soluzione iniziale:<br />
– Euristico costruttivo<br />
Miglioramento della soluzione iniziale tramire ricerca locale<br />
2-opt:<br />
i<br />
j<br />
l k l k<br />
Si scelgono due lati/archi (in tutti i mo<strong>di</strong> possibili), li si elimina e si<br />
richiude il circuito<br />
i<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione<br />
j
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 5<br />
3-opt:<br />
i<br />
j<br />
1 1<br />
l k<br />
m<br />
n<br />
Si scelgono tre lati/archi (in tutti i mo<strong>di</strong> possibili), li si elimina e poi<br />
si richiude il circuito<br />
Or-opt:<br />
j<br />
i<br />
p<br />
m<br />
n<br />
a<br />
b<br />
Si sceglie una sequenza <strong>di</strong> al massimo tre vertici, si prova ad inserirla<br />
in altre posizioni nella route, e poi si chiude il circuito<br />
j<br />
i<br />
i<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione<br />
j<br />
l<br />
p<br />
m<br />
n<br />
k<br />
m<br />
n<br />
a<br />
b
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 6<br />
Esempi <strong>di</strong> neighborhood: Scheduling<br />
1|rj|C max: dato un insieme <strong>di</strong> Job Jj <strong>di</strong> durata pj e tempo <strong>di</strong><br />
rilascio rj ed un processore, assegnare i job al processore in or<strong>di</strong>ne,<br />
in modo da minimizzare il makespan<br />
Inserzione (Insert move)<br />
J 1 J 2 J 3 J 4 J 5<br />
r1 3 r 2 r 4 r 5 r<br />
J 1 J 3 J 2 J 4 J 5<br />
r1 3 r 2 r 4 r 5 r<br />
Prova a spostare ogni task in tutte le possibili posizioni<br />
Scambio (Swap move)<br />
J 1<br />
r1 3 r 2 r 4 r 5 r<br />
J3 J2 J1 J4 J5 r1 3 r 2 r 4 r 5 r<br />
J 2<br />
J 3 J 4 J 5<br />
Prova a scambiare tra loro ogni coppia <strong>di</strong> job<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 7<br />
Dimensione dei neighborhood<br />
2-Opt: per ogni lato devo tentare tutti i rimanenti n − 1 lati:<br />
n × (n − 1) = O(n 2 ) mosse<br />
3-Opt: per ogni lato devo tentare tutti i rimanenti n − 1 lati, e per<br />
ciascuno <strong>di</strong> questi tutti i rimanenti n − 2 lati:<br />
n × (n − 1) × (n − 2) = O(n 3 ) mosse<br />
Per un grafo <strong>di</strong> 100 no<strong>di</strong> (piccolo) ogni esplorazione dell’intorno 3-<br />
Opt richiede ≃ 1.000.000 <strong>di</strong> tentativi<br />
Occorre implementare in maniera efficace l’esame dell’intorno<br />
Più il neighborhood è grande più è approfon<strong>di</strong>ta la ricerca e più aumenta<br />
il tempo <strong>di</strong> calcolo<br />
k-opt: generalizzazione <strong>di</strong> 2-opt e 3-opt:<br />
– Se poniamo k = n l’intorno contiene tutti i possibili Circuiti<br />
Hamiltoniani (n!)<br />
– Equivale ad esplorare tutte le soluzioni<br />
Nel trade-off tra accuratezza e tempo <strong>di</strong> calcolo risulta molto importante<br />
scegliere correttamente la <strong>di</strong>mensione dell’intorno<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 8<br />
Trade-off tra accuratezza e tempo <strong>di</strong> calcolo<br />
Diversificazione:<br />
– Esplorare regioni <strong>di</strong>verse tra loro<br />
– Ad esempio spendere tempo nell’approccio multi-start per provare<br />
molti punti <strong>di</strong> partenza<br />
Intensificazione:<br />
– Esplorare a fondo un unica regione<br />
– Ad esempio utilizzare 3-opt invece <strong>di</strong> 2-opt<br />
La scelta tra una e l’altra <strong>di</strong>pende dalle performance dell’algoritmo<br />
per il particolare problema affrontato:<br />
– Non esiste una regola <strong>di</strong> decisione<br />
– Lunghe fasi implementative per il settaggio dei parametri<br />
Scelta della mossa:<br />
– First improvement: appena trovo uno scambio che migliora la<br />
soluzione lo effettuo<br />
– Best improvement: considero tutti i possibili scambi ed effettuo<br />
quello che porta al massimo miglioramento (se esiste)<br />
Anche in questo caso la scelta <strong>di</strong>pende dalla performance dell’algoritmo<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 9<br />
Equicut<br />
Dato un grafo G = (V, E) con |V | pari, pesato sui lati (a, b) con<br />
pesi w(a, b), si trovi la partizione (A, B) dei vertici tale per cui:<br />
−) |A| = |B|<br />
−) w(δ(A)) = <br />
i∈A,j∈B<br />
w(i, j) è minima<br />
Esempio utile perchè affrontato in letteratura con svariati algoritmi<br />
costruttivi, <strong>di</strong> ricerca locale e metaeuristici<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 10<br />
Problema <strong>di</strong> base che appare in numerose applicazioni più complesse<br />
Very Large Scale Integration (VLSI)<br />
Facility Lay Out Optimization<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 11<br />
Generate-sol:<br />
Algoritmo costruttivo per Equicut<br />
Comment: n := |V |;<br />
Seleziona due “semi” (vertici) e assegnali uno ad A e uno a B;<br />
for (i := 1 to n/2 − 1) do<br />
Seleziona la coppia <strong>di</strong> vertici a e b non ancora selezionati<br />
che, qualora aggiunti rispettivamente ad A e B, minimizzino<br />
l’incremento della funzione obiettivo;<br />
Assegna a ad A e b a B;<br />
end for<br />
Alcune definizioni:<br />
Ea = <br />
j∈B<br />
Ia = <br />
j∈A<br />
w(a, j) = somma costi esterni<br />
w(a, j) = somma costi interni<br />
Da = Ea − Ia = variazione se a si sposta da A a B<br />
Analogamente per Eb, Ib e Db<br />
I<br />
a<br />
a<br />
E<br />
a<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 12<br />
Algoritmo 1:<br />
<strong>Ricerca</strong> locale per Equicut<br />
1. Parti da una soluzione euristica;<br />
2. Per ogni coppia <strong>di</strong> vertici a ∈ A e b ∈ B valuta:<br />
guadagno(a, b) = Da + Db − 2w(a, b);<br />
3. Tra tutte le coppie aventi guadagno positivo (se ve ne sono)<br />
scegli quella che da guadagno massimo;<br />
4. Reitera fino a quando non esistono più guadagni positivi.<br />
Algoritmo Kernighan e Lin (KL):<br />
1. In<strong>di</strong>viuda i vertici a(1) ∈ A e b(1) ∈ B tali che il guadagno<br />
g(1) = D a(1) + D b(1) − 2w(a(1), b(1)) sia massimo;<br />
2. Scambia a(1) e b(1) e aggiorna Ei, Ii, Di, ∀i;<br />
3. Fissa a(1) e b(1) impedendo ulteriori spostamenti;<br />
4. In<strong>di</strong>vidua una seconda coppia <strong>di</strong> vertici a(2) e b(2) <strong>di</strong>versi dai<br />
precedenti che massimizzi g(2), scambiabili e fissali;<br />
<strong>5.</strong> Reitera il punto 4 fino a quando non ci sono più vertici scambiali<br />
(ovvero per n/2 − 1 volte);<br />
6. In<strong>di</strong>vidua il valore k che massimizza G = k <br />
i=1<br />
g(i);<br />
7. Se G > 0, allora scambia i vertici a(1), . . .,a(k) e b(1), . . .,b(k)<br />
nel grafo originale e torna al passo 1. Se invece G ≤ 0 termina<br />
la procedura.<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 13<br />
Esempio <strong>di</strong> Applicazione dell’Algoritmo KL<br />
1<br />
1 2 3 4 5 6 7 8<br />
E() 3 4 0 1 3 3 0 0<br />
I() 4 4 3 1 2 1 2 3<br />
D() -1 0 -3 0 1 2 -2 -3<br />
1<br />
2<br />
3<br />
8<br />
3<br />
1<br />
2<br />
2<br />
g(1) = 0 vertici = 2, 4<br />
g(2) = 3 vertici = 1, 7 (dopo l’aggiornamento <strong>di</strong> Ei, Ii, Di)<br />
g(3) = −4 vertici = 3, 5 (dopo l’aggiornamento <strong>di</strong> Ei, Ii, Di)<br />
G = 0 + 3 = 3 ⇒ scambio 2-4 e 1-7<br />
1<br />
2<br />
4<br />
7<br />
3<br />
8<br />
1<br />
1<br />
1<br />
1<br />
2<br />
1<br />
1<br />
1<br />
2<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione<br />
1<br />
1<br />
5<br />
6<br />
2<br />
1<br />
1<br />
2<br />
4<br />
5<br />
6<br />
7<br />
1<br />
1<br />
1<br />
3
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 14<br />
<strong>Algoritmi</strong> a soglia (threshold algorithms)<br />
Consideriamo problemi in forma <strong>di</strong> minimo<br />
Algoritmo Threshold:<br />
In<strong>di</strong>vidua una soluzione euristica x;<br />
k := 0;<br />
Repeat<br />
Genera una soluzione x ′ ∈ N(x);<br />
if (f(x ′ ) − f(x) < tk) then<br />
x := x ′ ;<br />
end if<br />
k := k + 1;<br />
Until(criterio <strong>di</strong> stop)<br />
Ponendo tk > 0 si accettano anche soluzioni (limitatamente) peggiori<br />
<strong>di</strong> x<br />
La soglia tk è aggiornata secondo <strong>di</strong>verse tecniche. Da notare che<br />
nella ricerca locale pura, si ha tk = 0 (solo soluzioni miglioranti sono<br />
accettate)<br />
Regola più comune (threshold accepting):<br />
– t0 > 0, tk ≥ tk+1, limk→∞tk = 0<br />
– Inizialmente si accettano soluzioni che peggiorano anche <strong>di</strong> molto<br />
la soluzione attuale. Nel seguito si riduce sempre più la <strong>di</strong>sponibilità<br />
a peggiorare<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 15<br />
Simulated Annealing<br />
Simulated Annealing: tk aggiornata probabilisticamente:<br />
1<br />
P(accettazione x')<br />
La probabiltà <strong>di</strong> accettazione più usata è:<br />
P(accettazione <strong>di</strong> x ′ ) =<br />
⎧<br />
⎪⎨<br />
⎪⎩ e −<br />
<br />
f(x ′<br />
<br />
)−f(x)<br />
tk Il parametro <strong>di</strong> controllo tk cala col tempo:<br />
f(x') - f(x)<br />
1 se f(x ′ ) ≤ f(x)<br />
se f(x ′ ) > f(x)<br />
– Cala anche la probabilità <strong>di</strong> accettare una soluzione peggiorante<br />
La probabiltà <strong>di</strong> accettazione <strong>di</strong>pende solo dalla soluzione corrente<br />
e da quella precedente (Catena <strong>di</strong> Markov)<br />
Teorema <strong>di</strong> convergenza: se tk <strong>di</strong>minuisce “abbastanza lentamente”<br />
al tendere del tempo <strong>di</strong> esecuzione all’infinito, la probabiltà <strong>di</strong> in<strong>di</strong>viduare<br />
l’ottimo globale è pari a 1<br />
(1)<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 16<br />
Analogia fisica<br />
Proce<strong>di</strong>mento usato dai fisici per ottenere soli<strong>di</strong> a bassa energia:<br />
– Scaldare il solido fino alla temperatura <strong>di</strong> fusione<br />
– Abbassare la temperatura lentamente<br />
– Nel liquido le particelle rimangono <strong>di</strong>sposte in modo casuale, nel<br />
solido che si forma si <strong>di</strong>spongono secondo strutture atomiche<br />
rigide a bassa energia<br />
Questo processo viene normalmente simulato al calcolatore con meto<strong>di</strong><br />
<strong>di</strong> tipo Monte Carlo Simulation<br />
Supponiamo che lo stato attuale i abbia energia Ei, e lo stato<br />
successivo j abbia energia Ej, allora:<br />
– Se Ej ≤ Ei, lo stato j è sempre accettato<br />
– Se Ej > Ei, lo stato j è accettato con probabilità:<br />
dove:<br />
– T = temperatura iniziale<br />
– kB = costante <strong>di</strong> Boltzman<br />
e<br />
<br />
Ei−Ej Dato un problema <strong>di</strong> ottimizzazione combinatoria:<br />
– Le soluzioni corrispondono agli stati fisici<br />
– Il valore della funzione obiettivo corrisponde all’energia<br />
k T B<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 17<br />
Implementazioni pratiche<br />
Per garantire la vali<strong>di</strong>tà del teorema <strong>di</strong> convergenza spesso occorre<br />
un numero <strong>di</strong> iterazioni (k) superiore al numero <strong>di</strong> soluzioni del<br />
problema:<br />
– Per il TSP occorre:<br />
k = O(nn2n−1) – Le soluzioni ammissibili <strong>di</strong> TSP sono n! quin<strong>di</strong> occorre meno<br />
tempo per un’enumerazione completa che per approssimare bene<br />
la soluzione ottima con SA<br />
In pratica si usano implementazioni che riducono il tempo <strong>di</strong> calcolo,<br />
perdendo però le proprietà teoriche che garantiscono la convergenza<br />
Strategia <strong>di</strong> raffreddamento (Cooling Scheme): metodo pratico per<br />
la <strong>di</strong>minuzione della temperatura che porta l’algoritmo ad operare<br />
in un tempo finito<br />
Occorre definire:<br />
– Un valore iniziale del parametro <strong>di</strong> controllo t0<br />
– Una funzione per <strong>di</strong>minuire tk nel tempo<br />
– Un criterio <strong>di</strong> arresto (valore finale <strong>di</strong> tk)<br />
– Un numero <strong>di</strong> iterazioni nelle quali tk rimanga fisso<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 18<br />
Schema statico <strong>di</strong> raffreddamento<br />
E’ l’implementazione più usuale della strategia <strong>di</strong> raffreddamento:<br />
1. Valore iniziale <strong>di</strong> t0: valore abbastanza alto, ad esempio stimato<br />
come la massima <strong>di</strong>fferenza tra i valori delle funzioni obiettivo <strong>di</strong><br />
due soluzioni nello stesso intorno<br />
2. Funzione per <strong>di</strong>minuire tk nel tempo:<br />
tk+1 = αtk<br />
con α < 1, tipicamente α ∈ [0.8, 0.99]<br />
3. Criterio <strong>di</strong> arresto: valore fisso <strong>di</strong> tk (piccolo), normalmente correlato<br />
alla minima <strong>di</strong>fferenza tra i valori delle funzioni obiettivo <strong>di</strong> due<br />
soluzioni nello stesso intorno<br />
4. Numero <strong>di</strong> iterazioni senza variare tk: numero fisso, normalmente<br />
correlato alla <strong>di</strong>mensione dell’intorno<br />
t<br />
k<br />
t<br />
0<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione<br />
k
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 19<br />
Algoritmo Simulated Annealing<br />
Input: t0 (temperatura iniziale); itermax (massimo numero <strong>di</strong> iterazioni<br />
senza miglioramenti); α (parametro per il raffreddamento <strong>di</strong> t); ∆k<br />
(numero <strong>di</strong> iterazioni con stesso valore <strong>di</strong> t)<br />
Output: x∗<br />
Algoritmo SA:<br />
x := soluzione euristica iniziale<br />
x∗ := x; t := t0; iter := 0; k := 0<br />
while (iter < itermax) do<br />
Genera una soluzione x ′ ∈ N(x)<br />
if (c(x ′ ) < c(x)) then<br />
else<br />
x := x ′ ; iter := 0<br />
if (c(x ′ ) < c(x∗)) then x∗ := x ′<br />
pr := valore casuale in [0, 1]<br />
if<br />
⎛<br />
⎜ ⎝pr ≤ e −<br />
<br />
c(x ′ )−c(x)<br />
t<br />
x := x ′ ; iter := 0<br />
else<br />
iter := iter + 1<br />
end-if<br />
end-if<br />
if (k = ∆k) then<br />
t := αt; k := 0<br />
end-if<br />
end-while<br />
⎞<br />
⎟<br />
⎠ then<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 20<br />
Esempio: Simulated Annealing per Equicut<br />
Algoritmo <strong>di</strong> Johnson, Aragon, Mc Geoch e Schevon (1989)<br />
Neighborhood: si considerano partizioni s = (S, V \ S) anche non<br />
ammissibili (|S| = |V \S|) e si generano le soluzioni vicine muovendo<br />
un vertice da un insieme all’altro<br />
Si valuta la soluzione con una funzione <strong>di</strong> penalità che tiene conto<br />
dell’inammissibilità:<br />
cost(s) = w(δ(S)) + β(|S| − |V \ S|) 2 , β ≥ 0<br />
Algoritmo SA-Equicut:<br />
Scegli casualmente una soluzione <strong>di</strong> partenza s;<br />
T := TSTART;<br />
while (numero soluzioni accettate > MINNSOL) do<br />
for (n × SIZE) do:<br />
Scegli un vicino s ′ ∈ N(s);<br />
if (cost(s ′ ) < cost(s)) then s := s ′ ;<br />
else s := s ′ con probabilità e (cost(s)−cost(s′ ))/T ;<br />
end-for<br />
T := T × TFACTOR;<br />
end-while<br />
Restituisci miglior s<br />
Parametri:<br />
α = 0.05; TSTART = 0.4; MINNSOL = 2;<br />
SIZE = 16; TFACTOR = 0.95;<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 21<br />
P<br />
1,0<br />
0,8<br />
0,6<br />
0,4<br />
0,2<br />
0,0<br />
Distribuzione probabilità per Simulated Annealing<br />
Tabella 1: Distribuzione <strong>di</strong> Probabilità<br />
f ′ (x) − f(x) T<br />
60 30 15 7 3 2 1<br />
1 0.9835 0.9672 0.9355 0.8669 0.7165 0.6065 0.3679<br />
2 0.9672 0.9355 0.8752 0.7515 0.5134 0.3679 0.1353<br />
5 0.9200 0.8465 0.7165 0.4895 0.1889 0.0821 0.0067<br />
10 0.8465 0.7165 0.5134 0.2397 0.0357 0.0067 0.0000<br />
20 0.7165 0.5134 0.2636 0.0574 0.0013 0.0000 0.0000<br />
30 0.6065 0.3679 0.1353 0.0138 0.0000 0.0000 0.0000<br />
40 0.5134 0.2636 0.0695 0.0033 0.0000 0.0000 0.0000<br />
50 0.4346 0.1889 0.0357 0.0008 0.0000 0.0000 0.0000<br />
60 0.3679 0.1353 0.0183 0.0002 0.0000 0.0000 0.0000<br />
70 0.3114 0.0970 0.0094 0.0000 0.0000 0.0000 0.0000<br />
80 0.2636 0.0695 0.0048 0.0000 0.0000 0.0000 0.0000<br />
90 0.2231 0.0498 0.0025 0.0000 0.0000 0.0000 0.0000<br />
100 0.1889 0.0357 0.0013 0.0000 0.0000 0.0000 0.0000<br />
Probabiltà <strong>di</strong> Accettazione (P)<br />
1 2 5 10 20 30 40 50 60 70 80 90 100<br />
f(x)-f(x')<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione<br />
60<br />
30<br />
15<br />
7<br />
3<br />
2<br />
1
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 22<br />
<strong>Algoritmi</strong> genetici<br />
Gli algoritmi genetici (Holland 1975) si ispirano al processo evolutivo<br />
degli organismi in natura<br />
Questi algoritmi mantengo ad ogni iterazione un insieme <strong>di</strong> soluzioni<br />
(o in<strong>di</strong>vidui), chiamato popolazione, che viene aggiornata durante<br />
le varie iterazioni<br />
L’aggiornamento avviene ricombinando sottoinsiemi della popolazione,<br />
definiti parent set (tipicamente coppie <strong>di</strong> in<strong>di</strong>vidui), per ottenere<br />
nuove soluzioni. L’operazione che dato un parent set permette <strong>di</strong><br />
generare un nuovo in<strong>di</strong>viduo è definita crossover<br />
Un’operazione <strong>di</strong> mutazione è probabilisticamente effettuata sui nuovi<br />
in<strong>di</strong>vidui della popolazione al fine <strong>di</strong> <strong>di</strong>versificare il processo. Un altro<br />
metodo usato per la <strong>di</strong>versificazione è l’immigrazione<br />
I nuovi in<strong>di</strong>vidui generati vengono introdotti nella popolazione tramite<br />
opportune mo<strong>di</strong>fiche della popolazione stessa<br />
Le soluzioni (co<strong>di</strong>ficate come stringhe) sono dette cromosomi<br />
Un testo spesso preso a riferimento è il libro <strong>di</strong> Goldberg (1989),<br />
che contiene lo schema theorem che giustifica teoricamente il metodo.<br />
Successivamente è stato provato che è errato applicare questo<br />
teorema alla totalità degli algoritmi genetici [Aarts e Lenstra, 1997]<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 23<br />
Algoritmo Genetico<br />
Step 1. Genera una popolazione P <strong>di</strong> soluzioni iniziali;<br />
Step 2. Valuta il costo f(x), ∀x ∈ P (f: funzione <strong>di</strong> fitness);<br />
Step 3. repeat<br />
- Selezione dei genitori: in base alla fitness <strong>di</strong> ogni<br />
in<strong>di</strong>viduo, seleziona un sottoinsieme G <strong>di</strong> coppie <strong>di</strong><br />
soluzioni dall’insieme P;<br />
- Crossover: costruisci un insieme PG <strong>di</strong> soluzioni<br />
combinando fra loro i genitori in G;<br />
- Mutazione: mo<strong>di</strong>fica casualmente alcune soluzioni in PG;<br />
- Sia ¯ PG il nuovo insieme <strong>di</strong> soluzioni;<br />
- Eventualmente applica ricerca locale ad ogni in<strong>di</strong>viduo;<br />
- Valuta la fitness per il nuovo insieme ¯ PG;<br />
- Selezione della popolazione: costruisci una nuova<br />
popolazione ¯ P sostituendo tutti o alcuni in<strong>di</strong>vidui<br />
della popolazione P utilizzando l’insieme ¯ PG;<br />
- Poni P = ¯ P;<br />
until .<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 24<br />
Operatori <strong>di</strong> crossover e mutazione<br />
Esempio: Co<strong>di</strong>fica <strong>di</strong> una soluzione come stringa <strong>di</strong> bit<br />
(0 0 0 0 1 1 1)<br />
(0 1 0 1 0 1 0)<br />
(0 0 0 0 1 1 1)<br />
(0 1 0 1 0 1 0)<br />
Single Crossover<br />
⇒<br />
Double Crossover<br />
⇒<br />
Mutazione<br />
(0 1 0 0 0 1 0)<br />
↓<br />
(0 1 1 0 0 1 0)<br />
(0 0 0 0 0 1 0)<br />
(0 1 0 1 1 1 1)<br />
(0 0 0 1 1 1 1)<br />
(0 1 0 0 0 1 0)<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 25<br />
Filtro (Repair Method)<br />
Mutazione particolare che trasforma una soluzione inammissibile in<br />
una soluzione ammissibile<br />
Esempio per Equicut:<br />
– Co<strong>di</strong>fica:<br />
xi =<br />
⎧<br />
⎪⎨<br />
⎪⎩<br />
0 se i ∈ A<br />
1 se i ∈ B<br />
Necessario un metodo per ripristinare l’ammissibilità della soluzione<br />
risultante<br />
(2)<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 26<br />
Esempio per il TSP:<br />
Co<strong>di</strong>fica = vettore dei successori: si = vertice che segue il vertice i<br />
1 2 3 4 5 6<br />
s1 (2, 3, 4, 5, 6, 1)<br />
1<br />
2<br />
6<br />
1 2 3 4 5 6<br />
s2 (2, 5, 6, 3, 4, 1)<br />
1<br />
2<br />
6<br />
1 2 3 4 5 6<br />
o1 (2, 5, 6, 5, 6, 1)<br />
1<br />
Occorre un filtro per riottenere una soluzione ammissibile<br />
2<br />
6<br />
3<br />
5<br />
3<br />
5<br />
3<br />
5<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione<br />
4<br />
4<br />
4
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 27<br />
Esempio: <strong>Algoritmi</strong> Genetici per Equicut<br />
Roland e Pirkul sviluppano due lavori, nel 1992 e nel 1994<br />
Crossover: single<br />
Mutazione standard<br />
1992:<br />
– Fitness: data dal costo della soluzione e da una penalità proporzionale<br />
alla <strong>di</strong>fferenza <strong>di</strong> car<strong>di</strong>nalità tra i due insiemi (dovuta<br />
a una violazione del vincolo)<br />
1994:<br />
– Fitness senza penalità<br />
– Utilizzo <strong>di</strong> un filtro per rendere tutte le soluzioni ammissibili<br />
– Filtro:<br />
Greedy-balancing:<br />
while soluzione corrente non bilanciata:<br />
Sia A il sottinsieme <strong>di</strong> massima car<strong>di</strong>nalità;<br />
Trova a ∈ A che massimizza Da = Ea − Ia (eventualmente<br />
negativo);<br />
Sposta a in B;<br />
end while<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 28<br />
Tabu Search<br />
Il Tabu Search (Glover 1986) esce dai minimi locali muovendosi sulla<br />
migliore soluzione dell’intorno ad ogni iterazione, anche se peggiore<br />
della corrente<br />
Una struttura <strong>di</strong> memoria chiamata tabu list impe<strong>di</strong>sce <strong>di</strong> tornare<br />
su soluzioni già visitate.<br />
Algoritmo Tabu Search<br />
Step 1. Genera una soluzione iniziale x ∈ X<br />
Poni x ∗ := x e inizializza TL := ∅;<br />
(TL é la tabu List);<br />
Step 2. Trova x ′ ∈ N(x), tale che<br />
f(x ′ ) := min{f(x ′′ ), ∀x ′′ ∈ N(x),x ′′ /∈ TL};<br />
Step 3. TL := TL ∪ {x};<br />
x := x ′ ;<br />
if (f(x) < f(x ∗ )) then x ∗ := x<br />
Step 4. if not (con<strong>di</strong>zione <strong>di</strong> terminazione) goto Step 2<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 29<br />
<strong>Ricerca</strong> locale vs Tabu Search<br />
e comparison of local search methods<br />
Iteration 4<br />
<strong>Ricerca</strong> <strong>Locale</strong><br />
e comparison of local search methods<br />
Start<br />
Iteration 2<br />
Iteration 1<br />
Iteration 6<br />
Iteration 7<br />
Random restart<br />
Iteration 3<br />
Tabu Search<br />
Tabu search<br />
Iteration 5<br />
Start<br />
13<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione<br />
13
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 30<br />
Tabu List:<br />
Alcune caratteristiche del Tabu Search<br />
– Memorizzare soluzioni complete:<br />
∗ Non si ritorna (generalmente) sui propri passi<br />
∗ Tempo computazionale elevato<br />
– Memorizzare solo alcuni attributi:<br />
– Lunghezza tabu list finita<br />
∗ Possibilità <strong>di</strong> ritornare sui propri passi<br />
∗ Tempo computazionale limitato<br />
– Memorizzazione:<br />
∗ Lista vera e propria<br />
∗ Vettore o matrice che memorizzano l’iterazione della mossa<br />
∗ Esempio: swap tra job per problema <strong>di</strong> scheduling<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 31<br />
Esempio implementazione Tabu List<br />
Singolo processore: intorno dato dallo scambio <strong>di</strong> due job<br />
iterazione 1 2 3 4 5 6<br />
job scambiati (2,5) (3,7) (4,6) (1,12) (9,10) (14,15)<br />
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15<br />
1 - −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞ 4 −∞ −∞ −∞<br />
2 - - −∞ −∞ 1 −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞<br />
3 - - - −∞ −∞ −∞ 2 −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞<br />
4 - - - - −∞ 3 −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞<br />
5 - - - - - −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞<br />
6 - - - - - - −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞<br />
7 - - - - - - - −∞ −∞ −∞ −∞ −∞ −∞ −∞ −∞<br />
8 - - - - - - - - −∞ −∞ −∞ −∞ −∞ −∞ −∞<br />
9 - - - - - - - - - 5 −∞ −∞ −∞ −∞ −∞<br />
10 - - - - - - - - - - −∞ −∞ −∞ −∞ −∞<br />
11 - - - - - - - - - - - −∞ −∞ −∞ −∞<br />
12 - - - - - - - - - - - - - −∞ −∞<br />
13 - - - - - - - - - - - - - - −∞<br />
14 - - - - - - - - - - - - - - 6<br />
2,5 3,7 4,6 1,12 9,10 14,15<br />
start<br />
Iterazione corrente − TL(i, j) ≤ lunghezza lista ⇒ (i, j) tabu<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 32<br />
Tabu Tenure:<br />
Implementazioni usuali Tabu List<br />
– Per quante iterazioni una mossa è considerata tabu<br />
– Corta: intensificazione preferita a <strong>di</strong>versificazione<br />
– Lunga: <strong>di</strong>versificazione preferita a intensificazione<br />
– Compromesso: Lunghezza <strong>di</strong>namica<br />
Short and Long Memory:<br />
– La memoria a breve consiste essenzialmente nella Tabu List<br />
– La memoria a lungo termine (opzionale) tiene conto <strong>di</strong> informazioni<br />
su tutta la ricerca compiuta<br />
Diversificazione:<br />
– Possibilità <strong>di</strong> usare penalità per attributi troppo ricorrenti<br />
∗ Si possono usare matrici simili a quelle usate per la tabu list<br />
– Possibilità <strong>di</strong> applicare multi-start per regioni poco visitate<br />
Criteri <strong>di</strong> Aspirazione:<br />
– Una soluzione migliore dell’incumbent viene accettata sempre,<br />
anche se tabu<br />
– Altri possibili criteri<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 33<br />
Esempio: Tabu Search per Equicut (1)<br />
(Roland, Pirkul e Glover 1995)<br />
Stesso intorno <strong>di</strong> SA:<br />
– muovi un solo vertice da un insieme a un altro<br />
Tabu List:<br />
– TLA(j)= iterazione in cui j è stato inserito in A<br />
– TLB(j)= iterazione in cui j è stato inserito in B<br />
– Lo spostamento <strong>di</strong> j da A a B è tabu se:<br />
TLA(j) + (tabu-tenure) > (iterazione corrente)<br />
– Analogamente per lo spostamento <strong>di</strong> j da B ad A<br />
Neighborhood ristretto:<br />
– Si considera un certo fattore MAX-UNBALANCE<br />
– Una mossa è presa in considerazione solo se non porta a uno<br />
scostamento delle car<strong>di</strong>nalità maggiore <strong>di</strong> MAX-UNBALANCE<br />
– MAX-UNBALANCE è aggiornato <strong>di</strong>namicamente<br />
Criterio <strong>di</strong> stop:<br />
– max(100, 5n) iterazioni<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione
<strong>5.</strong> <strong>Algoritmi</strong> <strong>di</strong> <strong>Ricerca</strong> <strong>Locale</strong> e <strong>Metaeuristici</strong> 34<br />
Esempio: Tabu Search per Equicut (2)<br />
(Dell’Amico e Maffioli 1996, Dell’Amico e Trubian 1998)<br />
Neighborhood:<br />
– scambia un vertice <strong>di</strong> A con uno <strong>di</strong> B<br />
Tabu List:<br />
– T(i, j)= iterazione in cui i e j sono stati scambiati<br />
– Impe<strong>di</strong>sci scambio <strong>di</strong> i e j per le prossime tabu-tenure iterazioni<br />
Tabu Tenure:<br />
– cresce nelle fasi <strong>di</strong> ricerca peggioranti<br />
– cala nelle fasi <strong>di</strong> ricerca miglioranti<br />
Mossa:<br />
– best improvement (non tabu)<br />
– memorizza seconda best move<br />
Multi-Start:<br />
– se la ricerca non ha dato miglioramenti nelle ultime iterazioni,<br />
riparti con una nuova soluzione<br />
Meto<strong>di</strong> <strong>di</strong> Ottimizzazione per la Logistica e la Produzione