You are on page 1of 32

Materiale didattico

per il corso di Ricerca Operativa


Appunti su

Elementi di
Ottimizzazione su Grafo

Autore: Giuseppe Bruno

Bozza dicembre 2010

1.

Definizioni

Un grafo non orientato G=(V,A) costituito da un insieme di nodi o vertici V=(v1,...,vn) ed un


insieme di spigoli A=(ak=(vi,vj): vi,vj V). In un grafo non orientato ciascuno spigolo individuato
da una coppia di vertici indipendentemente dal loro ordine; vi e vj sono detti estremi dello spigolo
mentre ak=(vi,vj) detto incidente in vi e vj.
In Figura 1 illustrata una rappresentazione grafica di un grafo non orientato.
v5
a1

a7
a6

a2

v1

v6

v2
a8
a3

a4
v3

v4
a5

V=(v1, v2, v3, v4, v5, v6)


A=(a1, a2, a3, a4, a5, a6, a7, a8)
con a1=(v1, v5); a2=(v1, v2); a3=(v1, v3); a4=(v2, v3); a5=(v3, v4); a6=(v2, v6); a7=(v5, v6); a8=(v4, v6).

Figura 1 - Esempio di grafo non orientato


Il grado di un vertice (vj) dato dal numero di spigoli incidenti in esso. Nellesempio riportato in
figura si ha (v3)=3 e (v4)=2. Un vertice di grado 1 detto foglia mentre un vertice di grado 0
detto isolato.
Una pseudocatena una sequenza di spigoli a1,..,ap tali che esistono p+1 nodi v1,..,vp+1 per cui
ai=(vi, vi+1). I vertici v1 e vp+1 sono detti estremi della pseudocatena.
Una catena una pseudocatena avente tutti gli spigoli diversi. Una catena elementare se tutti i
nodi sono distinti.
Un ciclo una catena avente gli estremi coincidenti.
Nel grafo indicato in Figura 1 si ha, ad esempio:
(a1, a7, a8, a8, a6)
(a2, a1, a7, a6, a4)
(a2, a1, a7, a8, a5)
(a1, a2, a6, a8, a5, a4)

pseudocatena ma non catena


catena non elementare
catena elementare
ciclo

Un grafo non orientato connesso se per ogni coppia di vertici esiste una catena che li unisce.
Un albero (Figura 2) un grafo connesso senza cicli. Gli alberi sono caratterizzati dalle seguenti
propriet:
- se un albero ha n vertici il numero di spigoli pari a n-1;
- un albero ha almeno due foglie;
- tra ogni coppia di vertici esiste una sola catena elementare che li unisce.

Figura 2 Esempio di albero


Un grafo detto orientato o diretto se ogni spigolo, che in questo caso viene detto arco,
individuato da una coppia ordinata di vertici. Dato un grafo orientato e un arco ak=(vi, vj)
appartenente ad esso si dir che:
- vi lorigine e vj la destinazione di ak;
- vi e vj sono vertici adiacenti;
- vi predecessore di vj e vj successore di vi;
- ak uscente da vi ed incide in vj.
Gli archi di un grafo orientato vengono rappresentati evidenziando un orientamento dai nodi origine
ai nodi destinazione (Figura 3).
v5
a1

a7

a6

a2

v1

v6

v2

a9
a8

a3

a4
v4
v3

a5

A=(a1, a2, a3, a4, a5, a6, a7, a8, a9) con
a1=(v5, v1); a2=(v1, v2); a3=(v3, v1); a4=(v2, v3); a5=(v4, v3); a6=(v6, v2); a7=(v5, v6); a8=(v4, v6); a9=(v6, v4)

Figura 3 - Rappresentazione di un grafo orientato


Nel caso di grafi orientati si parla di grado entrante di un vertice -(vj) che rappresenta il numero
di archi entranti in vj e di grado uscente di un vertice +(vj) che rappresenta il numero di archi
uscenti da vj. Nellesempio riportato in Figura 3 si ha -(v3)=2 e +(v3)=1.
Un grafo non orientato G=(V,A) detto sottostante al grafo orientato G=(V,A) se VV e se per
ogni (vi, vj)A esiste lo spigolo (vi, vj)A. Ad esempio il grafo di Figura 1 sottostante al grafo di
Figura 3.
In un grafo orientato una psedocatena una successione di archi cui corrisponde una pseudocatena
nel grafo sottostante. Analogamente per le definizioni di catena, catena elementare e ciclo si fa
riferimento alle corrispondenze con il grafo sottostante.

Un cammino o percorso una catena caratterizzata dal fatto che la destinazione di ciascun arco
coincide con lorigine dellarco successivo. Un cammino elementare se tutti i vertici che lo
compongono sono distinti o, in altri termini, se tutti i nodi presentano grado entrante e grado
uscente minore o uguale a 1.
Si dice percorso hamiltoniano un percorso che tocchi tutti i vertici del grafo una sola volta. Si dice
percorso euleriano un percorso costituito da tutti gli archi del grafo, ciascuno percorso una sola
volta (Figura 4).
v5
v5

v1

v6

v1

v6

v2
v2
v4
v3

v4
v3

(a) Percorso hamiltoniano

(b) Percorso euleriano

Figura 4 Esempi di percorso hamiltoniano e percorso euleriano


Un circuito un cammino avente origine e destinazione coincidenti. Un circuito elementare se
tutti i vertici che lo compongono sono distinti.
Nel grafo indicato in Figura 3 si ha, ad esempio:
(a9, a5, a8, a6)
(a7, a6, a2, a3)
(a7, a9, a8, a6, a4)
(a7, a9, a5, a3)
(a4, a5, a9, a6)
(a2, a4, a3)

pseudocatena ma non catena


catena ma non cammino
cammino non elementare
cammino elementare
ciclo ma non circuito
circuito

Un grafo orientato connesso se connesso il grafo sottostante mentre fortemente connesso se


per ogni coppia di vertici esiste un cammino che li unisce. Il grafo di Figura 3 connesso ma non
fortemente connesso perch, ad esempio, tra i vertici v3 e v5 non esiste un cammino che li unisca.
Una arborescenza (Figura 5) un grafo orientato senza cicli avente un solo nodo con grado
entrante nullo detto radice dellarborescenza. Si pu dimostrare che da questa definizione
scaturisce la propriet che ciascun vertice di una arborescenza ad eccezione della radice
destinazione di uno ed un solo arco e che, quindi, esiste uno ed un solo percorso che unisce la
radice ad un vertice dellarborescenza.
radice

Figura 5 - Esempio di arborescenza

2.

Tipi di grafi

Nel seguito si introdurranno alcune definizioni che consentiranno di classificare i grafi in funzione
di alcune propriet.
Due grafi orientati si dicono isomorfi se hanno lo stesso grafo sottostante.
Un grafo non orientato detto completo se per ogni coppia di vertici del grafo esiste uno spigolo
che li unisce. Un grafo orientato completo se il grafo sottostante completo. Un grafo orientato
pieno se esiste un arco per ogni coppia di nodi distinti (Figura 6).

(a) Grafo non orientato completo

(b) Grafo orientato completo

(c) Grafo pieno

Figura 6 Esempi di grafi completi e pieni


Un grafo orientato completo, simmetrico e senza cappi sar costituito da (n2-n) archi. Un grafo
orientato non completo di densit (0<1) se costituito da un numero di archi m=(n2-n). Ad
esempio un grafo di 50 nodi e di densit =0.8 costituito da m=0.8*(2500-50)=1960 archi. Un
grafo tanto pi denso quanto maggiore ; tanto pi sparso quanto minore .
Unaltra misura della densit di un grafo, pi adatta per grafi molto sparsi, rappresentata dal grado
medio (V) di un grafo per cui il numero di archi risulta pari a m=(V) n. Ad esempio, un grafo di
50 nodi che abbia grado medio pari a 3.5 presenta un numero di archi pari a 175.
Un grafo non orientato bipartito (Figura 7) se linsieme dei vertici V pu essere partizionato in
due insiemi V1 e V2 tali che ogni spigolo del grafo presenta un estremo in V1 e laltro in V2. Un grafo
orientato bipartito se bipartito il grafo sottostante. Si pu dimostrare che un grafo non orientato
bipartito se e solo se non contiene circuiti di cardinalit dispari (ovvero formati da un numero
dispari di spigoli).

Figura 7 - Esempio di grafo bipartito


In molti problemi reali suscettibili di rappresentazione su grafo si presenta la necessit di associare
delle informazioni ai vertici e/o agli archi del grafo (costo, lunghezza, capacit, flusso, etc..). In tal
caso si parla di grafi pesati e le informazioni si dicono pesi. Nel caso pi semplice i pesi sono dei
valori costanti.

In Figura 8 sono riportati un esempio di grafo pesato sui nodi e un esempio di grafo pesato sugli
archi. In Figura 9 riportato un esempio di grafo pesato sui nodi e sugli archi.
3

4
3

5
9

-7

4
1

-2

(a) Grafo pesato sugli archi

(b) Grafo pesato sui nodi

Figura 8 Esempi di grafi pesati


3.

Metodi di rappresentazione dei grafi

Esistono diversi modi per rappresentare un grafo. La scelta pi appropriata da utilizzare dipende da
diversi fattori: occupazione di memoria richiesta, operazioni da effettuare sul grafo, eventuali
propriet del grafo, strutture dati e linguaggio utilizzato per limplementazione. Va precisato che, in
generale, rappresentazioni compatte, che richiedano cio unoccupazione di memoria minore,
rendono pi complesse alcune operazioni che si definiscono su grafo.
Le principali operazioni che si effettuano su un grafo sono le operazioni di ricerca di un arco del
grafo, inserimento di un arco nel grafo e cancellazione di un arco del grafo. Di conseguenza
necessario ricercare una soluzione che rappresenti un equilibrio tra lesigenza di ridurre
loccupazione di memoria e quella di ridurre i tempi di elaborazione per la realizzazione di queste
operazioni.
I modi generalmente utilizzati per la rappresentazione di un grafo sono due: le liste di adiacenza e
la matrice di adiacenza detta anche matrice di incidenza nodo-nodo.
Nel seguito, a titolo esemplificativo, si far riferimento alla rappresentazione di un grafo orientato
di n nodi ed m archi di densit pesato sui nodi e sugli archi. Ad ogni nodo, quindi, sar associato
un peso di e ad ogni arco un peso cij. Per semplicit di notazione si far riferimento ai soli indici per
indicare i nodi e gli archi (es: il nodo vi sar indicato con i e larco (vi, vj) sar indicato con (i, j)).
Lindice con cui si indica ciascun nodo viene detto etichetta o label del nodo
3.1

Rappresentazione con liste di adiacenza

La rappresentazione con liste di adiacenza utilizza un vettore A(i) di n liste, una per ogni vertice.
La lista i-esima associata al vertice i rappresenta linsieme degli archi uscenti da i. Se il grafo non
orientato lo spigolo (i, j) presente sia nella lista di adiacenza del nodo i che in quella relativa al
nodo j. Una lista di adiacenza ordinata se esiste un criterio di ordinamento degli archi allinterno
della lista.
In Figura 10 viene riportata la rappresentazione del grafo indicato in Figura 9 attraverso liste di
adiacenza. Allinterno di ciascuna lista di adiacenza gli archi sono ordinati secondo il valore di
label crescente.

3
peso del nodo

4
5

-2
-7

label del nodo

6
3
peso dellarco

Figura 9 - Grafo orientato pesato


label

nodo

di

nodo

di

-2

nodo

di

-7

Figura 10 - Rappresentazione di un grafo attraverso liste di adiacenza


Una implementazione della rappresentazione secondo liste di adiacenza quella che prevede
lutilizzazione di due vettori:
il vettore archi[] di m elementi conterr le liste di adiacenza memorizzate consecutivamente e
ordinate per label del nodo di origine crescente;
il vettore nodi[] di n elementi conterr nella posizione iesima, oltre alle informazioni relative al
nodo i, un valore puntfirst[i] che rappresenta il valore dellindice del vettore archi[] in
corrispondenza del quale posizionato il primo arco della lista di adiacenza relativa al nodo i. Di
conseguenza linsieme degli archi relativi alla lista di adiacenza del nodo i sar situato nel vettore
archi[] a partire alla posizione puntfirst[i] fino alla posizione puntfirst[i+1]-1.
Nel caso un nodo j non presenti archi uscenti il valore di puntfirst[j] sar fissato pari ad un valore
convenzionale () e la lista di adiacenza del nodo j-1 sar posizionata a partire dalla posizione
puntfirst[j-1] fino alla posizione puntfirst[j+1]-1.
In Figura 11 riportata limplementazione utilizzando vettori del grafo in Figura 9.

label_orig

vettore nodi[ ]
di

puntfirst

label_dest

vettore archi[ ]
cij

1
2
3
4
5

4
3
6
1
1

1
3

6
7

2
3
3
4
5
2
3
4

3
6
9
4
-7
5
8
-2

Figura 11 - Implementazione di un grafo mediante vettori


3.2

Rappresentazione con matrice di incidenza nodo-nodo

La rappresentazione con matrice di adiacenza utilizza per la rappresentazione degli archi una
matrice A di dimensione nxn il cui elemento ai,j dato da

cij
aij =

se l ' arco (i , j ) esiste


se l ' arco (i , j ) non esiste

Se il grafo non pesato sugli archi nella matrice A si pu utilizzare il valore 1 se larco (i,j) esiste e
0 se larco (i ,j) non esiste. Nel caso di grafo non orientato la matrice binaria e simmetrica.
In Figura 12 viene rappresentato il grafo di Figura 9 utilizzando la matrice di incidenza nodonodo.
1
2
3
4
5

1
0

2
3
0

3
6
6
0

0
-2

-7
8

Figura 12 - Rappresentazione con matrice di incidenza nodo-nodo

4 Il problema del flusso a costo minimo (min-cost-flow)


Il problema di flusso a costo minimo (min-cost-flow) consiste nellindividuare la distribuzione di
flusso che minimizzi il costo totale di distribuzione del flusso su di una rete in modo da soddisfare i
vincoli sulla disponibilit di flusso.
Si consideri un grafo orientato G=(V,A) composto da n vertici ed m archi. Si supponga che
linsieme dei vertici sia posto pari a V=Vo U Vd U Vt con
Vo
Vd
Vt

insieme dei nodi origine o generatori di flusso;


insieme dei nodi destinazione o attrattori di flusso;
insieme dei nodi di transizione, ovvero nodi che non generano e non attraggono flusso;

Si introducano quindi le seguenti grandezze:


xij
flusso sullarco (i,j);
costo per il trasporto di una unit di flusso sullarco (i,j);
cij
mij
capacit dell'arco arco (i,j) ovvero flusso massimo trasportabile sull'arco (i,j);
disponibilit di flusso nel nodo i; si conviene che se i Vo, bi indica il flusso generato dal
bi
nodo i; se i Vd, bi indica il flusso attratto dal nodo i; se i Vt, bi=0.
Sulla base della notazione introdotta il problema di flusso a costo minimo senza vincoli di
capacit assume la seguente forma:
z=

cij xij

Min!

(1)

i , j V

sottoposto ai vincoli

bi

xkj x jk = bi

jV
jV
0

i Vo
i Vd
i Vt

(2)

xij 0
La funzione obiettivo (1) rappresenta il costo totale di distribuzione del flusso sulla rete da
minimizzare. I vincoli (2) esprimono la continuit del flusso in corrispondenza del generico nodo k.
Infatti il primo temine (j xkj) indica la somma del flusso uscente dal nodo k mentre il secondo
termine (j xjk) rappresenta la somma del flusso entrante nel nodo k. Pertanto se il nodo generatore
il flusso uscente deve eccedere di bi il flusso entrante; se il nodo attrattore il flusso entrante deve
eccedere di bi il flusso uscente; se il nodo di transizione (bi=0) il flusso uscente deve essere uguale
al flusso entrante.
Nel seguito si assumer che i costi cij e i termini noti bi sono interi. Tale ipotesi non lede la
generalit del problema in quanto con un opportuno cambiamento di scala ci si pu sempre
ricondurre a questa situazione.
Il problema pu essere rappresentato attraverso un grafo pesato sui nodi e sugli archi in cui:
ciascun nodo i sia pesato con il valore dei termini noti;
ciascun arco (i,j) sia pesato con i valori cij.

Esempio
In Figura 13 raffigurato un problema di flusso a costo minimo con lindicazione dei valori dei
termini noti (>0 per i nodi generatori; <0 per i nodi attrattori; =0 per i nodi di transizione) e cij.

2
2
+6

-5

6
1

+4

-7

5
4
3
+3

5
-1

Figura 13 Rappresentazione di un problema di flusso a costo minimo

Il modello matematico del problema dato da:


z= 4x12 + 5x13 + 1x24 + 2x26 + 4x34 + 2x35 + 5x45 + 6x46 + 6x47 + 4x57 + 6x67

Min!

sottoposto a

x12 + x13 = +6
x24 + x26 x12 = 0
x34 + x35 x13 =+3
x45 + x46 + x47 x23 x23 =+4
x57 x35 x45 = -1
x67 x26 x46 = 5
x47 x57 x67 = 7
x120, x130, x240, x260, x340, x350, x450, x460, x470, x570, x670
Riscrivendo, in maniera tabellare, la matrice dei vincoli si ottiene:
1
2
3
4
5
6
7

x12
1
-1

x13
1

x24

x26

x34

x35

x45

x46

x47

x57

x67

-1

1
-1

-1

1
1
-1

-1
-1

1
1

-1
-1

-1

1
-1

=
=
=
=
=
=
=

+6
0
+3
+4
-1
-5
-7

La matrice dei coefficienti presenta la propriet che ciascuna colonna contiene due soli elementi
diversi da 0. Pi precisamente la colonna associata alla variabile xij presenta un elemento pari ad 1
in corrispondenza della riga i ed un elemento pari a -1 in corrispondenza della riga j. Da queste
caratteristiche si possono dedurre alcune fondamentali propriet che saranno illustrate di seguito.

4.1 Propriet del modello di flusso su rete

Il modello matematico del problema di flusso a costo minimo pu essere riscritto matricialmente
nella forma:

z = cT x
s.a
Ax = b

Min!

dove A, di dimensioni (nxm) prende il nome di matrice di incidenza nodo-arco.


Lesempio illustrato consente di evidenziare alcune propriet della matrice A, valide nel caso
generale di problema con n nodi ed m archi.
1. Condizione necessaria perch il problema abbia soluzioni ammissibili che i=1,n bi=0

Poich ogni colonna di A presenta un elemento pari ad 1 ed un elemento pari a 1, sommando tutte le righe, al primo
membro si ottiene 0. Di conseguenza necessario che anche la somma degli elementi a secondo membro risulti 0.

2. La matrice A di rango n-1


La matrice A non certamente di rango n dal momento che la somma di tutte le righe nulla e che, quindi, una riga pu
essere espressa come combinazione lineare delle altre. Per dimostrare che la matrice di rango n-1 bisogna dimostrare
lesistenza di un minore complementare di ordine n-1 con determinante diverso da zero.
A tal fine, con riferimento ad esempio, al grafo di Figura 13, si consideri un albero (n-1 spigoli) estratto dal grafo. Si
individui, quindi, la matrice A' di dimensione (n-1) x (n-1) estraendo dalla matrice A le colonne corrispondenti alle xij
tali che lo spigolo (i,j) appartenga all'albero (Figura 14) e cancellando una qualsiasi riga (ad esempio lultima).
La matrice cos costruita presenta la propriet che esiste almeno una riga con un solo elemento diverso da 0. Infatti,
poich un albero presenta almeno due nodi foglia nella riga corrispondente a tali nodi sar presente un solo elemento
pari a -1. In Figura 14 si pu verificare che le righe corrispondenti ai nodi foglia (2,5,6,) presentano un solo elemento
pari a -1.

4
7

x12
1 1
2 -1
3
4
5
6

x13
1

x34

x35

-1

1
-1

x46

x47

-1
-1

Figura 14 - Esempio di albero con la corrispondente matrice di incidenza nodo-arco


Si scelga un nodo foglia i* a piacere e si indichi con j* l'unico nodo ad esso collegato sull'albero. Se si riordina la
matrice A' ponendo la riga i come prima riga e la colonna (i*,j*) come prima colonna si ottiene una matrice che presenta
le seguenti caratteristiche
-

l'elemento (1,1) della matrice pari a -1;


gli elementi della prima riga, tranne l'elemento (1,1), sono pari a 0;
gli elementi della prima colonna, tranne l'elemento (1,1), sono pari a 0 ad eccezione dell'elemento
corrispondente al nodo j* che pari a 1;

10

Nell'esempio riportato in Figura 14, scegliendo il nodo foglia i*=5, si individua lunico nodo j*=3 ad esso collegato.
Ordinando la matrice ponendo la riga 5 come prima riga e la colonna corrispondente alla variabile x35 come prima
colonna si ottiene una matrice che presenta le caratteristiche descritte.

x35
-1

5
1
2
3
4
6

x12

x13

1
-1

-1

x34

1
-1

x46

x47

1
-1

Se si cancella dall'albero il nodo i* e lo spigolo (i*,j*) si ottiene un nuovo albero di n-2 spigoli. Su questo albero sar
possibile individuare un nuovo nodo foglia e riordinare la matrice secondo la regola descritta in precedenza. Iterando n1 volte tale procedura si ottiene una matrice triangolare bassa. In Figura 15 sono riportati i risultati delle iterazioni
applicate all'esempio di Figura 14, avendo evidenziato lelemento (i*,j*) che va posto nella posizione in alto a sinistra.
L'applicazione di questa procedura di riordinamento delle righe e delle colonne della matrice A' consente di dimostrare
che la matrice A di rango n-1. Infatti la matrice ordinata secondo la procedura descritta, presenta un determinante pari
a 1, essendo pari al prodotto degli elementi della diagonale sar pari a 1. Di conseguenza si individuato un minore
di ordine n-1 il cui determinante diverso da 0.

5
1
2
3
4
6

5
2
1
3
4
6

x35
-1

x12
1
-1

x35
-1

x12

x34

x46

x47

1
-1

-1
1
1

x13

x13

1
-1

1
-1

x34

1
-1

1
-1

x46

x47

1
-1

5
2
1
3
4
6

5
2
1
3
6
4

x35
-1

x12
-1
1

x13

1
-1

x35
-1

x12
-1
1

x13

1
-1

x34

1
-1

x34

x46

x47

1
-1

x46

x47

1
-1

-1
1

5
2
1
3
4
6

5
2
1
3
6
4

x35
-1

x12
-1
1

x13

-1
1

x35
-1

x12
-1
1

x34

1
-1

x13

x34

1
-1

1
-1

x46

x47

1
-1

x46

x47

-1
1

Figura 15 Ordinamento della matrice di incidenza nodo-arco


3. La matrice A totalmente unimodulare, ovvero il determinante di qualsiasi sottomatrice di
ordine k n pari a 0, +1 o -1.
Il determinante di una qualsiasi sottomatrice di ordine n certamente pari a 0 essendo la matrice A di rango n-1, cos
come il determinante di una sottomatrice di ordine 1 pari a 0, +1 o -1 essendo tutti gli elementi della matrice pari a 0,
+1 o -1.
Per dimostrare che una qualsiasi sottomatrice di ordine 1<k<n pari a 0, +1 o -1 si pu ragionare nel seguente modo.
Analizzando una qualsiasi sottomatrice Ak di A di ordine 1<k<n, si pu verificare una delle seguenti condizioni:
a) Ak contiene almeno una colonna con tutti elementi nulli;
b) tutte le colonne di Ak presentano due soli elementi diversi da 0 (pari a +1 e -1).
c) Ak contiene almeno una colonna con un solo elemento diverso da 0 (pari a +1 e -1).
Nei casi a) e b) evidente che il determinante nullo. Nel caso c) il calcolo del determinante pu essere effettuato
attraverso il metodo di Laplace, utilizzando una delle colonne con un solo elemento (i,j) non nullo. Pertanto det(A)=
det(Akij) essendo (Akij) il minore di ordine k-1 ottenuto da A cancellando la riga i e la colonna j. Il ragionamento
effettuato sulla Ak pu, pertanto, essere ripetuto iterativamente per la (Akij). Ne consegue che det(A)=0 se, nello
sviluppo secondo la regola di Laplace, si verifica uno dei casi a) o b) e pari a 1 se si verifica sempre il caso c).

11

4. Le soluzione di base di un problema di flusso su rete sono intere


Si consideri il sistema Ax=b derivante dal sistema originario Ax=b attraverso la cancellazione di una riga. Come tutti i
problemi di programmazione lineare, partizionate le variabili in un insieme di variabili di base xB (di dimensione n-1) e
un insieme di variabili non di base xNB (di dimensione m-n+1), il sistema Ax=b pu essere scritto nella forma
NB xNB + B xB = b
E, pertanto, annullando le variabili non di base
B xB = b
Tale sistema pu essere risolto con la regola di Cramer. Pertanto la generica variabile xkxB pu essere calcolata come:
xk =

. . b1

det B k
= det . . ...
det (B )
. . b
n 1

( )

.
.

Essendo B.k la matrice ottenuta sostituendo nella B la k-esima colonna con la colonna dei termini noti b, ed essendo
det(B)= 1. Quindi D, calcolando il determinante di B.k con la regola di Laplace, secondo la colonna k, si ottiene

( )

x k = det B k =

( )

bi det B ik

i = 1, n 1

con Bik sottomatrice di B ottenuta cancellando la riga i e la colonna k. Poich, per la totale unimodularit della matrice
A, det(Bik)= 1 o 0, xk la somma algebrica di valori interi o nulli e un valore intero.

5. A ciascun albero estratto dal grafo corrisponde una base della matrice A
E' stato infatti dimostrato che le righe e le colonne della matrice associata ad un albero estratto dal grafo possono essere
ordinate in modo da individuare una matrice triangolare inferiore di rango massimo. Ne consegue, per definizione di
base, che la matrice cos estratta costituisce una base della matrice A.

6. Ad una soluzione di base del sistema Ax=b corrisponde un albero sul grafo rappresentativo.
Il risultato 5) pu essere dimostrato anche in senso contrario. Poich, per definizione, una base presenta il massimo
numero di righe e colonne linearmente indipendenti, una base di A ha dimensione pari a n-1. Di conseguenza a ciascuna
base pu essere associato un sottografo di n-1 spigoli. Si supponga per assurdo che questo sottografo non sia un albero
e che, quindi, contenga un ciclo formato da p nodi e, conseguentemente, da p archi. Si consideri allora la matrice pxp
costituita dalle righe e dalle colonne corrispondenti rispettivamente ai nodi ed agli spigoli che costituiscono il ciclo.
Tale matrice sar costituita tutta da colonne che presentano due elementi diversi da 0 (1 e -1) dal momento che per
ciascuno spigolo (i,j) sar presente nella matrice sia la riga i che la riga j. Di conseguenza il determinante di questa
matrice estratta pari a 0 e, pertanto, il suo rango non massimo contraddicendo l'ipotesi. In Figura 16 riportato un
esempio di grafo di n-1 spigoli contenenti un ciclo ed indicata la matrice costituita dai nodi e dagli spigoli che
costituiscono il ciclo dalla quale si evince la presenza di colonne con due elementi 1 e -1.

2
1

4
7

2
4
6
7

x24
1
-1

x26
1

x47

x67

1
-1
-1

1
-1

Figura 16 Matrice di incidenza nodo-arco associata ad un ciclo


7. Una matrice di base estratta da A triangolare
E' stato infatti dimostrato che le righe e le colonne della matrice associata ad un albero estratto dal grafo possono essere
ordinate in modo da individuare una matrice triangolare.

8. Per determinare una soluzione di base ammissibile del sistema Ax=b bisogna individuare
un albero ammissibile sul grafo rappresentativo.

12

In un grafo rappresentativo di un problema di flusso a costo minimo un albero ammissibile un albero caratterizzato
dalla presenza di almeno un arco uscente per ogni nodo origine e di almeno un arco entrante per ogni nodo
destinazione.
Ad esempio con riferimento al problema rappresentato in Figura 13, lalbero indicato in Figura 17 risulta ammissibile.
Ad esso associata la soluzione di base ammissibile x12=4, x13=1, x25=5, x34=4, x45=8, x57=4.

5
6

+6

+4

-5

4
7

-7

4
5
-1

3
+3

Figura 17 Esempio di soluzione di base ammissibile


9. Data una soluzione di base ammissibile del sistema Ax=b, lingresso in base di una variabile
aggiuntiva produce un ciclo sul grafo rappresentativo.
Poich ad una soluzione di base ammissibile corrisponde un albero, laggiunta di un nuovo arco provoca la formazione
di un ciclo.

Risoluzione di un problema di flusso a costo minimo

Considerato che il problema di flusso a costo minimo un problema di programmazione lineare,


esso potrebbe essere risolto con lalgoritmo del simplesso adattato al problema specifico
considerando le propriet descritte. Tale adattamento viene detto algoritmo del simplesso su rete.
In Figura 18 riportato il diagramma di flusso che descrive lalgoritmo del simplesso.
In Figura 19 si riporta il diagramma del simplesso su rete. Con riferimento allingresso nella
soluzione di un nuovo arco xst, va ricordato che laggiunta di un nuovo arco ad una soluzione ad
albero provoca la formazione di un ciclo. Pertanto larco uscente xpq va individuato tra linsieme
degli archi che, insieme al nuovo arco xst, formeranno un ciclo. Eliminando dalla soluzione larco
xpq, infatti, la nuova soluzione sar nuovamente un albero ammissibile e, quindi, una soluzione di
base ammissibile.
Nel seguito si illustrer nel dettaglio il funzionamento del simplesso su rete con riferimento ad una
particolare versione del problema di flusso a costo minimo nota come problema del trasporto.

13

Individuazionediprima
soluzione
Individuazione
un primo
vertice
di base ammissibile ponendo il sistema
in forma canonica

Passaggiovariabile
ad un vertice
Individuazione
di ingresso xs
adiacente
miglioredi uscita xt
Individuazione
variabile
Trasformazione del sistema in una
nuova forma canonica
Test
Test di
di ottimalit
ottimalit
Il verticedicorrente
ottimo?
La soluzione
base corrente
ottima?

si

no
Si analizzano le variazioni della funzione obiettivo a seguito
del passaggio di una variabile xj non in base da 0 a 1

Stop

Se le variazioni sono tutte non positive la soluzione


ottima; altrimenti si passa ad una soluzione di base
ammissibile migliore

Figura 18 Diagramma di flusso dellalgoritmo del simplesso

Individuazione
di un
unprimo
primovertice
albero
Individuazione di
ammissibile

Passaggio ad
un di
vertice
Individuazione
arco
ingresso xst
adiacente arco
migliore
Individuazione
di uscita xpq
Trasformazione della soluzione in un
nuovo albero
Test
Test di
di ottimalit
ottimalit
Il verticedicorrente
ottimo?
La soluzione
base corrente
ottima?

si
Stop

no
Si analizzano le variazioni della funzione obiettivo a seguito
dellintroduzione di un arco (i,j) nella soluzione

Se le variazioni sono tutte non positive la soluzione ottima;


altrimenti si passa ad una soluzione ad albero migliore
Figura 19 Diagramma di flusso dellalgoritmo del simplesso su rete

14

5 - Il problema del trasporto

Il problema del trasporto un particolare problema di flusso su rete in cui linsieme dei vertici
V=VoUVd ripartito tra un insieme di m origini ed n destinazioni (non sono presenti nodi di
transizione). A ciascuna origine iVo associata unofferta di flusso ai mentre a ciascuna
destinazione jVd associata una domanda di flusso bj. Si supponga, inoltre, che il grafo sia
bipartito tra gli insiemi Vo e Vd, ovvero linsieme A={(i,j): iVo, jVd} e che a ciascun arco (i,j) sia
associato un costo cij di trasferimento di una unit di flusso da i a j. In Figura 20 riportata la
rappresentazione di un problema con m=4 origini e n=3 destinazioni.
a1
1

b1

c11
c12
c13
c14

c21
c22
c23
2
c24
c
a3 c3132
c33
c34
3

a2

b2
2
b3
3

b4
4

Figura 20 Rappresentazione del problema del trasporto

Il modello descrittivo del problema pu essere ricavato dal modello generale di flusso a costo
minimo considerandone le propriet specifiche:

z=

( i , j ) A

ij

( i , j ) A

sottoposto ai vincoli

xij = ai
x

i =1, m

ij

= b j

ij

xij Min!

sottoposto ai vincoli

i = 1..m

j =1, n

z=

xij Min!

= ai

i = 1..m

= bj

j = 1..n

j =1, n

j = 1..n

ovvero

i =1, m

xij 0

ij

ij

xij 0

Anche se la matrice del trasporto una particolarizzazione della matrice generale del problema di
flusso su rete, si pu dimostrare, analogamente, che valgono le stesse propriet. Pertanto:
condizione necessaria per lammissibilit del problema che risulti ai = b j ;
i =1, m

j =1, n

una soluzione di base (non degenere) costituita da n+m-1 variabili diverse da 0 e


corrisponde ad un albero sul grafo bipartito rappresentativo del problema.

Le informazioni caratterizzanti il problema del trasporto possono essere sintetizzate in due matrici
di dimensioni mxn: la matrice del trasporto X={xij} e la matrice dei costi C={xij}. In Figura 21 sono
indicate le matrici dei costi e del trasporto per il problema di Figura 20.
1
2
3
Domanda

1
2
3
4
x11
x12
x13
x14
x21
x22
x23
x24
x31
x32
x33
x34
b1
b2
b3
b4
Matrice del trasporto

Offerta
a1
a2
a3

1
2
3

1
c11
c21
c31

2
c12
c22
c32

3
c13
c23
c33

Matrice dei costi

Figura 21 Matrice del trasporto e matrice dei costi

15

4
c14
c24
c34

Dalla matrice del trasporto si possono desumere i vincoli del modello: infatti sommando i termini di
riga si ottengono le espressioni dei primi membri dei vincoli sulle origini mentre sommando i
termini per colonna si ottengono le espressioni dei primi membri dei vincoli sulle origini. Pertanto
la individuazione di una soluzione ammissibile consister nel riempire la matrice del trasporto con
valori numerici non negativi tali la somma dei valori di riga sia pari al corrispondente valore di
offerta mentre la somma dei valori di colonna sia pari al corrispondente valore di domanda. In
particolare se il numero di valori strettamente positivi pari a n+m-1 si in presenza di una
soluzione di base ammissibile.
Il problema del trasporto pu essere risolto attraverso la procedura del simplesso. Per realizzare la
procedura necessario specificare il modo in cui si realizza ciascun passo dellalgoritmo.
Per illustrare questi aspetti utilizzeremo lesempio caratterizzato dalla matrice dei costi e dai valori
di domanda e di offerta indicati in Figura 22.
1
7
5
9
20

1
2
3
Domanda

2
3
4
5
10
8
6
4
6
8
7
3
30
10
40
Matrice dei costi

Offerta
30
50
20

Figura 22 Matrice dei costi e valori di domanda e offerta per un problema di trasporto
Ricerca di una prima soluzione di base ammissibile
Per individuare una prima soluzione di base ammissibile si pu utilizzare la cosiddetta procedura
dellangolo di Nord-Ovest che consiste nel fissare, iterativamente, il valore non ancora definito
della matrice del trasporto che si trova in alto a sinistra.

Sia, alla generica iterazione, (s,t) lelemento Nord-Ovest.


Si pone xst=min(as, bt).
Se xst= as, necessariamente tutti gli altri elementi della riga s a destra di s, dovranno essere posti
pari a 0 (xsk=0 k=t+1,..n); si pone quindi bt= bt- xst e t=t+1.
Se, invece, xst= bt, necessariamente tutti gli altri elementi della colonna s in posizione inferiore a
t, dovranno essere posti pari a 0 (xkt=0 k=s+1,..m); si pone quindi a1= a1-xst e e t=t+1.
Quindi si riapplica la procedura con riferimento al nuovo elemento (s,t).
La procedura si inizializza fissando s=t=1 ovvero fissando il valore di x11=min(a1, b1).
Nel seguito si illustra lapplicazione del procedimento per lesempio di Figura 20.
s=1, t=1;
s=1, t=2;
s=2, t=2;
s=2, t=3;
s=2, t=4;
s=3, t=4;

x11=min(a1, b1)=20
x12=min(a1, b2)=10
x22=min(a2, b2)=25
x23=min(a2, b3)=20
x24=min(a2, b4)=5
x24=min(a3, b4)=20

x21= x31=0;
x13= x14=0;
x32=0;
x33=0;

a1=30-20=10
b2=35-10=25
a2=50-25=25
a2=25-20=5
b4=25-5=20

t=2
s=2
t=3
t=4
s=3

La soluzione individuata caratterizzata da n+m-1=6 variabili diverse da 0 dal momento che ad


ogni iterazione si fissano i valori di una riga o una colonna. Soltanto in corrispondenza dellultimo
elemento si determinano, in pratica, contestualmente i valori di una riga e di una colonna. La
soluzione, pertanto, corrisponde ad una base ammissibile e, quindi, ad un albero sul grafo
rappresentativo del problema (Figura 23).
16

1
2
3
Domanda

1
2
3
4
20
10
0
0
0
25
20
5
0
0
0
20
20
35
20
25
Matrice del trasporto

Offerta
30
50
20

30

20

20

10

50

25

20
50

20

35
2
20
3

25
4

Figura 23 Prima soluzione di base ammissibile con il metodo dellangolo di Nord-Ovest


Test di ottimalit
Per effettuare il test di ottimalit bisogna calcolare i coefficienti di costo modificati delle variabili
non basiche. A tal fine si pu utilizzare la definizione secondo la quale il coefficiente di costo
modificato cij associato alla variabile xij rappresenta la variazione che la funzione obiettivo
subirebbe nel caso la variabile entrasse in base con valore unitario. Per calcolare tale variazione, a
partire da una soluzione basica corrente, si consideri il fatto che lingresso in base di una nuova
variabile comporta la chiusura di un ciclo sul grafo. Di conseguenza, nel caso xij assuma il valore 1,
per assicurare il rispetto dei vincoli, le variabili associate agli archi che costituiscono il ciclo
dovranno subire necessariamente delle variazioni positive (+1) o negative (-1). Questa circostanza
pu essere compresa sia osservando lalbero rappresentativo della soluzione corrente.
Ad esempio con riferimento alla soluzione di Figura 23, lingresso in base di una nuova variabile
x13 con valore unitario, produce il ciclo evidenziato in Figura 24 ((1,2), (1,3), (2,2), (2,3)).
Percorrendo il ciclo coerentemente al verso associato alla variabile entrante (13) si verifica che
alcuni archi del ciclo sono coerenti con questa direzione (2,2), mentre altri archi ((2,3), (1,2))
presentano orientamento opposto. Pertanto, per assicurare il soddisfacimento dei vincoli, quando la
variabile assume x13=1 le variabili x23 e x12 devono subire una variazione pari a -1 e la variabile x22
una variazione pari a +1.
Questo aspetto pu essere dedotto anche analizzando la matrice del trasporto. In fatti se la x13 passa
da 0 a 1, subendo, cos una variazione +1, per mantenere inalterata la somma della colonna 3, x23
deve subire una variazione pari a -1; ma per mantenere inalterata la somma della riga 2 la variabile
x22 deve presentare una variazione pari a +1; infine per mantenere inalterata la somma della colonna
2, x12 deve subire una variazione pari a -1.
Ne consegue che la variazione della funzione obiettivo a seguito dellingresso in base della x13 con
valore 1, ovvero, per definizione, c13, sar pari a

c13= c13- c23+ c22- c12= 10 -4 +6 -5= 7


Nel seguito si riporta il calcolo dei coefficienti di costo modificati per le altre variabili non basiche.
Poich non tutti i coefficienti di costo modificati sono non negativi la soluzione non ottima.
20

30

1
2
3
Domanda

1
20
0
0
20

2
3
4
-1
+1
0
0
10
5
25+1 20-1
0
0
20
35
20
25
Matrice dei costi

Offerta
30
50
20

50

-1
+1

+1

35
2

-1
50

20
3
25
4

Figura 24 Formazione di un ciclo per effetto dellingresso di una nuova variabile in base

17

1
2
3
Domanda

1
20
0
0
20

2
3
4
-1
0
10
0+1
+1
20
25
5-1
0
0
20
35
20
25
Matrice dei costi

20

30

Offerta
30
50
20

1
50

+1

2
20
-1

50

2
3
4
0
0
10+1
-1
20
5
25
0
0
20
35
20
25
Matrice dei costi

25
4

Offerta
30
50
20

20

-1

+1

50

+1

-1

2
20
3
25
4

50
3

30

1
2
3
Domanda

2
3
4
+1
0
0
10
-1
20
25
5+1
0
0
20-1
35
20
25
Matrice dei costi

Offerta
30
50
20

1
20
0
0
20

2
3
4
10
0
0
20
25-1
5+1
+1
0
0
20-1
35
20
25
Matrice dei costi

Offerta
30
50
20

+1

50
2

20

-1

2
20

+1
+1
50

3
25
4

-1

30

20

50

20

+1

3
25
4

50 +1
-1

c32= c32- c22+ c24- c34= 8- 6 +6 -3= 5

1
2
3
Domanda

2
3
4
10
0
0
25
20-1 5+1
0
0+1 20-1
35
20
25
Matrice dei costi

35

-1

1
20
0
0
20

35

-1

c31= c31- c11+ c12- c22+ c24- c34= 9- 7+5 -6 +6 -3= 4

1
2
3
Domanda

35

c21= c21- c11+ c21- c22= 5 -7 +5 -6= -3


1
20-1
0
0+1
20

3
30

1
20-1
0+1
0
20

35

c14= c14- c24+ c22- c12= 8 -6 +6 -5= 3

1
2
3
Domanda

-1

+1

Offerta
30
50
20

30

20

50

-1
50
3

c33= c33- c23+ c24- c34= 7- 4 +6 -3= 6

+1
+1
-1

Figura 25 Esempio di calcolo dei coefficienti di costo modificati

18

35
20
3

25
4

Individuazione della variabile entrante


Si individua come variabile entrante la variabile con il coefficiente di costo modificato minore
anche se si pu scegliere una qualsiasi variabile con coefficiente di costo modificato negativo.
Nellesempio, quindi, la variabile entrante la x21.
Individuazione della variabile uscente
Poich si deve determinare una nuova soluzione di base ammissibile, ovvero un nuovo albero, la
variabile uscente va individuata tra linsieme delle variabili che, con lingresso della nuova
variabile, concorre alla formazione del ciclo. In particolare si individua, come variabile uscente, la
variabile che, allaumentare della variabile entrante, si annulla per prima. Ne consegue che la
variabile uscente corrisponde alla variabile che presenta valore minore, tra quelle che subiscono una
variazione negativa.
Nellesempio, lingresso della x21 produce la formazione del ciclo ((1,2), (1,1), (1,2), (2,2)). Poich
le variabili x11 e x22 tendono a diminuire, la variabile uscente sar la x11 che presenta valore (20)
inferiore a quello della x22 (25).
In Figura 26 riportata la matrice del trasporto e lalbero corrispondente alla nuova soluzione di
base ammissibile.
20

30

1
2
3
Domanda

1
0
20
0
20

2
3
4
30
0
0
5
20
5
0
0
20
35
20
25
Matrice dei costi

Offerta
30
50
20

1
50
2
50
3

30
20
5
20
5
20

2
20
3
25
4

Figura 26 Nuova soluzione di base ammissibile

La procedura, quindi, prosegue iterativamente a partire dalla nuova soluzione individuata.

19

35

5 - Il problema del percorso minimo

Il problema di ottimizzazione pi classico definibile su grafo quello della determinazione del


percorso di costo minimo tra due vertici del grafo.
Dato un vertice origine o ed un vertice destinazione d, il problema della determinazione del
percorso minimo tra o e d pu essere visto come un problema di flusso a costo minimo in cui nel
nodo origine sia disponibile una unit di flusso e nel nodo destinazione si richieda una unit di
flusso. Il percorso che il flusso seguir dallorigine alla destinazione rappresenter il minimo
percorso tra i due vertici.
Il modello descrittivo del problema pu essere dedotto dal modello generale di flusso a costo
minimo considerando che Vo={o}, Vd={d} e Vt=V-{o, d} e ipotizzando che il nodo origine generi
una unit di flusso e che il nodo destinazione attragga una unit di flusso. Pertanto il modello
assume la forma
z=

cij xij

Min!

i , j V

sottoposto ai vincoli

1 se i o
xij x ji = 1 se i d

jV
jV
0 i o,d
xij 0

In questo modo le variabili di flusso xij, nel caso la soluzione sia rappresentata da una catena
elementare, indicano se larco (i,j) fa parte (xij=1) o non fa parte (xij=0) del percorso tra o e d.
Accanto al problema della determinazione del percorso minimo da un nodo ad un altro possibile
definire il problema della ricerca dei percorsi minimi da un nodo origine a tutti gli altri nodi del
grafo. In questo caso il problema pu essere visto come un problema di flusso a costo minimo in cui
in corrispondenza del nodo origine vi sia una offerta di n-1 unit di flusso mentre in corrispondenza
di ciascun nodo diverso dallorigine vi sia una domanda di una unit di flusso.
Il modello descrittivo di questo problema assume quindi la seguente forma:
z=

cij xij

Min!

i , j V

sottoposto ai vincoli

n 1 se i o
xij x ji =

jV
jV
1 i o
xij 0

In Figura 27 indicata una soluzione ammissibile del problema. Il valore del flusso su ciascun arco
deve essere interpretato come il numero di volte in cui larco compare nel definire il minimo
percorso tra lorigine e qualche nodo del grafo. Ad esempio il valore del flusso sullarco (1,2) pari a
3 sta a significare che larco (1,2) fa parte del minimo percorso tra il nodo 1 e 3 vertici (vertici 2, 4
e 6). Come si pu notare gli archi che presentano valore di flusso diverso da zero (evidenziati in
grassetto) formano una arborescenza con radice nellorigine.

20

-1

-1

2
1

+6

-1

4
0

-1

0
1

3
-1

-1

Figura 27 Esempio di soluzione del minimo percorso dal nodo 1 a tutti gli altri nodi

Poich, in generale i costi associati agli archi possono essere anche negativi, perch la soluzione
ottima sia finita necessario che il grafo non presenti circuiti di lunghezza negativa
In tal caso, infatti, si otterrebbe una soluzione illimitata considerando un percorso che attraversi
infinite volte il circuito di lunghezza negativa (Figura 28).
2
6

2
Origine

1
4

4
-8

Destinazione

5
5

2
Figura 28 - Esempio di problema con presenza di circuito di lunghezza negativa
5.1 - Classificazione degli algoritmi risolutivi

Gli algoritmi per la risoluzione del problema del percorso minimo possono essere classificati sulla
base tipo di problema che sono in grado di risolvere. Secondo questo criterio gli algoritmi si
distinguono in algoritmi arborescenti e algoritmi matriciali.
Gli algoritmi arborescenti sono in grado di risolvere il problema della individuazione del minimo
percorso tra un vertice e tutti gli altri vertici producendo cos una arborescenza rappresentativa
degli archi che fanno parte dei minimi percorsi.
Gli algoritmi matriciali sono in grado di risolvere il problema della individuazione del minimo
percorso per ciascuna coppia di vertici del grafo producendo cos una matrice (nxn) detta matrice
dei minimi percorsi il cui elemento (i,j) rappresenta il valore del percorso minimo tra lorigine i e la
destinazione j.
La matrice dei minimi percorsi pu essere ottenuta anche applicando n volte un algoritmo
arborescente facendo variare il nodo origine tra tutti i nodi del grafo.

21

Gli algoritmi arborescenti funzionano aggiornando, ad ogni iterazione, un vettore di n-1 etichette
che, al termine dellalgoritmo, conterr il valore dei minimi percorsi tra lorigine e ciascuno degli n1 vertici diversi dallorigine. Secondo come viene realizzato laggiornamento di questo vettore
possibile classificare gli algoritmi arborescenti in algoritmi label setting e algoritmi label correcting.
Gli algoritmi label setting determinano, il percorso minimo tra lorigine ed un nodo, individuando,
cos, il valore definitivo di un elemento del vettore di etichette.
Gli algoritmi label correcting aggiornano ad ogni iterazione il vettore delle etichette
determinandone il valore definitivo solo al termine dellalgoritmo. Durante la fase di
aggiornamento il valore di ciascuna etichetta rappresenta un limite superiore al valore del percorso
minimo tra lorigine ed il nodo corrispondente alletichetta.
Loutput di un algoritmo arborescente costituito da due vettori di lunghezza n:
= (1,.., i,.., n), il cui elemento i rappresenta il valore delletichetta associata al vertice i che,
quando determinata in maniera definitiva, costituir il valore del percorso minimo i* tra lorigine
ed il nodo i .
p=(p1,.., pi,.., pn), il cui elemento pi rappresenta il nodo che precede i nel percorso tra lorigine ed i.
5.3 - Lalgoritmo di Dijkstra

Lalgoritmo di Dijkstra un algoritmo arborescente label setting tra i pi efficienti per la soluzione
del problema del percorso minimo tra una origine e tutti gli altri nodi del grafo. Esso in grado di
risolvere problemi di minimo percorso in cui il costo di ciascun arco sia non negativo.
Ad ogni iterazione lalgoritmo determina il minimo percorso dallorigine ad uno dei vertici. Di
conseguenza alla fine delliterazione generica k-1 allinterno dellinsieme dei vertici V possibile
distinguere una partizione in due insiemi Sk-1 e V-Sk-1 tali che:
Sk-1

contiene k-1 vertici per i quali sia gi stato determinato il minimo percorso.

V-Sk-1 contiene n-k-1 vertici per i quali non sia stato determinato il minimo percorso.
Di conseguenza, mentre per i vertici i appartenenti ad Sk-1 stato determinato il valore ottimo
delletichetta i*, per i vertici j di V-Sk-1 letichetta provvisoria jk-1 alliterazione k-1 rappresenta il
costo del percorso minimo dallorigine al vertice j passante soltanto per i vertici di Sk-1.
Iterazione generica
Alliterazione k, si individua il percorso minimo dall'origine ad un vertice appartenente a V-Sk-1. A
tale scopo si effettuano due operazioni:

1.

Si sceglie un nodo t V-Sk-1 da inserire in Sk-1, ovvero si determina il minimo percorso


definitivo rispetto ad un nuovo nodo t. La scelta del nodo viene realizzata individuando il
minimo valore tra le etichette provvisorie jk-1. In pratica si individua il nodo j* tale che

j * = min kj
jV S k 1

k+1

Si pone quindi t= j , S
2.

k-1

=S

U {t}

Essendo stato inserito un nuovo vertice t in Sk, necessario procedere allaggiornamento


delle etichette provvisorie jk dei nodi di V-Sk. L'aggiornamento viene effettuato
confrontando il valore dell'etichetta alliterazione precedente jk-1 con il valore del costo del
22

percorso dall'origine al nodo j passante per t (Figura 29). In pratica, per ogni j V-Sk si
pone

kj = min ( kj 1 , t* + ctj )

Se t*+ ctj <jk-1 significa che il percorso passante per t di costo inferiore a quello
determinato fino alla iterazione k e, pertanto, si pone pjk=t.
V-Sk

Sk

jk-1

t*
i*

ctj

i
Figura 29 Aggiornamento delle etichette

Lalgoritmo si inizializza ponendo lorigine in S1; i valori di j1 sono fissati pari al costo dellarco
diretto che collega lorigine al nodo se larco esiste. In caso contrario il valore delletichetta viene
posta pari a . Il vettore dei predecessori viene posto pari ad s per ogni nodo.
Lalgoritmo si arresta quando stato individuato il minimo percorso per tutti i nodi.
Lipotesi che i costi degli archi siano non negativi fondamentale per il corretto funzionamento
dellalgoritmo. Lalgoritmo presuppone infatti che, al termine di una iterazione, il valore minimo
delle etichette j* rappresenti il percorso minimo dallorigine al nodo j. Questa circostanza
assicurata dal fatto che eventuali percorsi di costo inferiore j* per raggiungere j dovrebbero passare
per qualche nodo q di V-Sk diverso da j. Un percorso di questo tipo presenterebbe un costo pari a (q
+ cqj). Ma essendo q j*, se i costi degli archi sono non negativi, si ha che q+cqj j*.
Sintesi dellalgoritmo
1.

Inizializzazione

Si pone k=1, S1={o}


c sj

1j =

se l ' arco ( s , j ) esiste


altrimenti

s
p 1j =

se l ' arco ( s , j ) esiste


altrimenti

2. Iterazione generica k
a) Individuazione nodo j*V- Sk-1 da inserire in Sk
j * : kj* = min kj 1
k 1
jV S

Si pone t=j* e Sk= Sk-1 U{t}


b) Aggiornamento etichette j j V- Sk
k

kj = min ( kj 1 , t* + ctj ) ;

3.

Se t* + ctj < kj 1 p kj = t

Criterio di arresto

Se S =V lalgoritmo si arresta; altrimenti si pone k=k+1 e si torna alliterazione generica.


k

23

Esempio di risoluzione del minimo percorso con lalgoritmo di Dijkstra


Con riferimento al grafo in Figura 30 (sugli archi sono riportati i valori dei costi), si descrive nel seguito lo sviluppo
dellalgoritmo di Dijkstra. Larborescenza dei minimi percorsi a partire dal nodo 1 riportata in Figura.

1
4

5
4

Figura 30 Esempio di grafo per il calcolo del minimo percorso dal nodo 1

1
2
3
4
5
6

S1={1}
1
0*
2
6
5

1
2
3
4
5
6

S2={1,2}
2
0*
2*
6
4

1
2
3
4
5
6

S3={1,2,4}
3
0*
2*
6
4*
9
5

2*=min(2,6,5,,)=2; t=2
S2={1,2}

p1
1
1
1
1
1
1

1
2
3
4
5
6

1
2
3
4
5
6

1
2
3
4
5
6

S5={1,2,3,4,6}
1
0*
2*
6*
4*
7
5*

P2
1
1
1
2

3*=min(6,4,,6)=4; t=4
S3={1,2,4}

p2
1
1
1
2
1
2

1
2
3
4
5
6

p3
1
1
1
2
4
4

0*
2*
33=min(32, 4*+c43)=min(6,4+)=6
4*
53=min(52, 4*+c45)=min(,4+5)=9
63=min(62, 4*+c46)=min(6,4+1)=5
6*=min(6,9,5)=5; t=6
S4={1,2,4,6}

p3
1
1
1
2
4
4

1
2
3
4
5
6

4
0*
2*
34=min(33, 6*+c63)=min(6,5+)=6
4*
54=min(53, 6*+c65)=min(9,5+5)=9
5*

p4
1
1
5
2
5
4

3*=min(6,9)=6; t=3
S5={1,2,3,4,6}

S ={1,2,4,6}
4
0*
2*
6
4*
9
5*

2
0*
2*
32=min(31, 2*+c23)=min(6,2+)=6
42=min(41, 2*+c24)=min(5,2+2)=4
52=min(51, 2*+c25)=min(,2+)=
62=min(61, 2*+c26)=min(,2+4)=6

p4
1
1
1
2
5
4

p
1
1
5
2
3
4

1
2
3
4
5
6

p2
1
1
5
2
5
4

0*
2*
6*
4*
55=min(54, *3+c35)=min(9,6+)=9
5*

5*=7
S6={1,2,3,4,5,6}
p

0
1
2
1
6
1
4
2
7
3
5
4

2
1

4
1
4

5
4

6
3

Figura 31 Arborescenza dei minimi percorsi

24

Lalgoritmo di Ford Moore Bellman

Lalgoritmo di Ford Moore Bellman un algoritmo arborescente label correcting.


Alla generica iterazione k, jk rappresenta il valore del percorso minimo tra lorigine ed il nodo j
composto al massimo da k archi. Per determinare jk+1, al passo k+1, allora, necessario
considerare laggiunta di un arco al percorso dallorigine al nodo j.
Poich jk rappresenta il valore del percorso minimo dallorigine al nodo i composto al massimo da
k archi, il valore ik+cij rappresenta il valore del percorso dallorigine al nodo j composto al
massimo da k+1 archi, avendo come predecessore il nodo i. Per determinare il valore delletichetta
jk+1, allora, si procede nel seguente modo (Figura 32):
kj +1 = min ( ik + cij )
i :( i , j ) A

cij
csj
Figura 32 Aggiornamento delle etichette nellalgoritmo di Ford Moore Bellmann

Lalgoritmo raggiunge il valore ottimo del vettore quando si verifica la condizione k = k+1
quando, cio, non si verificano modifiche al vettore nel passaggio da una iterazione alla successiva.
Questa circostanza significa che laggiunta di un ulteriore arco ai percorsi determinati non provoca
alcun miglioramento nella soluzione. In ogni caso lalgoritmo converge al massimo in n-1
iterazioni, caso in cui per raggiungere un nodo bisogna passare per tutti gli altri nodi del grafo.
Lalgoritmo viene inizializzato, per definizione, ponendo i valori di j1 pari al costo dellarco
diretto che collega lorigine al nodo se larco esiste. Nel caso larco non esista il valore
delletichetta viene posta pari a . Il vettore dei predecessori viene posto pari ad s per ogni nodo.
Se si rappresenta il grafo attraverso la matrice di adiacenza nodo-nodo, il calcolo delletichetta jk+1
relativa al nodo j consiste nel calcolare il minimo della somma degli elementi corrispondenti del
vettore k e della colonna j della matrice di adiacenza nodo-nodo.
Sintesi dellalgoritmo

1. Inizializzazione
Si pone k=1, 1 = c sj
j

se l ' arco (i , j ) esiste


altrimenti

2. Iterazione generica k
k+1
Aggiornamento etichette j j V-{o}
kj + 1 = min ( ik + c ij )
i : ( i , j ) A

p 1j = s

(i, j )

p kj +1 = t con t : kj +1 = tk + ctj

3. Criterio di arresto
k+1
k
Se j = j j V lalgoritmo si arresta; altrimenti si pone k=k+1 e si torna alliterazione generica

25

Esempio di applicazione dellalgoritmo di Ford-Moore-Bellman

Si consideri il grafo gi indicato in Figura 30 per il quale si riporta la matrice nodo-nodo. Nel
seguito si riporta lo sviluppo dellalgoritmo. Dopo aver esplicitato, a titolo esemplificativo, il
calcolo degli elementi del vettore 2, si indicano i valori che i vettori k e pk assumono durante
levoluzione dellalgoritmo. Lalgoritmo converge alla quarta iterazione.
Come si pu notare nel calcolo dellelemento generico j2=mini (j1+c1j)= min (11+c1j, 21+c2j,.),
i primi addendi sono gli elementi del vettore 1 e i secondi addendi gli elementi della j-esima
colonna.
4

2
2
2

5
4

nodi

1
2
3
4
5
6

nodi

1
2
3
4
5
6

1
0

2
2
0

3
6

4
5
2
4
0

1
5
0
5

1
0
2
6
5

p1
1
1
1
1
1
1

1
0

2
2
0

3
6

4
5
2
4
0

1
5
0
5

1
0
2
6
5

p1
1
1
1
1
1
1

p2
1
1
1
2
3
2

21=0
22=min(0+2,2+0,6+,5+,+,+)=2
23=min(0+6,2+,6+0,5+,+,+)=6
24=min(0+5,2+2,6+4,5+0,+,+)=4
25=min(0+,2+,6+1,5+5,+0,+5)=7
26=min(0+,2+4,6+,5+1,+,+0)=6

2
0
2
6
4
7
6

p2
1
1
1
2
3
2

26

3
0
2
6
4
7
5

p3
1
1
1
2
3
4

4
0
2
6
4
7
5

p4
1
1
1
2
3
4

Il problema dl massimo flusso

Data una rete in cui ciascun arco caratterizzato da una capacit massima di trasferimento di flusso,
il problema del massimo flusso consiste nellindividuare la distribuzione di flusso sulla rete in
grado di trasferire la massima quantit di flusso da un nodo origine ad un nodo destinazione.
Indicando con s lorigine e con t la destinazione, il modello matematico rappresentativo del
problema assume la forma (M1):

z=v

Max!

sottoposto ai vincoli

v se i s
xij x ji = v se i t

jV
jV
0 i s,t
0 xij mij

Il modello pu essere anche desunto dal modello generale di flusso a costo minimo utilizzando un
grafo G=(V,A) in cui (Figura 33)
si aggiunge un arco fittizio (t,s) cui associato un costo cts=-1 e una capacit mts=;
tutti i nodi (compresi s e t) sono di transizione;
ad ogni arco (i,j)V-{t,s} associato un costo cij=0 e una capacit mij>0.

cij=0, mij

xts=v
cts=-1, mts=
Figura 33 Grafo rappresentativo del massimo flusso come flusso a costo minimo

In questo modo il modello del flusso a costo minimo diventa:


z = xts

Min!

sottoposto ai vincoli

x x
jV

ij

jV

ji

= 0 i V

0 xij mij
Ovvero, esplicitando i vincoli per il nodo s ed il nodo t

27

z = xts

Min!

sottoposto ai vincoli

x {x} x = 0
{x} + x x = 0
x x = 0 i V {s, t}
jV

jV s
jV

sj

tj

ij

js

jV t
ts

jV

jV

ts

js

ji

0 xij mij
e, ponendo xts=v, si ottiene il modello M1.
Per descrivere lalgoritmo risolutivo necessario premettere alcune definizioni.
Si definisce distribuzione ammissibile di flusso sulla rete una qualsiasi soluzione xij (i,j) che
soddisfi i vincoli di bilanciamento di flusso ai nodi.
Data una partizione dellinsieme V=VsUVt tale che sVs e tVt., si definisce taglio s-t ([VsUVt])
linsieme degli archi aventi origine in un nodo di Vs e destinazione in un nodo di Vt, ovvero

[Vs ,Vt ] = {(i, j ) : i Vs , j Vt }


Si definisce capacit del taglio m[VsUVt] la somma delle capacit degli archi del taglio ovvero
m[Vs ,Vt ] =

( i , j )[Vs ,Vt ]

ij

Ad esempio, considerando il grafo di Figura 34 ed il taglio indicato, la partizione data da


Vs={s,2,3,4} e Vt={6,t}, mentre il taglio [VsUVt]= {(2,6), (3,t), (4,6), 4,t)} di capacit 11.
4

2
2
2

5
4

Figura 34 Esempio di taglio

Si intuisce che, comunque scelto un taglio [VsUVt], si ha z m[VsUVt]. In particolare si pu


dimostrare che il flusso massimo coincide con la minima capacit del taglio, ovvero
z * = min m[Vs ,Vt ]
[Vs ,Vt ]

28

Si consideri un arco (i,j) di capacit mij sul quale scorra un flusso xij. Si dir che larco (i,j) presenta
una capacit residua rij nella direzione ij pari a rij=mij-xij e una capacit residua rji nella
direzione ji pari a rji=xij
Ad esempio, considerando un arco (i,j) di capacit mij=8 sul quale scorra un flusso xij=5, si rij=mijxij=8-5=3 e rji=xij=3 (Figura 35).
i

mij, xij

rji=xij

rij=mij-xij

mij=8, xij=3

rji=5

rij=8-3=5

Figura 35 - Capacit residua su un arco

Mentre la definizione di rij=mij-xij di immediata intuizione perch rappresenta il flusso ancora


trasferibile nella direzione ij fino al raggiungimento della saturazione della capacit, la
definizione di rji=xij prende spunto dalla seguente considerazione.
Si ipotizzi di voler trasferire un flusso lungo un percorso di direzione opposta a quella
dellorientamento dellarco (i,j) su cui scorre un flusso xij da i a j (Figura 36). Perch la
distribuzione di flusso sia ammissibile necessario ridurre di il flusso trasferito nella direzione
ji in modo da assicurare il soddisfacimento dei vincoli di bilanciamento di flusso in
corrispondenza dei nodi i e j.
xij

xij-

rji=xij

Figura 36 Trasferimento di flusso in direzione opposta ad un arco

Si definisce percorso aumentante flusso (Paf) dallorigine s alla destinazione t un percorso che
consenta di trasferire una aliquota >0 sugli archi del percorso in modo da soddisfare i vincoli del
problema (bilanciamento dei flussi ai nodi e capacit degli archi). Pertanto, sulla base della
definizione di capacit residua, si possono distinguere due casi:

il Paf composto da soli archi aventi tutti lo stesso orientamento (Paf+) coerente con la
direzione st (Figura 37). In questo caso il flusso trasferibile pari a

= min rij
( i , j )Paf

mij, xij

t
Figura 37 Esempio di percorso aumentante flusso con archi dello stesso orientamento

il Paf si compone di archi orientati coerentemente con la direzione st (Paf+) e di


controversi rispetto alla direzione st (Paf-) (Figura 38). In questo caso il flusso trasferibile
pari a

( i , j )Paf+

mij, xij

(i , j )Paf+

= min min rij , min rji = min min rij , min xij
s

(i ,

j )Paf

(i ,

j )Paf

Figura 38 Esempio di percorso aumentante flusso con archi aventi diverso orientamento

29

Lalgoritmo di Ford e Fulkerson un algoritmo iterativo che, alliterazione generica k, punta ad


individuare un percorso aumentante flusso capace di trasferire unaliquota k>0 dallorigine alla
destinazione. Una volta trasferita tale aliquota, si aggiornano i valori di flusso e di capacit residua
degli archi del Paf individuato e si tenta di individuarne uno nuovo. Lalgoritmo termina quando non
possibile individuare un nuovo Paf, ovvero quando risultano saturati tutti gli archi del taglio di
capacit minima. Allultima iterazione linsieme dei nodi risulta partizionato in un insieme Vs,
contenente lorigine s, di nodi etichettati e un insieme Vt, contenente la destinazione t, di nodi non
etichettati. La partizione V=VsUVt rappresenta il taglio di capacit minima.
Lindividuazione di un Paf viene realizzata attraverso un procedimento di etichettamento di tipo
forward da s a t. A tal proposito a ciascun nodo j sono associate le seguenti informazioni:

fj
pj

flusso massimo trasferibile dallorigine al nodo j;


nodo di provenienza del flusso fj.

A ciascun arco (i,j) sono associate le seguenti informazioni:

xij
rij

flusso totale trasferito sullarco (i,j);


capacit residua nella direzione ij

Il processo di etichettamento viene inizializzato ponendo


fs= e ps=s (si suppone che il nodo s abbia una capacit di generazione infinita)
rij= mij, xij=0 (si suppone la rete inizialmente scarica)
Alliterazione k, letichettamento del generico nodo j a partire da un nodo i viene realizzato
utilizzando la regole descritte in Figura 39 secondo se larco orientato nella direzione ij o nella
direzione opposta ij.
[fi, pi]
i

[fj=min(fi, rij), pj=i ]

[fi, pi]
[fj=min(fi, xij), pj=-i ]
[rij, xij]
j
i
j
Figura 39 Regole di etichettamento dei nodi

[rij, xij]

In presenza di un flusso fi trasferito dallorigine al nodo i lungo un certo Paf, la prima regola
stabilisce che il flusso trasferibile in j lungo larco (i,j) dato dal valore minimo tra fi e la capacit
residua rij nella direzione ij, mentre la seconda regola indica che il flusso trasferibile in j lungo un
arco (j,i) uscente da j dato dal valore minimo tra fi e la capacit residua rji= xji nella direzione ji.
Il valore positivo o negativo pj serve solo a memorizzare con quale delle due regole stato
effettuato letichettamento.
Una volta etichettata la destinazione t con i valori ft e pt significa che si riusciti a trasferire
laliquota k> ft attraverso un Paf proveniente dal nodo pt. A questo punto si procede
allaggiornamento delle informazioni relative agli archi del Paf viene attraverso un procedimento di
etichettamento di tipo backward da t a s.
In particolare, se il nodo j stato etichettato attraverso un arco entrante (pj>0) la capacit residua va
ridotta ed il flusso incrementato; viceversa se il nodo j stato etichettato attraverso un arco uscente
(pj<0) la capacit residua va incrementata e il flusso ridotto (Figura 40).
k

[rij= rij- , xij= xij+ ]

[fj, pj>0]
i

[rij= rij+k, xij= xij-k]

Figura 40 Aggiornamento delle informazioni relative agli archi

30

[fj, pj<0]
j

Esempio di risoluzione del problema di massimo flusso con lalgoritmo di Ford e Fulkerson
Si consideri il grafo in Figura 41 sul quale in corrispondenza degli archi sono riportati i valori delle capacit. Sia 1 il
nodo origine e 6 il nodo destinazione. Nel seguito si illustra lo sviluppo dellalgoritmo riportando in ciascuna Figura le
etichette dei nodi [fi, pi]t e lordine con cui sono state definite. La linea tratteggiata indica il Paf individuato e per gli
archi del Paf laggiornamento delle informazioni [rij, xij]. La linea tratteggiata nella Figura finale indica il taglio di
capacit minima.

3
1

2
6

3
4

Figura 41 Esempio di grafo per il calcolo dei flusso massimo dal nodo 1

[2,1]2
Iterazione 1
Ordine di etichettamento: 1-3-2-4-5-6-7
(12), (24), (47)
Paf:
1= 2

[2,0] [0,2]

[3,0]

[5,0]

[2,0]

[3,0] [1,2]

[2,0] [0,2]

[4,0]

Iterazione 2
Ordine di etichettamento: 1-3-4-2-5-6-7
(13), (34), (42), (25), (57)
Paf:
2= 2

[3,0]
[2,2]5

[,1]
1

[2,2]4

[4,0]

1=2

[3,1]1

[2,2]3

[2,4]6

[2,-4]3
2

[2,2]4
5

[3,0]
[2,2]5

[,1]
[0,2]

[4,0] [2,2]

[5,0] [3,2]

[2,0]
[3,0] [1,2] [1,2] [3,0]
[0,2]

[4,0] [2,2]

2=2

[3,1]1

[3,3]2

[2,5]6
[2,2]

Iterazione 3
Ordine di etichettamento: 1-3-4
Vt={2,5,6,7}
Vs={1,3,4}
1= 2
[VsUVt]={(1,2), (4,7)}
m[VsUVt]=2+2=4

[,1]
1

[0,2]
6

[1,2]

[3,0]

[3,2]

[2,0]

[0,2]

[2,2]

32

[3,0]

[1,1]1

[1,3]2