运筹学课件 第五节 最小费用最大流流问题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4 0 0 (2) D 1 1 4 1 0 3 0 2 1 3 0 1 0 1 3
4 5 1 1 0 5 0 2 5 0
D(3) D ( 2) D (1)
4 1 0 3 0 2 1 3 0 0 1 1 3 5 1 2 2 0
定义25:网络G=(V,E,C,d),f是G上的一个
可行流,保持原网络各点,每一条边 ( vi , vj )用两
条方向相反的边(vi , vj)和(vj , vi)代替,各边的权
Lij为:
1、边(vi , vj) ∈E
d , 当 fi j c ij ij li j , 当 fi j c ij
vs
(8, 1)
(5, 2)
v2 (10, 3)
v3
(cij, dij) (10, 4) (0)={0},构造赋权 解:(1)取初始可行流为零流 f vt (2, 6) (0)), 用 Dijkstra 求 出 从 v 到 v 的 最 短 路 有向 图 L(f s t vs (5, 2) (4, 2) (vs ,v2 ,v1(8, ,vt)1) ,如图 b 中虚线所示。 v1 v2 (10, 3) v3 v1 (1) vt (4) vt (6)
得到一个新的可行流f(k),其流量为w(f(k-1))+θ;
如果w(f(k-1))+θ=v,则停止;否则令f(k)代替f(k-1)返回2 。
例 求图所示网络中的流量为 10的最小费用流,
弧旁的权是( cij , dij ).
v1
(10, 4)
(7, 1)
(cij, dij) vt
(4, 2)
(2, 6)
4 1 0 3 0 2 ( 5) ( 4) (1) D D D 1 3 0 2 1 1 4 1 3 4 1 4 5 0 3 0 2 1 1 1 3 0 0 2 D( 4) 2 1 1 0 2 4 1 3 0 0
4 5 0 4 1 0 2 6 1 1 1 0 2 1 0 3 0 2 0 2 0 0 1 0
v1
(10,2)
(7,7) (2,0)
vt
(4,0)
vs
(8,5)
(5,5) (10,0)
(3)
v3 L( f
(2)
图 f
)
v1
(10,2) (7,7)
(2,0)
vt
(4,3)
vs
(8,8)
(5,5)
v2
(10,3)
v3
( k 1 ) ( k 1 ) min min ( c f ) , min ( f ) i j i j i j
图 g
(3)
(5,4)
v2
图 i f
(4)
(10,4)
v3
,w ( f ) =11
(4)
v1
(4) (-1)
(-4)
(-2) (2)
(6)
vt
(-2)
vs
(-1)
(-3)
v2
(3)
v3
(4)
图 j
L( f
)
• 小结: • 1、理解最小费用流问题的概念。 • 2、掌握求最小费用流问题的算法。
第五节
最小费用最大流流问题
在实际的网络系统中,当涉及到有关流的问 题的时候,我们往往不仅仅考虑的是流量,还经 常要考虑费用的问题。比如一个铁路系统的运输 网络流,即要考虑网络流的货运量最大,又要考
虑总费用最小。最小费用最大流问题就是要解决
这一类问题。
最小费用最大流问题提法:
设一个网络G=(V,E,C),对于每一个弧(vi ,vj )∈E ,给
定义24:已知网络G=(V,E,C,d),f是G上的一 个可行流,u为从vs 到vt的可增广链,d(u)为链u的费 用。
d ( u ) d d ij ij
( u ) ( u )
v1 3 vs 5 1
v2 4 vt d(u)=(3+1+4)-(5)=3
实际上在一个网络G中,当沿可行流 f 的一条 增广链μ,以调整量θ=1改进f ,得到的新可行流 f ’ 的流量,有 w(f ’ )=w(f )+1,而此时总费用b(f ’ ) 比b(f)增加了
费用流,总可以从零流f ={0}开始。下面的问题是:如果
已知f 是流量为w(f)的最小费用流,那么就要去寻找关于
f 的最小费用增广链,用最大流的方法将f(0)调整到f(1), 使f(1)流量为w(f(0))+θ,且保证f(1)在w(f(0))+θ流量下的
最小费用流,不断进行到w(f(k))=v为止。 定理12:如果f是流量为w(f)的最小费用流,u是关于f的从 vs到vt的一条最小费用可增广链,则f经过u调整流量θ得 到新可行流f’(f’=fuθ),一定是流量为w(f)+θ可行流中 的最小费用流。
4 5 0 4 1 0 2 6 1 1 1 0 5 1 0 3 0 2 0 2 5 0 1 0
4 1 4 0 3 0 2 1 1 3 0 0 1 1 1 0 4 1 3 0
θ=min{8,5,7}=5,得到新可行流f (1),如图b所示。
fi(jk1) ,在 上 (k1) (k) fi j fi j ,在 上 其它不变
按照以上的算法,依次类推,可以得到f (1), f (2),f( 3),f (4),流量分别为5,7,10,11, 并且分别构造相对应的赋权有向图L( f(1 )) , L(f (2) ) , L(f(3)),L(f(4))。 由于在L(f(4))中已经不存在从vs到vt的最短路, 因此,可行流f (4),v(f(1))=11是最小费用最大 流。
vs
(1)
v1
(7, 1)
(2)
vs
(2)
v2 (3) 图 b
v3
L(f )
(0)
v2 f (0) =0
v3
( 2 )在原网络 G 中,与这条最短路相对应的增广链为 μ=
(vs ,v2 ,v1 ,vt )。
(3)在μ 上对f (0)={0}进行调整,
( k 1 ) ( k 1 ) min min ( c f ) , min ( f ) i j i j i j
f ,w( f )=10 (3) d( f )=2*4+8*1+5*2+ 3*3+ 3*2+ 7*1=48
(3)
v1
(4)
(-1)
vs
(-4)
(6)
(-2) (-3) (-2)
vt
(2)
(-1)
v2
(3)
v3
图 h
L( f
(3)
)
v1
(10,3)
(7,7) (2,0)
vt
(4,4)
vs
(8,8)
D( 4) D(3) D(1)
4 1 0 3 0 2 1 3 0 2 1 1 4 1 3
0 3 1 1 4 4 5 1 1 0 2 0 2 0 0
4 5 0 4 1 0 2 6 1 0 2 1 1 3 0 0 2 1 0 3 1 1 0 2 0 2 1 3 0 0 1 0 4 1
fi j 0 di j , 当 l ji , 当 f 0 i j
2、边( vj , vi )为原图
G中(vi,vj)的反向边
并且将权为+∞的边去掉。
这样,在网络G中寻找关于f 的最小费用增广链就等于 价于在长度网络L(f )中寻求从vs 到vt 的最短路。
对偶算法基本步骤:
v1
(0)
(5)
(0)
vt
(0)
vs
(5)
vt
(5)
v2
(0)Βιβλιοθήκη Baidu
(1)
v2
(1)
s
f ,w( f
v2 f (1) =5 v3
)=5
图 c d( f
(1)
)=5*1+5*2+5*3
v1
(4)
(1)
( -1)
(-1)
vs
(1)
(6)
(-2)
vt
(2)
v2 图 d
(3)
v3
L(f
(1)
)
最短路:vs-v1-vt
( k 1 ) ( k 1 ) min min ( c f ) , min ( f ) i j i j i j
v2
v3 f
(2)
图e
,w( f
(2)
)=7
v1
(4)
(-1)
(-4)
(6)
(-2)
vt
(2)
vs
(1)
(-1)
v2
最短路:vs-v2-v3-vt
D (1)
1 0 4 0 2 6 1 1 0 3 0 2 1 0
1 2 6 0 3 0 0 4 1 0 2 6 1 1 0 3 2 0 0 1 1 2 0
f b (f ) b (f) b b f ij(f ij ij) ij(f ij ij)
b b ij ij
b 我们将
ij
b ij
叫做这条增广链的费用。
结论:如果可行流 f 在流量为w(f )的所有可行流中
的费用最小,并且 是关于f 的所有增广链中的费
用最小的增广链,那么沿增广链μ 调整可行流f,得
到的新可行流f ’ ,也是流量为w(f ’)的所有可行流中
的最小费用流。依次类推,当 f ’ 是最大流时,就是 所要求的最小费用最大流。
对偶算法基本思路: 零流f ={0}是流量为0的最小费用流。一般地,寻求最小
定容量 cij 外,还给出单位流量的费用 dij 0 ,网络记为
G=( V, E , C, d)。网络系统的最小费用最大流问题, 是指要寻求一个最大流 f ,使流量w(f)=v,且流的总费用
达到最小。
d (f)
( v v E i, j)
df
ij ij
如果要求f为最大流,问题转化为最小费用最大流。 其算法有:原始算法和对偶算法。
(1)、取零流f (0) ={0}. (2)、如果在第K-1步得到最小费用流f w(f(k))<v,则构造长度网络L(f (k-1))。 (3)、 在长度网络L(f (k-1))中,寻求从vs到vt的最短路。如
(K-1),流量
果不存在最短路,则f (k-1)就是最小费用最大流。如果存在
最短路,则在原网络G中得到相对应的增广链μ。
(4)、在G中与这条最短路相应的可增广链μ上,对f (k–1)进行 调整, f(k) = f(k)uθ,取调整量
( k 1 ) ( k 1 ) min min ( c f ) , min ( f ) i j i j i j
(k 1) f ,在 上 令: ij (k1) (k) fi j fi j ,在 上 其它不变