24/11/200 3 Algoritmi euristici. Parte I: metodi classici Daniele Vigo D.E.I.S. - Università di Bologna [email protected] rev. 1.0 - febbraio 2003 Algoritmi Euristici • Algoritmi Euristici, Approssimati, Approssimanti (In contrapposizione ad Esatti o di Ottimizzazione) • Un algoritmo euristico determina una soluzione di P ammisibile e di “ buona qualità ” in un tempo di calcolo accettabile • Per un problema di minimo un algoritmo euristico A determina un Upper Bound sul valore della soluzione ottima, z* (zA ≥ z*) • Esistono due grandi famiglie di euristici D. Vigo Eurist.2 1 24/11/200 3 Algoritmi Euristici Costruttivi • partono da una soluzione vuota • determinano iterativamente i nuovi elementi da aggiungere in soluzione fino ad ottenere una soluzione completa Es. Algoritmo Greedy per KP-01 (n, p, w, K) 1. Ordina gli oggetti secondo rapporti profitto/peso decrescenti 2. Inserisce gli oggetti nel contenitore (nell’ordine) fino al primo oggetto non più inseribile D. Vigo Eurist.3 Algoritmi di Ricerca Locale • partono da una soluzione (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 prescelto in grado di migliorare la soluzione corrente • in inglese detti Local Search algorithms D. Vigo Eurist.4 2 24/11/200 3 Algoritmi di Ricerca Locale (2) • Es. KP-01, z = Σ pi xi , e W’ = Σ wi xi tipi di mosse: 1. Se esiste un oggetto j: xj = 0 e W’ + wj ≤ K , poni xj = 1 ed aggiorna z e W’ 2. 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’ 3. Se esiste una terna (i, j, h): xi = 1 e xj = xh = 0 e con pi < pj + ph , W’ – wi + wj + wh ≤ K poni xi = 0 e xj = xh = 1 ed aggiorna z e W’ D. Vigo Eurist.5 Algoritmi di Ricerca Locale (3) • Si può eseguire il primo scambio che si trova o il migliore tra quelli ammissibili • Si possono applicare anche quando la soluzione non è ammissibile f.ls = f.ob + penalità * violazione dei vincoli D. Vigo Eurist.6 3 24/11/200 3 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.7 Iterative Improvement Algorithm • Algoritmo base Local Search (a discesa semplice) Procedure Simple_Descent (s) /*s ∈ S soluzione iniziale*/ Trovata := TRUE ; while Trovata = TRUE do Trovata := FALSE ; /* Versione “First Improvement”*/ for each s' ∈ N (s) do if f (s') < f (s) then s := s' ; Trovata = TRUE ; break; end while; return (s); D. Vigo Eurist.8 4 24/11/200 3 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.9 Miglioramenti • La qualità dell’ottimo locale raggiunto dipende dalla soluzione iniziale e dal neighborhood usato • Tecnica “Multi-Start” s_best := + ∞; repeat Genera una soluzione s (diversa ad ogni iterazione); s' = 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*/ • Si può usare un diverso N(•) ad ogni iterazione D. Vigo Eurist.10 5 24/11/200 3 Tecniche Meta-euristiche • Algoritmi Local Search che usano speciali tecniche per “uscire” dai minimi locali incontrati • devono evitare il verificarsi di “cicli” nell’evoluzione dell’algoritmo mossa “peggiorante” 1° ottimo locale ciclo !!! 2° ottimo locale D. Vigo Eurist.11 Euristici Costruttivi • Definiscono iterativamente la soluzione seguendo un semplice criterio di espansione • In alcuni casi sono basati su un pre-ordinamento degli elementi (Dispatching Rule): • Gli elementi vengono considerati nell’ordine ed eventualmente inseriti in soluzione; • Algoritmo Greedy (Goloso): • Criterio di espansione: massimizzazione (o min.) di un semplice criterio locale e non si prevede backtracking Es. KP-01 • ad ogni iterazione si inserisce l’elemento non inserito che ha massimo valore del rapporto pj/wj D. Vigo Eurist.12 6 24/11/200 3 Euristici Costruttivi per il TSP • Tour Construction Methods: • definiscono iterativamente la soluzione espandendo un ciclo (o un cammino) fino ad ottenere una soluzione ammissibile • Ingredienti di base: • Scelta del ciclo iniziale (o del vertice iniziale). • Ad ogni iterazione: • Criterio di selezione: scelta del vertice da inserire • Criterio di inserzione : scelta della posizione in cui inserire il vertice D. Vigo Eurist.13 Euristici Costruttivi per il TSP (2) • Alla generica iterazione h la soluzione corrente (parziale) è un cammino (ciclo) che “copre” un sottoinsieme di vertici S⊆V : • sequenza {s1, s2, …, s|S|} • Si termina quando S≡V (|S| = n) D. Vigo Eurist.14 7 24/11/200 3 Inizializzazione a) Metodi che espandono un cammino: a.1) si sceglie un vertice iniziale i arbitrariamente (Es. 1) s1 = i, equivale al ciclo degenere i b) Metodi che espandono un ciclo: s1 s2 il ciclo iniziale si ottiene : b.1) si sceglie la coppia di vertici s1, s2 tali che b1.1) siano i più vicini, (s1, s2) := arg min {cij: (i, j) ∈A} b1.2) siano i più lontani, (s1, s2) := arg max{cij: (i, j) ∈A} • Tempo: O(n2) D. Vigo Eurist.15 Inizializzazione (2) b.2) si sceglie s1= p arbitrariamente, come in a), e si determina s2 = q come il vertice : b2.1) più vicino a p b2.2) più lontano da p q := arg min {cp,j : (p, j) ∈ A} q := arg max {cp,j : (p, j) ∈ A} • Tempo : O(n) b.3) si scelgono s1 ed s2 arbitrariamente (es. s1= 1, s2= n oppure a caso) • Tempo : O(1) D. Vigo Eurist.16 8 24/11/200 3 TSP asimmetrico (ATSP) • Nei criteri b1) e b2) bisogna considerare l’asimmetria del grafo. SIMMETRICO p q ASIMMETRICO p q • costo = 2 cpq costo = cpq+ cqp Ad esempio in b1.1): (s1, s2) := arg min {cij + cji: (i, j), ( j, i) ∈A} D. Vigo Eurist.17 Inizializzazione (3) c) se TSP Euclideo (note le coordinate dei vertici) • il subtour iniziale è la convex hull di V = minimo insieme convesso che contiene V. D. Vigo Eurist.18 9 24/11/200 3 Criteri di selezione • • Selezione del nuovo vertice k: Espansione cammino: con il quale proseguire • • lo si inserisce dopo l’ultimo del cammino corrente Espansione ciclo: da inserire • bisogna poi decidere dove inserirlo a) scelta arbitraria • non applicabile se si espande un cammino • tempo : O(1) D. Vigo Eurist.19 Criteri di selezione (2) b) nearest selection: si sceglie il vertice più vicino ad S • Per ogni vertice (j ∉ S) sia β(j) = arg min {cij : i∈S} s2 b c s3 ≡ β(b), β(c) dato S, i β(j) si calcolano in O(n2) in modo incrementale in O(n) s1≡ β(a) a nearest selection: si sceglie k per cui è minima ck,β(k) k := arg min {ck,β(k): k ∉ S } D. Vigo Eurist.20 10 24/11/200 3 Criteri di Selezione (3) c) Farthest Selection: si sceglie il vertice più lontano da S, • ossia più lontano dal più vicino j∈S • si sceglie k per cui è minima ck,β(k) k := arg max {ck,β(k): k ∉ S } b s2 c s3 ≡ β(b), β(c) s1≡ β(a) a D. Vigo Eurist.21 Criteri di Selezione (4) d) Cheapest Insertion: si sceglie il vertice per cui è minimo il costo di inserzione in S k si si+1 Inserzione di k tra si ed si+1 δ (k , i ) = cs ,k + ck , s +1 − cs , s +1 , con i ∈ S e k ∉ S i i i i gli indici sono da intendersi modulo |S| (s|S|+1 = s1) D. Vigo Eurist.22 11 24/11/200 3 Criteri di Selezione (5) • Per ogni vertice (j ∉ S) si può definire µ (j) = arg min {δ (j,i): i∈S} • dato S, si definiscono tutti i µ in tempo O(n2) s2 ≡ µ(b), µ(c) b c k: arg min {δ (j,µ(j)), j∉S } s3 s1≡ µ(a) a Nota: eseguita l’inserzione i vettori β e µ si possono aggiornare in tempo O (n) D. Vigo Eurist.23 Criteri di inserzione • Se espansione cammino o criterio di selezione d): • punto di inserzione definito univocamente • Altrimenti si sceglie di inserire k in modo da minimizzare il “costo di inserzione” (cheapest insertion) • si inserisce k dopo µ (k) D. Vigo Eurist.24 12 24/11/200 3 Algoritmo Nearest Neighbor Scegli un vertice iniziale i arbitrario; it := 1; s(1) := i; while it < n do determina k : cs(it),k := min {cs(it),j: j ∉ S}; /* k ∉ S più vicino a s(it) */ O(n2) s(it+1) := k; it := it+1; /*Inserisci k dopo s(it)*/ end while; • Spesso l’arco di chiusura (s(n), s(1)) è lungo • La soluzione dipende molto dal vertice iniziale D. Vigo Eurist.25 Algoritmo Nearest Neighbor (2) • Es. i = 1 3 4 2 7 5 1 6 • Es. i = 5 3 4 2 1 7 5 6 si esegue n volte (partendo da ogni vertice) D. Vigo Eurist.26 13 24/11/200 3 Algoritmo Nearest Neighbor (3) 4 2 6 1 3 5 • Non riesce a trovare il circuito ottimo {1,2,4,6,5,3,} D. Vigo Eurist.27 ESEMPIO 2 : Algoritmo “CHEAPEST INSERCTION” 1) O (n) { 2) Inizializzazione tipo b2.2) si sceglie s1 arbitrariamente ed s2 è il più lontano da s1 S = {s1, s2} ; it = 2 ; while it < n do begin Per ogni j ∉ S determina uj = punto di S' per cui è minimo 3) δj,ui = cuj,j + cj,uj+1 - cuj,ui+1 con uj∈ S' e j ∉ S' determina k per cui δk,uk= min {δj,uj : j ∉ S} inserisci k tra uk e uk+1 ; it := it+1 ; end ; } } O n( 2) O (n) j 3 uj D. Vigo uj+1 Eurist.28 14 24/11/200 3 ESEMPIO 2 : Algoritmo “CHEAPEST INSERCTION” • Es. 2 3 S1 = 1 4 1 5 D. Vigo {1,4} {1,4,5} {1,2,4,5} {1,2,3,4,5} Eurist.29 15