Euristiche:
algoritmi
costruttivi e di
ricerca locale
Molti problemi reali richiedono
soluzioni algoritmiche
I camion devono essere instradati
VRP, NP-hard
I depositi o i punti di vendita devono essere localizzati
Le reti di comunicazione devono essere disegnate
I conteiner devono essere riempiti
CPMP, NP-hard
Network design, NP-hard
3D-packing, NP-hard
I collegamenti radio devono avere una frequenza associata
Legno, vetro, pelle devono essere tagliati
…
FAP, NP-hard
Nesting, NP-hard
Notazione
Un problema di ottimizzazione combinatoria è definito su di un
insieme C = {c1 , … , cn} di componenti di base.
Una soluzione del problema è un sottinsieme S  C;
F  2C è il sottinsieme delle soluzioni ammissibili, (una soluzione S è
ammissibile sse SF).
z: 2C   è la funzione di costo,
L’obiettivo è trovare una soluzione ammissibile di costo minimo S°,
cioè trovare S° F tale che z(S°)  z(S), S  F.
In subordine, l’algoritmo ritorna la miglior soluzione ammissibile
trovata, S*  F.
Esempio: TSP
Esempio di problema: il Traveling Salesman Problem (TSP).
Il TSP è definito su un grafo completo pesato e non diretto
G=(V,E,D), dove V è l’insieme dei vertici, E è l’insieme degli
archi e D è l’insieme dei pesi associati agli archi.
• L’insieme dei componenti corrisponde a E (C=E),
• F corrisponde all’insieme dei cicli Hamiltoniani in G
• z(S) è la somma dei pesi associati agli archi nella
soluzione S.
Considerazioni computazionali
La dimensione delle istanze dei problemi reali
impedisce di risolverle all’ottimo in un tempo
accettabile.
Però questi problemi devono essere risolti.
Da qui la necessità di trovare soluzioni subottime, che
però siano di “qualità accettabile” e che siano trovate
in un “tempo accettabile”.
Come gestire l’NP-completezza
• Istanze piccole;
• Casi speciali polinomiali;
• Algoritmi approssimati: garantiscono di trovare una
soluzione di errore massimo noto;
• Algoritmi probabilistici garantiscono che per istanze
sufficientemente grandi la probabilità di ottenere una
cattiva soluzione è molto picccola;
• Algoritmi euristici: nessuna garanzia, ma storicamente, in
media, questi algoritmi hanno il miglior rapporto
qualità/tempo per il problema in esame.
Euristiche: tre classi
Tre classi principali di algoritmi euristici.
La prima si concentra sugli aspetti strutturali del
problema da risolvere per definire algoritmi
costruttivi o di ricerca locale.
La seconda, denotata come "metaeuristica" (Glover,
1986), si concentra sulla guida di algoritmi costruttivi
o di ricerca locale per superare situazioni critiche.
Infine, un trend recente cerca di incorporare
risultati forti della programmazione matematica nelle
strutture euristiche.
Euristiche: nessuna dominanza
Gli algoritmi delle tre classi sono stati
presentati successivamente in letteratura,
ma questo non implica nulla sulla loro
efficacia relativa.
Specifici problemi possono essere risolti al
meglio da un algoritmo di una qualsiasi classe.
Euristiche di tipo 1: importanza
della struttura della soluzione
Le euristiche di tipo 1 sfruttano le proprietà
strutturali delle soluzioni ammissibili per
ottenere rapidamente una buona soluzione.
Di solito si tratta di euristiche costruttive o di
euristiche di ricerca locale.
Euristiche costruttive
1. Ordina i componenti in C per costi crescenti.
2. Set S*= e i=1.
3. Repeat
If (S*ci è una soluz. parziale ammissibile)
then S*=S*ci.
i=i+1.
Until S* F.
Euristiche costruttive
Un approccio costruttivo può generare soluzioni
ottime per certi tipi di problemi, es. il MST.
In altri casi però potrebbe essere incapace di
costruire una soluzione ammissibile.
TSP: ordina gli archi per costi crescenti, prendi
quello di costo minore e aggiungi archi di costo
crescente, purchè non chiudano sottocicli, finchè non
si completa un circuito Hamiltoniano.
Strategie costruttive più complesse generano
notissime euristiche per il TSP, quali la Farthest
Insertion, la Nearest Neighbor o la Sweep.
Ricerca locale: vicinanze
L’insieme di vicinanza (neighborhood) di una
soluzione S, N(S), è un sottinsieme dic 2C definito da
una funzione di vicinanza N: 2C  22 .
Spesso si considerano solo soluzioni ammissibili,
quindi funzioni di vicinanza N: F  2F.
La specifica funzione utilizzata ha un profondo
impatto sulla performance dell’algoritmo. La sua
scelta è lasciata al progettista dell’algoritmo.
Ricerca locale
1.Genera una soluzione iniziale ammissibile S.
2. Trova S'N(S), tale che z(S')=min z(S^),
S^ N(S).
3. If z(S') < z(S) then S=S'
goto step 2.
4. S* = S.
L’aggiornamento della soluzione al passo 3 è detto mossa da S
a S'.
Può essere fatta verso la prima soluzione migliorante trovata.
Ricerca locale
Ci sono problemi per cui la ricerca locale garantisce di
trovare una soluzione ottima (es. l’algoritmo del
simplesso).
Per il TSP, due note LS sono la 2-opt e la 3-opt, che
prendono una soluzione (una lista di n vertici) e
scambiano esaustivamente gli elementi di ogni coppia o
tripletta di vertici.
Vicinanze più sofisticate originano euristiche più
efficaci, fra cui Lin and Kernighan [LK73].
Scarica

25-LocSearch