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