29/04/200 5 Algoritmi euristici: III – Ricerca Locale Daniele Vigo D.E.I.S. - Università di Bologna [email protected] rev. 2.0 - aprile 2005 Algoritmi di Ricerca Locale • partono da una soluzione (generalm. ammissibile) • cercano iterativamente di migliorarla effettuando semplici modifiche della soluzione corrente (mosse) (ad esempio scambi tra elementi in soluzione e non) • Terminano quando non esistono più modifiche del tipo scelto in grado di migliorare la soluzione corrente • in inglese detti Local Search algorithms • Si possono applicare anche quando la soluzione non è ammissibile D. Vigo Eurist.2 1 29/04/200 5 Algoritmi di Ricerca Locale (2) • Es. KP-01, z = Σ pi xi , e W’ = Σ wi xi tipi di mosse: 1. Inserzione: Se esiste un oggetto j non in soluzione che può sessere inserito, inseriscilo nello zaino 2. Scambio 1-1: Se esiste una coppia di oggetti di cui il primo sia in soluzione ed il secondo no, scambiali tra loro 3. Scambio 1-2: idem, ma con una terna di oggetti di cui il primo sia in soluzione e gli altri no D. Vigo Eurist.3 Algoritmi di Ricerca Locale (3) • Si può eseguire: • il primo scambio migliorante (first improvement) • il migliore tra quelli ammissibili (best improvement) • L’insieme delle soluzioni ottenibili dalla soluzione corrente con un tipo di mossa si chiama intorno (neighborhood) D. Vigo Eurist.4 2 29/04/200 5 Neighborood Function • Dato un problema di ottimizzazione P = ( f, S ) • S • f:S→R • S* insieme soluzioni ammissibili di P funzione obiettivo insieme delle soluzioni ottime • Neighborhood, (Intorno, Vicinato): N : S → 2S che ∀ i ∈ S definisce N(i) ⊆ S insieme delle soluzioni “prossime” ad i • In generale si assume che i ∈ N(i), ∀ i ∈ S • Gli algoritmi Local Search cercano di migliorare una soluzione esplorandone un Neighborhood D. Vigo Eurist.5 Iterative Improvement Algorithm • Algoritmo base Local Search (a discesa semplice) • Versione “First Improvement” Procedure FI_Simple_Descent (s) /*s ∈ S sol. iniziale*/ Trovata := TRUE ; while Trovata = TRUE do Trovata := FALSE ; for each s' ∈ N (s) do if f (s') < f (s) then s := s' ; Trovata = TRUE ; break; end while; return (s); D. Vigo Eurist.6 3 29/04/200 5 Iterative Improvement Algorithm (2) • Converge ad un ottimo locale s rispetto ad N(•) ossia una soluzione s : f (s) ≤ f (i) ∀ i ∈ N(s) • versione “Best Improvement” Procedure BI_Simple_Descent (s) Trovata := TRUE ; while Trovata = TRUE do Trovata := FALSE ; s_best = s; for each s' ∈ N (s) do if f (s') < f (s_best) then s_best = s’ if s_best < > s then s := s_best ; Trovata = TRUE ; end while; return (s); D. Vigo Eurist.7 Iterative Improvement Algorithm (3) • |N(s)| := cardinalità del Neighborhood • Ogni iterazione dell’algoritmo richiede tempo: O(|N(s)| × tempo necessario a valutare f(s) ) • Il numero di iterazioni necessarie a raggiungere l’ottimo locale può essere molto elevato D. Vigo Eurist.8 4 29/04/200 5 Algoritmi Local Search • Applicabilità molto generale • Flessibilità rispetto a modifiche del problema • Richiedono : • • • • Valutatore di una soluzione (Funzione obiettivo) Verifica di ammissibilità di una soluzione Neighborhood function Tecnica di esplorazione efficiente del Neighborhood • Si possono applicare anche quando la soluzione non è ammissibile f.ob.LS = f.ob. + penalità * violazione dei vincoli D. Vigo Eurist.9 Algoritmi Local Search (2) • Problema centrale: Definizione del Neighborhood • Fortemente dipendente dal problema • Non esistono regole generali • Obiettivo: costruire Neighborhood Functions che conducano a soluzioni di elevata qualità • Dato un problema è possibile definire diversi tipi di Neighborhood Functions • Es. KP-01: inserzione, scambio 1-1, scambio 1-2 … D. Vigo Eurist.10 5 29/04/200 5 Neighborhood Basati su Scambi • • In inglese: exchange neighborhoods Classe molto generale: Si applicano quando la soluzione è una sequenza (TSP) o una partizione (KP) • Es. KP-01, z = Σ pi xi , e W’ = Σ wi xi 1. Inserzione: Se esiste un oggetto j: xj = 0 e W’ + wj≤ K, poni xj = 1 ed aggiorna z e W’ • • • Valutazione della soluzione: tempo costante O(1) |N (s)| = O(n) Tempo per una iterazione: O(n) D. Vigo Eurist.11 Neighborhood Basati su Scambi (2) 2. Scambio 1-1: Se esiste una coppia (i, j): xi = 1 e xj = 0 e con pi ≤ pj , wi ≥ wj (con Greedy mai verificato) poni xi = 0 e xj = 1 ed aggiorna z e W’ • Valutazione della soluzione: tempo costante O(1) • |N (s)| = O(n2) = Tempo per una iterazione 3. Scambio 1-2: Se esiste una terna (i, j, h): xi = 1 e xj = xh = 0 e pi < pj + ph , W’ – wi + wj + wh ≤ K poni xi = 0 e xj = xh = 1 ed aggiorna z e W’ • Valutazione della soluzione: tempo costante O(1) • |N (s)| = O(n3) = Tempo per una iterazione D. Vigo Eurist.12 6 29/04/200 5 Scambi per TSP • Data una soluzione s questa può essere descritta mediante il vettore dei successori • σ(i) := successore vertice i nella soluzione 2 1 3 i 4 6 1 2 3 4 5 6 σ(i) 2 4 1 6 3 5 5 π(i) 3 1 5 2 6 4 • Se la soluzione è orientata si possono definire: • π (i) := predecessore vertice i nella soluzione • Si noti che π (σ (i)) = σ (π (i)) = i D. Vigo Eurist.13 Scambi per TSP (2) • si rimuovono k archi da s e si sostituiscono con k archi precedentemente non in s. k=2 i i j j ⇒ σ(j) σ(i) σ(j) σ(i) 1. si rimuovono gli archi (i,σ(i)) e (j,σ(j)) 2. si inseriscono gli archi (i, j) e (σ(i),σ(j)) • costo nuova sol. γij = ci,j+ cσ(i),σ(j) - cι,σ(i) - cj,σ(j) • |N(s)| = O(n2), valutazione in O(1) D. Vigo Eurist.14 7 29/04/200 5 Scambi per TSP (3) • Se problema orientato (ATSP) j i j i ⇒ σ(i) σ(j) σ(i) σ(j) • per riottenere una soluzione ammissibile vanno invertiti tutti gli archi tra j e σ(i) • γij = ci,j+ cσ(i),σ(j) - cι,σ(i) - cj,σ(j) … + cσ(h),h - ch,σ(h) per ogni arco invertito • valutazione in O(n) (si può fare in tempo costante) D. Vigo Eurist.15 Scambi per TSP (3) • k=3 j i σ(i) σ(h) h j σ(j) i σ(i) σ(h) h σ(j) D. Vigo • si può ricombinare in 4 modi diversi • |N(s)| = O(n3), • valutazione in O(1) Eurist.16 8 29/04/200 5 j Scambi per TSP (4) j i i σ(i) σ(i) σ(h) σ(h) h h σ(j) j σ(j) j i i σ(i) σ(i) σ(h) σ(h) h h σ(j) σ(j) D. Vigo Eurist.17 Scambi Or-opt • Caso speciale di 3-opt (proposti da Or) • si considerano gli scambi in cui un gruppo di vertici consecutivi (1…3) si inserisce tra 2 vertici adiacenti • O(n²) scambi per tipo σ(i) σ(i) i i j σ(h) D. Vigo h=σ(j) j σ(h) h=σ(j) Eurist.18 9 29/04/200 5 Miglioramenti • La qualità dell’ottimo locale raggiunto dipende dalla soluzione iniziale e dal neighborhood usato • Tecnica Multi-Start: genera diverse soluzioni iniziali (ad esempio con tecniche greedy e perturbazioni random) + ricerca locale per ciascuna di esse altra soluzione iniziale soluzione iniziale ottimo locale altro ottimo locale D. Vigo Eurist.19 Miglioramenti (2) • Tecnica Multi-Start s_best := + ∞; repeat Genera una soluzione s (diversa ad ogni iterazione); s' = FI_Simple_Descent(s); /* o BI_Simple_Descent(s) */ if f (s') < f (s_best) then s_best := s'; until (criterio di arresto) /*nº iterazioni, tempo massimo*/ • Variante Multi-Level: si può usare un diverso N(•) ad ogni iterazione D. Vigo Eurist.20 10