运筹学第7章 最大流问题(精简)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最大流问题
基本概念
v2 3
4
v4
5
vs
1
1
3
vt
5
2
v1
2
v3
给定一个有向图G=(V,E),其中仅有一个点的入次为零称为发点(源),记为vs, 仅有一个点的出次为零称为收点(汇),记为vt,其余点称为中间点。
对于G中的每一条边(vi,vj),相应地给一个数cij(cij≥0),称为边(vi,vj)的容量。 我们把这样的网络 G称为容量网络 ,记为G=(V,E,C)。
v1
v2
vs
v3
vt
v4
边集(vs,v1),(v1,v3),(v2,v3),(v3,vt),(v4,vt)是G的割集。其顶点分 别属于两个互补不相交的点集。去掉这五条边,则图不连通,去掉这五条边中的任意14条,图仍然连通。
割集的容量(简称割量) 最小割集
割集(V1, V2)中所有起点在V1,终点在V2的边的容量的和称为割集容量。例如下图 中所示割集的容量为5
标号过程: (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)。
vs
1,0
5,2
4,1 1,0
v4 5,2
3,1 2,1 vt
vs和收点vt的一条链,
我们规定链的方向是
从vs到vt,则链上的
v1
2,2 v3
边被分成两类:前向
边、后向边。
设f是一个可行流,μ是从vs到vt的一条链,若μ 满足前向边都是非饱和边,后向边都是都是非零 流边,则称μ是(可行流f的)一条可增广链。
下面用实例说明具体的操作方法:例
v2 (4,3) (3,3)
vs (5,1)
(1,1) (1,1)
v1 (2,2)
v4 (5,3)
(3,0) vt (2,1)
v3
在图中给出的可行 流的基础上,求vs 到vt的最大流。
(-vv21,1)(4,3)
(3,3)
(v2,1)
v4 (5,3)
(,+∞)
vs
(5,1)
可行流是指满足如下条件的流:
(1)容量限制条件:对G中每条边(vi,vj), 有
(2)平衡条件:
0 fij cij
对中间点,有:
fij fki
j
k
(即中间点vi的物资输入量等于输出量)
对收点vt与发点vs,有:
fsi f jt W
i
j
(即vs发出的物资总量等于vt接收的物资总量),W是网络的总流量。
对最大流问题有下列定理:
定理1 容量网络中任一可行流的流量 不超过其任一割集的容量。
定理2(最大流-最小割定理)任一容 量网络中,最大流的流量等于最小割集 的割量。
推论1 可行流f*={fij*}是最大流,当且 仅当G中不存在关于f*的增广链。
求最大流的标号法
标号法思想是:先找一个可行流。 对于一个可行流,经过标号过程得到 从发点vs到收点vt的增广链;经过调整 过程沿增广链增加可行流的流量,得 新的可行流。重复这一过程,直到可 行流无增广链,得到最大流。
网络上的流,是指定义在边集E上的 函数f={f(vi,vj)},并称f(vi,vj)为边 (vi,vj)上的流量,简记为fij。
v2 3,1
vs
1,0
5,2 v1
4,1 v4
5,2
1,0 3,1
vt
2,1
2,2 v3
标示方式:每条边上标示两个数字,第一个是容量,第二 是流量
可行流、可行流的流量、最大流。
(1,1) (1,1)
(v3,1)
(3,0) vt (2,1)
v1 (2,2)
v3
(vs,4)
(-v2,1)
(3,3) v2 (4,3)
(,+∞)
vs
(1,0) (1,0)
(5,2)
v1 (2,2)
(vs,3)
v4(5,3)
(3,0) vt (2,2)
v3
得增广链,标号结束, 进入调整过程
无增广链,标号结束,得 最大流。同时得最小割。
给定容量网络G=(V,E,C),若点集V被剖分
为两个非空集合V1和V2,使 vs∈V1 ,vt∈V2,则 把边集(V1,V2)称为(分离vs和vt的)割集。
v2 3
4
v4
5
vs
1
1
3
vt
5
2
v1
2
v3
显然,若把某一割集的边从网络中去掉,
则从vs到vt便不存在路。所以,直观上说,割集 是从vs到vt的必经之路。
可行流总是存在的,例如f={0}就是一个流量为0的可行流。 所谓最大流问题就是在容量网络中寻找流量最大的可行流。 一个流f={fij},当fij=cij,则称f对边(vi, vj)是饱和的,否则称f对边(vi, vj)不饱和。对于 不饱和的,其间隙为δij=cij-fij 最大流问题实际上是一个线性规划问题。 但利用它与图的密切关系,可以利用图直观简便地求解。
调整后的可行流如下图:
[vv2 s, 1] (4, 3)
(4, 3) [, ∞] vs
(1, 0) (1, 0)
(5, 2)
v1
[vs, 3]
(2, 2)
如图已经得到增广链,然后进行调整。
[v2v,4 1]
(5, 5)
Biblioteka Baidu
v2 3
vs
1
5 v1
4
v4
5
1
3
vt
2
2
v3
在容量网络的所有割集中,割集容量最小的割集称为最小割集(最小割)。
对于可行流f={fij},我们把网络中使fij=cij的
边称为饱和边,使fij<cij的边称为非饱和边;把
使fij=0的边称为零流边,使fij>0的边称为非零
流边。
若μ是联结发点
v2 3,1
下图中已经标示出了一个可行流,求最大流
v[2vs, 4] (4, 0)
(4, 0) [, ∞] vs
(1, 0) (1, 0)
(5, 2)
v1
[vs, 3]
(2, 2)
如图已经得到增广链,然后进行调整。
[v2,v44] (3, 2)
(5, 2)
vs
[v4, 3]
(2, 0)
v5
(4, 0)
v3
[-v4, 2]
基本概念
v2 3
4
v4
5
vs
1
1
3
vt
5
2
v1
2
v3
给定一个有向图G=(V,E),其中仅有一个点的入次为零称为发点(源),记为vs, 仅有一个点的出次为零称为收点(汇),记为vt,其余点称为中间点。
对于G中的每一条边(vi,vj),相应地给一个数cij(cij≥0),称为边(vi,vj)的容量。 我们把这样的网络 G称为容量网络 ,记为G=(V,E,C)。
v1
v2
vs
v3
vt
v4
边集(vs,v1),(v1,v3),(v2,v3),(v3,vt),(v4,vt)是G的割集。其顶点分 别属于两个互补不相交的点集。去掉这五条边,则图不连通,去掉这五条边中的任意14条,图仍然连通。
割集的容量(简称割量) 最小割集
割集(V1, V2)中所有起点在V1,终点在V2的边的容量的和称为割集容量。例如下图 中所示割集的容量为5
标号过程: (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)。
vs
1,0
5,2
4,1 1,0
v4 5,2
3,1 2,1 vt
vs和收点vt的一条链,
我们规定链的方向是
从vs到vt,则链上的
v1
2,2 v3
边被分成两类:前向
边、后向边。
设f是一个可行流,μ是从vs到vt的一条链,若μ 满足前向边都是非饱和边,后向边都是都是非零 流边,则称μ是(可行流f的)一条可增广链。
下面用实例说明具体的操作方法:例
v2 (4,3) (3,3)
vs (5,1)
(1,1) (1,1)
v1 (2,2)
v4 (5,3)
(3,0) vt (2,1)
v3
在图中给出的可行 流的基础上,求vs 到vt的最大流。
(-vv21,1)(4,3)
(3,3)
(v2,1)
v4 (5,3)
(,+∞)
vs
(5,1)
可行流是指满足如下条件的流:
(1)容量限制条件:对G中每条边(vi,vj), 有
(2)平衡条件:
0 fij cij
对中间点,有:
fij fki
j
k
(即中间点vi的物资输入量等于输出量)
对收点vt与发点vs,有:
fsi f jt W
i
j
(即vs发出的物资总量等于vt接收的物资总量),W是网络的总流量。
对最大流问题有下列定理:
定理1 容量网络中任一可行流的流量 不超过其任一割集的容量。
定理2(最大流-最小割定理)任一容 量网络中,最大流的流量等于最小割集 的割量。
推论1 可行流f*={fij*}是最大流,当且 仅当G中不存在关于f*的增广链。
求最大流的标号法
标号法思想是:先找一个可行流。 对于一个可行流,经过标号过程得到 从发点vs到收点vt的增广链;经过调整 过程沿增广链增加可行流的流量,得 新的可行流。重复这一过程,直到可 行流无增广链,得到最大流。
网络上的流,是指定义在边集E上的 函数f={f(vi,vj)},并称f(vi,vj)为边 (vi,vj)上的流量,简记为fij。
v2 3,1
vs
1,0
5,2 v1
4,1 v4
5,2
1,0 3,1
vt
2,1
2,2 v3
标示方式:每条边上标示两个数字,第一个是容量,第二 是流量
可行流、可行流的流量、最大流。
(1,1) (1,1)
(v3,1)
(3,0) vt (2,1)
v1 (2,2)
v3
(vs,4)
(-v2,1)
(3,3) v2 (4,3)
(,+∞)
vs
(1,0) (1,0)
(5,2)
v1 (2,2)
(vs,3)
v4(5,3)
(3,0) vt (2,2)
v3
得增广链,标号结束, 进入调整过程
无增广链,标号结束,得 最大流。同时得最小割。
给定容量网络G=(V,E,C),若点集V被剖分
为两个非空集合V1和V2,使 vs∈V1 ,vt∈V2,则 把边集(V1,V2)称为(分离vs和vt的)割集。
v2 3
4
v4
5
vs
1
1
3
vt
5
2
v1
2
v3
显然,若把某一割集的边从网络中去掉,
则从vs到vt便不存在路。所以,直观上说,割集 是从vs到vt的必经之路。
可行流总是存在的,例如f={0}就是一个流量为0的可行流。 所谓最大流问题就是在容量网络中寻找流量最大的可行流。 一个流f={fij},当fij=cij,则称f对边(vi, vj)是饱和的,否则称f对边(vi, vj)不饱和。对于 不饱和的,其间隙为δij=cij-fij 最大流问题实际上是一个线性规划问题。 但利用它与图的密切关系,可以利用图直观简便地求解。
调整后的可行流如下图:
[vv2 s, 1] (4, 3)
(4, 3) [, ∞] vs
(1, 0) (1, 0)
(5, 2)
v1
[vs, 3]
(2, 2)
如图已经得到增广链,然后进行调整。
[v2v,4 1]
(5, 5)
Biblioteka Baidu
v2 3
vs
1
5 v1
4
v4
5
1
3
vt
2
2
v3
在容量网络的所有割集中,割集容量最小的割集称为最小割集(最小割)。
对于可行流f={fij},我们把网络中使fij=cij的
边称为饱和边,使fij<cij的边称为非饱和边;把
使fij=0的边称为零流边,使fij>0的边称为非零
流边。
若μ是联结发点
v2 3,1
下图中已经标示出了一个可行流,求最大流
v[2vs, 4] (4, 0)
(4, 0) [, ∞] vs
(1, 0) (1, 0)
(5, 2)
v1
[vs, 3]
(2, 2)
如图已经得到增广链,然后进行调整。
[v2,v44] (3, 2)
(5, 2)
vs
[v4, 3]
(2, 0)
v5
(4, 0)
v3
[-v4, 2]