Massimo Flusso Descrizione del problema Ulteriori vincoli Rete di

Massimizzare il # di
PC prodotti
Massimo Flusso
Laboratorio di algoritmi e
strutture dati
Descrizione del problema
n
n
n
n
Ulteriori vincoli
Una fabbrica (sorgente) di PC deve stabilire il
numero di PC da assemblare giornalmente.
Tutti i PC prodotti verranno venduti in un negozio
(destinazione).
La fabbrica ed il negozio sono collegati attraverso
una rete di comunicazione.
Su di ogni tratto della rete è in servizio un
furgone che può trasportare un numero fissato di
PC (numero che dipende dalla grandezza del
furgone).
Laboratorio di algoritmi e
strutture dati
Esistono due nodi particolari
Ad ogni arco (u,v)∈E è assegnato un valore
c(u,v)>=0 detto capacità
Per ogni v∈V esistono:
• s à v (cammino da s a v)
• v à t (cammino da v a t)
Laboratorio di algoritmi e
strutture dati
n
n
n
Non è possibile produrre PC
Non è possibile stoccare PC
In altre parole … il numero di PC che
entra in un nodo è uguale al numero di
PC che esce dal nodo.
GOAL: Quale è il maggior numero di PC
che può essere trasportato dalla sorgente
alla destinazione senza violare i vincoli
del problema?
Laboratorio di algoritmi e
strutture dati
4
È una funzione f:VxVàR
n È definita per ogni coppia di vertici
n Indica le unità di “bene” (e.g., # di
PC) che “viaggia” tra ogni coppia di
nodi
n f(u,v) indica il flusso della rete dal
nodo u al nodo v
• s∈ V detto sorgente
n
n
n
• t∈ V detto destinazione/pozzo
n
In ogni nodo della rete di comunicazione:
Flusso in G
È un grafo orientato e pesato G(V,E) con
delle proprietà aggiuntive
n
n
3
Rete di flusso
n
2
5
Laboratorio di algoritmi e
strutture dati
6
1
Flusso in G
n
Vincolo sulla capacità
La funzione f:VxVàR soddisfa le
seguenti proprietà
n
Vincolo sulla capacità
n
Simmetria obliqua
n
Conservazione del flusso
n
• f(u,v) <= c(u,v), per ogni u,v∈V
Il flusso da un nodo ad un altro non
può superare la capacità dell’arco
che congiunge i due nodi
n
• f(u,v) = - f(v,u), per ogni u,v∈V
Ovvio, da un nodo all’altro, non si
possono trasportare più PC di quelli che
entrano in un furgone…
• ∑v∈ V f(u,v) = 0, per ogni u∈V-{s,t}
Laboratorio di algoritmi e
strutture dati
Simmetria obliqua
n
Laboratorio di algoritmi e
strutture dati
7
Conservazione del flusso
Il flusso da un nodo ad un altro è
l’opposto del flusso nella direzione
inversa
n
8
12
In particolare f(u,u)=0, dato che
• f(u,u) = - f(u,u)
4
5
v
5
6
Laboratorio di algoritmi e
strutture dati
Ulteriori proprietà
n
Se (u,v),(v,u)∉E, allora non
flusso tra il nodo u ed il nodo v.
10
In altre parole …
c’è
n
(u,v),(v,u)∉E implica c(u,v)=c(v,u)=0
Dal vincolo sulla capacità
n
Dato che f(u,v) = -f(v,u), allora
n
Quindi, f(u,v)=0
n
Laboratorio di algoritmi e
strutture dati
9
n
Se vi è flusso tra il nodo u ed il nodo
v allora:
n
(u,v)∈V oppure (v,u)∈V o entrambi
• f(u,v)<=0 e f(v,u)<=0
• -f(u,v)<=0 implica f(u,v)>=0
Laboratorio di algoritmi e
strutture dati
11
Laboratorio di algoritmi e
strutture dati
12
2
Valore del flusso
n
Notazione
Dato un flusso f di G, il valore del
flusso è definito come:
13
u
v
• 13 è la capacità
|f| = ∑v∈
∈ V f(s,v)
n Proveremo che vale anche
• 10 è il flusso
n
• |f| = ∑v∈ V f(v,t)
n
Problema:
n
10/13
u
v
Dato G, determinare il flusso di valore
massimo
Laboratorio di algoritmi e
strutture dati
Laboratorio di algoritmi e
strutture dati
13
Equivalenza
14
Esempio
10
u
v
v1
4
v2
20
16
8/10
u
5/10
v
u
3/4
4
v
10
9
s
t
7
0/4
f(u,v)=5
13
f(u,v)=5
Laboratorio di algoritmi e
strutture dati
v1
v4
Laboratorio di algoritmi e
strutture dati
15
12/12
v2
16
s1
15/20
4/9
s
s2
t
7/7
8/13
11/14
t2
s4
v4
Laboratorio di algoritmi e
strutture dati
t1
s3
4/4
v3
14
Sorgenti e destinazioni
multiple
11/16
0/10
4
v3
Esempio
1/4
12
s5
17
Laboratorio di algoritmi e
strutture dati
18
3
Sorgenti e destinazioni
multiple
Notazione implicita per il flusso
n
s1
∞
S
∞
∞
∞
∞
s2
t1
n
∞
T
s3
t2
s4
n
∞
n
Laboratorio di algoritmi e
strutture dati
Per X⊆V, vale f(X,X)=0
Per X,Y⊆V, vale f(X,Y) = -f(Y,X)
n Per X,Y,Z⊆V, con X∩Y=∅, vale
n
n
n
• f(X∪Y,Z)= f(X,Z)+f(Y,Z)
• f(Z,X∪Y)= f(Z,X)+f(Z,Y)
Laboratorio di algoritmi e
strutture dati
Dal precedente
dedurre che:
n
n
possiamo
|f| = f(V,t)
Laboratorio di algoritmi e
strutture dati
22
Metodo di Ford-Fulkerson
Sia G una rete di flusso e siano f1 e f2
due funzioni flusso su G. Sia g: VxV à R
tale che g(u,v) = f1(u,v) + f2(u,v).
provare che g è un flusso su G.
n
n
È un metodo per risolvere il problema del
massimo flusso
È basato su tre idee:
n
n
Sia G una rete di flusso e siano f1 e f2
due funzioni flusso su G e α una
costante. Sia g: VxV à R tale che
g(u,v) = αf1(u,v) + (1- α)f2(u,v).
n
lemma
Ciò significa che il flusso uscente da
s è uguale al flusso entrante in t,
poiché, per la conservazione del
flusso, il flusso in qualunque altro
nodo è uguale a zero
21
Esercizi
n
20
Flusso entrante in t
Sia G=(V,E) una rete di flusso e sia f
un flusso per G. Allora:
n
f(u,V) = 0, infatti f(u,V) = ∑v∈V f(u,v)
19
Lemma 1
n
f(X,Y) = ∑x∈X ∑y∈Y f(x,y)
Come conseguenza, la conservazione
del flusso può essere scritta come:
s5
Laboratorio di algoritmi e
strutture dati
n
Dati due insiemi di vertici X ed Y
definiamo:
n
n
Reti residue
Percorsi aumentanti ( augmenting
Tagli (cut)
path)
Non è un algoritmo in quanto da esso si
possono derivare vari algoritmi
provare che g è un flusso su G.
Laboratorio di algoritmi e
strutture dati
23
Laboratorio di algoritmi e
strutture dati
24
4
Metodo di Ford-Fulkerson
Reti residue
Intuitivamente, una rete residua è
costituita dagli archi che permettono
il “passaggio” di ulteriore flusso
n Dato G=(V,E), s, t ed un flusso f in G
la capacità residua di (u,v) è data da:
FORD-FULKERSON-METHOD(G,s,t)
inizializza il flusso f a zero
while esiste un augmenting path p do
n
aumenta il flusso f lungo p
endwhile
return f
n
n
Laboratorio di algoritmi e
strutture dati
cf(u,v) = c(u,v) – f(u,v)
Quantità di flusso, da u a v, che può
essere aggiunto ad f senza superare la il
vincolo sulla capacità
Laboratorio di algoritmi e
strutture dati
25
Esempio
26
Rete residua indotta da f
n
È definita come Gf(V,Ef), dove
Ef={(u,v)∈VxV : cf(u,v)>0}
Gli archi in Ef sono detti archi residui
n È la rete costituita da tutti gli archi che
possono ammettere ancora flusso
n Se almeno un arco tra (u,v) e (v,u) è in
G, può accadere che (u,v) è in Gf ,
quindi: |Ef| <= 2|E|
n
c(u,v)=10, f(u,v)=8 ⇒ cf(u,v)=2
c(u,v)=0, f(v,u)=7 ⇒ cf(u,v)=7
c(u,v)=16, f(u,v)=-4 ⇒ cf(u,v)=20
Laboratorio di algoritmi e
strutture dati
n
Laboratorio di algoritmi e
strutture dati
27
Rete residua indotta da f
Esempio di rete di flusso
La rete residua è essa stessa una
rete di flusso con capacità cf
n Possiamo avere cf(u,v)>0 se
n
c(u,v)>0 e f(u,v)<c(u,v), oppure se
n c(u,v)=0 e f(v,u)>0
n
n
v1
12/12
29
v2
15/20
11/16
1/4
0/10
4/9
s
Esiste una relazione tra il flusso in
una rete di flusso ed il flusso in una
rete residua
Laboratorio di algoritmi e
strutture dati
28
t
7/7
8/13
4/4
v3
11/14
v4
Laboratorio di algoritmi e
strutture dati
30
5
Esempio di rete residua
v1
5
Sia G=(V,E) una rete di flusso e sia f
un flusso in G. Sia Gf la rete residua
indotta da f in G e sia f’ il flusso in Gf.
Allora la funzione
v2
5
11
s
12
Lemma 2
3
5
11
15
7
4
t
F(u,v)=f(u,v)+ f’(u,v)
è un flusso in G con valore
|F|=|f|+|f’|
5
4
8
v3
3
11
v4
Laboratorio di algoritmi e
strutture dati
Prova Lemma 2
n
32
Prova Lemma 2 (cont.)
Vincolo simmetria
n
(f+f')(u,v)= f(u,v)+f'(u,v)
= -(f(v,u)+f'(v,u)
= -(f+f')(v,u)
n
Laboratorio di algoritmi e
strutture dati
31
Valore del flusso
|f+f'| = Σ v(f+f')(s,v)
= Σ vf(s,v) + Σ vf'(s,v)
= |f| + |f'|
Vincolo capacità
(f+f')(u,v)= f(u,v)+f'(u,v)
<=f(u,v)+c(u,v)-f(u,v)
= c(u,v)
n
Vincolo conservazione del flusso
Σ v(f+f')(u,v)= Σ vf(u,v) + Σ vf'(u,v) = 0
Laboratorio di algoritmi e
strutture dati
Augmentig path
n
n
Data una rete di flusso G=(V,E) ed un
flusso f, un augmenting path p è un
cammino semplice da s a t nella rete
residua Gf
Data una augmenting path p definiamo la
capacità residua di p come
v1
5
s
35
12
v2
5
11
3
5
11
4
15
7
t
5
4
8
La capacità residua rappresenta la
massima quantità di flusso che si può
trasportare lungo gli archi di p
Laboratorio di algoritmi e
strutture dati
34
Esempio di augmentig path
cf(p) = min{cf(u,v) : (u,v) è un arco in p}
n
Laboratorio di algoritmi e
strutture dati
33
v3
3
11
v4
c(p)=4
p=(s,v1 )(v1 ,v3 )(v3 ,v2 )(v2 ,t)
Laboratorio di algoritmi e
strutture dati
36
6
Lemma 3
Corollario 1
Sia G=(V,E) una rete di flusso e sia f un
flusso in G. Sia p una augmentig path
nella rete residua Gf . Definiamo la
funzione fp :VxV→R come
cf(p) se (u,v)∈p
fp (u,v) = -cf(p) se (v,u)∈p
0 altrimenti
La funzione fp è un flusso in Gf con valore
|fp |= cf(p) >0
Laboratorio di algoritmi e
strutture dati
Sia G=(V,E) una rete di flusso e sia f
un flusso in G. Sia p una augmentig
path nella rete residua Gf. Sia fp
definita
come
nel
Lemma
3.
Definiamo la funzione f’:VxV→R
come f’=f+fp. Allora f’ è un flusso in
G con valore |f’|=|f|+|fp|>|f|
Laboratorio di algoritmi e
strutture dati
37
Taglio di una rete di flusso
Esempio di taglio
Un taglio (cut) di una rete di flusso
G=(V,E), indicato con cut(S,T), è una
partizione dei vertici V in S e T=V-S
con s∈S e t∈T
n Il flusso lungo il taglio è definito come
n
f(S,T)=∑u∈S ∑v∈T f(u,v)
n
La capacità del taglio è definita come
v1
v2
15/20
1/4
0/10
4/9
s
t
7/7
8/13
4/4
v3
T={t,v2 ,v4 }
11/14
v4
f(S,T)=12+(-4)+11=19
c(S,T)=12+14=26
Laboratorio di algoritmi e
strutture dati
39
Osservazioni
12/12
11/16
S={s,v1 ,v3 }
c(S,T)= ∑u∈S ∑v∈T c(u,v)
Laboratorio di algoritmi e
strutture dati
38
40
Lemma 4
Notiamo che il flusso attraverso un
taglio può includere valori di flusso
negativi, mentre la capacità di un
taglio è composta solo da valori
positivi
n Il prossimo lemma mostra che il
valore del flusso in una rete di flusso
è pari al flusso lungo un qualsiasi
taglio della rete
n
Laboratorio di algoritmi e
strutture dati
41
Sia f un flusso in una rete di flusso G
con sorgente s e destinazione t e sia
(S,T) un taglio di G. Allora il flusso
lungo il taglio (S,T) è f(S,T)=|f|.
Laboratorio di algoritmi e
strutture dati
42
7
Corollario 2
Teorema (max-flow min-cut)
Se f è un flusso in una rete di flusso G
con sorgente s e destinazione t, allora le
seguenti condizioni sono equivalenti:
1. f è un massimo flusso in G
2. Gf non contiene augmenting path
3. |f|= c(S,T) per un taglio (S,T)
Il valore di un qualsiasi flusso f in
una rete di flusso G è limitato
superiormente dalla capacità di un
qualsiasi taglio di G
|f|<= c(S,T) per ogni taglio (S,T)
Laboratorio di algoritmi e
strutture dati
Determinare il taglio minimo
Se non esiste una augmenting path
in Gf, definendo
S={v∈V:esiste un percorso da s a v} e
T=V-S
abbiamo ottenuto il taglio di costo minimo
Laboratorio di algoritmi e
strutture dati
n
n
n
Laboratorio di algoritmi e
strutture dati
46
Max-flow con capacità intere
Il running-time dell’algoritmo di FF
dipende da come si determina l’AP
Quando la capacità assume valori reali, se
l’AP non è scelta con cura FF potrebbe
non convergere mai
Se l’AP è scelta usando la BFS, l’algoritmo
ha un running-time polinomiale
Spesso il problema del massimo flusso si
presenta con capacità intere
Laboratorio di algoritmi e
strutture dati
44
Ford-Fulkerson(G,s,t)
foreach (u,v)∈E(G) do
f(u,v)=f(v,u)=0
endfor
while (esiste p da s a t in Gf) do
cf(p) = min{cf(u,v) : (u,v) ∈ p}
foreach (u,v)∈ p do
f(u,v)=f(u,v)+ cf(p)
f(v,u)=-f(u,v)
endfor
endwhile
45
Analisi di Ford-Fulkerson
n
Laboratorio di algoritmi e
strutture dati
43
47
n
Un’implementazione “banale” ha tempo di
esecuzione O(E|f*|), dove f* è il valore del
massimo flusso
n
n
n
Il primo foreach prende tempo Θ(E)
Il while è eseguito al più |f* | volte dato che il
flusso aumenta di almeno una unità ad ogni
iterazione
Il lavoro all’interno del while può essere reso
efficiente, O(E), a seconda della struttura dati
utilizzata (vedi pp. 595 e 596 del libro di testo)
Laboratorio di algoritmi e
strutture dati
48
8
Esempio
0
1.0
0.0
00
Algoritmo di Edmonds-Karp
u
s
1.0
00.
00
.00
0
v
n
t
1
1.0
1.0
00
n
f* =2.000.000
000
RT= O(E|f*|)
0
.00
Usa come base l’algoritmo di FF
La AP è selezionata usando la BFS
n
RT=O(10.000.000)
n
Il percorso da s a t è quello minimo
considerando ogni arco con peso uno
Il running-time è O(VE2)
AP1 =(s,u)(u,v)(v,t)
AP2 =(s,v)(v,u)(u,t)
Laboratorio di algoritmi e
strutture dati
Laboratorio di algoritmi e
strutture dati
49
Massimo-matching
MM in grafi bipartiti
G=(V,E) è un grafo non direzionato
n Un insieme M⊆V è un matching se
Un grafo non direzionato G=(V,E) è
bipartito se V può essere partizionato in
due insiemi L ed R tali che se (u,v)∈E,
allora o u∈L e v∈R oppure u∈R e v∈L
n
n
n
Per ogni v∈V al più un arco in M è
incidente su v, in tal caso v è matched
M⊆V è un massimo-matching se
n
V=L ∪ R
L ∩ R=∅
gli archi sono solo tra L ed R
M è di cardinalità massima, cioè per
ogni matching M’ si ha |M| >= |M’|
Laboratorio di algoritmi e
strutture dati
Laboratorio di algoritmi e
strutture dati
51
Esempio
52
A cosa serve MM?
n
n
n
n
n
matching
50
n
massimo
matching
Laboratorio di algoritmi e
strutture dati
53
Ha molte applicazioni pratiche
L rappresenta un insieme di processori
R rappresenta un insieme di task che
devono essere eseguiti simultaneamente
Ogni processore esegue un task per volta
Un arco indica che un processore è in
grado di eseguire un determinato task
Si vuole massimizzare il numero di task
eseguiti contemporaneamente
Laboratorio di algoritmi e
strutture dati
54
9
Trovare MM con FF
n
Teorema del MM
A partire da un grafo bipartito non
direzionato G=(V,E), dove V=L ∪ R,
definiamo la rete di flusso G’=(V’,E’) dove
n
n
n
V’=V ∪ {s,t}
E’={(s,u) : u∈L} ∪
{(u,v) : u∈L, v∈R e (u,v)∈E} ∪
{(v,t) : v∈R}
Ogni arco sulla rete di flusso G’ avrà capacità
unitaria
Laboratorio di algoritmi e
strutture dati
Esempio
55
Sia G=(V,E) un grafo bipartito con
partizione dei vertici V=L ∪ R, e sia
G’=(V’,E’) la corrispondente rete di
flusso. Se M è un matching in G,
allora esiste un flusso a valori interi
in G’ con valore |f|=|M|. D’altra
parte, se f è un flusso a valori interi
in G’, allora esiste un matching in G
con cardinalità |M|=|f|.
Laboratorio di algoritmi e
strutture dati
56
Tutti gli archi da L ad R
con flusso positivo fanno
parte del MM
flusso = 1
s
t
flusso = 0
Laboratorio di algoritmi e
strutture dati
57
10