第五节 最小费用最大流问题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
v1
(10,0) , )
(7,0)
(2,0) , )
vt
(4,0) ,
vs
(8,0) ,
(5,0) , )
v2 v1
(10,0)
v3 vt
(4,0) ,
(7,5)
(2,0) , )
, ) 上进行调整, (4)在µ上进行调整,(10,0) ) 上进行调整
θ = 5,得f 1 , , 如图( )所示。 如图(b)所示。
-1 1
1 -1
6 -2
vt
2
vs
(8,5) ,
(5,5) , )
v2
(10,0)
v3 v1
4 -1 1
v2 vt
2
3
v3
(b) f
1
1 -1
6 -2
) (c) W(f (1))
vs
v2
3
v3
9
) (c) W(f (1))
v1
(10,0) , )
(7,5)
(2,0) , )
vt
(4,0) , 4
v1 vs
长度网络W( 长度网络 (f 0 ), 的最短路。 求出从v 求出从 s到vt的最短路。 4 (3)在原网络 中,与这 )在原网络D中 条最短路对应的增广链为 vs µ =(vs,v2,v1,vt)。 (
1
v2 v1
(3,10) )
v3 vt
2
1
6 2
v2
(a)
3
v3
6
w(f0)
(3)在原网络 中, )在原网络D中 与这条最短路对应 的增广链为 : µ =(vs,v2,v1,vt) (
第 5节
最小费用最大流问题
网络D=( , , ) 每一弧 每一弧( 网络 (V,A,C),每一弧(vi,vj)∈A,给出 , 上单位流的费用b(v ,(简记 (vi,vj)上单位流的费用 i,vj)≥0,(简记 ij)。 ,(简记b 最小费用最大流问题: 最小费用最大流问题: 求一个最大流 f,使流的总费用 ,
17
V1 18,18
20,3
V2 14,3 V1 -3
-5
V2 5 -4 5
-5 vt -3
vs
15,15
12,0Fra Baidu bibliotek
17,17 V3
vt
3 8 -8
V3
8
20,2 (f) f(3)
(g) (f(3))
第四轮,k= 3 作图W(f(3))如图(g)所示,求W(f(3))中vs到vt的 最短路(vs,v3,v1,v2,vt),在G中找到相应的增广链,该 链上最大可增加11个流量,然而我们只要再增加5个 流量就达到目标流量值3,故在该链上调为流量为5, 得到新流f (3) ,如图(h), f (4)即为所求的流量25的 最小费用流。 18
(8,8) ,
(4,3) ,
v2
(f) f
(10,3)
3
v3
3)=10
11
V( f
v1
(10,2) , )
(7,7)
(2,0)
vt
(4,3) ,
v1
4 -4 -2 -1
-1
6 3 2
vt
-2
vs
(8,8) ,
(5,5) , )
vs
v2
(10,3)
v3 v1
(7,7)
(2,0) (5,4) , )
v2
(5,4) , )
vs
v2
(10,4)
4
v3
4)=11
v2
-3
v3
(h) f
V( f
(i) W(f 4) ) (
不存在从v 的最短路,所以f 图(i)中,不存在从 s到vt的最短路,所以 4为 ) 最小费用最大流。 最小费用最大流。 问题:( )如何求网络W( 中的v 最短路? 问题:(1)如何求网络 (f k)中的 s到vt最短路? :( 的最短路? (2)如何判断无 s到vt的最短路? )如何判断无v
( k + 1) ij
f + θk k = f ij − θ k k f ij
k ij
(vi, v j) ∈ u
+
(vi, v j) ∈ u (vi , v j ) ∉ u
-
得新的可行流f 返回第2步 得新的可行流 k+1 , 返回第 步。 第四步:停止运算, 第四步:停止运算,并输出当前最小费用可行流 fk+1 ,作为 的最小费用最大流。 作为G的最小费用最大流 的最小费用最大流。
vs
(8,5) ,
(5,5) , )
v2
(10,0)
v3
7
(b) f 1
按照上述算法依次得f 按照上述算法依次得 1 ,f 2 ,f 3 ,f 4 ,构造相应 如图(a), 的增量网络为W(f 1),W(f 2),W(f 3),W( f 4), 如图 , , , 的增量网络为 (e), (g), (i)所示。 所示。 所示
b( f ) =
取最小值。 取最小值。 一、求解原理 调整f, 设对可行流 f 存在增广链 µ,当沿 µ 以θ=1调整 , , 调整 得新的可行流 f ' 时,(显然 V(f ')=V(f )+1),两流的费 显然 , b( f′) -b( f ) 用之差 1
( v i , v j )∈ A
∑
b ij f ij
−bij w ji = +∞ 若 fij > 0 fij = 0
4
第三步:在增广链 上对 按下式进行调整,调整量θ 上对f 第三步:在增广链µ上对 k 按下式进行调整,调整量θ 为 k k θk = min min ( c ij - f ij ) , min f ij u u+ 令 f
-1 1
1 -1
6 -2
vt
2
vs
(8,5) ,
(5,5) , )
v2
(10,0)
v3 v1
(7,7)
(2,0) (5,5) , )
v2 vt
(4,0) ,
3
v3
(b) f
1
) (c) W(f (1))
(10,2) , )
vs
(8,5) ,
v2
(10,0)
v3
10
(d) f 2 V( f 2)=7
v1
20, 0
V2 14,0 -3
V1
5 -4
V2 5
vs
15,15
12,0
17,15 V3
vt
vs 8
3
8
3 -3
vt
20,0 (b) f(1)
V3
(c) W(f(1))
第二轮,k= 1 作图W(f(1))如图(c)所示,最短路为(vs,v3, vt), 在G内相应的增广链上进行调整,调整量为2,得流f (2)如图(d)所示。
2
二、最小费用最大流算法 算法步骤: 算法步骤: 第一步:确定初始可行流 第一步:确定初始可行流f 0 =0,令k=0; , ; 第二步: 次调整得到的最小费用流为f 第二步:记经 k 次调整得到的最小费用流为 k,构造 增量网络W( 增量网络 (f k); 寻找v 的最短路。 在W(f k)中,寻找 s到vt的最短路。若不存 ( 在最短路(即最短路路长是 ), ),则 在最短路(即最短路路长是∞),则f k 就是 最小费用最大流,若存在最短路, 最小费用最大流,若存在最短路,则此最短 路即为原网络D中相应的可增广链 , 路即为原网络 中相应的可增广链µ,转入第 中相应的可增广链 3步。 步
13
例2 下图所示的网络G中,求从vs到vt的目标流值为 25的最小费用流,弧上括号内的数字第一个为弧 上单位流的费用,第二个为弧上的容量。
V1 (3,18) (5,20) V2 (5,14) (4,15)
vs
(8,12)
(3,17) V3
vt
(8,20)
14
解 :算法过程 第一轮,k= 0 f(0) 取 ={0}开始,用DijksTra算法求的中vs到vt的最 短路(vs,v1,v3,vt),在网络G中相应的增广链 µ0=( vs,v1,v3, vt )上用最大流算法进行流的调整。 µ0+ = {(vs,v1)、(v1,v3),(v3, vt)} µ0- =φ
v1
4
1
6 2
vt
2
vs
1
v1
(10,0) , )
(7,5)
(2,0) , )
vt
(4,0) ,
v2
V(f
1)
(a) = 5
3
v3 vs
(8,5) ,
w(f0)
(5,5) , )
v2
(10,0)
v3
8
(b) f 1
v1
(10,0) , )
(7,5)
(2,0) , )
vt
(4,0) , 4
v1 vs
(10,2) , )
(7,7)
(2,0)
vt
(4,0) ,
v1
4 -4 -1 1 -2
-1
6
vt 2
vs
(8,5) ,
(5,5) , )
vs
v2
(10,0)
v3 v1
(7,7)
(2,0) (5,5) , )
v2 vt
3
v3
(d) f 2 V( f 2)=7
(e) w(f 2 )
(10,2) , )
vs
V1 18,18
20,8
V2 14,8
vs 20,7
15,10
12,0
17,17 V3
vt
(h) f(4)
19
3
• W(f)的构造方法如下:W(f)中的顶点是 原网络中的点,而把G中的每一条弧(vi,vj) 变成两个方向相反的弧(vi,vj)和(vj,vi)。 定义 • W(f)中弧(vi,vj)和(vj,vi)的权wij和wji 为:
bij 若 fij <cij wij = fij =cij +∞
5
例1
求下图所示网络的最小费用最大流。 求下图所示网络的最小费用最大流。弧旁数字为 v1 (1,7) (bij,cij)。 vt
(4,10) (6,2) , ) (2,5) , ) (2,4) ,
0
解:(1)取初始 :( ) 可行流f 可行流 = 0; ;
vs
, (2)按算法要求构造 (1,8) )
θ0 = m i {18,15,17} = 15, θ0 < 25 n f ij(0) + 15 (vi,v j) ∈ µ + f(1) = (0) 其它 f ij
vs
V1 3 4 5 V2 5
8
3 V3
15
vt
得到f (1)的如图(b)所示。
8 (a) L(f(0))
V1 18,15
b( f ′) -b( f )
= ∑ bij ( f ij' − f ij ) + ∑ bij ( f ij' − f ij )
µ+ µ−
= ∑ bij − ∑ bij
µ+ µ−
+1
-1
的费用。 称为增广链 µ 的费用。 最小费用最大流的原理的主要依据: 最小费用最大流的原理的主要依据: 是流值为V( 的所有可行流中费用最小者, 若f 是流值为 (f )的所有可行流中费用最小者 是关于f 的所有增广链中费用最小的增广链,则沿 而µ 是关于 的所有增广链中费用最小的增广链 则沿 µ 以θ去调整 f ,得可行流 f ′ ,f ′就是流量为 就是流量为V(f )+ θ 得可行流 的所有可行流中费用最小的可行流。这样, 的所有可行流中费用最小的可行流。这样,当 f ′是 最大流时, 就是所求的最小费用最大流。 最大流时, f ′就是所求的最小费用最大流。
16
V1 18,15
20,0
V2 14,0 -3
V1
5 -4
V2 5
vs
15,15
12,0
17,17 V3
vt
vs -8
3 8
8 -3
V3
vt
20,2 (d) f(2)
(e) W(f(2))
第三轮,k= 2 作图w(f(2))如图(e)所示,W(f(2))中vs到vt的 最短路(vs,v1,v2, vt),在G中找到相应的增广链 进行调整,调整量为3,得流f (3)如图(f)所示。
v3
-3
(f) f 3 V( f 3)=10
(10,3) , )
(g) W( f 3)
vt
(4,4) ,
vs
(8,8) ,
v2
(10,4)
4
v3
4)=11
12
(h) f
V( f
v1
(10,3) , )
(7,7)
(2,0)
vt
(4,4) ,
v1
4 -4 -1 -2 2
-1
6 3
vt
-2
vs
(8,8) ,