Euristiche ed Approssimazioni Contenuto e scopo presentazione

annuncio pubblicitario
Contenuto e scopo presentazione
Contenuto:
• Vengono presentati alcuni algoritmi euristici ed approssimati per la
risoluzione di problemi NP-hard.
Euristiche ed Approssimazioni
Scopo:
• fornire le capacità di
– risolvere problemi reali difficili di dimensione troppo grande per essere
affrontati con algoritmi esatti
Versione 06/01/2006 22.21
Raffaele Pesenti
Raffaele Pesenti
Errori
Soluzioni approssimate e algoritmi euristici
Quando è possibile (non sempre lo è) è opportuno dare una stima per eccesso
dell’errore compiuto accettando la soluzione di un algoritmo euristico
rispetto a quella ottima
Trovare la soluzione ottima di problemi di ottimizzazione NP-hard può
risultare in pratica troppo oneroso, inoltre dato che i parametri del modello
considerato possono essere affetti da errori tale sforzo potrebbe essere anche
poco rilevante.
Nei casi pratici possono essere anche accettate delle soluzioni “buone” che,
sperabilmente, non siano lontane dall’ottimo.
Errori:
dato un problema (F,c; max), detti zopt= {max c(x) : x∈F} il valore della
soluzione ottima e zA il valore fornito dall’algoritmo euristico A si definiscono
– errore assoluto:
EA= zopt - zA
– errore relativo:
RA= (zopt - zA)/zopt
Algoritmo euristico:
algoritmo che risolve un problema di ottimizzazione, utilizzando in genere
regole di buon senso, e fornisce una soluzione ammissibile ma non
necessariamente ottima.
Raffaele Pesenti
2
3
Raffaele Pesenti
4
Algoritmi approssimati
Algoritmi approssimati
Algoritmo ε-approssimato:
algoritmo che garantisce un errore relativo non maggiore di ε > 0:
Ra ≤ ε
Schema di approssimazione:
algoritmo che garantisce Ra ≤ ε per qualunque ε > 0
– schema di approssimazione polinomiale: schema di approssimazione con
complessità polinomiale nelle dimensioni dell’istanza
– schema di approssimazione pienamente polinomiale: schema di
approssimazione con complessità polinomiale nelle dimensioni
dell’istanza e in 1/ε
Raffaele Pesenti
5
Commenti:
• Quando esistono conviene applicare algoritmi approssimati, per i quali è
calcolabile, per definizione, un limite massimo dell’errore compiuto, rispetto
a degli algoritmi euristici basati sul buonsenso, ma per cui non si può fornire
un limite massimo dell’errore.
• Per alcuni problemi non sono noti algoritmi approssimati, per altri il migliore
algoritmo approssimato ha valori di ε grandi (maggiori di 0.5). Inoltre
algoritmi euristici con accettabili prestazioni medie vengono a volte preferiti
ad algoritmi approssimati (almeno in prima battuta) perché sono più facili da
implementare e generalmente più veloci.
Raffaele Pesenti
Metaeuristiche
Tipi di euristiche
Affinché una euristica sia efficace deve sfruttare le caratteristiche strutturali
del problema che deve risolvere, per questo motivo non esiste una euristica
generale.
Esistono però degli approcci generali a cui si può fare riferimento per
sviluppare euristiche specifiche. Tali approcci vengono detti metaeuristiche.
Euristiche costruttive
costruiscono una soluzione del problema
Euristiche di miglioramento
iterativamente a partire da una soluzione del problema cercano di
determinarne una migliore nell’intorno di quella data
Esempi:
metaeuristica costruttive:
– greedy
– di disaggregazione
– lagrangiane
metaeuristica migliorativa:
– ricerca locale
• simulated annealing
• tabu search
Commenti:
in genere le soluzioni fornite dalle euristiche costruttive e quelle utilizzate
dalle euristiche di miglioramento sono soluzioni ammissibili. Per certi
problemi risulta anche estremamente complesso determinare una prima
soluzione ammissibile, allora può convenire rilassare lagrangianamente
alcuni vincoli, i.e., determinare una prima soluzione che soddisfi almeno
parte dei vincoli e penalizzare il fatto che altri vincoli non siano rispettati.
Quindi iterativamente a partire dalla soluzione (non ammissibile ottenuta)
cercano di determinarne una che rispetti maggiormente i vincoli nell’intorno
di quella data
Raffaele Pesenti
6
7
Raffaele Pesenti
8
Metaeuristica greedy
Euristiche greedy
Metaeuristica greedy
1. inizializzazione:
Si ordinano gli elementi e1, e2,..., em che concorrono a comporre una soluzione in modo non
decrescente(c1≤c2≤... ≤cm) rispetto ai loro costi (oppure in modo non crescente rispetto ai
profitti o comunque in modo monotono rispetto ad una funzione euristica di valutazione).
Si pone F0=∅,
//insieme degli elementi che compongono la soluzione
2. iterazione:
while non si è costruita completamente una soluzione {
si sceglie ek,
Esempi:
• problema dello zaino KP(U,s,c,B, max): si ordinano gli oggetti per densità
decrescente c(u)/s(u) e a partire dal primo si prova ad inserire gli oggetti
nello zaino lasciando in esso quelli che vi possono essere contenuti, e.g.,
max zRL= 12x1 +36 x2 +42 x3 +16 x4 + 25x5
3x1 + 10x2+ 14x3 + 6x4 + 10 x5 ≤ 23
xi ∈{0,1}
(oggetti già ordinati) soluzione greedy x= [1,1,0,1,0]
if Fk-1∪{ek} non viola i vincoli dati Fk=Fk-1∪{ek},
else Fk=Fk-1
}
return
//Fk è l’insieme degli elementi che costituiscono la soluzione
Raffaele Pesenti
9
Raffaele Pesenti
10
Euristiche greedy
Euristiche greedy
Esempi (cont.):
• problema del commesso viaggiatore TSP(G(V,E), c,s,min): euristica detta del
nodo più prossimo (nearest neighbor), si parte da un nodo di riferimento
(tipicamente il magazzino centrale oppure un estremo del arco meno costoso)
ed ad ogni passo si raggiunge il nodo più vicino non ancora visitato.
Esempio (supponendo distanze euclidee):
Esempi (cont.):
Problema di scheduling 1/ri/ΣCi(U,p,r, min): si eseguono immediatamente le
operazioni disponibili, se più operazioni sono disponibili si sceglie secondo
shortest processing time first.
Esempio con tre operazioni:
– J1: ri = 0, pi=10
– J2: r2 = 1, p2=1
– J3: r3 = 4, pi=2
ΣC =10+11+13=34
clienti
Commenti:
non funziona molto bene:
i primi archi sono brevi, gli ultimi molto lunghi
magazzino:
però gli archi molto lunghi sono pochi:
nodo iniziale
può essere una buona base da migliorare
semplice da implementare
soluzioni mediamente del 25% superiori al minimo effettivo
troppo lento per più di 10.000 nodi
Raffaele Pesenti
i
J1
0
11
Raffaele Pesenti
J2 J3
10 11 13
12
Metaeuristiche di disaggregazione
Metaeuristiche di disaggregazione
Commenti:
Metaeuristica disaggregazione
• l’aspetto critico di questo tipo di euristiche è come scomporre il problema
originale in sottoproblemi;
1. inizializzazione:
• purtroppo non esistono regole precise di disaggregazione, ma si devono
comunque scegliere:
si decompone il problema originale in sottoproblemi, fissandone una
gerarchia
– sottoproblemi più abbordabili di quello originale, anche se non troppo
semplici (vedi in seguito le considerazioni sulle euristiche lagrangiane)
2. iterazione:
si determinala la soluzione del/i problema/i gerarchicamente più importante
– sottoproblemi la cui soluzione, una volta imposta ai successivi, non renda
inammissibili questi ultimi
si risolve un sottoproblema alla volta, a partire dal più importante, senza
rimettere in discussione le scelte effettuate per ottenere le soluzioni dei
sottoproblemi precedenti;
Raffaele Pesenti
• queste metaeuristiche sono ad esempio spesso utilizzate per i problemi di
scheduling. Si decide nell’ordine sull’assegnazione delle operazioni alle
macchine, quindi si sequenziano le macchine ed infine si schedula.
13
Raffaele Pesenti
14
Metaeuristiche basate sul rilassamento lagrangiano
Rilassamento lagrangiano
Rilassamento lagrangiano:
nel rilassamento lagrangiano il problema originale P viene formulato come ILP e quindi
semplificato imponendo la soddisfazione di un insieme di vincoli come obiettivo (invece
che come vincolo). In particolare si pesano i vincoli, utilizzando pesi non negativi in caso
di vincoli di disuguaglianza, come nell’esempio seguente.
Esempio:
Dato il seguente problema di zaino bidimensionale:
max z = 25x1 + 20x2 + 15x3 + 12x4 + 10x5
10x1 + 8x2 + 10x3 + 5x4 + 4x5 ≤ 22
7x1 + 5x2 + 5x3 + 3x4 + 7x5 ≤ 14
xi∈{0,1}
e il peso 0.3 per il secondo vincolo, si risolve
max zRLag (0.3)= 25x1 + 20x2 + 15x3 + 12x4 + 10x5 + 0.3(14 - (7x1 + 5x2 + 5x3 + 3x4 + 7x5))
10x1 + 8x2 + 10x3 + 5x4 + 4x5 ≤ 22
xi∈{0,1}
Commenti:
• se la soluzione ottima x* del rilassamento lagrangiano è ammissibile per il
problema P non è detto che x* sia anche ottima per P, poiché le due funzioni
obiettivo non coincidono
• il valore della soluzione ottima zRLag(π ) del problema lagrangiano dipende dai
valori dei pesi π assegnati ai vari vincoli. In ogni caso
zRLag(π ) ≥ z*
la scelta dei pesi ottima π∗ è quella per cui zRLag(π∗) = min{zRLag(π ), π ≥ 0}.
• il problema di determinare i pesi ottimi π∗ è detto problema lagrangiano duale
poiché vale il seguente teorema di dualità debole
min{zRLag(π ), π ≥ 0} = max {z= cx, Ax ≤ b, x ∈ Zn}
• la soluzione zRLag(π ) di un rilassamento lagrangiano è quindi un bound sulla
soluzione ottima z* di P e può essere utilizzata per valutare la qualità di
eventuali soluzioni di P ottenute attraverso euristiche costruttive.
Raffaele Pesenti
15
Raffaele Pesenti
16
Rilassamento lagrangiano
Relazioni fra i rilassamenti
Altri rilassamenti:
• oltre il lagrangiano possono essere usati altri tipi di rilassamento (eliminazione,
surrogato, decomposizione), ma il rilassamento lagrangiano è il più usato
perché è più facile da trattare matematicamente
Relazioni di dominanza tra i rilassamenti:
• esistono le seguenti relazioni di dominanza tra le soluzioni dei diversi
rilassamenti
z* ≤ zRS(πS*), zRD(πD*) ≤ zRLag(πLag*) ≤ zRE, zRL
• nessuna relazione generale esiste tra zRS(πS*) e zRD(πD*) e tra zRE e zRL
• zRLag(πLag*) = zRL quando il poliedro definito dai vincoli non spostati
all’obiettivo è un poliedro intero
Raffaele Pesenti
Difficoltà:
• scelta i vincoli da rilassare
• calcolo i pesi ottimi
• deduzione di una buona soluzione ammissibile per il problema originale a
partire da quella ottenuta tramite il rilassamento lagrangiano.
17
Raffaele Pesenti
Rilassamento lagrangiano
Rilassamento lagrangiano
Scelta i vincoli da rilassare:
• i vincoli che vengono rilassati devono rendere il problema più facile
dell’originale, ma non troppo facile altrimenti i risultati forniti possono
ottenersi più banalmente attraverso il rilassamento continuo. Di solito il
rilassamento lagrangiano viene applicato quando il banale arrotondamento
dei risultati ottenuti tramite rilassamento continuo fallisce;
• di solito ci si riconduce a problemi che, benché NP-hard, siano risolti, almeno
in modo approssimato, con relativa velocità, e.g., zaino, oppure ci si
riconduce a problemi P-easy per cui esistano algoritmi molto più efficienti
del simplesso, e.g., albero ricoprente e varianti;
• non esiste comunque una regola generale nella scelta dei vincoli, per lo stesso
problema può convenire tentare diverse alternative;
• si può usare il rilassamento lagrangiano anche quando il problema ha
dimensioni tali che anche il rilassamento continuo richiederebbe comunque
un tempo eccessivo di soluzione rispetto a quello di un opportuno problema
lagrangiano duale.
Raffaele Pesenti
18
19
Calcolo i pesi ottimi:
• in generale non è ovvia la scelta ottima dei pesi e viene determinata per
iterazioni successive aumentando i pesi dei vincoli che risultano violati dalla
soluzione ottenuta col rilassamento corrente e diminuendo i pesi dei vincoli
rispettati;
• esiste una procedura generale di aggiornamento dei pesi, detta metodo del
subgradiente, che permette di convergere ai valori ottimi;
• per problemi specifici sono sviluppati metodi da aggiornamento dei pesi ad
hoc. Tali metodologie sono però difficilmente generalizzabili.
Raffaele Pesenti
20
Rilassamento lagrangiano
Rilassamento lagrangiano
Metodo del subgradiente (continua):
• in pratica si usa spesso
Metodo del subgradiente:
• ad ogni iterazione k i pesi vengono aggiornati come segue
tk= λk(zRLag(πk ) – z*)/|| (b – Axk)||2
πk +1= max{0, πk – tk (b – Axk)}
dove il massimo è eseguito componente per componente, Ax ≤b è l’insieme dei
vincoli rilassati, xk è la soluzione determinata al passo corrente e tk è un
opportuno stepsize;
• condizioni sufficienti di convergenza dei pesi all’ottimo sono
tk→0 ,
Σk tk→∞
per
con z* è un lower bound (se problema di massimizzazione) della soluzione ottima
del problema originale e 0< λk ≤2. Il valore λk è posto inizialmente uguale a 2 e
viene progressivamente dimezzato se la soluzione del problema lagrangiano non
migliora entro un dato numero di passi. Anche il valore z* può essere aggiornato se
nelle iterazioni si determinano delle soluzioni ammissibili per il problema originale;
• se si giunge a zRLag(πLag*) = z* si è certi di essere all’ottimo, purtroppo questo non
sempre accade;
k→∞;
• il metodo viene comunque fatto terminare dopo un dato numero di iterazioni.
Raffaele Pesenti
21
Raffaele Pesenti
Rilassamento lagrangiano
Metaeuristica di ricerca locale
Deduzione di una buona soluzione ammissibile:
dato un problema P, con soluzioni ammissibili F, e la soluzione ottima (o sua
approssimazione) xLag del problema duale lagrangiano associato, in generale:
• xLag ∉ F e non esiste un criterio universale per determinare una buona soluzione
in F a partire da xLag;
• nelle ipotesi che F ⊆{0,1}n, che 0 ∈ F e che x ∈F implica ∀y t.c. y ≤ x , y ∈ F,
allora a partire da xLag si può dedurre una soluzione in F modificando
iterativamente in modo greedy da 1 a 0 i valori di alcune componenti di xLag;
• i costi ridotti calcolati nel problema duale lagrangiano possono guidare la tale
procedura greedy, in quanto sono una stima dei costi/profitti marginali, i.e.,
della diminuzione del valore assunto dalla funzione obiettivo quando avviene
una variazione unitaria delle corrispondenti componenti della soluzione ottima;
• ragionamento complementare si può fare nelle ipotesi opposte, i.e., 1 ∈ F e che
x ∈F implica ∀y t.c. y ≥ x , y ∈ F, che per esempio valgono nel caso del set
covering problem.
Raffaele Pesenti
22
23
Metaeuristica RicercaLocale
1. inizializzazione:
si genera una soluzione iniziale ammissibile x0
2. iterazione:
do {
xk+1 = f(xk)
} while xk+1 ≠ xk
x* =
//dove f(xk) è una funzione che data una soluzione ammissibile
//ne genera una nuova ammissibile non peggiore
//esce dal loop quando la condizione è falsa
xk
return(x*)
Raffaele Pesenti
//x* è un ottimo locale
24
Metaeuristica di ricerca locale
Metaeuristica di ricerca locale
Commenti:
• il simplesso è un algoritmo di ricerca locale, data la linearità dei problemi a cui si
applica l’ottimo locale a cui giunge è anche ottimo globale;
• in generale si determina solo un ottimo locale, se, come spesso avviene nei problemi
combinatori, vi sono molti ottimi locali, applicando semplicemente una ricerca locale
è molto probabile che venga determinato un ottimo locale lontano dall’ottimo globale;
• la funzione f(xk) deve determinare la soluzione successiva rapidamente, quindi in
genere si limita a valutare le soluzioni ammissibili appartenenti all’intorno della
soluzione corrente xk;
• un intorno di x è una funzione che dato x restituisce un insieme di soluzioni
ammissibili I(x) t.c.
– x ∈ I(x) i.e., x appartiene al proprio intorno
– ∀x, y ∈ S, ∃{x0, ..., xr} t.c. x= x0, y= xr, e xs∈ I(xs-1) s=1,...,r
i.e., è possibile andare da x a y passando per punti che appartengono uno
all’intorno dell’altro.
Raffaele Pesenti
25
Commenti:
• f(xk) restituisce la prima soluzione migliore che si riesce a determinare. Infatti non
conviene esplorare tutto I(xk) per determinare la migliore soluzione dell’intorno, tale
ricerca, dovendo essere iterata più volte, potrebbe essere troppo gravosa e
sperimentalmente non risulta nemmeno conveniente in termini della qualità di x*
ottenuta. Ovviamente nelle iterazioni finali però l’esplorazione di tutto l’intorno sarà
comunque necessario;
• la complessità di un algoritmo di ricerca locale si esprime in termini dell’onere
computazionale necessario per valutare la funzione f(xk) ad ogni iterazione.
Infatti il numero di iterazioni, nel caso peggiore, è comunque esponenziale (vedi, e.g., il
simplesso);
Raffaele Pesenti
Metaeuristica di ricerca locale
Commenti:
• in generale non conviene particolarmente partire da una soluzione x0 buona prima di
applicare un euristica di ricerca locale, è infatti probabile di rimanere rapidamente
bloccati in un minimo locale;
• conviene iterare più volte l’euristica a partire da soluzioni possibilmente molto diverse
e scegliere quindi il migliore degli ottimi locali ottenuti;
• è comunque sempre opportuno, dopo avere ottenuto una soluzione ammissibile
attraverso un’euristica costruttiva, applicare un’euristica di ricerca locale per
verificare se la soluzione ottenuta non può essere banalmente migliorata;
• a volte prima di applicare una euristica di ricerca locale conviene rilassare
lagrangianamente alcuni vincoli del problema, limitandosi a penalizzare il mancato
rispetto di alcune condizioni piuttosto che ad imporre le stesse. In questo modo risulta
più semplice determinare una sequenza di soluzioni ammissibili per il problema
rilassato mentre si cerca di giungere a una soluzione che soddisfi tutti i vincoli
originari scegliendo ad ogni passo le soluzioni che localmente minimizzano la
violazione dei vincoli. Questo approccio viene applicato quando, e.g., nel set
partioning, già determinare l’esistenza di una soluzione ammissibile è NP-completo.
Raffaele Pesenti
27
26
Ricerca locale
Esempi:
problema del commesso viaggiatore TSP(G(V,E), c,s,min): euristica detta 2–
opt. Concetto base: ad ogni passo si eliminano due rami, si ricongiungono i
due semicircuiti.
Algoritmo 2-opt:
si parte da un circuito hamiltoniano,
si eseguono tutti gli scambi 2–opt
(fra tutte le coppie di rami del circuito)
che riducono la lunghezza.
Efficacia: 8% più del minimo in media
Raffaele Pesenti
28
archi da rimuovere
2-opt
Circuito iniziale
archi da rimuovere
Circuito passo 1
Semicircuiti
nuovi archi
Circuito passo 1
Circuito passo 2
nuovi archi
notare l’inversione del verso di
percorrenza di un semicircuito
Raffaele Pesenti
29
Raffaele Pesenti
archi da rimuovere
30
Ricerca locale
Esempi (cont.):
problema del commesso viaggiatore TSP(G(V,E), c,s,min): euristica detta 3–
opt. Concetto base: ad ogni passo si eliminano tre rami, si ricongiungono i tre
semicircuiti.Efficacia: 4% più del minimo in media.
Si generalizza a k-opt.
archi da rimuovere
Circuito passo 2
nuovi archi
Circuito iniziale
Circuito passo 3
ecc..
Raffaele Pesenti
Nuovo circuito
31
Raffaele Pesenti
32
Intorni: definizioni e commenti
Ricerca locale
Esempi (cont.):
Problema di scheduling 1/ri/ΣCi(U,p,r, min): ad ogni passo si scambiano di
posto due operazioni (anche non necessariamente adiacenti)
Scheduling iniziale
J1
0
Scheduling dopo scambio J1 con J2
J2
J1
0 1 2
ΣCi =10+11+13=34
J2 J3
10 11 13
J3
Definizioni:
• Distanza: date due soluzioni x e x’, la distanza d(x,x’) tra di esse è definita
come il numero di elementi che appaiono in una delle due soluzioni ma non
in entrambe. Nel caso di x e x’ binarie, d(x,x’) = Σi|xi-xi’|.
Ad esempio nel caso del TSP le soluzioni x e x’ sono dei vettori di incidenza
sull’insieme E degli archi della rete. In particolare la componente xi è posta a
1 se l’arco i-mo è parte del circuito a 0 nel caso contrario. L’algoritmo 2-opt
genera una successione di soluzioni tali che d(xk, xk+1)=4.
• Dimensione: la dimensione di un intorno | I(xk) | è definita come il numero
degli elementi (soluzioni) che lo compongono.
ΣCi =2+12+14=28
12 14
Raffaele Pesenti
33
• Distance-k-neighborhood: intorno che contiene tutte le soluzioni a distanza
k dalla soluzione incombente. La dimensione di un distance-k-neighborhood
tipicamente cresce in modo esponenziale al variare di k, ordine O(nk).
Raffaele Pesenti
Intorni: definizioni e commenti
34
Intorni: definizioni e commenti
Commenti:
• maggiore è la dimensione dell’intorno maggiore è la probabilità di giungere
ad una soluzione x* di buona qualità, cresce però l’onere computazionale. Al
limite, infatti, l’intorno può comprendere tutte le soluzioni ammissibili.
Bisogna quindi cercare un punto di equilibrio tra qualità della soluzione e
tempi di calcolo.
• negli esempi riportati il numero degli elementi di ogni intorno I(xk) è
polinomiale O(n2). e quindi ogni iterazione di ricerca locale rimaneva
polinomiale anche se venivano esplorati tutti gli elementi dell’intorno.
• quando possibile conviene definire intorni il cui numero di elementi sia
esponenziale, ma che abbia una struttura tale che sia possibile determinare
l’elemento a costo minimo in tempo polinomiale.
• In alternativa, nel caso in cui non si riesca a determinare una soluzione
migliore di quella incombente, si possono definire intorni la cui dimensione
varia, ad esempio considerando distance-k-neighborhood con k crescenti..
Bibliografia:
• R.K. Ahuja, Ö. Ergun, J.B. Orlin, A. P. Punnen, “A survey of very largescale neighborhood search tecniques”, Discrete Applied Mathematics 123
(2002) 75-102.
• P. Hansen, N. Mladenović, “Variable neighborhood search: Principle and
applications”, European Journal of Operational Research, 130 (2001) 449467.
Raffaele Pesenti
Raffaele Pesenti
35
36
Esempio
Scheduling di m = 10
task su n=3 macchine
late tasks
EDD schedule
total lateness = 18
Raffaele Pesenti
37
Raffaele Pesenti
negative circuit
improvement
total lateness = 11
Raffaele Pesenti
38
best 2-exchange
total tardiness = 12
39
Raffaele Pesenti
40
Metaeuristica tabù search
Altre strategie di esplorazione dell’intorno
Tabu search:
• Utilizzando una funzione f(xk) che determina una soluzione successiva non
peggiore (o addirittura che determina la soluzione successiva ottima tra
quelle appartenenti all’intorno) in generale si rimane intrappolati in un ottimo
locale.
• Può allora convenire usare una funzione g(xk) che a volte determina una
soluzione successiva peggiore della precedente nella speranza di ‘saltare’
fuori dall’ottimo locale. Su questa filosofia si basano, ad esempio, due
metaeuristiche di ricerca locale:
– tabu search
– simulated annealing
Raffaele Pesenti
la tabu search è una metaeuristica di ricerca locale che permette passi in cui
avvengono dei peggioramenti con criteri deterministici.
Si definiscono dei criteri di accettazione della soluzione generata a soglia
basati non necessariamente solo sul valore della funzione obiettivo.
Poiché si accettano anche soluzioni che inducono peggioramenti della
funzione obiettivo, per evitare di ritornare su soluzioni già visitate, ad ogni
passo viene aggiornata una lista di operazioni vietate (tabù) che
riporterebbero su soluzioni già visitate.
Raffaele Pesenti
41
Metaeuristica tabù search
Metaeuristica tabù search
Metaeuristica TabuSearch
1. inizializzazione:
si genera una soluzione iniziale ammissibile x0, si pone TabuList = nil, k = 0;
2. iterazione:
do {
[y1, y2, ..., yn] =g(xk)
y = h((y1, y2, ..., yn), TabuList,
//genera un insieme di nuove soluzioni alternative
xk)
//seleziona la migliore alternativa se esiste
if (y = nil) {cambiamento = FALSE}
function h((y1, y2, ..., yn), TabuList, xk)
1. inizializzazione:
z* = ∞, i* = 0, y0= nil;
2. iterazione:
for (i = 1; i <= n; i++) {
if ((yi not in TabuList) or (f(yi) == TRUE) //valuta se yi non è tabù o soddisfa delle “aspirazioni”
//valuta se yi è migliore della soluzione yi* corrente
if (cyi < z*) {z* = cyi, i* = i}
}
else { xk+1 = y; cambiamento = TRUE, aggiorna(TabuList) }
k= k+1
} while (cambiamento and k < M) //rimane nel loop se si è verificato un cambiamento di
//soluzione e se non si è superato un limite massimo di mosse
return
//viene restituita la migliore soluzione xk ottenuta
Raffaele Pesenti
42
43
return (yi*)
Raffaele Pesenti
//viene restituita la migliore soluzione yi* ottenuta
44
Metaeuristica tabù search
Metaeuristica tabù search
Commenti:
• Sono ovviamente critiche per algoritmi tabù search la definizione delle
funzioni:
– g(xk) che determina un insieme di nuove soluzioni nell’intorno di xk, nei
metodi più semplici tale insieme è generato in modo casuale, nei metodi
più complessi tenendo conto delle statistiche delle soluzioni già visitate e
delle caratteristiche strutturali del problema;
– h((y1, y2, ..., yn), TabuList, xk) che ad ogni iterazione deve determinare la
nuova migliore soluzione;
– f(y) che descrive i criteri di aspirazione ovvero l’insieme di quelle
condizioni che permettono di violare i tabù;
• nello pseudocodice presentato per semplicità concettuale le funzioni g(.) e
h(.) sono presentate separatamente ma in molti algoritmi sono fuse assieme;
• la tabù search viene applicata con discreto successo anche quando alcuni dei
vincoli del problema originale vengono rilassati lagrangianamente. In questo
caso i criteri di aspirazione possono prevedere la soddisfazione dei vincoli.
Commenti (continuazione):
• la TabuList ha una lunghezza massima prefissata (o anche definibile
dinamicamente), una volta raggiunto il limite massimo di mosse tabù (in
generale non più di una decina) un nuovo tabù può essere immesso nella lista
solo dopo averne eliminato uno già presente;
• gli algoritmi più avanzati tengono contemporaneamente conto di più
TabuList. Possono convivere liste che descrivono una memoria a breve
termine e liste che descrivono una memoria a lungo termine (che cioè
impediscono la generazione di determinate soluzioni per un più lungo
periodo). La memoria a breve termine favorisce una ricerca intensiva di un
intorno di soluzioni, la memoria a lungo termine la diversificazione delle
soluzioni generate, in questo caso le TabuList possono essere usate anche
dalla funzione g(xk). Possono anche convivere liste che tengono conto di
aspetti diversi del problema (e.g., in un problema di scheduling
l’assegnazione e la sequenziazione delle operazioni);
• definire i criteri di aggiornamento delle TabuList è un altro degli aspetti
critici delle euristiche tabù search.
Raffaele Pesenti
Raffaele Pesenti
45
46
Tabù search
Tabù search
archi dell’albero
Esempio*:
Problema - minimo albero ricoprente con vincoli aggiuntivi (side constraints):
data la rete in figura determinare l’albero ricoprente minimo che soddisfi le
seguenti condizioni aggiuntive:
– solo uno tra gli archi a, b, f può essere presente
– l’arco a può essere presente solo se è presente anche l’arco c
a6
d2
f8
b9
c 18
e0
g 12
*tratto dal lavoro di Glover (vedi bibliografia)
Raffaele Pesenti
a6
b9
d2
e0
g 12
f8
Approccio basato su tabù search
• la scelta dell’intorno è basata su scambio di archi
• il tabù impedisce di scambiare gli
ultimi due archi inseriti
• il criterio di aspirazione permette di violare il
tabù se si ottiene una soluzione migliore di quella
correntemente ottima
• i vincoli possono essere violati pagando una
penalità di 50 per ogni violazione
47
a6
d2
f8
Raffaele Pesenti
c 18
b9
arco escluso dall’albero
tramite scambio
archi tabù dell’albero
passo 0: soluzione generata con algoritmo di Prim
trascurando i vincoli.
Soluzione correntemente ottima,
ma non ammissibile z = 116
c 18
e0
g 12
passo 1: scambio di a con c.
Ottimo locale.
Soluzione correntemente ottima,
z = 28
48
Tabù search
a6
b9
d2
a6
d2
f8
c 18
e0
g 12
f8
b9
Metaeuristica simulated annealing
c 18
e0
g 12
passo 2: scambio di f con g.
Scambio che induce un peggioramento,
inevitabile data l’ottimalità della soluzione
al passo precedente, z = 32
passo 3: scambio di c con b.
Scambio che viola un tabù, ma che viene
effettuato in quanto induce una soluzione
migliore di quella correntemente ottima.
Nuova soluzione correntemente ottima,
z = 23.
La soluzione corrente è l’ottimo assoluto.
Raffaele Pesenti
49
Simulated annealing:
• la simulated annealing è un algoritmo per la soluzione di problemi
combinatori NP-hard basato sulla metafora della annichilazione dei metalli:
si raggiunge uno stato di minima energia non troppo velocemente in modo da
evitare che si raggiunga una struttura cristallina finale di energia non minima;
• la simulated annealing è una metaeuristica di ricerca locale che permette
passi in cui avvengono dei peggioramenti con probabilità che decresce nel
tempo;
• il tasso di decremento è detto cooling schedule.
Raffaele Pesenti
Metaeuristica simulated annealing
Metaeuristica simulated annealing
Metaeuristica SimulatedAnnealing
Commenti:
• la funzione g(xk) determina una nuova soluzione ammissibile nell’intorno di
x k;
• la funzione h(Tk) definisce la politica di raffreddamento cooling schedule ;
• se g(xk) sceglie con probabilità uniforme un qualunque elemento dell’intorno
di xk, se Tk→0 , se tutte le soluzioni sono raggiungibili a partire da qualunque
altra soluzione e se o gli intorni hanno tutti la stessa grandezza o la
probabilità di scegliere y dato xk è uguale a quella di scegliere xk dato y,
allora quando k→∞ la soluzione più probabile a cui converge l’algoritmo è
quella ottima.
• la difficoltà risiede nel fatto che l’algoritmo converge tanto più lentamente
quanto più Tk tende a 0, d’altra parte se Tk non tende a 0, la soluzione ottima
non è la più probabile. E’ quindi critica la scelta del cooling schedule,
l’algoritmo converge all’ottimo in probabilità solo in tempi esponenziali.
• di solito risultano buoni compromessi h(Tk) = 1/log(k) oppure h(Tk) = aTk
con 0<a<1.
1. inizializzazione:
si genera una soluzione iniziale ammissibile x0 ed una temperatura iniziale T0
2. iterazione:
do {
cambiamento = FALSE
for (i = 0,( i < N) && (cambiamento = FALSE), i++) {
y =g(xk)
∆ = cy - cxk
//valutazione della soluzione y generata
k+1
if (∆ <0) {x = y; cambiamento = TRUE}
else (con probabilità exp(-∆ /T k)){ xk+1 = y; cambiamento = TRUE}
}
Tk+1 = h(Tk)
} while cambiamento
//esce dal loop quando la condizione è falsa
return
//viene restituita la migliore soluzione xk ottenuta
Raffaele Pesenti
50
51
Raffaele Pesenti
52
Metaeuristica simulated annealing
Altre Metaeuristiche
Algoritmi genetici, Ant colonies, ...
gli algoritmi basati su fenomeni naturali quali la selezione naturale,
l’organizzazione di colonie di formiche, ecc... hanno ottenuto qualche
successo su problemi specifici, ma non sembrano in generale essere superiori
a quelli basati su tabù search ed in seconda istanza sulla simulated annealing.
Commenti:
• Sia la simulated annealing che la tabu search appaiono promettenti per la
risoluzione euristica di problemi difficili quali quelli di scheduling le cui
istanze reali attualmente appaiono di dimensione troppo grande per essere
affrontate con gli algoritmi esatti disponibili;
Reti neurali
le reti neurali hanno indubbi successi quando applicate a problemi di
riconoscimento o di ottimizzazione e controllo continuo. Viceversa i risultati
ottenuti della loro applicazione al campo dei problemi combinatori sono, allo
stato attuale, non ancora competitivi in termini di onere computazionale e di
qualità con quelli ottenuti con altre tecniche.
• in generale però la simulated annealing converge lentamente ed è applicata
solo quando altre euristiche falliscono.
Raffaele Pesenti
53
Raffaele Pesenti
Euristiche e approssimazioni specifiche
Ipotesi
Commesso viaggiatore:
nel seguito vengono presentate euristiche o algoritmi di approssimazione ed
esatti specifiche per il problema del commesso viaggiatore diverse da quelle
già viste in precedenza.
Procedure che costruiscono un circuito hamiltoniano:
inserimento
doppio albero ricoprente
Christofides
risparmi
Procedure che migliora un circuito hamiltoniano dato:
K-opt (già viste)
Lin – Kernighan
Raffaele Pesenti
54
55
• disuguaglianza triangolare:
il percorso diretto tra due nodi non è più costoso di qualunque indiretto:
cij ≤ cik + ckj
Per i problemi logistici tale ipotesi è pressoché sempre verificata.
Nel seguito si assume sempre che
• tutti i costi siano non negativi
• valga la disuguaglianza triangolare (che i TSP siano metrici)
• tutte le distanze siano simmetriche
Raffaele Pesenti
56
Premessa
Tipi di euristiche
Si risolvono in modo esatto in pochi minuti TSP di centinaia di nodi, in un
ora o poco più TSP di 1000 nodi. Quando allora utilizzare euristiche invece
che algoritmi esatti?
• quando le dimensioni del problema sono eccessive rispetto a quelle risolvibili
attraverso algoritmi esatti
• quando i problemi, anche se limitate dimensioni, devono essere risolti in
tempi estremamente brevi
costruttive
– costruiscono un circuito hamiltoniano
di miglioramento
– partono da un circuito hamiltoniano e ne producono uno migliore
• quando i dati del problema sono approssimati e quindi non vale la pena
cercare la soluzione esatta
• quando si risolvono problemi simili, ma non identici a quelli affrontati dagli
algoritmi esatti. Questi ultimi sono molto meno generalizzabili delle
euristiche
Raffaele Pesenti
57
Raffaele Pesenti
Nodo più prossimo
Nearest Neighbor
58
Esempio
C
A
Algoritmo base
parte da un nodo di riferimento (tipicamente il magazzino centrale
oppure un estremo del arco meno costoso)
passa al nodo più vicino
B
Variante: a doppia crescita
D
E
Raffaele Pesenti
59
Raffaele Pesenti
distanze euclidee
60
Esempio
Nodo più prossimo
Nearest Neighbor
C
A
Euristica Nodo più Prossimo
B
Percorso non ottimo.
Il percorso ottimo, nel caso di
distanze euclidee, non contiene
incroci.
D
Commenti:
non funziona molto bene:
i primi archi sono brevi, gli ultimi molto lunghi
però gli archi molto lunghi sono pochi:
può essere una buona base da migliorare
semplice da implementare
errore di approssimazione < ½ ceil(log(n)) + ½
soluzioni mediamente del 25% superiori al minimo effettivo
complessità computazionale O(n2)
E
Raffaele Pesenti
61
Raffaele Pesenti
62
Esempio
Inserimento
Matrice distanze
A
A
0
B
85
C
47
D
57
E
87
Algoritmo base
si parte da un circuito parziale
si inseriscono nuovi nodi
Regole di inserimento (errore medio, errore massimo):
– nodo più vicino (20%, 200%)
– nodo più lontano (10%, ceil(log(n))+1)
– inserimento più economico (17%, 200%)
– inserimento casuale (11%, ceil(log(n))+1)
Raffaele Pesenti
B
85
0
43
52
38
C
47
43
0
48
58
D
57
52
48
0
32
E
87
38
58
32
0
Si noti la simmetria della matrice che implica che le distanze tra i nodi non
dipendono dai versi di percorrenza.
63
Raffaele Pesenti
64
C
Esempio
Esempio
A
Euristica Inserimento
Nodo più Lontano
B
Passo 2)
Si cerca il nodo più distante da entrambe i nodi A ed E, cioè il nodo per cui sia
massima la massima distanza da A ed E.
Si confrontano quindi le distanze dei seguenti nodi:
• B: BA = 85, BE = 38, distanza massima BA = 85
• C: CA = 47, CE = 58, distanza massima CE = 58
• D: DA = 57, DE = 32, distanza massima DA = 57
Il nodo più distante è B. Infatti, BE è il valore massimo tra 85, 57 e 57.
D
E
Passo 1)
I nodi a distanza massima sono A ed E. AE = 87.
Si forma un circuito parziale A-E-A da A ad E e ritorno da E a A.
A-E-A è lungo 87 + 87 = 174.
(continua)
Raffaele Pesenti
65
Raffaele Pesenti
66
Esempio
Esempio
(continuazione)
Si inserisce il nodo B nel circuito parziale.
Data la simmetria delle distanze e' indifferente dove avviene l'inserzione.
Si supponga di inserire B nel percorso di andata da A ad E.
In questo caso si risparmiano i 87 Km da A ad E, ma si pagano i 85 Km da A a B e
gli 38 da B ad E. L'aumento complessivo e' di 85 + 38 - 87 = 36 Km.
Il nuovo percorso e' A-B-E-A lungo 85 + 38 + 87 = 210.
C
Euristica Inserimento
Nodo più Lontano
A
B
D
E
Raffaele Pesenti
67
Raffaele Pesenti
68
Esempio
Esempio
Euristica Inserimento
Nodo più Lontano
C
Passo 3)
Si cerca il nodo più distante da i nodi del circuito parziale corrente, cioè dai nodi A,
B ed E.
In altre parole, si cerca il nodo r cui sia massima la massima distanza da A, da B e
da E.
Si confrontano quindi le distanze dei seguenti nodi:
• C: CA = 47, CB = 43, CE = 58, distanza massima CE = 58
• D: DA = 57, DB = 52, DE = 32, distanza massima DA = 57
Il nodo più distante è C. CB è il valore massimo tra 58 e 57.
Si inserisce il nodo C nel circuito parziale.
Bisogna decidere se conviene inserire C tra A e B, oppure tra B ed E, oppure infine
tra E e A.
A
B
D
E
(continua)
Raffaele Pesenti
69
Raffaele Pesenti
70
Esempio
Esempio
(continuazione)
Si fanno tutti i tentativi:
• C tra A e B: si risparmiano i 85 Km da A a B, ma si pagano i 47 Km da A a C e i 43
da C ad B. Incremento totale 47 + 43 - 87 = 3;
• C tra B e E: si risparmiano i 38 Km da B ad E, ma si pagano i 43 Km da B a C e i 57
da C ad E. Incremento totale 43 + 58 - 38 = 63;
• C tra E e A: si risparmiano i 87 Km da E a A, ma si pagano i 58 Km da E a C e i 47
da C ad A. Incremento totale 58 + 47 - 87 = 18.
Conviene quindi inserire C tra A e B in modo da incrementare al minimo la lunghezza
del percorso parziale.
Il nuovo percorso parziale è A-C-B-E-A lungo 47 + 43 + 38 + 87 = 215.
C
Euristica Inserimento
Nodo più Lontano
A
B
D
E
Raffaele Pesenti
71
Raffaele Pesenti
72
Esempio
Esempio
Passo 4)
Non rimane che inserire D nel circuito parziale.
Bisogna decidere se conviene inserire D tra A e C, oppure tra C e B, oppure tra B
ed E, oppure infine tra E ed A.
Si fanno tutti i tentativi:
• D tra A e C: si risparmiano i 47 Km da A a C, ma si pagano i 57 Km da A a D e gli
48 da D ad C.
Incremento totale 57 + 48 - 47 = 58;
• D tra C e B: si risparmiano i 43 Km da C a B, ma si pagano i 48 Km da C a D e gli
52 da D ad B.
Incremento totale 48 + 52 - 54 = 46;
C
Euristica Inserimento
Nodo più Lontano
A
B
D
E
(continua)
Raffaele Pesenti
73
Raffaele Pesenti
74
Esempio
Esempio
(continuazione)
• D tra B e E: si risparmiano i 38 Km da B ad E, ma si pagano i 52 Km da B a D e i
32 da D ad E.
Incremento totale 52 + 32 - 38 = 58;
• D tra E e A: si risparmiano i 87 Km da E a A, ma si pagano i 32 Km da E a D e i
57 da D ad A.
Incremento totale 32 + 57 - 87 = 2.
Conviene quindi inserire D tra E e A in modo da incrementare al minimo la
lunghezza del percorso parziale.
Il percorso finale e' A-C-B-E-D-A lungo 47 + 43 + 38 + 32 + 57 = 217.
C
Euristica Inserimento
Nodo più Lontano
A
B
D
E
Raffaele Pesenti
75
Raffaele Pesenti
76
Doppio albero ricoprente
Esempio
Concetti base:
• albero
una rete:
con numero di rami pari al numero di nodi meno 1
senza circuiti
connesso
un albero ricoprente minimo è l’albero di lunghezza minima che
tocca tutti i nodi. Sia c(MST) il costo di tale albero.
C
Euristica Inserimento
Nodo più Lontano
A
B
D
E
• ogni percorso hamiltoniano è un albero il cui costo è certamente non
inferiore al costo dell’albero ricoprente minimo
Risultato finale
Raffaele Pesenti
77
Raffaele Pesenti
Doppio albero ricoprente
Doppio albero ricoprente
• ogni circuito hamiltoniano è composto da un percorso hamiltoniano a cui è
stato aggiunto un arco. Il costo del circuito hamiltoniano minimo, c(TSP)
è certamente non inferiore al costo dell’albero ricoprente minimo: c(MST) ≤
c(TSP)
• da un albero ricoprente minimo si può generare un circuito che visiti,
eventualmente più volte, tutti i nodi. Basta percorrere tutti gli archi nei due
sensi ritornano indietro solo quando non ci sono alternative. Un circuito così
ottenuto ha un costo 2c(MST), il cui valore è certamente non inferiore a
quello del circuito hamiltoniano minimo: c(MST) ≤ c(TSP) ≤ 2c(MST).
• se vale la diseguaglianza triangolare, è possibile ridurre il circuito
ottenuto al passo precedente ad un circuito hamiltoniano di costo non
superiore c(CH) ≤ 2c(MST), basta seguire il circuito, saltando i nodi già
visitati. Si ottiene un circuito per cui vale
c(MST) ≤ c(TSP) ≤ c(CH) ≤ 2c(MST).
Raffaele Pesenti
78
79
Algoritmo:
si parte da un albero ricoprente minimo,
si raddoppia gli archi per avere un giro completo,
si ricava un circuito hamiltoniano.
Efficacia:
• al peggio 100% più del minimo
infatti un albero ricoprente minimo non è più lungo del minimo circuito
hamiltoniano,
• 38% in media.
Raffaele Pesenti
80
Esempio
Esempio
C
B
C
B
D
D
A
A
albero minimo
E
E
Raffaele Pesenti
81
Esempio
Raffaele Pesenti
82
C
Esempio
C
taglio dei nodi
già visitati,
percorso
B-E-D-A-C-B
primo percorso
B-E-D-A-D-C-D-E-B
B
D
B
D
E
A
NB: si giungeva ad un risultato peggiore partendo dal percorso B-E-D-C-D-A-D-E-B
E
Raffaele Pesenti
A
83
Raffaele Pesenti
84
Christofides
Esempio
C
Concetti base:
• ordine di un nodo: numero degli archi incidenti.
Algoritmo:
si parte da un albero ricoprente minimo,
si connettono al meglio i nodi di ordine dispari (matching),
si ricava un circuito hamiltoniano.
B
Efficacia:
• 50% più del minimo nel peggiore dei casi. Questa è la migliore
approssimazione per TSP metrici non euclidei.
• 10 – 20% in media.
D
A
E
Raffaele Pesenti
85
Esempio
Raffaele Pesenti
86
Esempio
C
nodi dispari: B, D, A, C
C
primo circuito:
B-E-D-A-C-D-B
archi di matching: BD, CA
B
B
D
D
A
albero minimo in nero
A
E
E
Raffaele Pesenti
87
Raffaele Pesenti
88
Esempio
Risparmi
C
circuito migliorato:
B-E-D-A-C-B
Algoritmo:
si parte con n – 1 circuiti parziali da un nodo arbitrario,
per ogni coppia di circuiti parziali si calcola quanto si risparmierebbe
fondendoli assieme,
si fondono i due circuiti parziali più convenienti.
B
Efficacia: 10% più del minimo in media, ordine log(n) nel caso peggiore.
D
A
E
Raffaele Pesenti
89
Raffaele Pesenti
Tipi di euristiche
90
Lin – Kernighan
Concetto base:
• k – opt con k variabile.
costruttive
– costruiscono un circuito hamiltoniano
Algoritmo:
si effettua k – opt,
si valuta se effettuare (k+1) – opt.
di miglioramento
– partono da un circuito hamiltoniano e ne producono uno migliore
Efficacia: 1% in più dell’ottimo in media.
Raffaele Pesenti
91
Raffaele Pesenti
92
Bibliografia
• P. Serafini, Ottimizzazione, Franco Angeli, Milano, I, 2000
• F. Glover, “Tabù Search: a Tutorial”, Interfaces,20:4, 1990, pp. 74-94
• M. L. Fisher, “An Application Oriented Guide to Lagrangian Relaxation”,
Interfaces,15:2, 1985, pp. 10-21
• K. A. Smith, “Neural Networks for Combinatorial Optimization: A Review
of More Than a Decade of Research”, INFORMS Journal on Computing,
11:1, 1999, pp. 15-34.
Raffaele Pesenti
93
Scarica