Lezione n°18
Teoria dei grafi: definizioni di base
Problema del flusso a costo minimo
R. Cerulli – F. Carrabs
Lezioni di Ricerca Operativa
Università degli Studi di Salerno
Un grafo non orientato G=(V,E) è dato da una coppia di insiemi finiti:
V={v1,...,vn} l’insieme degli n Nodi di G
E={e1,..,em}ÍVxV l’insieme degli m Archi non orientati di G Ogni arco non orientato ek=(vi,vj) di G corrisponde ad una coppia non ordinata di nodi vi e vj di G. I nodi vi e vj sono gli estremi dell’arco ek.
La presenza di un arco tra una coppia di nodi indica una
Teoria dei Grafi: Concetti Fondamentali
Un esempio: G=(V,E)
V = {v1,v2,v3,v4,v5}
E = {e1,e2,e3,e4,e5,e6,e7}
e1 =(v1,v5) e2 =(v1,v2) …
v1
v5
v3 v2
v4 e1
e2
e3 e4
e5
e6
e7
Definizioni di base:
un arco (v,v) è detto loop
un arco e=(u,v)ÎE si dice incidente su u e su v
due nodi u,vÎV sono detti adiacenti Û (u,v)ÎE
due archi e1,e2ÎE sono detti adiacenti Û e1=(u,v) ed e2=(v,w) (hanno un estremo in comune)
l’insieme di nodi N(u)={vÎV: v adiacente a u} è detto intorno di u in G
l’insieme di archi d(u)={eÎE: e incide su u} è detto stella di u in G
|d(u)| è detto grado del nodo u
v1
v5
v3 v2
v4 e1
e2
e3 e4
e5
e6
e7
I grafi sono un mezzo per rappresentare relazioni binarie Ad esempio:
due città connesse da una strada
due calcolatori connessi in una rete telematica
due persone legate da una relazione di parentela (come, padre-figlio)
due persone che condividono una stanza
il collegamento tra due componenti elettronici
un’operazione che deve essere eseguita da una certa macchina
...
Teoria dei Grafi: Concetti Fondamentali
I grafi possono essere usati come strumento per modellare in maniera schematica un vastissimo numero di problemi decisionali.
Ad esempio:
determinare il percorso più breve che connette due città
determinare come connettere nella maniera più economica (più efficiente) un insieme di calcolatori in una rete telematica
assegnare un insieme di operazioni ad un insieme di macchine
determinare il percorso più conveniente da far percorrere ad una flotta di veicoli commerciali per effettuare delle consegne e quindi rientrare al deposito
...
Applicazioni
Grafi e Sottografi
G’=(V’,E’) è detto sottografo di G=(V,E) ⟺
V’ V⊆
E’ E e (v⊆ i,vj) E’ ∈ ⟹ vi,vj ∈ V’
G’=(V’,E’) è detto sottografo indotto da V’ in G=(V,E) ⟺
V’ V ⊆
u,v V’ se (u,v) E allora (u,v) E’∈ ∈ ∈
Grafo semplice:
Non esistono “loop” o archi paralleli (ossia tra due nodi ci può essere più di un arco).
Esempio
G=(V,E)
è un sottografo di G G’
v1
v5
v3 v2
v4 e1
e2
e3 e4
e5
e6 e7
v1
v5
v3 v2
e1
e2
Esempio
G=(V,E)
è un sottografo indotto di G G’
v1
v5
v3 v2
v4 e1
e2
e3 e4
e5
e6 e7
v1
v5
v3 v2
e1
e2
e3 e6
Grafo Bipartito
G è detto grafo bipartito se esiste una partizione di V in due sottoinsiemi V1 e V2 tali che:
V1ÇV2 = Æ
V1ÈV2 = V
e=(u,v)ÎE se uÎV1 allora vÎV2 oppure se uÎV2 allora vÎV1
Esempio
grafo bipartito grafo non bipartito
G è un grafo completo Û contiene tutti i possibili archi, ovvero ú d(v)ú = n-1 vÎV
il numero di archi in un grafo completo è:
Esempio
grafo completo
Grafo Completo
Dato G=(V,E), un nodo vÎV si dice connesso ad un nodo uÎV se esiste un cammino tra u e v in G
vÎV è connesso a v (riflessività)
vÎV è connesso a uÎV Þ uÎV è connesso a vÎV (simmetria)
se vÎV è connesso a uÎV e uÎV è connesso a wÎV Þ vÎV è connesso a wÎV (transitività)
Un grafo G=(V,E) è connesso Û tutti i suoi nodi sono connessi tra loro.
Grafo Connesso
L’insieme V può essere partizionato in sottoinsiemi Ci={vÎV : v è connesso a u, uÎCi }
Il sottografo indotto da Ci in G è detto componente connessa di G
G è connesso Û possiede una sola componente connessa (v è connesso a u , v,uÎV)
Esempio
componenti
connesse grafo connesso
Componenti Connesse
G=(V,E) è detto orientato se, dato V={v1,...,vn}, l’insieme degli archi E={e1,..,em} è formato da coppie ordinate di nodi.
Per un grafo orientato si ha che ei=(vk,vh) ¹ ej = (vh,vk) , ei,ejÎE
Coda Testa
L’arco ei si dice uscente da vh ed entrante in vk
Grafi Orientati
vh ei vk
Esempio
grafo orientato
Fs(v) = {uÎV: (v,u) ÎE} è detto stella uscente di v
Bs(v) = {uÎV: (u,v) ÎE} è detto stella entrante di v
S(v) = Fs(v) È Bs(v) è detto stella di v
le definizioni di sottografo, sottografo indotto e componente connessa di un grafo orientato sono analoghe a quelle date per i grafi non orientati
v1
v4 v3
v2 e1 e2
e3
e 6 e4
e5
Dato G=(V,E), un nodo vÎV si dice fortemente connesso ad un nodo uÎV se esiste una path (cammino orientato) tra v e u in G.
vÎV è connesso a v (riflessività)
se vÎV è fortemente connesso a uÎV e uÎV è fortemente connesso a wÎV Þ vÎV è fortemente connesso a wÎV (transitività)
Un grafo G=(V,E) è fortemente connesso Û tutti i suoi nodi sono fortemente connessi tra loro.
Componenti Fortemente Connesse
Esempio
Componenti fortementi connesse
Ci sono in G componenti fortemente connesse?
G v1
v4 v3
v2 v1
v4 v3
v2
Rappresentazioni di un Grafo
Liste di adiacenza:
ad ogni vertice è associata la lista dei vertici adiacenti (può essere una tabella o una lista concatenata).
Matrice di adiacenza (n x n) :
aij = 1 se (vi, vj) Î E, aij = 0 altrimenti
Matrice di incidenza (n x m) : aij = 1 se vi Î ej, aij = 0 altrimenti
• Lista di adiacenza: memoria O(m)
Vantaggi: permette di scorrere i nodi adiacenti a v in O(grado(v))
Svantaggi: inserimenti e cancellazioni su liste concatenate in O(grado(v))
• Matrice di adiacenza: memoria O(n2)
Vantaggi: Inserimenti e cancellazioni in O(1)
Svantaggi: permette di scorrere i nodi adiacenti a v in O(n)
• D.: matrice di incidenza ?
Rappresentazioni di un Grafo: Vantaggi e Svantaggi
Matrice di Incidenza dei Grafi
Sia G=(V,E) un grafo non orientato con |V|=n ed |E|=m.
Denotiamo con A=[aij], con i=1,...,n e j=1,...,m, la matrice di incidenza di G, dove:
���={1 ���� è ��������� �� � �
¿0 ����������
Esempio
v4
v1
v2
v3 e1 e2
e3 e4
e5
matrice di incidenza di un grafo non orientato
Matrice di Incidenza dei Grafi
Matrice di Incidenza dei Grafi Orientati
Sia G=(V,E) un grafo orientato con |V|=n ed |E|=m.
Denotiamo con A=[aij], con i=1,...,n e j=1,...,m, la matrice di incidenza di G, dove:
���=
{
1 �� �� è ���� ��� �(���� ������� �� ��)¿ −1�� �� è����� ��� � (���� ������������)
¿0 ����������
Esempio
v3 v1
v2
v4
e1 e2
e3 e4
e5
matrice di incidenza di un grafo orientato
Matrice di Incidenza dei Grafi Orientati
Sia G=(V,E) un grafo connesso e orientato in cui:
Ad ogni arco (i,j) è associato un costo cij che rappresenta il costo da pagare per ogni unità di flusso che transita sull’arco (i,j).
Ad ogni vertice v V è associato un valore ∈ intero bv dove:
- bv > 0 indica che il nodo v è un nodo di offerta - bv < 0 indica che il nodo v è un nodo di domanda - bv = 0 indica che il nodo v è un nodo di passaggio
La somma di tutti i bv deve essere uguale a zero (condizione di bilanciamento). Ciò che viene prodotto dalle sorgenti viene consumato dalle destinazioni.
Nel problema del flusso a costo minimo bisogna far giungere la merce prodotta dai nodi di offerta ai nodi di domanda minimizzando i costi di
Problema del Flusso a Costo Minimo
Problema del Flusso a Costo Minimo: Formulazione
min ∑
(�, �)∈ �
��� ���
�∈ ��(�)∑
���− ∑
�∈ ��(�)
���=�� �=1,… ,�
= quantità di flusso che transita sull’arco (i,j)
= costo di trasporto di una unità di flusso sull’arco (i,j)
= valore intero associato al nodo i (ne definisce il ruolo nel problema):
: nodo di offerta : nodo di domanda : nodo di passaggio
���≥ 0 ∀ (� , � )∈ �
Intere?
Consideriamo un grafo orientato G=(V,E) rappresentante una rete di trasporto.
L’obiettivo è quello di trasportare, al minimo costo, determinate quantità di merce (unità di flusso) dai nodi di offerta a quelli di domanda (eventualmente transitando per dei nodi di passaggio).
Abbiamo:
: nodo di offerta : nodo di domanda : nodo di passaggio
Un costo cij ≥ 0 per ogni arco (costo per il trasporto di una unità di flusso)
1 2
3 4
5 5
2
-3 -4
0
6
1
3 4 1
4 3
2
Problema del Flusso a Costo Minimo: Esempio
Consideriamo una variabile xij ≥ 0, (i,j) ∀ ∈ E, rappresentante la quantità di flusso che attraverserà tale arco nella soluzione.
1 2
3 4
5 5
2
-3 -4
0
6
1
3 4 1
4 3
2
Problema del Flusso a Costo Minimo: Esempio
La matrice A dei vincoli del modello matematico corrisponde alla matrice di incidenza nodo-arco del grafo G.
1 2
3 4
5 5
2
-3 -4
0
6
1
3 4 1
4 3
2
Problema del Flusso a Costo Minimo: Esempio
A (1,2) (1,3) (2,5) (3,2) (3,4
) (4,1) (4,2) (4,5)
1 1 1 0 0 0 -1 0 0
2 -1 0 1 -1 0 0 -1 0
3 0 -1 0 1 1 0 0 0
4 0 0 0 0 -1 1 1 1
5 0 0 -1 0 0 0 0 -1
Soluzione 1 Costo:
(6*5)+(4*1)+(3*2)=40
Soluzione 2 Costo:
(1*5)+(2*5)+(1*4)+(3*3)=28
1 2
4
5
5
2
-3 6 -4
1
2
4 3 Flusso 5 1
Flusso 5
Flusso 5-4=1 Flusso
5-4=1
Flusso 2 Flusso
2 4
3
5
5
2
-3 6 -4
1
2
4 3
1 Flusso 4
Flusso 4
Flusso 1+2=3 Flusso 1+2=3 4
3 Flusso 5
Flusso 5 Flusso 5 Flusso 5
3
1 2
3 4
Problema del Flusso a Costo Minimo: Esempio
In forma matriciale:
Osservazioni:
1. La matrice A è la matrice di incidenza nodo-arco con dimensione nxm. Ogni colonna è associata all’arco (i,j), ed in particolare abbiamo che:
2. Il rango di questa matrice è: r(A) = n - 1
(ei vettore colonna con tutti 0 eccetto un 1 nella posizione i-ma)
Problema del Flusso a Costo Minimo:
Formulazione
Definizione (totale unimodularità): Una matrice si dice totalmente unimodulare (TU) se tutte le sue sottomatrici quadrate (di ogni ordine) hanno determinante uguale a 0, 1 o -1.
Matrici Totalmente Unimodulari
Osservazione 1: Tutte le componenti di una matrice totalmente unimodulare sono uguali a 0, 1 o -1 dato che ogni suo elemento è una particolare matrice quadrata di ordine 1x1.
Osservazione 2: Sia A una matrice i cui elementi sono tutti uguali a 0, +1 o -1 e lungo ogni colonna non vi sono più di due elementi diversi da 0. Allora A è TU se e solo se l’insieme delle righe di A può essere suddiviso in due sottoinsiemi Q1 e Q2 tali che, se una colonna contiene due elementi diversi da 0, allora:
se i due elementi hanno lo stesso segno allora una delle due righe in cui si trovano è in Q1 e l’altra in Q2 ;
se hanno segno opposto le righe corrispondenti sono entrambe contenute in Q o entrambe in Q .
Teorema 1: Sia A una matrice i cui elementi sono tutti uguali a 0, +1 o -1 e lungo ogni colonna non vi sono più di due elementi diversi da 0. Se nelle colonne con due elementi diversi da 0 la somma di tali elementi è uguale a 0 (ovvero un elemento è uguale a +1 e l’altro a -1), allora A è TU.
Matrici Totalmente Unimodulari
Corollario 1: Le matrici di incidenza nodo-arco di un grafo orientato sono totalmente unimodulari.
Dimostrazione: Dall’osservazione 2, è sufficiente porre Q1= {tutte le righe di A } e Q2 = . Il corollario ci dice ad esempio che tutte le matrici di incidenza ∅ nodo-arco di un grafo orientato sono matrici TU. ∎
A (1,2) (1,3) (2,5) (3,2) (3,4
) (4,1) (4,2) (4,5)
1 1 1 0 0 0 -1 0 0
2 -1 0 1 -1 0 0 -1 0
3 0 -1 0 1 1 0 0 0
4 0 0 0 0 -1 1 1 1
Q1 Q2=∅
Inoltre
Matrici Totalmente Unimodulari
Corollario 2: Sia A la matrice di incidenza nodo-arco di un grafo orientato G, e sia una sottomatrice quadrata di A non singolare. Si ha che ha tutte le componenti intere.
Dimostrazione: Dal Corollario 1 sappiamo che la matrice A è totalmente unimodulare e quindi tutte le sue componenti hanno valore -1,0,1. Poichè è una sottomatrice di A, tutte le sue componenti sono uguali a -1,0,1. Per calcolare la matrice inversa utilizziamo la formula:
Quindi è sempre un intero.
∎
= -1,0,+1
Poiché è TU e non singolar, .
Teorema 2: I vertici del poliedro, definito dal modello matematico del problema del flusso a costo minimo, hanno coordinate intere.
Matrici Totalmente Unimodulari
Dimostrazione: Sia AB una sottomatrice di A dimensioni (n-1)x(n-1) non singolare. La soluzioni di base ammissibili associate ad AB ha la struttura e corrisponde ad un vertice del poliedro. Dobbiamo quindi dimostrare che il vettore ha tutte le componenti intere.
Dal Corollario 2 sappiamo che ha tutte le componenti intere. Inoltre, per ipotesi, ha tutte le componenti intere, quindi ha tutte le componenti intere.
∎