Problemi di Percorso. Capitolo dodicesimo



Documenti analoghi
3.3 FORMULAZIONE DEL MODELLO E CONDIZIONI DI

2.3 Cammini ottimi. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

1 TEORIA DELLE RETI 1. 1 Teoria delle reti. 1.1 Grafi

Parte V: Rilassamento Lagrangiano

Richiami di Teoria dei Grafi. Paolo Detti Dipartimento di Ingegneria dell Informazione Università di Siena

3.3 Problemi di PLI facili

Possibile applicazione

Flusso a Costo Minimo

Ricerca Operativa A.A. 2007/ Esercitazione di laboratorio: Branch and Bound.

Ricerca Operativa A.A. 2007/ Esercitazione di laboratorio: Branch and Bound.

Gestione della produzione e della supply chain Logistica distributiva

1) Data la seguente istanza di TSP (grafo completo con 5 nodi): c 12 = 52; c 13 = 51; c 14 = 40; c 15 = 53; c 23 = 44;

Introduzione ai grafi. Introduzione ai grafi p. 1/2

UNIVERSITÀ DEGLI STUDI ROMA TRE Collegio Didattico in Ingegneria Informatica corso di Ricerca operativa 2. Esercizi sul problema dell assegnamento

Grafi e Funzioni di Costo ESERCIZI

PROBLEMA DEL COMMESSO VIAGGIATORE

11.4 Chiusura transitiva

Gestione della produzione e della supply chain Logistica distributiva. Paolo Detti Dipartimento di Ingegneria dell Informazione Università di Siena

RICERCA OPERATIVA. Tema d esame del 04/12/2008 (Simulazione 1)

Introduzione ai grafi. Introduzione ai grafi p. 1/2

Massimo flusso e matching

Esame di Ricerca Operativa del 19/07/19. Esercizio 1. (a) Risolvere mediante il metodo del simplesso il seguente problema di programmazione lineare:

Definizione 1.3 (Arco accoppiato) Un arco è accoppiato se è appartenente al matching M.

Il modello duale. Capitolo settimo. Introduzione

Introduzione ai grafi

Esame di Ricerca Operativa del 11/1/19

RICERCA OPERATIVA (a.a. 2018/19)

FACOLTA DI ECONOMIA ESAME SCRITTO DI RICERCA OPERATIVA. Verona, 6 Giugno 1996

RICERCA OPERATIVA (a.a. 2017/18) Nome: Cognome: Matricola:

LEZIONE N.7 INTRODUZIONE AI METODI DI PROGRAMMAZIONE LINEARE, IL METODO DEL SIMPLESSO. 1di 18

Ad ogni arco (i,j) del grafo e' associato un valore intero c(i,j) detto capacita' dell'arco

Metodi e Modelli per l Ottimizzazione Combinatoria Problema dell assegnamento e matrici totalmente unimodulari

SI RICORDA CHE LE LEZIONI DI MERCOLEDÌ 5 E 12 APRILE SI TERRANNO IN AULA D3 DALLE 9 ALLE 11

ALGORITMI DI OTTIMIZZAZIONE M Esercizi Parte I

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 17 giugno 2013

Ricerca Operativa. G. Liuzzi. Lunedí 20 Aprile 2015

Esame di Ricerca Operativa del 11/02/2015

Alberi e alberi binari I Un albero è un caso particolare di grafo

Ottimizzazione Combinatoria e Reti (a.a. 2007/08)

2 OTTIMIZZAZIONE SU GRAFI. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

Esame di Ricerca Operativa del 14/09/18

Corso di Laurea in Matematica per l Informatica e la Comunicazione Scientifica

Esercizi proposti nel Cap Soluzioni. Esercizio 14.1

Esercizi per il corso di. Logistica I. a.a Daniela Favaretto. Dipartimento di Matematica Applicata Università Ca Foscari di Venezia

Quinto appello 27/6/ = 4. B b B = 2 b N = 4

Appunti lezione Capitolo 13 Programmazione dinamica

AUTOMA A STATI FINITI

Università Roma Tre - PAS Classe A048 "Matematica Applicata" - Corso di Informatica a.a. 2013/2014

Domini di funzioni di due variabili. Determinare i domini delle seguenti funzioni di due variabili (le soluzioni sono alla fine del fascicolo):

Esame di Ricerca Operativa del 07/06/2019

Ottimizzazione nella Gestione dei Progetti - Esercitazione 1: calcolo degli schedule ottimi

Esame di Ricerca Operativa del 12/06/18. Base x Degenere? y Indice Rapporti Indice uscente entrante

Formulazioni. Consideriamo il seguente problema di Knapsack 0-1. max (5x x 2. ) st 3x x 2. < 6 x {0,1} 2

3. MODELLI DI OFFERTA

Alberi e alberi binari I Un albero è un caso particolare di grafo

METODI DELLA RICERCA OPERATIVA

RICERCA OPERATIVA (a.a. 2008/09) Nome: Cognome: Matricola:

Programmazione Lineare: problema del trasporto Ing. Valerio Lacagnina

Problemi di Flusso: Il modello del Trasporto

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 20 giugno 2014

Programma del Corso di Ricerca Operativa (Prof. A. Sforza) - A.A C.d.S. Ingegneria Gestionale N44-N45 C.d.S. Ingegneria Meccanica N47

I Appello Ricerca Operativa 2 bis Compito A

1) Disegnare la rete di progetto con le attività sugli archi, e la rete di progetto con le attività sui nodi.

Soluzioni della settima esercitazione di Algoritmi 1

Appunti del corso di Informatica 1 (IN110 Fondamenti) 7 Grafi e alberi: introduzione

CASO 1) Pesi positivi ( diretto o indiretto) Algoritmo di Dijkstra

RICERCA OPERATIVA (a.a. 2016/17) Nome: Cognome: Matricola:

RICERCA OPERATIVA (a.a. 2015/16) Nome: Cognome: Matricola:

Soluzione. V : insieme dei nodi del grafo A: insieme degli archi del grafo K: insieme degli indici delle coppie di origine-destinazione (s k,t k )

Algoritmo basato su cancellazione di cicli

PROVE D'ESAME 1994/95

PROBLEMA DEI CAMMINI MINIMI [CORMEN ET AL. CAP. 24] Il costo di cammino minimo da un vertice u ad un vertice v è definito nel seguente modo:

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

SOTTOSPAZI E OPERAZIONI IN SPAZI DIVERSI DA R n

Esercizi sulla Programmazione Lineare. min. cx Ax b x 0

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Primo appello 30 gennaio Esercizio 1.

Modelli di Programmazione Lineare. PRTLC - Modelli

Esame di Ricerca Operativa del 19/02/2019. Esercizio 1. Risolvere il seguente problema di programmazione lineare applicando l algoritmo del simplesso:

L ALGORITMO DEL SIMPLESSO REVISIONATO

Progetto di A.A. Uni Rom. udi. portoo (A.A CAPIT

Problema di flusso massimo

Corso di Programmazione

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

LEZIONE 2. ( ) a 1 x 1 + a 2 x a n x n = b, ove a j, b R sono fissati.

Cammini minimi. Definizioni. Distanza fra vertici. Proprietà dei cammini minimi. Algoritmi e Strutture Dati

4.1 Localizzazione e pianificazione delle base station per le reti UMTS

Esercizio 1. Variabili decisionali:

Il Problema dell Albero Ricoprente Minimo (Shortest Spanning Tree - SST)

GRAFI. Cosa sono Grafi non orientati Grafi orientati Grafi pesati Alberi Automi!

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Risoluzione di problemi ingegneristici con Excel

Indice. Premessa alla prima edizione 15 Premessa alla seconda edizione 17 Premessa alla terza edizione 19. Introduzione 21

Geometria analitica di base (seconda parte)

Un esempio di applicazione della programmazione lineare intera al progetto di una rete stradale con vincoli di network survivability

Operations Management

2.3.3 Cammini ottimi nei grafi senza circuiti

12.1 IL PROBLEMA DEL CAMMINO MINIMO: L ALGORITMO DI DIJKSTRA

Esercizio 1. min. Esercizio 2. Esercizio 3

Transcript:

Capitolo dodicesimo Problemi di Percorso Introduzione I problemi di determinazione di percorsi ottimi sono tra i più noti problemi di ottimizzazione su rete. Essi si presentano in innumerevoli campi, nella pianificazione dei trasporti e nella gestione del traffico, nelle telecomunicazioni, nell ingegneria dell informazione, nella gestione aziendale. Su una rete connessa, per una assegnata coppia di vertici o/d (origine/destinazione), possono esistere uno o più percorsi (su un grafo fortemente connesso almeno uno), ciascuno caratterizzato da un valore di costo o di profitto, calcolato come somma dei valori di costo e di profitto degli archi che costituiscono il percorso stesso. Il problema che si incontra più frequentemente nelle applicazioni reali è quello del minimo percorso, che consiste nell individuare il percorso al quale corrisponde il costo minimo C od. In questo capitolo si dà grande spazio al problema di minimo percorso. Si formula inizialmente il modello relativo ad una singola coppia o/d. Si presenta quindi la classificazione dei problemi e degli algoritmi e vengono descritti i principali algoritmi utilizzabili per la soluzione dei problemi definiti nella classificazione. Viene descritto inoltre un altro problema di percorso che pure interviene nelle pratiche applicazioni. Si definisce infatti il problema del percorso massimo e si illustra un semplice algoritmo risolutivo.

88 Capitolo dodicesimo. IL MODELLO DEL MINIMO PERCORSO PER UNA COPPIA o/d Si consideri la rete riportata in figura.. Bisogna determinare il percorso di minimo costo dal vertice al vertice 5. In tabella. sono riportati tutti i possibili percorsi tra e 5 con i relativi costi, in termini di matrice di incidenza arco-percorso (così come definita nel paragrafo..). Per trovare la soluzione ottima del problema (il percorso p : ---5 di costo 7) bisogna determinare quali archi appartengono al percorso di minimo costo. FIG.. Una semplice rete per la descrizione del modello 9 5 5 TAB.. Matrice di incidenza arco-percorso per la coppia -5 archi c ij p p p p - 5 0-0 0 0-0 0 0-0 0 0-5 9 0 0 0-0 0-5 0 Costo del percorso 7 0 Il problema può essere formulato attraverso un modello in programmazione intera binaria. Indicando con o e d i vertici origine e destinazione del percorso minimo da individuare, con c ij il costo associato all arco generico ij (ij A) e con x ij una variabile binaria pari a se l arco ij appartiene al percorso minimo, pari a 0 altrimenti, il modello assume la seguente configurazione, nella quale i sta per i:ij A :

Problemi di Percorso 89 Min z = ij A c ij x ij s.a k x ok = i x id = k x jk i x ij = 0 ( j o,d) x ij = 0/ Il primo vincolo esprime la condizione che uno solo degli archi uscenti dall origine o può appartenere al percorso minimo e quindi una sola delle corrispondenti variabili può essere pari ad. Analogamente il secondo vincolo esprime la condizione che uno solo degli archi entranti nella destinazione d può appartenere al percorso minimo. Il terzo vincolo va scritto per ogni vertice j diverso da o e d ed esprime una condizione di bilancio: nel vertice generico j se c è un arco uscente appartenente al percorso, ci deve essere anche un arco entrante appartenente al percorso, se non c è un arco uscente non c è neanche un arco entrante. Come si può facilmente vedere tutte le soluzioni riportate in tabella. rispettano questi vincoli. L algoritmo risolutivo sceglierà tra esse la migliore. Questo modello ha una struttura particolare. Nella matrice A dei coefficienti associata ai vincoli di continuità le righe corrispondono ai vertici della rete e le colonne corrispondono agli archi. Essa ha dunque dimensioni vxa, se v è il numero di vertici e a il numero di archi della rete. La matrice A corrisponde quindi alla matrice di incidenza vertice-arco. In essa ogni colonna ha soltanto due elementi non nulli, + e. Infatti la colonna corrispondente all'arco ij contiene + nella riga i, nella riga j e 0 altrove. La riga corrispondente al vertice i invece contiene + nelle colonne corrispondenti agli archi ik uscenti da i, nelle colonne corrispondenti agli archi ji entranti in i, 0 altrove. Si può dimostrare che la matrice A dei tassi di assorbimento è totalmente unimodulare. Una matrice è totalmente unimodulare se il determinante di ogni minore da essa estratto ha valore, 0 o +. Si può dimostrare in questo caso che la soluzione ottima del modello è intera anche se non si impone il vincolo di interezza x ij = 0/, a condizione che i termini noti siano interi. In questo caso i termini noti dei vincoli sono pari a 0 e ad e pertanto le variabili assumeranno valore ottimo intero. Il modello può essere risolto dunque in programmazione lineare continua, con i vincoli 0 x ij in luogo di x ij = 0/. Per avere una conferma di ciò, può essere utile operare una rappresentazione grafica del modello di minimo percorso nel caso semplice di un problema con due variabili. Si consideri a questo

90 Capitolo dodicesimo scopo il semplice caso di una rete costituita da due nodi e dai due archi che li congiungono (Fig..). Il nodo è il nodo origine del percorso, il nodo è il nodo destinazione del percorso. Si vuol determinare il minimo percorso tra i due nodi. Si supponga che il costo di spostamento sui due archi sia costante (c (-)' = 0 e c (-)'' = 5). I vincoli esprimono il bilancio nel nodo (o nel nodo ), x(-)' + x(-)'' =. Il modello avrà dunque la seguente formulazione: Min z = 0 x (-)' + 5 x (-)'' s.a x (-)' + x (-)'' = 0 x (-)' 0 x (-)'' Il dominio, riportato in figura., è costituito dal segmento CD. I vertici del dominio, che sono anche i punti interi ammissibili del problema intero, sono C (x (-)' =0, x (-)'' =, z=5) e D (x (-)' =, x (-)'' =0, z=0). La soluzione ottima del problema è rappresentata dal punto C cui corrisponde il valore minimo di z, pari a 5. FIG.. Un semplice problema di minimo percorso in due variabili (-)' (-)'' FIG.. Analisi grafica del problema di minimo percorso per il grafo di fig.. x(-)'' z = 0 C z = 0 z = 5 D O x(-)'

Problemi di Percorso 9. CLASSIFICAZIONE DEI PROBLEMI E DEGLI ALGORITMI DI MINIMO PERCORSO Si individuano in generale le seguenti classi di problemi nella determinazione del minimo percorso: a) da un vertice ad un altro vertice della rete; b) da un vertice a tutti gli altri vertici della rete (o a un sottoinsieme); c) da tutti i vertici a tutti gli altri vertici (o da un sottoinsieme di vertici ad un altro sottoinsieme di vertici), cioè per tutte le coppie di vertici individuabili sulla rete. Il problema della classe (a), per il quale è stato formulato il modello del paragrafo precedente, è chiaramente contenuto nella classe (b), che, a sua volta, è contenuta nella classe (c). La soluzione del problema (a) genera, come si è detto, un valore di costo minimo C od per la singola coppia o-d. La soluzione del problema (b) genera valori di costo minimo C ok da un vertice o a tutti i vertici k della rete. La soluzione del problema (c) genera tutti i valori di costo minimo C od da tutti i vertici origine a tutti i vertici destinazione. E possibile quindi definire una matrice C delle distanze minime (o dei costi minimi) il cui generico elemento C od fornisce il valore del minimo percorso tra i vertici o e d. Il problema delle classi (b) e (c) viene risolto nelle pratiche applicazioni mediante algoritmi ad hoc che sono disponibili in grande varietà (la letteratura degli algoritmi di minimo percorso è veramente sterminata). Questi algoritmi possono essere classificati in base al problema che risolvono. La distinzione che più di frequente si adotta è tra: ) algoritmi arborescenti e ) algoritmi matriciali. I primi si definiscono in questo modo perché una singola implementazione dell algoritmo genera l arborescenza (l albero) dei minimi percorsi da un vertice origine a tutti gli altri vertici assunti come destinazione. Essi risolvono dunque la classe (b) dei problemi e quindi naturalmente anche la classe (a). La costruzione dell arborescenza dei minimi percorsi con origine nel vertice i generico fornisce la riga i-esima della matrice C delle distanze minime.

9 Capitolo dodicesimo I secondi invece risolvono la classe (c) dei problemi e dunque forniscono in una singola implementazione la matrice C delle distanze minime tra tutte le coppie di vertici individuabili sulla rete. Non c è naturalmente una rigida corrispondenza tra classe di problema e tipo di algoritmo idoneo a risolverlo. E possibile infatti applicare un algoritmo arborescente per ciascuno dei vertici origine della rete (dunque al limite v volte) per risolvere il problema (c) del cammino minimo per tutte le coppie di vertici, così come sarebbe possibile applicare un algoritmo matriciale ed utilizzare solo parte dei risultati ottenuti per dare risposta ad un problema del tipo (b). Nei paragrafi che seguono si descrivono i fondamentali algoritmi arborescenti e matriciali utilizzati per la soluzione del problema.. ALGORITMI ARBORESCENTI Si prenda ancora in considerazione il grafo di figura. e si calcoli il minimo percorso dal vertici a ciascuno degli altri vertici. Si può agevolmente verificare che il minimo percorso da a è l arco - di costo 5, da a è l arco - di costo, da a è il percorso -- di costo 5, da a 5 è il percorso ---5 di costo 7. Il risultato complessivo di questa operazione è in figura.. Si può vedere che i percorsi determinati, riportati in tratto spesso, costituiscono un arborescenza con radice in. FIG.. Arborescenza dei minimi percorsi con origine in (5) 9 5 (7) 5 (0) (5) () Il problema della determinazione dei minimi percorsi da un vertice o della rete R(V, A, C ) a tutti gli altri vertici, può essere ricondotto quindi a

Problemi di Percorso 9 quello della determinazione di una arborescenza T(V, A T ) con radice in o, dove A T è l insieme degli archi dell arborescenza. I metodi proposti per la soluzione di questo problema sono metodi di e- tichettamento dei vertici e possono essere divisi in due classi: - metodi label setting - metodi label correcting Entrambi i metodi partono con un arborescenza T(V T, A T ) tale che V T ={o} ed A T =. I metodi del tipo label setting ad ogni iterazione fissano il valore del minimo percorso dalla origine ad uno o più vertici della rete. Un metodo label setting in ciascuna iterazione incrementa V T ed A T rispettivamente con un vertice v V ed un arco (u,v) A, in modo tale che u V T, v V T e che l unico percorso da o a v in T sia un minimo percorso. Esso termina quando tutti gli archi di A che hanno il vertice origine in V T hanno anche il vertice destinazione in V T. Per il loro modo di lavorare questi algoritmi forniscono risultati intermedi di minimo percorso dall origine fino ad un vertice destinazione che sono definitivi e quindi possono essere utilizzati prima ancora che l algoritmo termini completamente. I metodi del tipo label correcting ad ogni iterazione aggiornano il vettore dei minimi percorsi da O a tutti gli altri vertici, e quindi solo dopo l ultima iterazione determinano simultaneamente i minimi percorsi tra l origine fissata e tutti gli altri vertici. Un metodo label correcting incrementa o modifica in ciascuna iterazione gli archi di A T, in modo da aggiornare il percorso dalla radice o a ciascun vertice v in T, ma non garantisce che il nuovo percorso sia minimo, fino al termine della procedura. Questi algoritmi forniscono risultati intermedi provvisori che non hanno alcun significato pratico e dunque non possono essere utilizzati. Nel seguito si descrivono tre algoritmi arborescenti: l algoritmo di Dantzig, del tipo label setting, l algoritmo di Dijkstra, di tipo misto (label settingcorrecting), l algoritmo di Ford-Moore-Bellman, di tipo label correcting... ALGORITMO DI DANTZIG L algoritmo di Dantzig è un algoritmo arborescente del tipo label setting. Sia o il vertice origine. Si supponga di conoscere al k stadio della procedu-

9 Capitolo dodicesimo ra i cammini minimi da o a k vertici. Si indichi questo insieme di vertici con S (Fig..5). Poiché gli algoritmi arborescenti generano progressivamente un albero di minimi percorsi, i vertici di S sono collegati in modo da costituire un albero parziale. L insieme V dei vertici può essere dunque suddiviso in due sottoinsiemi: S, contenente i vertici etichettati definitivamente con il valore di minimo costo dall origine o, e (V-S), contenente i vertici per i quali il minimo percorso non è stato ancora determinato e quindi non hanno ancora una etichetta definitiva. Si indichi con: i il generico vertice foglia in S; δ i la distanza minima di i dall origine o; j i il vertice più vicino ad i, non in S, collegato ad i da un arco i, j i ; a i la lunghezza dell arco i, j i. Tra tutti i vertici j i si sceglierà come vertice da inserire in S il vertice (o i vertici) j r, tale che δ r + a r = Min i=,k (δ i + a i ). Il valore δ r +a r fornisce certamente il valore minimo del percorso da o a j r in quanto ogni altro percorso da o a j r utilizzerebbe un vertice t non in S avente una distanza minima da o pari a δ t + a t > δ r + a r. A maggior ragione quindi si verificherebbe δ t + a t + a t,r > δ r + a r. Questo step fondamentale dell algoritmo si itera inserendo ogni volta uno o più nuovi vertici nell insieme S. L algoritmo termina quando tutti i vertici del grafo fanno parte di S. FIG..5 Step generico dell algoritmo di Dantzig S δ l l a l j l S' O a i j i δ i i

Problemi di Percorso 95 Struttura dell algoritmo E opportuno effettuare una operazione di pre-processing costruendo per ciascun vertice la lista degli archi uscenti ordinati per costo crescente. Inoltre, nel corso dell algoritmo, vengono eliminati dalle liste gli archi che hanno per destinazione un vertice già etichettato definitivamente, cioè già appartenente ad S. In questo modo i passi dell algoritmo sono i seguenti: Passo 0: L insieme S dei vertici etichettati contiene la sola origine o, si pone C o = 0. Si cancellano, nelle liste create, tutti gli archi con destinazione o. Passo : Per ogni vertice i S, per il quale non siano stati cancellati tutti gli archi della lista relativa, si calcola C i + min k {c ik }= γ i, dove min k {c ik } è il peso del primo arco non cancellato della lista relativa al vertice i. Passo : Si confrontano i valori γ i (i S). Il valore γ s = min i {γ i }= c s + min t {c st }, indica il vertice t da introdurre in S. Si pone C t = γ s e si memorizza s come predecessore di t. Passo : Si cancellano nelle diverse liste gli archi con destinazione t. Passo : Se S V l algoritmo ha termine, altrimenti si torna al passo. Esempio numerico Si consideri il grafo orientato con 8 vertici e archi riportato in figura.6. Si vuole calcolare l arborescenza dei minimi percorsi con origine nel vertice. In tabella. si riportano le liste degli archi uscenti dai vertici ordinate per costo crescente. L insieme S contiene inizialmente il solo vertice cui si associa un valore del minimo percorso pari a 0. Gli archi uscenti dall insieme S sono gli archi uscenti dal vertice : - e -. Tra essi si sceglie l arco -, cui corrisponde il costo minimo, e si associa al vertice un valore di cammino minimo pari a 0+=. Si cancellano dalle liste tutti gli archi che eventualmente hanno destinazione nel vertice. Il vertice viene memorizzato come predecessore del vertice. L insieme S contiene ora i vertici e. Le possibilità di uscita dall insieme S sono riportate di seguito con i relativi costi: Arco - - - -5 costo 0 + = (*) + = + = + =

96 Capitolo dodicesimo FIG..6 Grafo G e costi c ij 5 8 6 7 TAB.. Insiemi di archi uscenti dai vertici c j c j c j c j 5 c 5j 6 c 6j 7 c 7j 8 c 8j - - - -5 5-6 6-7 8-7 - - -8-6 -5-8 All arco - corrisponde il costo minimo e quindi il vertice entra nell insieme S, con predecessore, con un valore di cammino minimo pari a. L insieme S contiene ora i vertici,,. A questo punto si determinano le seguenti possibilità: Arco -5 - - -8 costo + = (*) + = (*) + = 5 + = 6 Entrano in S i vertici e 5, cui si associa un valore del cammino minimo pari a. Predecessore del vertice 5 è il vertice. Predecessore del vertice è il vertice. Si cancellano tutti gli archi che hanno come destinazione i vertici e 5. L insieme S contiene ora i vertici,,,, 5. Si ha pertanto: Arco -8-8 -6 5-6 costo + = 6(*) + = 7 + = 7 + = 7 Entra in S il vertice 8, con predecessore, cui si associa un valore del cammino minimo pari a 6. L insieme S contiene ora i vertici,,,, 5, 8.

Problemi di Percorso 97 Si ha pertanto: Arco -6 5-6 8-7 costo + = 7(*) + = 7(*) 6 + = 7(*) Entrano in S i vertici 6 e 7 cui si associa un valore del cammino minimo pari a 7. Predecessore del vertice 7 è il vertice 8. Si noti che il vertice 6 ha due possibili predecessori, il vertice o il 5. Essendo tutti i vertici etichettati, il procedimento ha termine. In figura.7 è riportata l arborescenza dei minimi percorsi con origine nel vertice. FIG..7 Arborescenza (albero) dei minimi percorsi con origine in 5 7 6 6 8 7 7 Complessità computazionale Se v è il numero dei vertici, questo algoritmo richiede v / addizioni e v / confronti per il calcolo dei valori da assegnare ai vertici. Richiede inoltre v logv confronti aggiuntivi per l ordinamento preliminare dei dati e v confronti per l aggiornamento dei dati che è necessario operare nel corso dell algoritmo (cancellazione dalle liste degli archi che hanno come vertice destinazione un vertice già etichettato). La sua complessità computazionale è dunque O(v logv).

98 Capitolo dodicesimo.. ALGORITMO DI DIJKSTRA L algoritmo di Dijkstra assegna a ciascuno dei v vertici del grafo dei valori di tentativo, che costituiscono dei limiti superiori al valore del cammino minimo dal vertice origine ad essi. In ciascuna iterazione dell algoritmo un valore di etichetta viene reso definitivo. Dopo un numero di iterazioni al massimo pari a quello dei vertici destinazione, le etichette diventano tutte definitive e forniscono i valori dei cammini minimi dal vertice origine a tutti gli altri. Questo algoritmo presenta quindi un meccanismo misto nella determinazione delle etichette. Può essere definito quindi un algoritmo arborescente del tipo label setting-correcting. Si assegna inizialmente al vertice origine il valore definitivo 0 ed a tutti gli altri vertici il valore di tentativo. Si parte quindi dall origine e si va negli altri vertici calcolando il valore del costo del percorso come somma dell etichetta dell origine e del costo dell arco utilizzato ( qualora l arco non esista). Per ciascun vertice si confronta il valore così calcolato con l etichetta precedente. Il valore minore viene assunto come nuovo valore di tentativo del minimo percorso verso quel vertice. Tra i v valori di tentativo ottenuti si sceglie il minore e lo si assume come etichetta definitiva del vertice cui corrisponde. Si supponga essere k il vertice etichettato definitivamente nel passo di procedura precedente. Si parte quindi dal vertice k e si va negli altri vertici non ancora etichettati definitivamente, calcolando il valore del costo del percorso come somma dell etichetta del vertice k e del costo dell arco utilizzato ( qualora l arco non esista). Per ciascun vertice si confronta il valore così calcolato con l etichetta precedente ed il valore minimo viene assunto come nuovo valore di tentativo. Tra i v valori di tentativo ottenuti si sceglie il minore e lo si assume come etichetta definitiva del vertice cui corrisponde, per esempio j, assumendolo come punto di partenza per un ulteriore step della procedura. A differenza di quanto avviene nell algoritmo di Dantzig, in ogni iterazione ci si muove dunque dall ultimo vertice etichettato definitivamente e non da tutto l insieme dei vertici etichettati definitivamente. Dopo al massimo v iterazioni (nel caso in cui ad ogni iterazione venga etichettato definitivamente un solo vertice) tutti i vertici sono etichettati definitivamente e il procedimento ha termine.

Problemi di Percorso 99 Struttura dell algoritmo Passo 0: L insieme S contiene la sola origine 0. Si pone C o = 0 [etichetta definitiva] per i o, si pongono le etichette di tentativo: C i = [se l arco o-i non esiste] C i = c oi [se l arco o-i esiste] ( i o) Si pone inoltre: predecessore (i)=o. Passo : Se t è l ultimo vertice introdotto in S, per ogni vertice i non appartenente ad S, si calcola m = min [C i ; C t + c ti ]. Se risulta m < C i, si aggiorna: C i = m, predecessore (i)=t. Passo : Si sceglie il vertice, non appartenente ad S, cui corrisponde il valore min i C i. Si introduce il vertice in S. Passo : Se S V l algoritmo ha termine altrimenti si torna al passo. Esempio numerico Si consideri il grafo di figura.6 già utilizzato. In tabella. si riporta un quadro riassuntivo delle operazioni effettuate dall algoritmo di Dijkstra per determinare l albero dei minimi percorsi con origine nel vertice. Ciascuna riga corrisponde ad un vertice del grafo. Le colonne corrispondono alle iterazioni. I simboli adoperati corrispondono alla assegnazione di valore ( ), al confronto (::), ed alla somma di valori (+). Nella iterazione 0 viene assegnata l etichetta definitiva 0 al vertice origine e le etichette di tentativo a tutti gli altri vertici. Il predecessore di viene posto per definizione pari a 0. Nella iterazione si parte dal vertice e vengono calcolate le nuove etichette dei vertici. Queste vengono confrontate con le precedenti e per ciascun vertice si sceglie il valore di tentativo migliore. L etichetta del vertice, pari ad, è la minima e viene resa definitiva. Ogni valore di etichetta definitiva porta con sé un predecessore, indicato nello schema in corsivo e tra parentesi. Il predecessore del vertice è il vertice. Nella iterazione si parte dal vertice, che è quello etichettato per ultimo, e vengono calcolate le nuove etichette, che vengono confrontate con le precedenti, scegliendo per ciascun vertice la migliore. L etichetta del vertice, pari a, è la minima e viene resa definitiva. Il predecessore del vertice è il vertice.

00 Capitolo dodicesimo TAB.. Operazioni effettuate dall algoritmo di Dijkstra per il grafo di figura.6 Iterazioni 0 5 6 7 Vertici Etichette Nuove etichette provvisorie e (predecessori) provvisorie iniziali 0 5 6 7 8 C() = 0 p () = 0 :: 0+ () :: 0+ () :: 0+ :: 0+ :: 0+ :: 0+ :: 0+ C() = p () = :: + () :: + :: + () () :: + :: + :: + () () () :: + :: + :: + :: + 7 () 7 () :: + :: + :: + :: + :: + :: + :: + :: + 6 () 6 () 6 () Etichette definitive e predecessori C() = p () = C() = p () = C(5) = p (5) = C(8) = 6 p (8) = :: 6+ 7 () :: 6+ 7 (8) C(7) = 7 p (7) = 8 :: 7+ 7 () C(6) = 7 p (6) = Nella iterazione si parte dal vertice. L etichetta relativa al vertice () viene resa definitiva con predecessore. Nella iterazione si parte dal vertice. L etichetta del vertice 5 () viene resa definitiva, con predecessore. Nella iterazione 5 si parte dal vertice 5. L etichetta del vertice 8 (6), viene resa definitiva con predecessore. Nella iterazione 6 si parte dal vertice 8. L etichetta del vertice 7 (7), viene resa definitiva con predecessore 8. Nella iterazione 7 si parte dal vertice 7. L etichetta del vertice 6 (7), viene resa definitiva con predecessore.

Problemi di Percorso 0 Essendo stati etichettati definitivamente tutti i vertici la procedura ha termine. La soluzione finale corrispondente all albero dei minimi percorsi viene ricostruita utilizzando il vettore dei predecessori di ciascun vertice. Complessità computazionale Se v è il numero dei vertici, questo algoritmo richiede v(v )/ addizioni e v(v )/ confronti per il calcolo dei valori di tentativo. Richiede inoltre v(v )/ confronti per determinare in ogni iterazione il valore minimo tra le etichette di tentativo. Dunque, nel caso in cui vengano effettuate v iterazioni, sono richieste v(v )/ addizioni e v(v ) confronti. Per indicare se il valore di etichetta è definitivo o provvisorio si può collegare a ciascun vertice un indice 0/. Per la consultazione di questo valore sono richiesti (v ) confronti. In totale quindi questo algoritmo richiede v / addizioni e v confronti. La sua complessità è dunque O(v ). Con una struttura dati del tipo heap la sua complessità è invece O(a logv)... ALGORITMO DI FORD-MOORE-BELLMAN L algoritmo di Ford-Moore-Bellman è un algoritmo arborescente del tipo label correcting che opera sulla matrice di adiacenza della rete. (k) Supponendo di essere giunti alla k-esima iterazione, l etichetta f i associata al generico vertice i rappresenta il valore del cammino minimo che congiunge il vertice origine al vertice i con un numero di archi al più pari a k+. L insieme delle etichette f (k) i, per i=,..v, costituisce il vettore f (k). Indicando con l origine dell arborescenza, l algoritmo viene inizializzato (0) (0) ponendo f = 0; f i = c i (i ). Ad ogni iterazione viene applicata la seguente relazione: f i (k) = min j i [ f j (k-) + c ji ] i =,,..., v; j =,,...,v (.) (k) In base a questa relazione f i viene calcolato con la cosiddetta operazione di minisomma tra il vettore f (k-) e la colonna i della matrice dei costi associati agli archi. Tale operazione consiste nel sommare gli elementi di posto omologo dei due vettori e nello scegliere tra le somme ottenute il valore minimo. L esistenza di accoppiamenti a somma non nulla e finita indica infatti l esistenza di cammini al più di ordine k+ tra l origine ed il vertice i. Tra questi si sceglie quello di costo minimo. (k-) La procedura termina quando si verifica [ f i = f (k) i, i=,...,v], ovvero quando, in due iterazioni successive, i valori delle etichette assegnate ai ver-

0 Capitolo dodicesimo tici non variano. A questo punto i valori di tutte le etichette vengono dichiarati definitivi. Poiché un cammino può essere costituito al massimo da v archi, le iterazioni sono al più v, v essendo il numero dei vertici. La individuazione della composizione dei cammini minimi può essere ottenuta memorizzando ad ogni iterazione per ciascun vertice i il valore di j in corrispondenza del quale è stato determinato f i (k). In questo modo ad ogni iterazione si ottiene un vettore delle precedenze che viene aggiornato nelle iterazioni successive tutte le volte in cui si verifica un aggiornamento dei valori f i (k). Struttura dell algoritmo Passo 0: Si pone f (0) = 0; f i (0) = c i (i ); Passo : (k) (k-) Si calcola f i = min j i [ f j + c ji ], i =,,, v, j =,,, v (k) Passo : Si confronta f i con f (k-) i, i =,..., v (k) Se f i = f (k-) i, i =,..., v, l algoritmo ha termine altrimenti si ritorna al passo ; Esempio numerico Si prenda in considerazione il grafo già utilizzato per le applicazioni numeriche relative agli altri algoritmi di minimo percorso (Fig..6). In tabella. è riportata la matrice dei costi associati agli archi, indicando con un tratto il valore di costo infinito, relativo all assenza dell arco. TAB.. Matrice dei costi della rete di figura 0. 5 6 7 8 0 - - - - - - 0 - - - - - 0 - - - - - - 0-5 - - - - 0 - - 6 - - - - - 0-7 - - - - - - 0-8 - - - - - - 0

Problemi di Percorso 0 L algoritmo viene inizializzato ponendo: f (0) = [0,,, -, -, -, -, - ]. Questo vettore fornisce i minimi percorsi di ordine tra l origine e tutti gli altri vertici. Il vettore f () viene calcolato utilizzando la relazione (.): (k) (k-) f i = min j i [ f j + c ji ]; i =,,...,8; j =,,...,8. Per il calcolo delle componenti del vettore f () si ottiene : f () = 0 f () = min j [ f j (0) +c j ] = = min [ f (0) +c, f (0) +c, f (0) +c, f 5 (0) +c 5, f 6 (0) +c 6, f 7 (0) +c 7, f 8 (0) +c 8 ] = min [0+, +, +, +, +, +, + ] = Il valore f () = rappresenta il valore del minimo percorso al più di ordine tra il vertice e il vertice. f () = min j [f j (0) +c j ] = = min [ f (0) +c, f (0) +c, f (0) +c, f 5 (0) +c 5, f 6 (0) +c 6, f 7 (0) +c 7, f 8 (0) +c 8 ] = min [0+, +, +, +, +, +, + ] = () Il valore f rappresenta il valore del cammino minimo tra il vertice e il vertice, al più di ordine. In modo analogo è possibile calcolare i valori delle altre componenti del vettore f () () () () () : f =, f 5 =, f 6 =, f 7 =, f () 8 =6, cioè i valori dei minimi percorsi al più di ordine dal vertice ai vertici, 5, 6, 7, 8. Il vettore f () viene utilizzato per determinare il vettore f (), cioè i valori dei minimi percorsi al più di ordine dal vertice a tutti gli altri. I valori assunti dal vettore f (k) nelle successive iterazioni sono riassunti nella tabella.5. Si può notare che f () = f (). Ciò significa che non esistono cammini minimi di ordine superiore a dal vertice a tutti gli altri. L algoritmo quindi ha termine. TAB..5 Valori assunti da f (k) nelle iterazioni dell algoritmo f (k) f (k) f (k) f (k) f 5 (k) f 6 (k) f 7 (k) f 8 (k) k=0 0 k= 0 6 k= 0 7 7 6 k= 0 7 7 6

0 Capitolo dodicesimo. ALGORITMI MATRICIALI Il calcolo della matrice C dei minimi percorsi può essere effettuato utilizzando un algoritmo di tipo matriciale, in grado di calcolare tutti gli elementi della matrice delle distanze minime... ALGORITMO DI FLOYD L algoritmo matriciale più comunemente usato è l algoritmo di Floyd. Esso lavora su una matrice C, di dimensioni pari al numero di vertici. Tale matrice, inizialmente coincidente con la matrice di adiacenza vertice-vertice, viene modificata nelle successive iterazioni. La k-esima di tali matrici può essere interpretata come quella che fornisce il costo dei cammini minimi per tutte le coppie di vertici della rete, caratterizzati dalla proprietà di utilizzare soltanto i vertici numerati da a k. Alla fine del procedimento la matrice contiene quindi i valori dei cammini minimi tra tutte le coppie di vertici del grafo che utilizzano tutti i vertici del grafo. Un algoritmo matriciale è quindi per definizione un algoritmo label correcting. L algoritmo viene inizializzato ponendo C ii = 0 ed inoltre per i j: (0) C ij = c ij se l arco ij esiste = se l arco ij non esiste C ij Alla k+-esima iterazione i valori di C vengono aggiornati utilizzando la seguente relazione, in cui compaiono i valori di costo calcolati utilizzando i vertici numerati da a k: C i,j (k+) In particolare: (k) C i,j (k) C i,k+ (k) C k+,j = min [C (k) (k) i,j ; C i,k+ + C (k) k+,j ] è il costo minimo da i a j; è il costo minimo da i a k+ è il costo minimo da k+ a j. Se l utilizzazione del vertice k+ consente di produrre un cammino di (k) costo inferiore a quello di cui già si disponeva, si sostituisce C i,j con il nuovo valore ottenuto. Dopo la (k+)-esima iterazione il generico elemento (k+) C ij fornisce, dunque, il valore del minimo percorso tra i vertici i e j ottenuto utilizzando i vertici il cui indice non sia superiore a k+.

Problemi di Percorso 05 Se v è il numero di vertici l algoritmo effettua esattamente v iterazioni sulla matrice A. Struttura dell algoritmo (0) Passo 0: La matrice C viene inizializzata ponendo C ii (0) C ij = c ij se l arco ij esiste (0) C ij = se l arco ij non esiste = 0 ed inoltre: Passo : Per k =, v i =, v j =, v = min [C (k) (k) i,j ; C i,k+ + C (k) k+,j ] C i,j (k+) L algoritmo termina dopo l esecuzione, ripetuta v volte, del passo. Esempio numerico Si consideri il grafo rappresentato in figura.8, con la matrice dei costi riportata in tabella.6 e si calcoli la matrice dei minimi percorsi utilizzando l algoritmo di Floyd. FIG..8 Rete esempio 5 TAB..6 Matrice di adiacenza della rete di fig..8-5 - - - - - - - - La matrice C 0 coincide con la matrice di adiacenza della rete. Step : utilizzando l espressione a ij = min (a ij 0, a i 0 + a j 0 ) per ogni ij, si calcola la matrice C (Tab..7a). Step : utilizzando l espressione a ij = min (a ij, a i + a j ) per ogni ij, si calcola la matrice C (Tab..7b). Step : utilizzando l espressione a ij = min (a ij, a i + a j ) per ogni ij, si calcola la matrice C (Tab..7c).

06 Capitolo dodicesimo Step : utilizzando l espressione a ij = min (a ij, a i + a j ) per ogni ij, si calcola la matrice C (Tab..7d). C è la matrice dei minimi percorsi del grafo assegnato. TAB..7a-d (a) Matrice C (b) Matrice C - 5 - - 5 8 - - - - - - - - - - - - - - (c) Matrice C (d) Matrice C - 5-5 - - - 7-5 - - - -.5 CONFRONTO TRA GLI ALGORITMI DI MINIMO PERCORSO I parametri rispetto ai quali è possibile effettuare un confronto tra le due classi di algoritmi, arborescenti e matriciali, sono ovviamente la capacità di memoria ed il tempo di calcolo richiesti per la elaborazione automatica degli algoritmi. Nella tabella.8, indicando con a il numero di archi del grafo e con v il numero di vertici, sono riportate le dimensioni di memoria richieste dai due tipi di algoritmi. TAB..8 Richieste di memoria degli algoritmi di minimo percorso Arborescenti Matriciali Albero v v Costo dei percorsi v v Flag di ispezione v Rete e costi su archi v+a v Totale v+a v

Problemi di Percorso 07 Assumendo a = v, condizione ricorrente per molti tipi di grafi corrispondenti a problemi reali, si hanno i valori v per un algoritmo arborescente e v per un algoritmo matriciale. Da questo confronto si evince che, tranne che per valori molto ridotti di v, gli algoritmi arborescenti richiedono una quantità di memoria minore rispetto a quelli matriciali. Per quanto concerne il tempo di calcolo si può dire che esso dipende, oltre che dalle caratteristiche e prestazioni del sistema di calcolo, anche da configurazione, dimensione e densità della rete e dalla struttura dei dati di rete. Si può affermare inoltre in generale che, quando sono richiesti i cammini minimi tra tutti i vertici della rete e quando la densità della rete (rapporto tra numero di archi e numero di vertici) è molto alta (al limite se il grafo è pieno), è opportuno utilizzare un algoritmo matriciale. Quando invece la densità della rete è bassa, cioè la sua matrice di adiacenza è sparsa, e non sono richiesti tutti i cammini minimi, ma solo quelli relativi ad una parte delle coppie di vertici, è opportuno utilizzare un algoritmo arborescente..6 IL PROBLEMA DEL PERCORSO MASSIMO Si consideri la rete riportata in figura. e la matrice di incidenza arcopercorso riportata in tabella.. Per determinare il percorso di massimo costo tra i vertici e 5 (il percorso p : --5, di costo ) bisogna determinare quali archi appartengono ad esso. Il problema può essere formulato con un modello in tutto analogo a quello del minimo percorso, ma con una diversa funzione obiettivo: Max z = ij A c ij x ij s.a k x ok = i x id = k x jk i x ij = 0 ( j o,d) x ij = 0/ Si supponga di dover calcolare il massimo percorso da a ciascuno degli altri vertici. Si può agevolmente verificare in figura.9 che il massimo percorso da a è l arco -, di costo 5, da a è il percorso --, di costo 8, da a è il percorso ---, di costo, da a 5 è il percorso --5, di costo.

08 Capitolo dodicesimo L insieme dei percorsi determinati forma un arborescenza con radice in (Fig..9). FIG..9 Arborescenza dei percorsi massimi con origine in (5) 9 () 5 5 (8) () Anche il problema della determinazione dei massimi percorsi da un vertice o della rete a tutti gli altri vertici, può essere ricondotto quindi a quello della determinazione di un arborescenza con radice in o. Per la soluzione di questo problema è possibile utilizzare un semplice algoritmo di tipo label setting, basato su una particolare regola di visita. Si parte dal vertice o, che si etichetta con 0. Si visitano e si etichettano in sequenza i vertici che siano destinazione di archi il cui vertice origine sia già etichettato. Per ciascuno di questi vertici si confrontano i costi associati alle alternative di percorso e si sceglie il valore massimo, registrando opportunamente il vertice predecessore. Esempio numerico Si consideri la rete di figura.0, analoga a quella di figura.6. Si etichetta il vertice con 0 (fig..). Si va al vertice, che è l unico ad essere destinazione di archi i cui vertici sono già etichettati, e si etichetta con un costo, che è il valore dell unico arco in esso incidente. Si va quindi al vertice, destinazione degli archi - e -, aventi origine in vertici già etichettati. Le alternative di percorso sono pertanto, la prima di costo 0 +, la seconda di costo +. Si sceglie la massima e si etichetta con valore. Si procede in questo modo etichettando in successione il vertice con valore

Problemi di Percorso 09 7, il vertice 5 con valore 9, il vertice 6 con valore, il vertice 8 con valore 0 e il vertice 7 con valore. L albero dei percorsi massimi è riportato in figura.. FIG..0 Grafo e costi c ij 5 8 6 7 FIG.. Arborescenza dei percorsi massimi con origine in (0) (9) () 5 (7) () 8 (0) () 6 () 7