03.06.2013 Views

Metaeuristiche

Metaeuristiche

Metaeuristiche

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.

area<br />

Low quality<br />

area<br />

Start<br />

Iteration 4<br />

Iteration 2<br />

Iteration 1<br />

Iteration 6<br />

Iteration 7<br />

del Random restart<br />

ling Tabu search<br />

Iteration 3<br />

Iteration 5<br />

Start


ALGORITMI METAEURISTICI 1<br />

Classificazione Euristici<br />

Gli algoritmi euristici possono essere classificati come segue:<br />

– Algoritmi costruttivi: sfruttano le proprietà strutturali delle soluzioni<br />

ammissibili o i risultati della programmazione matematica<br />

(ad esempio i rilassamenti che definiscono lower bounds)<br />

– Algoritmi di ricerca locale:<br />

∗ Schema di ricerca nello spazio delle soluzioni<br />

∗ Partono da una soluzione euristica iniziale<br />

∗ Cercano possibili miglioramenti nel vicinato (neighborhood)<br />

∗ Iterano fino a quando non esistono ulteriori miglioramenti<br />

– <strong>Metaeuristiche</strong>:<br />

∗ Estendono la ricerca locale<br />

∗ Diversificazione: ricerca in regioni diverse dello spazio delle<br />

soluzioni<br />

∗ Intensificazione: ricerca delle migliori soluzioni nella regione<br />

corrente<br />

Gli algoritmi costruttivi sono in genere molto legati al problema<br />

specifico che vogliono risolvere.<br />

Le tecniche di ricerca locale, e ancor più i metaeuristici, costituiscono<br />

un framework generale, adatto ad essere utilizzato per la risoluzione<br />

di problemi di tipo diverso.


ALGORITMI METAEURISTICI 2<br />

Esempi<br />

Esempio algoritmo costruttivo: Closest Neighbor per il Travelling<br />

Salesman Problem (TSP):<br />

– Parti dal deposito e collega la route al cliente più vicino non<br />

ancora visitato<br />

– Reitera collegando la route al cliente più vicino non ancora<br />

visitato, fino a quando tutti i clienti sono stati visitati<br />

– Restituisci il valore della soluzione euristica (lunghezza totale del<br />

viaggio)<br />

– In genere produce soluzioni di scarsa qualità<br />

Esempio di ricerca locale per il TSP:<br />

– Parti dalla soluzione del Closest Neighbor<br />

– Seleziona un cliente, eliminalo dalla route, prova a reinserirlo in<br />

una posizione diversa nella route<br />

– Se la mossa provoca un miglioramento, esegui e reitera<br />

– Termina quando non ci sono più miglioramenti possibili<br />

Gli algoritmi di ricerca locale possono funzionare molto bene, ma<br />

possono anche bloccarsi in soluzioni di scarsa qualità.<br />

A partire dagli anni ’60/’70 sono stati presentati nuovi approcci al<br />

fine di guidare gli algoritmi costruttivi e di ricerca locale per superare<br />

situazioni critiche:<br />

– Metaeuristici


ALGORITMI METAEURISTICI 3<br />

Metaeuristici<br />

Diverse tipologie di 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 />

– Algoritmi 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 metodi di<br />

ricerca locale


ALGORITMI METAEURISTICI 4<br />

Ricerca locale<br />

Neighborhood (Vicinato, Intorno):<br />

– Per ogni soluzione x ∈ X, si definisce N(x) ⊂ X, insieme di<br />

soluzioni vicine ad x<br />

Algoritmo di Ricerca Locale<br />

Comm: Versione per max f(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 di minimo; f(x ∗ ) ≥ f(x), ∀x ∈<br />

N(x ∗ ) per problemi di massimo) ma non globale


ALGORITMI METAEURISTICI 5<br />

Multi Start<br />

Un algoritmo di ricerca può essere migliorato facilmente applicandolo<br />

e diverse soluzioni iniziali<br />

Costruzione soluzioni:<br />

– In modo casuale<br />

– In modo guidato<br />

Non si è sicuri di coprire tutto lo spazio delle soluzioni<br />

In figura nessuna soluzione cade nel bacino di attrazione del “picco<br />

più alto” (ottimo globale)<br />

Per alcuni problemi il “picco più alto” è molto stretto oppure esistono<br />

numerosissimi picchi


ALGORITMI METAEURISTICI 6<br />

Esempi di neighborhood: TSP<br />

Travelling Salesman Problem: dato un insieme di punti (clienti) ed<br />

un grafo pesato (una rete stradale), visitare tutti i clienti una ed una<br />

sola volta, con costo minimo<br />

Costruzione di una soluzione iniziale:<br />

– Euristico costruttivo<br />

Miglioramento della soluzione iniziale tramire ricerca locale<br />

2-opt (Link and Kernighan 1973):<br />

i<br />

j<br />

l k l k<br />

Si scelgono due lati/archi (in tutti i modi possibili), li si elimina e si<br />

richiude il circuito<br />

i<br />

j


ALGORITMI METAEURISTICI 7<br />

3-opt (Link and Kernighan 1973):<br />

i<br />

j<br />

l k<br />

m<br />

n<br />

Si scelgono tre lati/archi (in tutti i modi possibili), li si elimina e poi<br />

si richiude il circuito<br />

Or-opt (Or 1976):<br />

j<br />

i<br />

p<br />

m<br />

n<br />

a<br />

b<br />

Si sceglie una sequenza di 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 />

j<br />

l<br />

p<br />

m<br />

n<br />

k<br />

m<br />

n<br />

a<br />

b


ALGORITMI METAEURISTICI 8<br />

Esempi di neighborhood: Scheduling<br />

1|rj|C max: dato un insieme di Job Jj di durata pj e tempo di<br />

rilascio rj ed un processore, assegnare i job al processore in ordine,<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 di job


ALGORITMI METAEURISTICI 9<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 di questi tutti i rimanenti n − 2 lati:<br />

n × (n − 1) × (n − 2) = O(n 3 ) mosse<br />

Per un grafo di 100 nodi (piccolo) ogni esplorazione dell’intorno 3-<br />

Opt richiede 1.000.000 di tentativi<br />

Occorre implementare in maniera efficace l’esame dell’intorno<br />

Più il neighborhood è grande più è approfondita la ricerca e più aumenta<br />

il tempo di calcolo<br />

k-opt: generalizzazione di 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 di calcolorisulta molto importante<br />

scegliere correttamente la dimensione dell’intorno


ALGORITMI METAEURISTICI 10<br />

Trade-off tra accuratezza e tempo di calcolo<br />

Diversificazione:<br />

– Esplorare regioni diverse tra loro<br />

– Ad esempio spendere tempo nell’approccio multi-start per provare<br />

molti punti di partenza<br />

Intensificazione:<br />

– Esplorare a fondo un unica regione<br />

– Ad esempio utilizzare 3-opt invece di 2-opt<br />

La scelta tra una e l’altra dipende dalle performance dell’algoritmo<br />

per il particolare problema affrontato:<br />

– Non esiste una regola di 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 dipendente dalla performance dell’algoritmo


ALGORITMI METAEURISTICI 11<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 />

Problema con numerose applicazioni (ad esempio in VLSI)<br />

Utile esempio perchè affrontato in letteratura con algoritmi costruttivi,<br />

ricerca locale e metaeuristiche


ALGORITMI METAEURISTICI 12<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 di vertici a e b non ancora selezionati che<br />

minimizzano l’incremento della funzione obiettivo se aggiunti<br />

ad A e B, rispettivamente;<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


ALGORITMI METAEURISTICI 13<br />

Algoritmo 1:<br />

Ricerca locale per Equicut<br />

1. Parti da una soluzione euristica;<br />

2. Per ogni coppia di 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 KL [Kernighan e Lin 1970]:<br />

1. Indiviuda 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. Individua una seconda coppia di vertici a(2) e b(2) diversi dai<br />

precedenti che massimizza g(2), scambiabili e fissali (n/2 − 1<br />

volte);<br />

5. Reitera il procedimento fino a quando non ci sono più vertici<br />

scambiali;<br />

6. Individua il valore k che massimizza G = k <br />

i=1<br />

g(i);<br />

7. Se G > 0 scambia i vertici a(1), . . . , a(k) e b(1), . . . , b(k) nel<br />

grafo originale e torna al passo 1. Se invece G ≤ 0 termina la<br />

procedura.<br />

Algoritmo KL più efficace di Algoritmo 1 (maggior tempo di calcolo)


ALGORITMI METAEURISTICI 14<br />

Esempio di 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 />

g(1) = 0 vertici = 2, 4<br />

g(2) = 3 vertici = 1, 7<br />

g(3) = −4 vertici = 3, 5<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 />

2<br />

3<br />

8<br />

3<br />

1<br />

2<br />

2<br />

1<br />

1<br />

1<br />

1<br />

2<br />

1<br />

1<br />

1<br />

2<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


ALGORITMI METAEURISTICI 15<br />

Threshold Algorithm (Algoritmo a soglia)<br />

Consideriamo problemi in forma di minimo.<br />

Algoritmo Threshold:<br />

Individua 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 di stop.<br />

Ponendo tk > 0 si accettano anche soluzioni (limitatamente) peggiori<br />

di x<br />

La soglia tk > 0 è aggiornata secondo diverse tecniche:<br />

– Ricerca locale: tk = 0 (solo soluzioni miglioranti)<br />

Threshold accepting:<br />

– t0 > 0, tk ≥ tk+1, limk→∞tk = 0<br />

– Inizialmente si accettano soluzioni che peggiorano anche di molto<br />

la soluzione attuale. Nel seguito si riduce sempre più la disponibilità<br />

a peggiorare.


ALGORITMI METAEURISTICI 16<br />

Simulated Annealing<br />

Simulated Annealing: tk aggiornata probabilisticamente:<br />

1<br />

P(accettazione x)<br />

f(x') - f(x)<br />

La probabiltà di accettazione usata è:<br />

P (accettazione di x ′ ⎧<br />

⎪⎨ 1 se f(x<br />

) =<br />

⎪⎩<br />

′ ) ≤ f(x)<br />

<br />

f(x ′<br />

<br />

)−f(x)<br />

t e k se f(x) > f(x ′ )<br />

Il parametro di controllo tk cala col tempo:<br />

– Cala anche la probabilità di accettare una soluzione peggiorante<br />

La probabiltà di accettazione dipende solo dalla soluzione corrente<br />

e da quella precedente (Catena di Markov)<br />

Teorema di convergenza: se tk diminuisce “abbastanza lentamente”<br />

al tendere del tempo di esecuzione all’infinito, la probabiltà di individuare<br />

l’ottimo globale è pari a 1<br />

(1)


ALGORITMI METAEURISTICI 17<br />

Analogia fisica<br />

Procedimento usato dai fisici per ottenere solidi a bassa energia:<br />

– Scaldare il solido fino alla temperatura di fusione<br />

– Abbassare la temperatura lentamente<br />

– Nel liquido le particelle rimangono disposte in modo casuale, nel<br />

solido che si forma si dispongono secondo strutture atomiche<br />

rigide a bassa energia<br />

Questo processo viene normalmente simulato al calcolatore con metodi<br />

Monte Carlo<br />

Se lo stato attuale i ha energia Ei, uno stato successivo a energia<br />

Ej:<br />

– Se Ej ≤ Ei è sempre accettato<br />

– Se Ej > Ei è accettato con probabilità:<br />

dove:<br />

– T = temperatura iniziale<br />

– kB = costante di Boltzman<br />

e<br />

<br />

Ei−Ej Dato un problema di ottimizzazione combinatoria:<br />

– Le soluzioni corrispondono agli stati fisici<br />

– Il valore della funzione obiettivo corrisponde all’energia<br />

k T B


ALGORITMI METAEURISTICI 18<br />

Implementazioni pratiche<br />

Per garantire la validità del teorema di convergenza spesso occorre<br />

un numero di iterazioni (k) superiore al numero di soluzioni del<br />

problema:<br />

– Per il TSP occorre:<br />

k = O(nn2n−1) – Le soluzioni ammissibili di TSP sono n! quindi 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 di calcolo,<br />

perdendo però le proprietà teoriche che garantiscono la convergenza<br />

Strategia di raffreddamento (Cooling Scheme): metodo pratico per<br />

calare la temperatura in modo da eseguire l’algoritmo in un tempo<br />

finito.<br />

Occorre definire:<br />

– Valore iniziale parametro di controllo t0<br />

– Una funzione per diminuire tk nel tempo<br />

– Un criterio di arresto (valore finale di tk)<br />

– Il numero di iterazioni senza variare tk


ALGORITMI METAEURISTICI 19<br />

Schema statico<br />

E’ l’implementazione più usuale della strategia di raffreddamento:<br />

1. Valore iniziale di t0: valore abbastanza alto, ad esempio stimato<br />

come la massima differenza tra i valori delle funzioni obiettivo di<br />

due soluzioni nello stesso intorno<br />

2. Funzione per diminuire tk nel tempo:<br />

tk+1 = αtk<br />

con α < 1, tipicamente α ∈ [0.8, 0.99]<br />

3. Criterio di arresto: valore fisso di tk (piccolo), normalmente correlato<br />

alla minima differenza tra i valori delle funzioni obiettivo di due<br />

soluzioni nello stesso intorno<br />

4. Numero di iterazioni senza variare tk: numero fisso, normalmente<br />

correlato alla dimensione dell’intorno<br />

t<br />

k<br />

t<br />

0<br />

k


ALGORITMI METAEURISTICI 20<br />

Esempio di SA per Equicut<br />

[Johnson, Aragon, Mc Geoch, 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 di 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 di partenza s;<br />

T := TSTART;<br />

while numero soluzioni accettate > MINNSOL:<br />

for n × SIZE do:<br />

Scegli un vicino s ′ ∈ N(s);<br />

if (cost(s ′ ) < cost(s)) then s := s ′ ;<br />

else set 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;


ALGORITMI METAEURISTICI 21<br />

Algoritmi 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 di soluzioni<br />

(o individui), chiamato popolazione, che viene aggiornata durante<br />

le varie iterazioni<br />

L’aggiornamento avviene ricombinando sottoinsiemi della popolazione,<br />

definiti parent set (tipicamente coppie di individui), per ottenere<br />

nuove soluzioni. L’operazione che dato un parent set permette di<br />

generare un nuovo individuo è definita crossover<br />

Un’operazione di mutazione è probabilisticamente effettuata sui nuovi<br />

individui della popolazione al fine di diversificare il processo. Un altro<br />

metodo usato per la diversificazione è l’immigrazione<br />

I nuovi individui generati vengono introdotti nella popolazione tramite<br />

opportune modifiche della popolazione stessa<br />

Le soluzioni (codificate come stringhe) sono dette cromosomi<br />

Un testo spesso preso a riferimento è il libro di Goldberg (1989),<br />

che contiene lo schema theorem che giustifica teoricamente il metodo.<br />

Successivamente è stato provato che è errato applicare questo<br />

teorema agli algoritmi genetici [Aarts e Lenstra 1997]


ALGORITMI METAEURISTICI 22<br />

Algoritmo Genetico<br />

Step 1. Genera una popolazione P di soluzioni iniziali;<br />

Step 2. Valuta il costo f(x), ∀x ∈ P (f: funzione di fitness);<br />

Step 3. repeat<br />

- Selezione dei genitori: in base alla fitness di ogni<br />

individuo, seleziona un sottoinsieme G di coppie di<br />

soluzioni dall’insieme P ;<br />

- Crossover: costruisci un insieme PG di soluzioni<br />

combinando fra loro i genitori in G;<br />

- Mutazione: modifica casualmente alcune soluzioni in PG;<br />

- Sia ¯ PG il nuovo insieme di soluzioni;<br />

- Eventualmente applica ricerca locale ad ogni individuo;<br />

- Valuta la fitness per il nuovo insieme ¯ PG;<br />

- Selezione della popolazione: costruisci una nuova<br />

popolazione ¯ P sostituendo tutti o alcuni individui<br />

della popolazione P utilizzando l’insieme ¯ PG;<br />

- Poni P = ¯ P ;<br />

until .


ALGORITMI METAEURISTICI 23<br />

Operatori di crossover e mutazione<br />

Esempio: Codifica di una soluzione come stringa di 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)


ALGORITMI METAEURISTICI 24<br />

Filtro (Repair Method)<br />

Mutazione particolare che trasforma una soluzione inammissibile in<br />

una soluzione ammissibile<br />

Esempio per Equicut:<br />

– Codifica:<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)


ALGORITMI METAEURISTICI 25<br />

Esempio per il TSP:<br />

Codifica = 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 />

4<br />

4<br />

4


ALGORITMI METAEURISTICI 26<br />

GA per Equicut<br />

Roland e Pirkul sviluppano due lavori, nel 1992 e nel 1994<br />

Crossover: single<br />

Mutazione bit per bit<br />

1992:<br />

– Fitness: data dal costo della soluzione e da una penalità proporzionale<br />

alla differenza di cardinalità (violazione del vincolo)<br />

1994:<br />

– Fitness senza penalità<br />

– Utilizzo di un filtro per rendere tutte le soluzioni ammissibili<br />

– Filtro:<br />

– Greedy-balancing:<br />

while soluzione corrente non bilanciata:<br />

Sia A il sottinsieme di massima cardinalità;<br />

Trova a ∈ A che massimizza Da = Ea − Ia (eventualmente<br />

negativo);<br />

Sposta a in B;<br />

end while


ALGORITMI METAEURISTICI 27<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 di memoria chiamata tabu list impedisce di tornare<br />

su soluzioni già visitate.<br />

Tabu Search<br />

Step 1. Genera una soluzione iniziale x ∈ X<br />

Poni x ∗ = x e inizializza T L = ∅;<br />

(T L é la tabu List);<br />

Step 2. Trova x ′ ∈ N(x), tale che<br />

f(x ′ ) = min{f(x ′′ ), ∀x ′′ ∈ N(x), x ′′ /∈ T L};<br />

Step 3. T L = T L ∪ {x};<br />

Poni x = x ′ ;<br />

if f(x) < f(x ∗ ) then x ∗ = x<br />

Step 4. if not goto Step 2.


al optimum<br />

High quality area<br />

al optimum<br />

High quality area<br />

ality area<br />

ALGORITMI METAEURISTICI 28<br />

Low quality<br />

area<br />

Start<br />

Ricerca locale vs Tabu Search<br />

Iteration 4<br />

Ricerca Locale<br />

Iteration 2<br />

Iteration 1<br />

Iteration 6<br />

Iteration 7<br />

olution space model Random restart<br />

ality area<br />

Low quality<br />

area<br />

Start<br />

Iteration 4<br />

Iteration 2<br />

Iteration 1<br />

Iteration 6<br />

imulated annealing Tabu search<br />

Iteration 3<br />

Iteration 7<br />

Iteration 3<br />

Tabu Search<br />

olution space model Random restart<br />

imulated annealing Tabu search<br />

Iteration 5<br />

Iteration 5<br />

Start<br />

Start


ALGORITMI METAEURISTICI 29<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 />

∗ Possibilità di 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 di scheduling


ALGORITMI METAEURISTICI 30<br />

Esempio implementazione Tabu List<br />

Singolo processore: intorno dato dallo scambio di 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


ALGORITMI METAEURISTICI 31<br />

Tabu Tenure:<br />

Implementazioni usuali Tabu List<br />

– Per quante iterazioni una mossa è considerata tabu<br />

– Corta: intensificazione preferita a diversificazione<br />

– Lunga: diversificazione preferita a intensificazione<br />

– Compromesso: Lunghezza dinamica<br />

Short and Long Memory:<br />

– La memoria a breve consiste essenzialmente nella Tabu List<br />

– La memoria a lungo termine (opzionale) tiene conto di informazioni<br />

su tutta la ricerca compiuta<br />

Diversificazione:<br />

– Possibilità di usare penalità per attributi troppo ricorrenti<br />

– Possibilità di applicare multi-start per regioni poco visitate<br />

– Si possono usare matrici simili a quelle usate per la tabu list<br />

Criteri di Aspirazione:<br />

– Se una soluzione è tabu ma migliore dell’incumbent la accetto<br />

lo stesso<br />

– Altri possibili criteri


ALGORITMI METAEURISTICI 32<br />

(Roland, Pirkul e Glover 1995)<br />

Stesso intorno di SA:<br />

TS per Equicut (1)<br />

– muovi un solo vertice da un insieme a un altro<br />

Tabu List:<br />

– T LA(j)= iterazione in cui j è stato inserito in A<br />

– T LB(j)= iterazione in cui j è stato inserito in B<br />

– Lo spostamento di j da A a B è tabu se:<br />

T LA(j) + (tabu-tenure) > (iterazione corrente)<br />

– Analogamente per lo spostamento di 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 cardinalità maggiore di MAX-UNBALANCE<br />

– MAX-UNBALANCE è aggiornato dinamicamente<br />

Criterio di stop:<br />

– max(100, 5n) iterazioni


ALGORITMI METAEURISTICI 33<br />

TS per Equicut (2)<br />

(Dell’Amico e Maffioli 1996, Dell’Amico e Trubian 1998)<br />

Neighborhood:<br />

– scambia un vertice di A con uno di B<br />

Tabu List:<br />

– T (i, j)= iterazione in cui i e j sono stati scambiati<br />

– Impedisci scambio di i e j per le prossime tabu-tenure iterazioni<br />

Tabu Tenure:<br />

– cresce nelle fasi di ricerca peggioranti<br />

– cala nelle fasi di 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

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

Saved successfully!

Ooh no, something went wrong!