Lezione n
°
18
- Teoria dei grafi: definizioni di base - Problema del flusso a costo minimo
R. Cerulli
–
F. CarrabsLezioni di Ricerca Operativa
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
1v
5v
3v
2v
4e
1e
2e
3e
4e
5e
6e
7V = {v
1,v
2,v
3,v
4,v
5}
E = {e
1,e
2,e
3,e
4,e
5,e
6,e
7}
e
1=(v
1,v
5) e
2=(v
1,v
2) …
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
! ...
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
! ...
Grafi e Sottografi
! G’=(V’,E’) è detto sottografo di G=(V,E) ⟺
Ø V’ ⊆ V
Ø E’ ⊆ E e (vi,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
v
1v
5v
3v
2v
4e
1e
2e
3e
4e
5e
6e
7G=(V,E)
v
1v
5v
3v
2e
1e
2 è un sottografo di G G’Esempio
v
1v
5v
3v
2v
4e
1e
2e
3e
4e
5e
6e
7G=(V,E)
v
1v
5v
3v
2e
1e
2e
3e
6 è un sottografo indotto di G G’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
! G è un grafo completo Û contiene tutti i possibili archi,
ovvero ú d(v)ú = n-1 "vÎV
! il numero di archi in un grafo completo è: 𝑛
2 = !(!#$) &
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.
! 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
! 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
v
he
v
ki
Coda
Testa
L’arco e
isi dice
uscente
da v
hed
entrante
in v
kEsempio
v
1v
4v
3v
2e
1 e2e
3e
6e
4e
5grafo 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
! 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.
Esempio
v
4v
3v
2Componenti fortementi connesse
Ci sono in G componenti fortemente connesse?
v
1v
4v
3v
2G
v
1Rappresentazioni 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) :
•
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 ?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
v
4v
1v
2v
3e
1e
2e
3e
4e
5matrice di incidenza di un grafo non orientato
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:
𝑎
!"= 3
1
𝑠𝑒 𝑣
!è 𝑐𝑜𝑑𝑎 𝑑𝑖 𝑒
"(𝑎𝑟𝑐𝑜 𝑢𝑠𝑐𝑒𝑛𝑡𝑒 𝑑𝑎 𝑣
!)
−1 𝑠𝑒 𝑣
!è 𝑡𝑒𝑠𝑡𝑎 𝑑𝑖 𝑒
"(𝑎𝑟𝑐𝑜 𝑒𝑛𝑡𝑟𝑎𝑛𝑡𝑒 𝑖𝑛 𝑣
!)
0
𝑎𝑙𝑡𝑟𝑖𝑚𝑒𝑛𝑡𝑖
Esempio
v
3v
1v
2v
4e
1e
2e
3e
4e
5matrice di incidenza di un grafo orientato
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 trasporto.
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 associato al nodo i (ne definisce il ruolo nel problema): 𝑏! > 0: nodo di offerta
𝑏! < 0: nodo di domanda 𝑏 = 0: nodo di passaggio
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:
! 𝑏! > 0: nodo di offerta
𝑏! < 0: nodo di domanda 𝑏! = 0: 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
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 2Problema del Flusso a Costo Minimo: Esempio
min & (",$)∈' 𝑐"$𝑥"$ & $∈()(") 𝑥"$ − & *∈+) " 𝑥*" = 𝑏" 𝑖 = 1, … , 𝑛 𝑥"$ ≥ 0 ∀(𝑖, 𝑗) ∈ 𝐴
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 2Problema 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 -4 6 1 2 4 3 1 Flusso 5 Flusso 5-4=1 Flusso 2 4 3 5 5 -3 -4 6 1 2 4 3 1 Flusso 4 Flusso 1+2=3 4 3 Flusso 5 Flusso 5 3 1 2 4 3
! In forma matriciale:
Osservazioni:
1. La matrice A è la matrice di incidenza nodo-arco con
dimensione nxm. Ogni colonna aij è associata all’arco (i,j), ed
in particolare abbiamo che:
a
ij= e
i− e
j2. Il rango di questa matrice è: r(A) = n - 1
(ei vettore colonna con tutti 0 eccetto un 1 in posizione i-ma)