5-5 最小费用最大流问题-xfj

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

v2
v3
即是f 的最小费用增广链。 即是f(1)的最小费用增广链
第3次迭代
-4 4
v1
-2 6
-1
(10, 2)
v1
(7, 7) (2, 0)
vs
-1
1
vt
2 (8, 8)
vs
(5, 5)
vt
(4, 3)
v2
3
v3
①零流弧保持原边,非饱和非 零流弧保持原边, 零流弧增添后向弧, 零流弧增添后向弧,饱和弧去 掉原边增添后向弧 ②用列表法求得最短路
v2
v3
(10, 0) ①流量调整量 总流量v(f 总流量v(f(1))=5
v2
v3
=min{8-0,5-0,7ε1=min{8-0,5-0,7-0}=5 ②最小费用增广链的费用 ∑bij=1+2+1=4 ③新的可行流为f(1),总费 新的可行流为f =4× 用b1=4×5=20
vs →v2 →v1 →vt
应该如何实现“ 应该如何实现“始终保持网络中的可 行流是最小费用流” 行流是最小费用流” 呢?
2、算法原理 (1)定理 若f 是流量为v(f)的最 是流量为v f 的最 小费用流,µ是关于 f 的所有增广 小费用流, 是关于 链中费用最小的增广链, 链中费用最小的增广链,那么沿着 费用最小的增广链 µ去调整 f 得到的新的可行流 f 去 就是流量为 最小费用流。 就是流量为 v( f ) 的最小费用流。
流量=0的最小费用流 流量=0的最小费用流。 的最小费用流。
第二步 --- 对该可行流f(0)构造增广费用 对该可行流f
网络图W(f 网络图W(f(0)),用最短路算法求出从发点到 最短路算法求出从发点到 收点的最短路。 寻找f 的最小费用增广链) 收点的最短路。(寻找f(0)的最小费用增广链) 若不存在最短路,则该可行流即为最小费 若不存在最短路, 用最大流,停止迭代;否则,转下一步。 用最大流,停止迭代;否则,转下一步。
-4
v1
6 2 3 -3
-1
vs
-1
4 -2
vt v3
-2
v2
vs v1 v2 v3 vs v1 v2 v3 vt 0 -4 -1 -3 -1 4 0 2 -2 0 6 3 0 -2
vt d(1) d(2) d(3) d(4) 0 4 0 4 2 10 0 0 4 2 5 0 4 2 5
2、最小费用流 对于一个费用容量网络,具有相同 对于一个费用容量网络, 流量 v(f) 的可行流中,总费用b(f)最小的 的可行流中,总费用b(f)最小的 可行流称为该费用容量网络关于流量 v(f) 的最小费用流,简称流量为 v(f) 的最小 的最小费用流,简称流量为 费用流。 费用流。
3、增广链的费用 当沿着一条关于可行流 f 进行调整,得到新的可行流 f 进行调整, 称 b( f ) − b( f ) 的增广 ,则 链(流量修正路线)µ,以修正量 流量修正路线) ,以修正量ε=1 增广链µ的费用。 为增广链µ的费用。
-bij Vi Vj
非饱和且非零流弧上( 非饱和且非零流弧上( cij>fij>0) ,原有 弧以单位费用作权数, 弧以单位费用作权数,并添加以单位费 用的负数作为权数后向弧 虚线弧): 负数作为权数后向弧( 用的负数作为权数后向弧(虚线弧):
3、整个过程的求解步骤: 整个过程的求解步骤: 第一步--第一步 取初始可行流为零流 ,它必为
二、求解最小费用最大流问题的对偶法 1、求解途径: 求解途径:
(1)始终保持网络中的可行流是最小费用 始终保持网络中的可行流是 网络中的可行流是最小费用 流,然后不断调整,使流量逐步增大, 然后不断调整, 流量逐步增大, 最终成为最小费用的最大流; 最终成为最小费用的最大流; (2)始终保持可行流是最大流,通过不断 始终保持可行流是最大流, 可行流是最大流 调整使费用逐步减小 调整使费用逐步减小,最终成为最大流 费用逐步减小, 量的最小费用流。 量的最小费用流。
4、举例:以下图为例,求最小费用最大 举例:以下图为例, 弧旁的数字为(c 流,弧旁的数字为(cij,bij)。
(10,4)
v1
(7,1) (2,6)
vs (5,2)
(8,1)
vt
(4,2)
v2
(10,3)
v3
解:(1)以零流弧为初始可行流 (0),则初始可行 :( )以零流弧为初始可行流f 流的流量v(f 流的流量 (0))=0。 。
即是f(0)的最小费用增广链。 即是f 最小费用增广链。
第2次迭代
4
v1
-2 1 6
-1
(10, 2)
v1
(7, 7) (2, 0)
vs
1 -1
vt
2
vs (5, 5)
(8, 5)
vt
(4, 0)
3 零流弧保持原边, ①零流弧保持原边,非饱和非 零流弧(v 零流弧(vs,v2)和(v1,vt)增添 后向弧,饱和弧(v 后向弧,饱和弧(v2,v1)去掉原 弧增添后向弧; 弧增添后向弧; ②用列表法求出最短路: 用列表法求出最短路:
b(f)
(2)
(1)
v(f)
主要学习按思路(1)的求解方法 主要学习按思路(1)的求解方法 (1)
始终保持网络中的可行流是最小费用流, 始终保持网络中的可行流是最小费用流,然后 网络中的可行流是最小费用流 不断调整, 流量逐步增大, 不断调整,使流量逐步增大,最终成为最小费 用的最大流。 用的最大流。
零流弧上(f =0) 保持原弧不变, 零流弧上(fij=0) ,保持原弧不变,将 单位费用作为权数, 单位费用作为权数,即wij= bij:
Vi bij Vj
饱和弧上(f 饱和弧上(fij=cij):去掉原有弧,添加 去掉原有弧, 负数作为权数 以单位费用的负数作为权数后向弧 以单位费用的负数作为权数后向弧 (虚线弧): 虚线弧):
v2
v3
③对应最小费用增广链
vs →v1 →v2 →v3 →vt
+ − + +
第 5次 迭 代 次
-4
v1
6 2 3 -3
-1
vs
-1
4 -2
vt v3
-2
v2
①添加弧; 添加弧; 用列表法计算发现Vs ②用列表法计算发现Vs Vt之间不存在一条最 和Vt之间不存在一条最 短路,计算结束。 短路,计算结束。当前 的可行流f 的可行流f(4)即为所求的 最小费用最大流。 最小费用最大流。
wji =
wij =
bij 若fij< cij +∞ 若fij=cij
wji =
-bij 若fij>0 +∞ 若fij=0
对于零流弧(f =0),在其对应位置构造 对于零流弧(fij=0),在其对应位置构造 与其方向相同且权数为b 的弧; 与其方向相同且权数为bij的弧; 对于饱和弧(f 对于饱和弧(fij=cij),在其对应位置构造与其方 向相反且权数为- 的弧; 向相反且权数为-bij的弧; 对于非饱和且非零流弧( 对于非饱和且非零流弧( cij>fij>0),在其对应位 >0), 置构造与其方向相同且边权为b 的弧, 置构造与其方向相同且边权为bij的弧,以及与 其方向相反且边权为- 的弧。 其方向相反且边权为-bij的弧。 处理完所有的弧,即形成增广费用网络图。 处理完所有的弧,即形成增广费用网络图。
10-5 最小费用最大流问题 10-
一、基本概念
1、什么是最小费用最大流问题? 什么是最小费用最大流问题? 对每一条弧都给出单位流量费用 单位流量费用的 对每一条弧都给出单位流量费用的容量网络 D=(V, A, C) (称为费用容量网络 中,求取最 称为费用容量网络)中 求取最 称为费用容量网络 大流f,使输送流量的总费用 大流f,使输送流量的总费用 b(f) =∑bijfij 为最 的一类优化问题。 小的一类优化问题。 (cij,bij,fij) c vi vj 其中, 表示弧(v 上的容量, 其中,cij表示弧 vi, vj)上的容量,bij表示 上的容量 上通过单位流量所花费的费用, 弧(vi, vj)上通过单位流量所花费的费用,fij表 v 上通过单位流量所花费的费用 上的流量。 示弧(v 上的流量 示弧 vi, vj)上的流量。
v2
v3
vs →v2 →v3 →vt
即是f(2)的最小费用增广链。 即是 的最小费用增广链。
-4
第4次迭代 v1
4 6 -2 3 -3 2 -1 (10, 3)
v1
(7, 7) (2, 0)
vs
-1
vt
vs
(8, 8) (5, 4)
vt
(4, 4)
v2
v3
-2
①添加弧; 添加弧; ②用列表法求得最短路
第1次迭代
4
v1
2 6
1
(10,0)
v1
(7, 5) (2, 0)
vs
1
vt
2
vs
(8, 5)
(5, 5)
vt
(4, 0)
3 中全部是零流弧, ① f(0)中全部是零流弧,则保 持原边不变,单位费用为权; 持原边不变,单位费用为权; ②所有的权均大于零,可用D 所有的权均大于零,可用D 氏标号法求出最短路: 氏标号法求出最短路:
增广费用网络图的 增广费用网络图的构造方法 将流量网络中的每一条弧( 将流量网络中的每一条弧(vi,vj)都看 作一对方向相反的弧,并定义弧的权数如 作一对方向相反的弧, 下: vi (cij,fij) c vj
-bij 若fij>0 +∞ 若fij=0
wij =
bij 若fij< cij +∞ 若fij=cij
此时, 此时, 的流量v ① f 的流量v( f ) = v(f)+1; f ; 的费用定义为: ②增广链µ的费用定义为:以单位调整量 增广链 的费用定义为 调整可行流时所付出的费用; 调整可行流时所付出的费用; ③当修正量ε=1时, 当修正量 时
b( f ) − b( f ) = ∑bij ( f ij − fij ) + ∑bij ( f ij − fij ) = ∑bij − ∑bij µ+ µ+ µ− µ−
(10, 3) 流量调整量ε =min{8①流量调整量ε3=min{85,10-0,4-0}=3, 5,10-0,4-0}=3, 总流量v(f 原流量+ 总流量v(f(3)) =原流量+新 增流量=7+3=10 =7+3=10; 增流量=7+3=10; ②最小费用增广链的费用 ∑bij=1+3+2=6 ③新的可行流为f(3),总费用 新的可行流为f 原费用+ b3=原费用+新增费用 =30+6× =30+6×3=48
第三步--第三步--- 将最短路还原成流量网 络图(cij,fij)中的最小费用增广链µ, 中的最小费用增广链µ 络图( 在µ上对可行流f(0)进行调整(采用最 上对可行流f 进行调整( 大流问题中的增广链流量调整方法) 大流问题中的增广链流量调整方法), 得到新的可行流图。返回第二步, 得到新的可行流图。返回第二步, 将f(0)替换为新的可行流即可。 替换为新的可行流即可。
(2)实现思路
基于第一种求解途径,根据上述定理, 基于第一种求解途径,根据上述定理, 从流量为v(f) 的最小费用流 开始,只要找 的最小费用流f 开始, 从流量为 到其上的最小费用增广链, 到其上的最小费用增广链,在该链上调整流 最小费用增广链 量,就得到增加流量后的最小费用流。循环 就得到增加流量后的最小费用流。 增加流量后的最小费用流 往复就可以求出最小费用最大流。 往复就可以求出最小费用最大流。 实施中的关键——寻找最小费用增广链 实施中的关键——寻找最小费用增广链 具体方法:构造增广费用网络图, 具体方法:构造增广费用网络图,借助最短路 算法寻找最小费用增广链。 算法寻找最小费用增广链。
v s → v1 → v 2 → v3 → vt
(10, 4) ①调整流量 =min{10-2,5,10-3,4-3}=1, ε4=min{10-2,5,10-3,4-3}=1, 总流量v(f =10+1=11; 总流量v(f(4)) =10+1=11; ②最小费用增广链的费用 =4∑bij=4-2+3+2=7 ③新的可行流为f(4),总费用 新的可行流为f 原费用+ b4=原费用+新增费用 =48+7×1=55。 =48+7×1=55。
v2
v3
v s → v1 → v t
Байду номын сангаас
(10, 0) ①流量调整量 ε2=min{10-0,7-5}=2, =min{10-0,7-5}=2, 总流量v(f )=原流量 原流量+ 总流量v(f(2))=原流量+新增 流量=5+2=7 =5+2=7; 流量=5+2=7; ②最小费用增广链的费用 ∑bij=4+1=5 ③新的可行流为f(2),总费用 新的可行流为f 原费用+ b2=原费用+新增费用 =20+5×2=30
相关文档
最新文档