- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10 ( 4, )
v1
5 ( 2,)
7 (1,) 2 ( 6,)
vt
4 ( 2,)
vs
8 (1,)
v2
10 ( 3, )
v3
解:从f 0 = 0开始,构造加权网络图W ( f 0 ):
f0 = 0
1Байду номын сангаас ( 0)
W ( f0 )
vt
4
v1
7 ( 0) +5
2 ( 0)
3v1
1
4
vt
2
vs
+5
8 ( 0)
( k +1)
, 令 k := k + 1, 转
例6.5.1 求图6.5.1的最小费用最大流,弧旁的数字 为 (cij , wij ).
v2
(5, 6)
v4
(1, 2)
v1
(2,3)
(1, 2)
(3, 4)
v5
(3,1)
v3
图6.5.1
(1,3)
构造 D ( X (0) ). 解: 取 X (0) = 0, 见图6.4.7(a),
运行结果如下:
z= 2.0000 1.0000 0.0000 2.0000 0.0000 0.0000 3.0000 favl1 = 12.0000
结果说明最大流值为3,最小费用为12。 可以看出,最小费用最大流问题其实就是在最 大流问题基础上,再进行一次线性规划问题的计算 得出。
例:求图中从vs → vt的最小费用最大流。
即为最小费用最大流。 是最大流时, 注意到 cij ≥ 0, 故X=0必是流量为 0的最小费用 流。这样, 总可以从X=0开始。一般地, 若X是流量 f(X)的最小费用流, 为了寻求关于X的最小费用增 广链, 构造一个赋权有向图D(X),它的顶点是原网 络D的顶点, 而把D中的每一条弧 (vi , v j ) 变成两个 相反方向的弧 (vi , v j ) 和 (v j , vi ), 定义D(X) 中弧的 权 wij′ : cij , 若xij < wij
0
U( 3, 5) U( 4, 5) F( 1, 2) F( 1, 3) F( 2, 3) F( 2, 4) F( 3, 4) F( 3, 5) F( 4, 5)
3.000000 4.000000 2.000000 1.000000 2.000000 0.000000 0.000000 3.000000 0.000000
C( X ) =
为可行流 的费用 可行流X的费用 可行流 的费用。
( vi , v j )∈ A
∑
cij xij
(6.5.1)
最小费用最大流问题,即要求一个最大流X,使总 运输费用
min C ( X ) =
( vi , v j )∈ A
∑
cij xij
(6.5.2)
达到最小值, 则有最小费用最大流问题的数学模型
v2
(5, 6, 0)
v4
(1, 2, 0)
v1
(2,3, 0)
(1, 2, 0)
(3, 4, 0)
v5
(3,1, 0)
v3 (1,3, 0)
图6.5.1(a) ( )
因没有负权弧, 故可用Dijkstra算法求得最短路为
P (0) = v1v3v5 ,
见图6.5.1(b)。
v2
1 2
5
1
v4
3
1
算法步骤: 算法步骤: Step1: 确定初始可行流 X (0) = 0, 令 k := 0; Step2: 记 X ( k ) 为经过k次调整得到的最小费用流, 构造 D ( X ( k ) ); Step3: 求 D ( X ( k ) ) 中 v1 到 vn 的最短路 P ( k ) , 若 P ( k ) 不存在,则 X ( k )是最小费用最大流,算法 终止; 否则,转Step4; Step4: 在D中找对应的增广链 µ , 按式(6.4.4)调 整流量,得可行流 X Step2。
5 ( 0) +5
4 ( 0)
vs
0
1
6
2
v2
10 ( 0)
v3
1
v2
3
v3
4
f1 = f0 + 5 = 5
10 ( 0)
W ( f1 )
vt
4
+2
v1
5 ( 5)
7 ( 5)+2 2 ( 0)
v1
4
−1
1
−1
vt
2
5
vs
8 ( 5)
4 ( 0)
vs
0
1
6
−2
v2
10 ( 0)
v3
v2
1
3
v3 4
运行结果: Global optimal solution found at iteration:
Objective value: Variable Value D( 1) 3.000000 D( 2) 0.000000 D( 3) 0.000000 D( 4) 0.000000 D( 5) -3.000000 C( 1, 2) 1.000000 C( 1, 3) 3.000000 C( 2, 3) 2.000000 C( 2, 4) 5.000000 C( 3, 4) 1.000000 C( 3, 5) 1.000000 C( 4, 5) 3.000000 U( 1, 2) 2.000000 U( 1, 3) 1.000000 U( 2, 3) 3.000000 U( 2, 4) 6.000000 U( 3, 4) 2.000000 12.00000 Reduced Cost 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
+1
v1
5 ( 5) -1
7 ( 7) 2 ( 0)
vt
4 ( 3) v
v1 4
−2
−1
6
−3
−2
7
vt
2
vs
8 ( 8)
+1
s
0
v2
10 ( 3)+1
wij′ = w′ (vi , v j ) = +∞, 若xij = wij
−cij , 若xij > 0 w ji′ = w′ (v j , vi ) = +∞, 若xij = 0 在D(X)中长度为 +∞ 的弧可以略去。
故在网络D中寻找关于 X的最小费用增广链就 等价于在赋权有向图D(X)中, 寻找从 v1 到vn 的最短 路。
f2 = f1 + 2 = 7
10 ( 2)
W ( f2 )
vt
4 ( 0) −4
v1
5 ( 5)
7 ( 7) 2 ( 0)
v1 4
4 −1
−1
6
6
vt
2
vs
8 ( 5)
+3
vs
0
1
−2
+3
v2
10 ( 0)+3
v3
v2
1
3
v3
4
f3 = f2 + 3 =10
10 ( 2)
W ( f3 )
−4 4
v1
3
v3
图6.5.1(b) ( )
v5
增广链
µ (0) = v1v3v5
θ = min {1 − 0,3 − 0} = 1
调整后 X (1) 如图6.5.1(c)。
v2
(1, 2, 0) (5, 6, 0)
v4
(3, 4, 0)
(2,3, 0) (3,1,1)
(1, 2, 0)
v1
v3 (1,3,1)
v5
图6.5.1(c) ( )
构造 D ( X (1) ) 得到
P (1) = v1v2 v3v5
如图6.5.1(d)。
v2
1
5
v4
1
2
−1
1
3
v5
v1
−3
v3
图6.5.1(d) ( )
µ (1) = v1v2 v3v5
θ = min {2 − 0,3 − 0,3 − 1} = 2
调整得 X (2) , 如图6.5.1(e)。
从某个可行流出发, 从某个可行流出发, 找到关于这个可行流 的一条增广链, 的一条增广链,沿着 该增广链调整X, 该增广链调整 ,对 新的可行流试图寻求 关于它的增广链, 关于它的增广链,如 此反复直至最大流
设想: 当沿着一条关于可行流X的增广链 µ , 以
θ 调整X, 得到新的可行流 X ′, 且有
min C ( X ) =
( vi , v j )∈ A
∑
cij xij
(6.5.3)
n n ∑ X ij − ∑ X ji = 0 s.t. j =1 j =1 0 ≤ x ≤ w , (v , v ) ∈ A ij ij i j
§6.5.2 最小费用最大流问题的算法
寻求最大流的方法 最小 费用 最小费用最大流
C ( X ′) − C ( X ) =
( vi , v j )∈ A
∑
cij xij ′ −
( vi , v j )∈ A
∑
cij xij
= ∑ cij xij′ − ∑ cij xij
u
u
= ∑ cij ( xij + θ ) + ∑ cij ( xij − θ ) − ∑ cij xij