Sunteți pe pagina 1din 6

1

Shortest Path Problem


Problema di base per reti logistiche e di trasporto
Ricerca connessioni a minimo costo (tempo, distanza)
tra un nodo origine O ed un nodo destinazione D
Nota. I coefficienti della f.o. del problema del trasporto
sono la soluzione di SPP.
Problemi di Route guidance
Problema di PL (ma risolto con algoritmi ancora pi
efficienti)
Corso di Ricerca Operativa - A. Sciomachen
Corso di Ricerca Operativa - A. Sciomachen
2
Metodo pi utilizzato per determinare il cammino
minimo tra una coppia di nodi O-D
Metodo iterativo: ad ogni passo seleziona un nodo
per cui si conosce il cammino minimo da O (in base
alla matrice dei costi)
Algoritmo greedy: sceglie ad ogni passo la
variabile pi promettente (golosa)
Nota. Gli algoritmi greedy sono miopi e non sempre
trovano la soluzione ottimale
Lalgoritmo di Dijkstra trova la soluzione ottimale in
modo efficiente

Cammino minimo: Algoritmo di Dijkstra
3
Algorimo di Dijkstra: ipotesi operative
Applicabile solo se c
ij
> 0 (i,j) e E
Non deve esistere in G un circuito a costo totale
negativo (se cos fosse, inserendo tale circuito un #
arbitrario di volte si avrebbe z-)
La matrice dei costi pu non soddisfare la condizione
di triangolariet dati (i,j),(i,k),(k,j)eE pu valere:
c
ij
< c
ik
+ c
kj
(non necessariamente larco tra 2
nodi ha costo inferiore di un
cammino tra gli stessi nodi)
6
1 2
3
2
3
Corso di Ricerca Operativa - A. Sciomachen
Corso di Ricerca Operativa - A. Sciomachen
4
Algoritmo di Dijkstra: passi principali
Inizializzazione:
Nota. Si utilizza un insieme S dei nodi selezionati per i
quali noto in modo definitivo SP dal nodo origine
S = C
Selezionare il nodo origine O
S = S O`
Leggere i costi degli archi uscenti da O nella
corrispondente riga della matrice dei costi (riga D
O

relativa al nodo O)
Dati di input: Matrice D dei costi della rete
Corso di Ricerca Operativa - A. Sciomachen
5
Algoritmo di Dijkstra: passi principali
Selezione:
selezionare il nodo i*e S a cui corrisponde il minimo
valore in D
O

S = S i*`

Aggiornamento:
aggiornare i valori della riga D
O
della matrice dei costi:
D
O
[j] = min (D
O
[j], D
O
[i*] +D
i*
[j]) j e S
Passi di ciascuna iterazione:
Corso di Ricerca Operativa - A. Sciomachen
6
Osservazioni
Nota. Lalgoritmo di Dijkstra trova il valore z del costo
(minimo) del cammino tra O e D. Per determinare la
sequenza di nodi ed archi da O a D si procede
allindietro a partire da D determinando ogni volta il
nodo predecessore
Si utilizza un vettore P tale che P(i) = predecessore
del nodo i nel cammino minimo
Nota. Ad ogni iterazione possono anche essere
selezionati nodi che e SP
possibile conoscere SP da O a tutti i nodi di G
eseguendo una sola volta lalgoritmo

S-ar putea să vă placă și