Maximum flow
Algorithms and Networks
Today
Maximum flow problem
Variants
Applications
Briefly: Ford-Fulkerson; min cut max flow
theorem
Preflow push algorithm
Lift to front algorithm
A&N: Maximum flo
1
The problem
Problem
Variants
Variantsin
in
notation,
notation,e.g.:
e.g.:
Write
Writef(u,v)
f(u,v)==-f(v,u)
-f(v,u)
Directed graph G=(V,E)
Source s V, sink t V.
Capacity c(e) Z+ for each e.
Flow: function f: E N such that
For all e: f(e) c(e)
For all v, except s and t: flow into v equals flow out of v
Flow value: flow out of s
Question: find flow from s to t with maximum
value
A&N: Maximum flo
Maximum flow
Ford-Fulkerson method
Algoritmiek
Possibly (not likely) exponential time
Edmonds-Karp version: O(nm2): augment over
shortest path from s to t
Max Flow Min Cut Theorem
Improved algorithms: Preflow push; scaling
Applications
Variants of the maximum flow problem
A&N: Maximum flo
1
Variants:
Multiple sources and sinks
Lower bounds
Variant
Multiple sources,
multiple sinks
Possible
maximum flow
out of certain
s
sources or into
some sinks
Models logistic
questions
s1
t1
t
G
sk
A&N: Maximum flo
tr
Lower bounds on flow
Edges with minimum and maximum
capacity
For all e: l(e) f(e) c(e)
l(e)
c(e)
A&N: Maximum flo
Flow with Lower Bounds
Look for maximum flow with for each e:
l(e) f(e) c(e)
Problem solved in two phases
Transshipment
Transshipment
First, find admissible flow
Then, augment it to a maximum flow
Admissible flow: any flow f, with
Flow conservation
if v{s,t}, flow into v equals flow out of v
Lower and upper capacity constraints fulfilled:
for each e: l(e) f(e) c(e)
A&N: Maximum flo
Finding admissible flow 1
First, we transform the question to: find an
admissible circulation
Finding admissible circulation is
transformed to: finding maximum flow in
network with new source and new sink
Translated back
A&N: Maximum flo
10
Circulations
Given: digraph G, lower bounds l, upper
capacity bounds d
A circulation fulfills:
For all v: flow into v equals flow out of v
For all (u,v): l(u,v) f(u,v) c(u,v)
Existence of circulation: first step for
finding admissible flow
A&N: Maximum flo
11
Circulation vs. Flow
Model flow network
with circulation
network: add an arc
(t,s) with large
capacity (e.g., sum
over all c(s,v) ), and
ask for a circulation
with f(t,s) as large as
possible
A&N: Maximum flo
f (t,s) = value( f )
12
Finding admissible flow
Find admissible circulation in network with
arc (t,s)
Construction: see previous sheet
Remove the arc (t,s) and we have an
admissible flow
A&N: Maximum flo
13
Finding admissible circulation
Is transformed to: finding a maximum flow
in a new network
New source
New sink
Each arc is replaced by three arcs
A&N: Maximum flo
14
Finding admissible circulation
l(e)
a
c(e)
Do this for
each edge
l(e)
a
New source
S
0
c(e)-l(e)
New sink
l(e)
A&N: Maximum flo
15
Finding admissible flow/circulation
Find maximum flow from S to T
If all edges from S (and hence all edges to
T) use full capacity, we have admissible
flow:
f(u,v) = f(u,v) + l(u,v) for all (u,v) in G
A&N: Maximum flo
16
From admissible flow to
maximum flow
Take admissible flow f (in original G)
Compute a maximum flow f from s to t in
Gf
Here cf (u,v) = c(u,v) f(u,v) l(u,v)
f + f is a maximum flow from s to t that
fulfills upper and lower capacity constraints
Any flow algorithm can be used
A&N: Maximum flo
17
3
Applications
Applications
Logistics (transportation of goods)
Matching
Matrix rounding problem
A&N: Maximum flo
19
Matrix rounding problem
p * q matrix of real numbers D = {dij}, with
row sums ai and column sums bj.
Consistent rounding: round every dij up or
down to integer, such that every row sum and
column sum equals rounded sum of original
matrix
Can be modeled as flow problem with lower
and upper bounds on flow through edges
A&N: Maximum flo
20
Row sum
rounded down,
Sum rounded up
Row
1
Col
1
[ 16,17]
Column sum
rounded down,
Sum rounded up
[ bij , bij
s
Row
p
Col
q
A&N: Maximum flo
21
4
Reminder: Ford-Fulkerson and the
min-cut max flow theorem
Ford-Fulkerson
Residual network Gf
Start with 0 flow
Repeat
Compute residual network
Find path P from s to t in residual network
Augment flow across P
Until no such path P exists
A&N: Maximum flo
23
Max flow min cut theorem
s-t-cut: partition vertices in sets S, T such
that s in S, t in T. Look to edges (v,w) with v
in S, w in T.
Capacity of cut: sum of capacities of edges
from S to T
Flow across cut
Theorem: minimum capacity of s-t-cut
equals maximum flow from s to t.
A&N: Maximum flo
24
5
The preflow push algorithm
Preflow push
Simple implementation: O(n2m)
Better implementation: O(n3)
Algorithm maintains preflow: some flow
out of s which doesnt reach t
Vertices have height
Flow is pushed to lower vertex
Vertices sometimes are lifted
A&N: Maximum flo
26
Preflow
Function f: V * V R
Skew symmetry: f(u,v) = - f(v,u)
Capacity constraints: f(u,v) c(u,v)
Notation: f(V,u)
For all u, except s: f(V,u) 0 (excess flow)
u is overflowing when f(V,u) > 0.
Maintain: e(u) = f(V,u).
A&N: Maximum flo
27
Height function
h: V N:
h(s) = n
h(t) = 0
For all (u,v) Ef (residual network):
h(u) h(v)+1
A&N: Maximum flo
28
Initialize
Set height function h
h(s) = n
Do not change
h(t) = 0
h(v) = 0 for all v except s
for each edge (s,u) do
f(s,u) = c(s,u); f(u,s) = c(s,u)
e[u] = c(s,u);
A&N: Maximum flo
Initial preflow
29
Basic operation 1: Push
Suppose e(u) > 0, cf (u,v)>0, and
h[u]= h[v]+1
Push as much flow across (u,v) as possible
r = min {e[u], cf (u,v)}
f(u,v) = f(u,v) + r;
f(v,u) = f(u,v);
e[u] = e[u] r;
e[v] = e[v] + r.
A&N: Maximum flo
30
Basic operation 2: Lift
When no push can be done from
overflowing vertex (except s,t)
Suppose e[u]>0, and for all (u,v) Ef : h[u]
h[v], u s, u t
Set h[u] = 1 + min {h[v] | (u,v) Ef}
A&N: Maximum flo
31
Preflow push algorithm
Initialize
while push or lift operation possible do
Select an applicable push or lift operation and
perform it
To
Todo:
do:correctness
correctnessproof
proofand
andtime
timeanalysis
analysis
A&N: Maximum flo
32
Lemmas / Invariants
If there is an overflowing vertex (except t),
then a lift or push operation is possible
The height of a vertex never decreases
When a lift operation is done, the height
increases by at least one.
h remains a height function during the
algorithm
A&N: Maximum flo
33
Another invariant and the
correctness
There is no path in Gf from s to t
Proof: the height drops by at most one across
each of the at most n-1 edges of such a path
When the algorithm terminates, the preflow
is a maximum flow from s to t
f is a flow, as no vertex except t has excess
As Gf has no path from s to t, f is a maximum
flow
A&N: Maximum flo
34
Time analysis 1: Lemma
If u overflows then there is a simple path
from u to s in Gf
Intuition: flow must arrive from s to u:
reverse of such flow gives the path
Formal proof skipped
A&N: Maximum flo
35
Number of lifts
For all u: h[u] < 2n
h[s] remains n. When vertex is lifted, it has
excess, hence path to s, with at most n 1
edges, each allowing a step in height of at most
one up.
Each vertex is lifted less than 2n times
Number of lift operations is less than 2n2
A&N: Maximum flo
36
Counting pushes
Saturating pushes and not saturating pushes
Saturating: sends cf(u,v) across (u,v)
Non-saturating: sends e[u] < cf(u,v)
Number of saturating pushes
After saturating push across (u,v), edge (u,v) disappears
from Gf.
Before next push across (u,v), it must be created by push
across (v,u)
Push across (v,u) means that a lift of v must happen
At most 2n lifts per vertex: O(n) sat. pushes across edge
O(nm) saturating pushes
A&N: Maximum flo
37
Non-saturating pushes
h[v]
Look at
Initially = 0. e ( v ) 0
increases by lifts in total at most 2n2
increases by saturating pushes at most by 2n per push, in
total O(n2m)
decreases at least one by a non-saturating push across (u,v)
After push, u does not overflow
v may overflow after push
h(u) > h(v)
At most O(n2m) pushes
A&N: Maximum flo
38
Algorithm
Implement
O(n) per lift operation
O(1) per push
O(n2m) time
A&N: Maximum flo
39
6
Preflow-push fastened:
The lift-to-front algorithm
Lift-to-front algorithm
Variant of preflow push using O(n3) time
Vertices are discharged:
Push from edges while possible
If still excess flow, lift, and repeat until no excess flow
Order in which vertices are discharge:
list,
discharged vertex placed at top of list
Go from left to right through list, until end, then start
anew
A&N: Maximum flo
41
Definition and Lemma
Edge (u,v) is admissible
cf(u,v) > 0, i.e., (u,v) Ef
h(u) = h(v)+1
The network formed by the admissible edges is
acyclic.
If there is a cycle, we get a contradiction by looking at
the heights
If (u,v) is admissible and e[u] > 0, we can do a push across
it. Such a push does not create an admissible edge, but
(u,v) can become not admissible.
A&N: Maximum flo
42
Discharge procedure
Vertices have adjacency list N[u]. Pointer
current[u] gives spot in adjacency list.
Discharge(u)
While e[u] > 0 do
v = current[u];
if v = NIL then {Lift(u); current[u] = head(N[u]);}
elseif cf(u,v) > 0 and h[u] = h[v]+1 then Push(u,v);
else current[u] = next-neighbor[v];
A&N: Maximum flo
43
Discharge indeed discharges
If u is overflowing, then we can do either a
lift to u, or a push out of u
Pushes and Lifts are done when Preflow
push algorithm conditions are met.
A&N: Maximum flo
44
Lift-to-front algorithm
Maintain linked list L of all vertices except s, t.
Lift-to-front(G,s,t)
Initialize preflow and L
for all v do current[v] = head[N(v)];
u is head of L
while u not NIL do
oldheight = h[u];
Discharge(u);
if h[u] > oldheight then move u to front of list L
u = next[u];
A&N: Maximum flo
45
Remarks
Note how we go through L.
Often we start again at almost the start of
L
We end when the entire list is done.
For correctness: why do we know that no
vertex has excess when we are at the end of
L?
A&N: Maximum flo
46
A definition: Topological sort
A directed acyclic graph is a directed graph
without cycles. It has a topological sort:
An ordering of the vertices : V {1, 2, ,
n} (bijective function), such that for all edges
(v,w) E: (v) < (w)
A&N: Maximum flo
47
L is a topological sort of the
network of admissible edges
If (u,v) is an admissible edge, then u is
before v in the list L.
Initially true: no admissible edges
A push does not create admissible edges
After a lift of u, we place u at the start of L
Edges (u,v) will be properly ordered
Edges (v,u) will be destroyed
A&N: Maximum flo
48
Lift-to-front algorithm correctly
computes a flow
The algorithm maintains a preflow.
Invariant of the algorithm: all vertices before the
vertex u in consideration have no excess flow.
Initially true.
Remains true when u is put at start of L.
Any push pushes flow towards the end of L.
L is topological sort of network of admissible edges.
When algorithm terminates, no vertex in L has
excess flow.
A&N: Maximum flo
49
Time analysis - I
O(n2) lift operations. (As in preflow push.)
O(nm) saturating pushes.
Phase of algorithm: steps between two
times that a vertex is placed at start of L,
(and before first such and last such event.)
O(n2) phases; each handling O(n) vertices.
All work except discharges: O(n3).
A&N: Maximum flo
50
Time of discharging
Lifts in discharging: O(n) each,
O(n3) total
Going to next vertex in adjacency
list
O(degree(u)) work between two lifts
of u
O(nm) in total
Conclusion:
Conclusion:
33
O(n
O(n )) time
timefor
for the
the
Lift
Lift to
to front
front algorithm
algorithm
Saturating pushes: O(nm)
Non-saturating pushes: only once
per discharge, so O(n3) in total.
A&N: Maximum flo
51
7
Conclusions
Many other flow algorithms
Push-relabel (variant of preflow push)
O(nm log (n2/m))
Scaling (exercise)
A&N: Maximum flo
53
A useful theorem
Let f be a circulation. Then f is a nonnegative
linear combination of cycles in G.
Proof. Ignore lower bounds. Find a cycle c, with
minimum flow on c r, and use induction with f r * c.
If f is integer, `integer scalared linear
combination.
Corollary: a flow is the linear combination of
cycles and paths from s to t.
Look at the circulation by adding an edge from t to s
and giving it flow value(f).
A&N: Maximum flo
54
Next
Minimum cost flow
A&N: Maximum flo
55