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