03.06.2013 Views

5. Algoritmi di Ricerca Locale e Metaeuristici

5. Algoritmi di Ricerca Locale e Metaeuristici

5. Algoritmi di Ricerca Locale e Metaeuristici

SHOW MORE
SHOW LESS

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

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

Saved successfully!

Ooh no, something went wrong!