1
Combinatorial Optimization
1.1
The maxflow problem
Let us consider
G
= (
V, E
) a directed network. We assume that there is some commodity produced at
node
s
(source
) and shipped through the network to node
t
(sink
). Furthermore, let us define capacity
c
ij
=
c
e
≥
0 as the upper limit on flow across arc
e
= (
i, j
). Then, the goal is to find maximum amount
of the commodity we can ship from
s
through the network to
t
.
An example of a network and capacities is given below:
1
s
t
2
1
3
3
1
1
1
Maxflow is a classical OR model – formulated initially in mid 1950s for application of railway traffic
flow. Solved first by L. Ford and D. R. Fulkerson (Cornell OR – 1970s) by the labeling algorithm
, later
refined in many ways.
Idea of the algorithm is very natural: start at source and try to “push” flow through network to
t
,
keeping track of how much we can get to various nodes.
E.g., we could start in above example by
sending 1 unit of flow (commodity) along arcs (
s,
1), then (1
,
2), then (2
, t
) to get
1
s
t
2
1,1
0,3
0,3
1,1
1,1
0,1
Can we improve this?
I.e., can we send more flow from
s
to
t
?
Answer is clearly yes as it is easy
to “eyeball” an improvement.
More systematically, an improvement can be found by the labeling
algorithm. We discuss the algorithm formally in Section
??
. Here, we demonstrate the main idea by
going through the first two iterations.
Iteration #1
1
s
t
2
1,1
0,3
0,3
1,1
1,1
0,1
→
1
s
t
2
1,1
0,3
0,3
1,1
1,1
0,1
(
s
+
,
3)
(2
+
,
1)
(
*
,
∞
)
(1
+
,
1)
→
1
s
t
2
1,1
1,3
1,3
1,1
1,1
1,1
Flow value = 1
Labeling
Flow value = 2
At
s
, can send 3 units to 2. Hence, label node 2 by (
s
+
,
3).
At 2, can send 1 unit to 1. Hence, label node 1 by (2
+
,
1).
At 1, can send 1 unit to
t
. Hence, label node
t
by (1
+
,
1).
1
This preview has intentionally blurred sections. Sign up to view the full version.
View Full Document
Note that labeling step identified path
s
→
2
→
1
→
t
through which an additional unit of flow
can be pushed.
Iteration #2
1
s
t
2
1,1
1,3
1,3
1,1
1,1
1,1
→
1
s
t
2
1,1
1,3
1,3
1,1
1,1
1,1
(
s
+
,
2)
(2

,
1)
(
*
,
∞
)
(1
+
,
1)
→
1
s
t
2
1,1
2,3
2,3
1,1
0,1
1,1
Flow value = 2
Labeling
Flow value = 3
At
s
, can send 2 units to 2. Hence, label node 2 by (
s
+
,
2).
At 2, can refuse 1 unit from 1. Hence, label node 1 by (2

,
1).
At 1, can send 1 unit to
t
. Hence, label node
t
by (1
+
,
1).
Labeling identified path
s
→
2
←
1
→
t
through which an additional unit of flow can be sent.
Now it looks like we’re done. Can there be a larger flow? The answer is no
. To see this, let us define:
•
Cut
separating
s
and
t
determined by the partition
V
=
X
∪
¯
X
,
X
∩
¯
X
=
∅
, and
s
∈
X
,
t
∈
¯
X
,
as the arc set
braceleftbig
(
i, j
)
∈
E
:
i
∈
X, j
∈
¯
X
bracerightbig
(the “forward” arcs) and
braceleftbig
(
j, i
)
∈
E
:
i
∈
X, j
∈
¯
X
bracerightbig
(the “reverse” arcs).
•
Capacity
of the cut (
X,
¯
X
) is
summationdisplay
(
i,j
)
∈
E
i
∈
X, j
∈
¯
X
c
ij
, i.e. the total capacity of the forward arcs.
X
X
=
V
\
X
s
t
i
j
cut
arcs
Intuitively, cuts block the flow from
s
to
t
:
(i) when flow =
c
ij
on all (
i, j
)
∈
E
such that
i
∈
X
,
j
∈
¯
X
, there’s no additional forward
flow across
cut.
This is the end of the preview.
Sign up
to
access the rest of the document.
 Fall '08
 TODD
 Graph Theory, Bipartite graph

Click to edit the document details