运筹学第7章 最大流问题(精简)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
求最大流的标号法
标号法思想是:先找一个可行流。 标号法思想是:先找一个可行流。 对于一个可行流,经过标号过程 标号过程得到 对于一个可行流,经过标号过程得到 从发点v 到收点v 的增广链;经过调整 从发点vs到收点vt的增广链;经过调整 过程沿增广链增加可行流的流量,得 过程沿增广链增加可行流的流量, 沿增广链增加可行流的流量 新的可行流。重复这一过程, 新的可行流。重复这一过程,直到可 行流无增广链,得到最大流。 行流无增广链,得到最大流。
武
京 上
10
10 2
广
8
10 6
8
沈
18
发点v 成都 收点v 北京 成都, 北京。 发点 s =成都,收点 t =北京。前面已订购机票情况表中的数字即是 各边上的容量(允许通过的最大旅客量), ),当各边上的实际客流量为 各边上的容量(允许通过的最大旅客量),当各边上的实际客流量为 零时略去不写,以零流作为初始可行流。 零时略去不写,以零流作为初始可行流。
(5, 5)
vs
v5 v1
[vs, 3] (2, 2)
v3
(4, 1)
如图所示最小割集的容量(即当前可行流的流量), 就是最大流的流量。注:用该方法可以同时得到最小 割集,即图中连结已标号的点与未标号的点的边集。
具有实际背景的例子
• 国庆大假期间旅游非常火爆,机票早已订购 国庆大假期间旅游非常火爆, 一空。成都一家旅行社由于信誉好、服务好, 一空。成都一家旅行社由于信誉好、服务好, 所策划的国庆首都游的行情看好, 所策划的国庆首都游的行情看好,要求参加 的游客众多, 的游客众多,游客甚至不惜多花机票钱辗转 取道它地也愿参加此游。 取道它地也愿参加此游。旅行社只好紧急电 传他在全国各地的办事处要求协助解决此问 很快, 题。很快,各办事处将其已订购机票的情况 传到了总社。根据此资料,总社要作出计划, 传到了总社。根据此资料,总社要作出计划, 最多能将多少游客从成都送往北京以及如何 取道转机。 取道转机。下面是各办事处已订购机票的详 细情况表: 细情况表:
下面用实例说明具体的操作方法:例
v2 (3,3) vs (5,1) v1 (2,2) v3 (4,3) (1,1) v4 (5,3) (3,0) (2,1)
(1,1)
vt
在图中给出的可行 流的基础上, 流的基础上,求vs 的最大流。 到vt的最大流。
(3,3) v2 (4,3) (1,0) v4 (5,3) vt
成都 成都 重庆 武汉 上海 西安 郑州 沈阳 昆明 广州
重庆 10
武汉 5 5
上海 15 10
西Leabharlann Baidu 8 6
郑州
沈阳
昆明 12 15
广州 10
北京 30 25
15 8 6
8 14 8 18 10 6 10
8 8 2
用图来描述就是
6
郑
6
重
西
10 8
成
5 12
25 15
昆
8
8 15 10 14
8
30 15 5
最大流问题
基本概念
v2 3 vs 5 v1 2 v3 1 1 3 2 4 v4 5 vt
给定一个有向图G=(V,E),其中仅有一个点的入次 为零称为发点(源),记为vs,仅有一个点的出次为 零称为收点(汇),记为vt,其余点称为中间点。 对于G中的每一条边(vi,vj),相应地给一个数cij (cij≥0),称为边(vi,vj)的容量。我们把这样的网 络 G称为容量网络 ,记为G=(V,E,C)。
vs
(2, 0)
[v4, 3]
v5
[vs, 3]
v1
(2, 2)
v3
(4, 0)
[-v4, 2]
如图已经得到增广链,然后进行调整。
调整后的可行流如下图:
[vs, 1]
v2
(4, 3)
[v2, 1]
v4
(5, 5) (4, 3) (1, 0) [∆, ∞] vs (5, 2) (1, 0) (3, 2)
对最大流问题有下列定理: 定理1 定理1 容量网络中任一可行流的流量 不超过其任一割集的容量。 不超过其任一割集的容量。 定理2 最大流-最小割定理) 定理2(最大流-最小割定理)任一容 割定理 量网络中,最大流的流量等于最小割 量网络中,最大流的流量等于最小割集 的 割 量。 是最大流, 推论1 可行流f 是最大流 推论 可行流 *={fij*}是最大流,当且 仅当G中不存在关于 的增广链。 中不存在关于f 仅当 中不存在关于 *的增广链。
给定容量网络G=(V,E,C),若点集V被剖分 为两个非空集合V1和V2,使 vs∈V1 ,vt∈V2, 则把边集(V1,V2)称为(分离vs和vt的)割集。 割
v2 3 vs 5 v1 2 v3 1 1 3 2 4 v4 5 vt
显然,若把某一割集的边从网络中去掉, 则从vs到vt便不存在路。所以,直观上说,割 集是从vs到vt的必经之路。
可行流总是存在的,例如f={0}就是一个流量为0的可 行流。 所谓最大流问题就是在容量网络中寻找流量最大的可 行流。 一个流f={fij},当fij=cij,则称f对边(vi, vj)是饱和的, 否则称f对边(vi, vj)不饱和。对于不饱和的,其间隙为 δij=cij-fij 最大流问题实际上是一个线性规划问题。 但利用它与图的密切关系,可以利用图直观简便地求 解。
利用标号法(经5次迭代)可以得到从成都发送旅 客到北京的最大流量如图所示
0 重 10 0 6 12 成 5 武 10 12 6 0 广 0 10 0 沈 30 上 8 18 京 0 昆 西 0 2 10 10 10 10 8 6 郑
W ( f* ) =10+6+12+30+12+10+5 = 85
(-v1,1)
v2
(v2,1)
v4 (5,3) (1,1) (3,0) v3
(∆,+∞)
vs
(3,3)
(4,3)
(v3,1) (∆,+∞)
vt vs (5,2)
(1,1) v1
(1,0) v1
(3,0) (2,2) v3
(5,1) (2,2)
(2,1)
(2,2)
(vs,4)
(-v2,1)
(vs,3)
v2 3 vs 5 v1 2 v3 1 1 3 2 4 v4 5 vt
在容量网络的所有割集中,割集容量最小的割集称为 最小割集(最小割)。
对于可行流f={fij},我们把网络中使fij=cij的 边称为饱和边,使fij<cij的边称为非饱和边;把 使fij=0的边称为零流边,使fij>0的边称为非零 流边。 若μ是联结发点 v2 4,1 v4 vs和收点vt的一条链, 3,1 5,2 1,0 我们规定链的方向是 vs 3,1 1,0 vt 从vs到vt,则链上的 2,1 5,2 v1 2,2 v3 边被分成两类:前向 边、后向边。 设f是一个可行流,µ是从vs到vt的一条链,若µ 满足前向边都是非饱和边,后向边都是都是非零 流边,则称µ是(可行流f的)一条可增广链。
得增广链,标号结束, 得增广链,标号结束, 进入调整过程
无增广链,标号结束, 无增广链,标号结束,得 最大流。同时得最小割。 最大流。同时得最小割。
下图中已经标示出了一个可行流,求最大流
[vs, 4] (4, 0) [v2, 4]
v2
(4, 0)
v4
(5, 2) (1, 0) [∆, ∞] vs (5, 2) (1, 0) (3, 2)
标号过程: (1)给vs标号(∆,+∞),vs成为已标号未检查的点,其 余都是未标号点。 (2)取一个已标号未检查的点vi,对一切未标号点vj: 若有非饱和边(vi,vj),则vj标号(vi,l(vj)),其中l(vj)= min[l(vi),cij – fij],vj成为已标号未检查的点;若有非 零边(vj,vi),则vj标号(-vi,l(vj)),其中l(vj)=min[l(vi), fji], vj成为已标号未检查的点。vi成为已标号已检查的点。 (3)重复步骤(2),直到vt成为标号点或所有标号点 都检查过。若vt成为标号点,表明得到一条vs到vt的 增广链,转入调整过程;若所有标号点都检查过, 表明这时的可行流就是最大流,算法结束。 调整过程:在增广链上,前向边流量增加l(vt),后 向边流量减少l(vt)。
v1 vs v3
v2
vt
v4 边集(vs,v1),(v1,v3),(v2,v3),(v3,vt), (v4,vt)是G的割集。其顶点分别属于两个互补不相交 的点集。去掉这五条边,则图不连通,去掉这五条边中 的任意1-4条,图仍然连通。
割集的容量(简称割量) 最小 割集 割集(V1, V2)中所有起点在V1,终点在V2的边的容量 的和称为割集容量。例如下图中所示割集的容量为5
可行流是指满足如下条件的流: (1)容量限制条件:对G中每条边(vi,vj), 有
0 ≤ f ij ≤ cij
(2)平衡条件: 对中间点,有:
∑f
j
ij
= ∑ f ki
k
(即中间点vi的物资输入量等于输出量) 对收点vt与发点vs,有: ∑ f si = ∑ f jt = W
i j
(即vs发出的物资总量等于vt接收的物资总量),W是 网络的总流量。
x1 1
1 1 1 1 1 1
y1 y2 y3 y4 y5 1 1 1 1
vs
1
1
x2 1 x3 x4 x5
vs
最大匹配为(省略了最后一步的标号过程):
x1 x2 x3 x4 x5 y1 y2 y3 y4 y5
vs [v , 1]
5
(2, 0)
v5 v1
[vs, 3] (2, 2)
v3
(4, 0)
[v3, 1]
[-v4, 1]
如图已经得到增广链,然后进行调整。
调整后的可行流如下图: v2
(4, 4) (1, 0) [-, ∞] vs (5, 2) (1, 0) (3, 1) (2, 1)
(4, 4)
v4
网络上的流,是指定义在边集E上的 函数f={f(vi,vj)},并称f(vi,vj)为边 (vi,vj)上的流量,简记为fij。
v2 3,1 vs 5,2 1,0 v1 1,0 3,1 2,1 2,2 v3 4,1 v4 5,2 vt
标示方式:每条边上标示两个数字,第一个是容量,第二 是流量
可行流、可行流的流量、最大流。