最大流问题(数学建模资料).ppt
《最大流问题(数学建模资料).ppt》由会员分享,可在线阅读,更多相关《最大流问题(数学建模资料).ppt(65页珍藏版)》请在三一办公上搜索。
1、1,网 络 优 化,Network Optimizationhttp:/,清华大学数学科学系 谢金星办公室:理科楼1308#(电话:62787812)Email:http:/,清华大学课号:40420213(本),70420133(研),第6章 最大流问题(Maximum Flow Problem)第1讲,2,许多实际问题都可以转化为最大流问题,S,T,最大流问题的例子,公路交通网络:车流流量,3,定义6.1 在有向图G=(V,A)上定义如下的权函数:(1)L:AR为弧上的权函数,弧(i,j)对应的权 L(i,j)记为lij,称为弧(i,j)的容量下界(lower bound);(2)U:A
2、R为弧上的权函数,弧(i,j)对应的权U(i,j)记为uij,称为弧(i,j)的容量上界,或直接称为容量(capacity);(3)D:V R为顶点上的权函数,节点i对应的权D(i)记为di,称为顶点i的供需量(supply/demand);此时网络可称为流网络(Flow Network,一般仍简称为网络),记为 N=(V,A,L,U,D).,6.1.1网络中的流,di 0:供应点(supply node)或源(source)、起始点或发货点 di 0:需求点(demand node)或汇(sink)、终止点或吸收点 di 0:转运点(transshipment node)或平衡点、中间点,4
3、,定义6.2 对于流网络N=(V,A,L,U,D),其上的一个流(flow)x是指从N的弧集A到实数集合R的一个函数x:A R,即对每条弧(i,j)赋予一个实数(称为弧(i,j)上的流).如果流x满足,存在可行流的必要条件,则称x为可行流(feasible flow).至少存在一个可行流的流网络称为可行网络(feasible network).如果流x只满足容量约束(6.2),但不一定满足流量守恒条件(6.1),则称x为伪流(pseudoflow),或容量可行流.,流量守恒/平衡条件,容量约束/可行条件,网络中的流,一般可以把L 0的流网络转化为L=0的流网络进行研究(思考?)除非特别说明,以
4、后我们总是假设L=0,网络简记为N=(V,A,U,D).,5,运输网络的特点是只有源或汇,没有中间转运点.显然,此问题有解的一个必要条件是,网络中的流,例-运输网络和运输计划,有一批货物从货源地运往目的地,假设货源集合为S,目的地集合为T.货源i可提供的货物数量为ai个单位,目的地j对货物的需求量为bj个单位.以(S,T)为节点集作完全二部图,以 ai,-bj 为节点上的供需量。通过每条弧的运输量没有限制(非负即可)。一个运输计划就相当于该网络中的一个流。,6,网络中的流,例6.1 有向网络中,令所有弧上的容量下界为0,容量(上界)为1,并令节点s的供需量为1,节点t的供需量为-1。从s到t的
5、一条有向路正好对应于网络中的一个可行流x(当xij=1时,表示弧(i,j)位于s-t路上,当xij=0时,表示弧(i,j)不在s-t路上).,思考:网络中的任意一个可行流是否一定对应于一条有向路?,7,网络中的流,定义6.3 在流网络N=(V,A,U,D)中,对于流x,如果某条弧(i,j)上的流量等于其容量(),则称该弧为饱和弧(saturated arc);如果某条弧(i,j)上的流量为0(),则称该弧为空弧(void arc).,如果所有弧均为空弧,即则称x为零流,否则为非零流.,8,网络中的流,定义6.4对于给定流网络N=(V,A,U,D)中的流 x:A R,如果N中存在一条有向路P,使
6、得,则称x为路流(Path flow),v称为该路流的流值(流量).v=0时,称该路流为零路流,否则称为非零路流.,如果N中存在一个有向圈W,使得,则称x为圈流(Cycle flow),v 称为该圈流的流值(流量).v=0时,称该圈流为零圈流,否则称为非零圈流.,5,9,定理6.1 在网络N=(V,A,U,D)中,任何一个可行流可以表示为若干个路流和若干个圈流之和,且这些路流和圈流满足下列性质:(1)非零路流对应的有向路从一个源点指向一个汇点;(2)至多有m+n个路流和圈流为非零流,且其中至多有m个圈流为非零流.,流的分解定理(Flow Decomposition Theorem),证明(构造
7、性)记可行流为x,设i0是网络中的一个源点,则存在弧(i0,i1)使得 0.,在一个无源无汇的流网络中,一个可行流称为可行循环流。,推论 一个可行循环流一定可以表示为至多m个非零圈流之和.,如果i1是一个汇点,则找到了从源点指向汇点的一条有向路.否则从i1出发重复上述过程,直到找到一个汇点或再次遇到前面经过的某个顶点时为止,即直到下列两种情况之一出现为止:,10,当找到一个路流时,重新定义使得某个节点的供需量从非零成为零,或者使得某条弧的流量从非零成为零.当找到一个圈流时,重新定义使得某条弧的流量从非零成为零.,对新网络,重复上述过程,直到所有顶点变成为转运点(平衡点).,然后,找到一个至少有
8、一条出弧上的流量为正的顶点,继续重复上述过程,这时只有情形(b)会出现,即一定获得一个非零圈流.重复上述过程,直到重新定义的流x成为零流为止.,(b)找到一个有向圈W.此时,定义,(a)找到一条从一个源点i0指向一个汇点ik的有向路P.定义,上述过程找到路流和圈流的次数之和不会多于m+n次,且其中找到圈流的次数不会多于m次.,11,单源单汇的网络,可行流x的流量(或流值)为v=v(x)=ds=-dt如果我们并不给定ds 和dt,则网络一般记为N=(s,t,V,A,U),容量可行且转运点流量守恒的流称为s-t可行流,有时为了方便也称为可行流.最大流问题(Maximum Flow Problem)
9、就是在N=(s,t,V,A,U)中找到流值最大的s-t可行流(即最大流).,6.1.2 最大流问题的数学描述,定理6.2(整流定理)最大流问题所对应的约束矩阵是全么模矩阵.若所有弧容量均为正整数,则问题存在最优整数解.,12,引理6.1 任意一个s-t可行流流值不超过任意一个s-t割容量.,6.1.3 增广路定理,定义6.5 设S,T是网络N=(s,t,V,A,U)中给定的一个割,且sS,t T,则称割S,T为s-t割.s-t割S,T中的弧(i,j)(iS,jT)称为割的前向弧,弧(i,j)(jS,iT)称为割的反向弧.s-t割S,T的容量定义为前向弧的容量之和,记为一个网络中容量最小的s-t
10、割称为最小割.,13,增广路,引理6.2 如果对于一个可行流存在增广路,则该可行流不是最大流.,定义6.6 设x是流网络N=(s,t,V,A,U)中给定的可行流,P是一条s-t路,则P中满足下列两个条件之一的弧(i,j)称为增广弧(augmenting arc):(1)弧(i,j)是P的前向弧且为不饱和弧;或(2)弧(i,j)是P的反向弧且为非空弧.如果P中的弧都是增广弧,则称P为关于流x的增广路,简称增广路(augmenting path).,这一过程称为x 关于P的增广(augmentation),14,证明 必要性可以由前面的引理直接得到.下面证明充分性.,定理6.3(增广路定理)一个可
11、行流为最大流的充要条件是不存在增广路.,增广路定理,假设流网络N=(s,t,V,A,U)中不存在关于可行流x的增广路,记网络中从s出发沿增广弧可以到达的节点集合为S,令T=VS,则sS,tT,即S,T为s-t割.并且,对于A中的任意弧(i,j),如果它是该s-t割的前向弧,则;如果它是该s-t割的后向弧,则=0.,引理6.1证明中的中间结果,因此,S,T为最小割,x为最大流.,定理6.4(最大流最小割定理)最大流的流值等于最小割的容量.,15,6.2 增广路算法,6.2.1 Ford-Fulkerson标号算法(),基本思想:从任何一个可行流开始,沿增广路对流进行增广,直到网络中不存在增广路为
12、止.问题的关键在于如何有效地找到增广路,并保证算法在有限次增广后一定终止.,基本思想:标号过程来寻找网络中的增广路pred(j):节点j 在可能的增广路中的前一个节点;maxf(j):沿该可能的增广路到该节点为止可以增广的最大流量.LIST:记录可能的增广路上的节点,16,STEP5.转STEP3.,STEP3.如果LIST 且maxf(t)=0,继续下一步;否则:(3a)如果 t 已经有标号(即maxf(t)0),则找到了一条增广路,沿该增广路对流 x 进行增广(增广的流量为maxf(t),增广路可以根据pred回溯方便地得到),转STEP1.(3b)如果 t 没有标号(即LIST=且max
13、f(t)=0),转STEP1.,STEP4.从LIST中移走一个节点i;寻找从节点i出发的所有可能的增广弧:(4a)对非饱和前向弧(i,j),若节点 j 没有标号(即pred(j)=0),则对j进行标号,即令maxf(j)=minmaxf(i),uij-xij,pred(j)=i,并将j加入LIST中.(4b)对非空反向弧(j,i),若节点 j 没有标号(即pred(j)=0),则对j进行标号,令maxf(j)=minmaxf(i),xji,pred(j)=i,并将j加入LIST中.,STEP1.若maxf(t)0,继续下一步;否则结束.,STEP0.置初始可行流 x(如零流);对节点 t 标
14、号,即令maxf(t)=任意正值(如1).,STEP2.取消所有节点 jV 的标号,即令maxf(j)=0,pred(j)=0;令LIST=s;对节点 s 标号,即令maxf(s)=充分大的正值.,17,最大流流值为4,Ford-Fulkerson标号算法,例:(uij,xij),18,最大流流值为2*106,Ford-Fulkerson标号算法,例:(uij,xij),19,该算法是否一定在有限步内终止呢?如果弧上的容量可以是无理数,可以举出例子说明标号算法不一定在有限步内终止;并且,这一增广路算法的极限过程得到的流的流值即使收敛,也不一定收敛到最大流,Ford-Fulkerson标号算法,
15、标号算法终止时,网络中一定不再含有增广路.,如果所有弧上的容量都是正整数,根据整流定理,最大流v也是整数.实际上,由于割s,Vs中前向弧的条数最多为n条,因此最大流v的上界为nU(U表示网络中弧上的最大容量).由于每次增广至少使得流值增加1个单位,因此增广的次数不会超过v次,算法一定在有限步内终止.此外,由于每次增广最多需要对所有弧检查一遍,因此算法的复杂度为O(mv),或表示为O(mnU).伪多项式时间算法,而不是多项式时间算法.,20,定义6.7 对网络N=(s,t,V,A,U)中给定的s-t可行流x,网络N关于流x的残量网络N(x)=(s,t,V,A(x),U(x),其中A(x),U(x
16、)定义如下:(residual network,又常称为增量网络或辅助网络),6.2.2 残量网络,讨论算法复杂度时,假定:弧(i,j)A时,弧(j,i)A;并假定在残量网络中A(x)=A,也就是说弧的条数和弧集合都不变.这只要允许容量为0的弧仍然保留在网络中就可以了.,命题:若v*是原网络的最大流,则残量网络N(x)中最大流为 v*-v(x).,其中称,uij(x)为弧(i,j)上的残留容量(residual capacity).,21,残量网络,例:(uij,xij),N(x)中的s-t有向路P,对应于原网络N中的一条增广路;直接称残量网络中的s-t有向路为增广路.沿P可以增广的最大流量称
17、为P的残留容量.,22,Ford-Fulkerson标号算法每次只是在所有增广路中随便地找一条进行增广,因此增广的次数可能很多.,一个自然的想法是:如果每次都找一条增广容量最大的增广路,则总的增广次数应当减少.这样的算法称为最大容量增广路算法.,6.2.3 最大容量增广路算法,23,最大容量增广路算法 复杂性分析,证明:根据流的分解定理,N(x)中可以找到不超过m条从源点到汇点的有向路(增广路),使得其残留容量之和为v*-v(x).,现在考虑从可行流x开始的连续2m次最大容量增广:(1)如果每次增广的流量都不小于(v*-v(x)/2m,则2m次增广后一定已经达到了最大流;(2)某次增广的流量小
18、于(v*-v(x)/2m,即每经过连续2m次最大容量增广,残量网络中的最大容量增广路的残留容量至少下降一半.,命题:N(x)中最大容量增广路的残留容量不小于(v*-v(x)/m.,可见,最大容量增广路算法将总的增广次数从Ford-Fulkerson标号算法的O(nU)降为了O(mlogU)次,因此是一种多项式时间算法.由于最大容量增广路算法每次需要在残量网络中寻找最大容量增广路(可以用最短路算法),因此每次增广的时间花费增加了.,由于任何增广路的残留容量不会超过U(U表示网络中弧上的最大容量)且至少为1(这里假设只考虑整数容量网络),因此最多经过O(2mlogU)=O(mlogU)次最大容量增
19、广,一定已经达到了最大流.,24,(Capacity-Scaling Algorithm),6.2.4 容量变尺度算法,STEP3.若N(x,)不存在s-t 路,继续下一步;否则从N(x,)找到一条s-t 路P,沿P对当前流进行增广,并重复STEP3.,STEP1.若 1,结束,已经得到最优解;否则进行下一步.,STEP2.构造-残量网络 N(x,).,STEP0.置初始可行流 x(如零流);=.,STEP4.=/2;转STEP1.,定义:对N=(s,t,V,A,U)中给定的s-t可行流x,网络N关于流x的-残量网络N(x,)是其残量网络N(x)的子网络,它由残留容量不小于的弧组成.整数容量网
20、络,N(x,1)=N(x).,容量变尺度算法每次都找一条增广容量“充分大”的增广路,但不一定最大.,25,容量变尺度算法 复杂性分析,的值总共有O(logU)种取法.我们下面说明在给定的下,最多执行2m次增广:由于在2-残量网络中已经没有增广路,因此在-残量网络中的最大流不会超过2m.因为-残量网络中的增广路的容量至少为,因此增广次数不会超过2m.,算法总的增广次数是O(m logU)次,而每次增广路的查找可以采用前面介绍的标号算法,即复杂度为O(m).因此,算法总复杂度为O(m2 logU).仍不是强多项式时间算法,26,布 置 作 业(第1讲),目的,掌握流网络的基本概念和基本性质;掌握几
21、种典型的增广路算法及复杂性分析,内容,网络优化第184-189页3;4;5;(第1讲),思考,1(1)-(7);20(不交),27,网 络 优 化,Network Optimizationhttp:/,清华大学数学科学系 谢金星办公室:理科楼1308#(电话:62787812)Email:http:/,清华大学课号:40420213(本),70420133(研),第6章 最大流问题(Maximum Flow Problem)第2讲,28,-概论,Ford-Fulkerson标号算法每次只是在所有增广路中随便地找一条进行增广,最大容量增广路算法每次都找一条增广容量最大的增广路进行增广,与最大容量
22、增广路算法对称,一个自然的想法是:如果每次都找一条包含弧数最少的增广路(称为最短增广路),则算法效果如何?这样的算法称为最短增广路算法 本节主要结果之一:最短增广路算法最多经过O(mn)次增广后终止.,对于这时特殊的最短路问题,我们可以很容易构造最短路算法在O(m)的时间内找到一条最短增广路(例如可以采用从节点s或t开始的广度优先搜索方法),因此这种实现方法的复杂度为O(m2n).本节主要结果之二:在O(n)的时间内找到一条最短增广路,即算法复杂度为O(mn2),从目前已有的理论分析和计算经验来看,最短增广路算法是所有增广路算法中效果最好的算法,可以设计出在O(logn)的平均时间内找到一条最
23、短增广路,即算法复杂度为O(mnlogn),6.3 最短增广路算法,29,定义6.8 对于一个残量网络N(x),如果一个函数d 将节点集合V映射到非负整数集合,则称d是关于残量网络N(x)的距离函数(distance function),d(i)称为节点 i 的距离标号(distance label).如果距离函数d满足:(1)d(t)=0,(2)对N(x)中的任意一条弧(i,j)有d(i)d(j)+1,则称距离函数 d 关于流 x 是有效的(valid),或称距离标号(函数)d 是有效的.,如果任意一个节点的距离标号正好等于残量网络中从该节点到汇点(节点t)的所有有向路中弧数最少的有向路所包
24、含的弧数(当令所有弧的长度为1时,这就是从该节点到汇点的最短路路长,因此我们后面直接称为最短路路长),则称距离函数d关于流x是精确的(exact),或称距离标号是精确的.,如果对N(x)中的某一条弧(i,j)有d(i)=d(j)+1,则称弧(i,j)为允许弧(Admissible Arc).一条s-t有向路如果完全由允许弧组成,则该有向路称为允许路(Admissible Path).,6.3.1 距离标号,精确的距离标号一定是有效的.,30,有效的,距离标号,精确的,对于一个残量网络N(x),如何确定其精确的距离标号呢?从汇点(节点t)开始,对N(x)沿反向弧进行广度优先搜索这一过程的复杂度为
25、O(m).,可以看出,一个节点的精确的距离标号实际上表示的是从该节点到汇点(节点t)的最短路路长,也就是说对所有节点按照最短路路长进行了层次划分.,31,距离标号 性质,引理6.3 若距离函数d是有效的,则:(1)d(i)是残量网络N(x)中从节点i到节点t的最短有向路路长的下界.(2)如果d(s)n,则残量网络N(x)中从节点s到节点t没有有向路(增广路).(3)允许路是残量网络N(x)中的最短增广路.,32,STEP0.(预处理)置初始可行流x为零流;计算精确的距离函数d;令当前节点i=s.,STEP1.若d(s)n,继续下一步;否则结束,得到最优解x.,STEP2.如果存在节点i的某条出
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最大 问题 数学 建模 资料

链接地址:https://www.31ppt.com/p-5358056.html