最大流问题
- 格式:doc
- 大小:68.45 KB
- 文档页数:6
运筹学最大流问题例题
以下是一个关于运筹学最大流问题的例题:
假设有一个有向图,有两个特殊的节点,分别是源点(S)和
汇点(T)。
图中还有一些其他的节点,表示各个任务或工作。
节点之间有一些带有容量限制的边,表示各个任务之间的关系。
假设需要将尽可能多的任务从源点发送到汇点,但要满足以下条件:
1. 每个任务只能由一个人来执行;
2. 每个人只能执行一个任务;
3. 每个任务只能在特定的时间完成;
4. 每个人只能在特定的时间段内工作。
问题:设计一个算法来确定可以完成的最大任务数。
解法:
1. 为了建立最大流问题的模型,我们需要将图中的节点和边进行转换。
首先,将源点和汇点分别用两个特殊的节点S和T
表示。
2. 对于每个任务节点,将其分解为两个节点v_in和v_out,以
表示任务开始和任务结束的时间点。
3. 对于每个容量限制的边(a, b),我们将其转换为两条边
(v_out_a, v_in_b)和(v_out_b, v_in_a),容量为边(a, b)上的容量
限制。
4. 然后,将所有节点和边加入到一个图中,并运用最大流算法(如Ford-Fulkerson算法)来找到从S到T的最大流。
5. 最终的最大流就是可以完成的最大任务数。
这是一个应用最广泛的最大流问题的例题,通过建立合适的模型,可以将实际问题转化为最大流问题,并通过最大流算法来解决。
最大流问题的求解方法及应用
最大流问题,是指在一个有向图中,从源点 s 到汇点 t 的最大
流量。
在实际应用中,最大流问题往往用于描述网络传输、油管输送等流量分配问题。
求解最大流问题的方法包括以下几种:
1. 网络流算法:这是一种基于图论和线性规划的算法。
通过构建网络流图,将最大流问题转化为最小割问题,再利用线性规划求解最小割问题的对偶问题来求解最大流问题。
2. 增广路算法:这是一种经典的最大流算法,其基本思想是不断找到增广路径,即从源点 s 到汇点 t 的一条路径,沿途边权
均有剩余容量,使得该路径上的边的剩余容量中的最小值最大化,最终得到最大流。
3. 矩阵树定理:这是一种基于图论和矩阵运算的算法,适用于有向图和无向图。
通过计算图的拉普拉斯矩阵的行列式等方法,求得图的生成树个数,从而计算最大流。
4. Dinic算法:是对增广路算法的改进。
在增广路算法中,每
次查找增广路径的过程需要遍历整个图,为了提高效率,
Dinic算法引入了分层图的概念,将图分层之后只在图的一层
中查找增广路径,最终求得最大流。
这些方法在实际应用中常常被用来解决路由选择、网络流量优化、模拟电路分析等问题。
例如,最大流可以被用来优化数据传输、流水线设计、流量管道的运营和管理,提高资源利用率和数据传输速度。
最大流问题解题步骤一、什么是最大流问题?最大流问题是指在一个有向图中,给定源点和汇点,每条边都有一个容量限制,求从源点到汇点的最大流量。
该问题可以用于网络传输、电力调度等实际应用中。
二、最大流问题的解法1. 增广路算法增广路算法是最基本的解决最大流问题的方法。
其基本思想是不断地寻找增广路,并将其上的流量加入到原来的流中,直到不存在增广路为止。
具体步骤如下:(1)初始化网络中各边上的流量均为0;(2)在残留网络中寻找增广路;(3)如果存在增广路,则将其上的最小剩余容量作为增量加入到原来的流中;(4)重复步骤2和步骤3,直到不存在增广路。
2. Dinic算法Dinic算法是一种改进型的增广路算法,其核心思想是通过层次分析和分层图来减少搜索次数,进而提高效率。
具体步骤如下:(1)构建分层图;(2)在分层图上进行BFS搜索寻找增广路径;(3)计算路径上可行流量并更新残留网络;(4)重复步骤2和步骤3,直到不存在增广路。
3. Ford-Fulkerson算法Ford-Fulkerson算法是一种基于增广路的算法,其核心思想是不断地寻找增广路,并将其上的流量加入到原来的流中,直到不存在增广路为止。
具体步骤如下:(1)初始化网络中各边上的流量均为0;(2)在残留网络中寻找增广路;(3)如果存在增广路,则将其上的最小剩余容量作为增量加入到原来的流中;(4)重复步骤2和步骤3,直到不存在增广路。
三、最大流问题解题步骤1. 确定源点和汇点首先需要确定问题中的源点和汇点,这是解决最大流问题的前提条件。
2. 构建残留网络在有向图中,每条边都有一个容量限制。
我们可以将这些边看作管道,容量看作管道的宽度。
在实际传输过程中,某些管道可能已经被占用了一部分宽度。
因此,在求解最大流问题时,需要构建一个残留网络来表示哪些管道还能够继续传输数据。
具体方法是:对于每条边(u,v),分别构造两条边(u,v)和(v,u),容量分别为c(u,v)-f(u,v)和f(u,v),其中c(u,v)表示边的容量,f(u,v)表示当前流量。
最大流常见算法最大流问题是图论中的一个重要问题,其求解方法有多种,本文将介绍最常见的几种算法。
一、最大流问题简介最大流问题是在一个网络中寻找从源点到汇点的最大流量的问题。
网络是由一些节点和连接这些节点的边构成的,每条边都有一个容量,表示该边所能承载的最大流量。
源点是流量的起点,汇点是流量的终点。
在网络中,还可能存在其他节点和边。
二、Ford-Fulkerson算法Ford-Fulkerson算法是最早用于解决最大流问题的算法之一。
该算法基于增广路径来不断增加流量,直到无法再找到增广路径为止。
1. 算法步骤(1)初始化:将所有边上的流量设为0。
(2)寻找增广路径:从源点开始进行深度优先或广度优先搜索,在搜索过程中只选择剩余容量不为0且没有被标记过的边,并记录路径上容量最小值min。
(3)更新路径上各个边上的流量:将路径上各个边上的流量加上min。
(4)返回第二步,直到无法找到增广路径为止。
2. 算法分析Ford-Fulkerson算法可以保证在有限步内求解出最大流,但是其时间复杂度与增广路径的选择有关,最坏情况下可能需要指数级的时间复杂度。
三、Edmonds-Karp算法Edmonds-Karp算法是基于Ford-Fulkerson算法的一种改进算法。
该算法使用BFS来寻找增广路径,可以保证在多项式时间内求解出最大流。
1. 算法步骤(1)初始化:将所有边上的流量设为0。
(2)寻找增广路径:从源点开始进行BFS,在搜索过程中只选择剩余容量不为0且没有被标记过的边,并记录路径上容量最小值min。
(3)更新路径上各个边上的流量:将路径上各个边上的流量加上min。
(4)返回第二步,直到无法找到增广路径为止。
2. 算法分析Edmonds-Karp算法相对于Ford-Fulkerson算法来说,在同样的网络中,其时间复杂度更低,可以保证在O(VE^2)的时间内求解出最大流。
但是在某些特殊情况下仍然可能需要指数级时间复杂度。
最大流的概念最大流(Maximum Flow)是指在一个有向图中,给每条边一个容量限制,然后寻找一条从源点到汇点的路径,使得路径上的每条边的流量都不超过其容量限制的最大值。
最大流问题是网络流理论中的一种经典问题,具有广泛的应用领域,如网络优化、流量分配、资源调度等。
最大流问题可以用图论中的图来进行模型表示,其中图中的节点表示流经的位置,边表示流量通路,每条边还有一个容量值,表示该边所能承载的最大流量。
图中通常包括一个源点(Source)和一个汇点(Sink),各个节点与源点和汇点之间的连接关系构成了一个流量网络。
每个节点上的流量是指通过该节点的流量总和,而边上的流量是指该边上的实际流量。
最大流问题的求解可以采用不同的算法,其中最常见的是Ford-Fulkerson算法和Edmonds-Karp算法。
下面将对这两种算法进行详细介绍。
1. Ford-Fulkerson算法Ford-Fulkerson算法是最大流问题的经典算法,它的思想是不断寻找增广路径,并通过增加该路径上各边的流量来增加整个流量网络的流量。
算法的基本步骤如下:(1) 初始化流量网络的流量为0。
(2) 通过任意的路径查找算法(如深度优先搜索)找到一条从源点到汇点的增广路径。
(3) 在该增广路径上增加流量的值为该路径上残余容量的最小值。
(4) 更新整个流量网络中各边的残余容量和反向边的流量。
(5) 重复步骤2至4,直到无法找到增广路径为止。
2. Edmonds-Karp算法Edmonds-Karp算法是Ford-Fulkerson算法的一种改进,它通过使用广度优先搜索来寻找增广路径,使得算法的时间复杂度优于Ford-Fulkerson算法。
算法的具体步骤如下:(1) 初始化流量网络的流量为0。
(2) 通过广度优先搜索查找一条从源点到汇点的最短增广路径。
(3) 在该增广路径上增加流量的值为该路径上残余容量的最小值。
(4) 更新整个流量网络中各边的残余容量和反向边的流量。
运筹学最大流问题例题摘要:1.运筹学最大流问题简介2.最大流问题的基本概念和方法3.最大流问题的求解步骤4.最大流问题在实际应用中的案例分享5.总结与展望正文:【提纲1:运筹学最大流问题简介】运筹学最大流问题是一种求解网络中最大流量的问题。
在有向图中,有一个发点(源)和一个收点(汇),其他点称为中间点。
给定每条边的容量,我们需要找到一条从发点到收点的路径,使得这条路径上的流量最大。
最大流问题在物流、交通、通信等领域具有广泛的应用。
【提纲2:最大流问题的基本概念和方法】在最大流问题中,我们需要了解以下几个基本概念:1.流量:表示在一条边上流动的单位数量。
2.容量:表示一条边能承受的最大流量。
3.增广链:从发点到收点的路径,路径上的每条边都有剩余容量。
求解最大流问题的基本方法是:1.初始化:将所有边的流量设为0。
2.寻找增广链:在图中寻找一条从发点到收点的路径,使得路径上的每条边都有剩余容量。
3.更新流量:将找到的增广链上的流量增加,同时更新路径上其他边的剩余容量。
4.重复步骤2和3,直到无法再找到增广链。
【提纲3:最大流问题的求解步骤】以下是求解最大流问题的具体步骤:1.构建网络图:根据题目给出的条件,构建有向图。
2.初始化:将所有边的流量设为0,记录发点和收点。
3.寻找增广链:使用深度优先搜索或广度优先搜索等算法,在图中寻找一条从发点到收点的路径。
4.更新流量:找到增广链后,将路径上的流量增加,同时更新路径上其他边的剩余容量。
5.重复步骤3和4,直到无法再找到增广链。
6.输出结果:最大流即为所有增广链上的流量之和。
【提纲4:最大流问题在实际应用中的案例分享】最大流问题在实际应用中具有广泛的价值,例如:1.物流配送:通过最大流问题优化配送路线,降低物流成本。
2.交通规划:通过最大流问题优化交通网络,提高出行效率。
3.通信网络:通过最大流问题优化网络资源分配,提高通信质量。
【提纲5:总结与展望】运筹学最大流问题是一种重要的优化问题,其在实际应用中具有广泛的价值。
运筹学最大流问题例题摘要:一、运筹学最大流问题的基本概念二、最大流问题的求解方法三、最大流问题例题详解四、总结与展望正文:一、运筹学最大流问题的基本概念运筹学最大流问题是一种在网络中寻找最大流量的问题。
给定一个有向图G(V,E),其中仅有一个点的入次为零,称为发点(源),记为vs;仅有一个点的出次为零,称为收点(汇),记为vt;其余点称为中间点。
对于G 中的每一条边(vi,vj),相应地给一个数cij(cij≥0),称为边(vi,vj)的容量。
最大流问题的目标是找到从源点到汇点的最大流量。
二、最大流问题的求解方法求解最大流问题的方法有很多,其中最著名的方法是Ford-Fulkerson 算法。
该算法的基本思想是寻找增广链,即在网络中找到一条从源点到汇点的路径,使得路径上的每条边的容量都没有被完全利用。
通过不断地寻找增广链并更新流量,最终可以得到最大流量。
另一种求解最大流问题的方法是最小费用最大流问题。
该方法通过将流量问题转化为费用问题,利用最小费用最大流问题的求解方法求解最大流问题。
在最小费用最大流问题中,每条边的容量被视为费用,目标是找到从源点到汇点的最大流量,同时使总费用最小。
三、最大流问题例题详解假设有如下网络图:```A -- 1 --B -- 2 --C -- 3 --D -- 4 --E -- 5 -- F| | | | | | | | | |4 3 2 1 0 -1 -2 -3 -4 -5```其中,箭头表示流向,数字表示容量。
从A 点到F 点的最大流量是多少?通过Ford-Fulkerson 算法,我们可以得到如下的增广链:A ->B ->C ->D ->E -> F该链的容量为:4 + 3 + 2 + 1 + 0 = 10当前流量为:4 + 3 + 2 + 1 = 10由于该链的容量等于当前流量,所以无法继续寻找增广链。
因此,从A 点到F 点的最大流量为10。
运筹学最大流问题例题摘要:I.引言- 介绍运筹学最大流问题- 问题的背景和实际应用II.最大流问题的定义- 给定图和容量- 源点和汇点- 中间点III.最大流问题的求解方法- 增广链法- 最小费用最大流问题IV.例题详解- 例题一- 例题二- 例题三V.结论- 总结最大流问题的求解方法和应用- 展望未来研究方向正文:I.引言运筹学最大流问题是运筹学中的一个经典问题,主要研究在给定的有向图中,如何从源点向汇点输送最大流量。
最大流问题广泛应用于运输、通信、网络等领域,具有重要的理论和实际意义。
本文将介绍运筹学最大流问题的相关概念和方法,并通过例题进行详细解析。
II.最大流问题的定义最大流问题给定一个有向图G(V, E),其中包含一个源点(vs)、一个汇点(vt) 和若干个中间点。
对于图中的每一条边(vi, vj),都有一个非负容量cij。
我们需要从源点向汇点输送流量,使得总流量最大。
III.最大流问题的求解方法最大流问题的求解方法主要有增广链法和最小费用最大流问题。
1.增广链法增广链法是一种基于动态规划的方法。
假设我们已经找到了从源点到汇点的最大流量f,现在要寻找一条增广链,使得流量可以增加。
增广链的定义是:从源点出发,经过若干条边,最后到达汇点的路径,且这条路径上所有边的容量之和c > f。
如果找到了这样的增广链,我们可以将源点与增广链的起点之间的边(vs, v1) 的容量增加c,同时将增广链上所有边的容量减少c,从而得到一个新的最大流量f",满足f" > f。
不断寻找增广链,直到无法找到为止,此时的最大流量即为所求。
2.最小费用最大流问题最小费用最大流问题是在最大流问题的基础上,要求源点向汇点输送的流量所经过的路径的费用最小。
求解方法是在增广链法的基础上,每次寻找增广链时,不仅要满足c > f,还要满足从源点到汇点的路径费用最小。
IV.例题详解以下是三个最大流问题的例题详解:例题一:给定一个有向图,源点vs 的入次为0,汇点vt 的出次为0,其他点的入次和出次均为1。
运筹学最大流问题例题运筹学中的最大流问题是一种重要的优化问题,它在网络流量分配、路径规划等领域有着广泛的应用。
下面我将给出两个较为详细的最大流问题例题,以帮助读者更好地理解。
例题一:假设有一个有向图,其中包含一个源点S和一个汇点T,其他节点分别表示供给点和需求点。
每条边的容量表示该路径上的最大流量。
现在我们需要确定从S到T的最大流量。
其中,源点S有一个供给量为10的容器,汇点T有一个需求量为10的容器。
其他节点没有容器。
图中各点之间的边的容量如下:S -> A: 5S -> B: 3A -> C: 4A -> D: 2B -> E: 2B -> F: 4C -> T: 3D -> T: 1E -> T: 1F -> T: 5求解:通过构建网络流图,我们可以将这个问题转化为一个最大流问题。
首先,我们为每条边都添加一个容量属性,然后为S和T之间添加一个超级源点和超级汇点。
图示如下所示:```S/ | \A B C/ | | \D E F T```超级源点S0与源点S之间的边的容量为源点S的供给量10,超级汇点T0与汇点T之间的边的容量为汇点T的需求量10。
接下来,我们要找到从超级源点到超级汇点的最大流量,即求解这个网络流图的最大流。
解答:根据这个网络流图,我们可以使用Ford-Fulkerson算法求解最大流问题。
具体步骤如下:1. 初始化网络流为0。
2. 在剩余容量大于0的路径上增广流量:从超级源点出发,找到一条路径到达超级汇点,该路径上的流量不超过路径上边的最小容量。
3. 更新剩余容量:将路径上的每条边的剩余容量减去增广流量。
4. 将增广流量加到网络流中。
5. 重复步骤2-4,直到找不到从超级源点到超级汇点的路径。
通过应用Ford-Fulkerson算法,我们可以得到从超级源点到超级汇点的最大流量为8。
因此,从源点S到汇点T的最大流量也为8。
最大流练习题最大流问题是指在一个网络中,从源点s到汇点t的最大流量。
本文将为读者介绍最大流问题的基本概念和求解方法,并提供一些练习题供读者巩固所学知识。
一、最大流问题概述在一个网络中,每个节点都有一定的容量,表示通过该节点的最大流量。
源点s表示流的起点,汇点t表示流的终点。
通过网络中的边,流将从源点s流向汇点t,其中边的容量表示通过该边的最大流量。
最大流问题的目标是找到从源点s到汇点t的最大流量。
使用最大流算法,可以得出最大流量并找到一条流量最大的路径。
二、最大流问题的求解方法1. Ford-Fulkerson算法Ford-Fulkerson算法是最常用的求解最大流问题的方法之一。
该算法的基本思想是不断寻找增广路径,直至无法找到增广路径为止。
步骤:- 初始化流量为0。
- 当存在增广路径时,通过该路径增加流量,并更新路径上各边的容量。
- 重复上一步骤,直至不存在增广路径。
2. Edmonds-Karp算法Edmonds-Karp算法是Ford-Fulkerson算法的改进版本,其核心思想是使用广度优先搜索寻找增广路径。
该算法保证每次找到的增广路径是最短的,从而提高了算法效率。
步骤:- 初始化流量为0。
- 使用广度优先搜索寻找最短增广路径。
- 通过该路径增加流量,并更新路径上各边的容量。
- 重复上一步骤,直至不存在增广路径。
三、最大流问题练习题1. 题目描述:给定一个带权有向图,其中每个边的容量和费用均已给定。
请计算从源点s到汇点t的最大流量。
2. 题目描述:给定一个带权无向图,其中每个节点的容量已给定。
请计算从源点s到汇点t的最大流量,并找出一条流量最大的路径。
3. 题目描述:给定一个带权有向图,其中每个节点的容量已给定。
请计算从源点s到汇点t的最大流量,并找出一条流量最大的路径。
以上练习题旨在让读者更好地理解最大流问题,并熟练掌握最大流问题的求解方法。
读者可以使用Ford-Fulkerson算法或Edmonds-Karp 算法来解决这些问题,并验证自己的答案是否正确。
最大流问题经典例题最大流问题是图论中的一个经典问题,其目的是在一个有向图中找到一条从源点到汇点的路径,使得路径上的流量最大。
最大流问题有多种解法,其中最著名的是Ford-Fulkerson算法和Edmonds-Karp 算法。
下面介绍一个最大流问题的经典例题:给定一个有向图G=(V,E),其中V表示节点集合,E表示边集合。
假设有源点s和汇点t,并且每条边都有一个容量c,表示该边最多可以通过的流量。
请找到从源点s到汇点t的最大流量。
解法:一种解法是使用Ford-Fulkerson算法。
该算法通过不断增广路径来寻找最大流,直到无法找到增广路径为止。
具体实现过程如下:1. 初始化流f=0。
2. 寻找一条增广路径,即从s到t的一条路径,使得路径上所有边的剩余容量都大于0。
3. 计算该路径上的最小剩余容量d。
4. 对该路径上的所有边e,将其流量增加d,同时将其反向边的流量减少d。
5. 将f增加d。
6. 重复步骤2-5,直到无法找到增广路径。
另一种解法是使用Edmonds-Karp算法。
该算法在Ford-Fulkerson算法的基础上优化了增广路径的选择,选择最短路作为增广路径,从而提高了算法的效率。
具体实现过程如下:1. 初始化流f=0。
2. 寻找一条从s到t的最短增广路径,即路径上所有边的剩余容量都大于0,且路径长度最短。
3. 计算该路径上的最小剩余容量d。
4. 对该路径上的所有边e,将其流量增加d,同时将其反向边的流量减少d。
5. 将f增加d。
6. 重复步骤2-5,直到无法找到增广路径。
无论使用哪种算法,最后得到的f即为从源点s到汇点t的最大流量。
最大流问题的对偶问题通常指的是最小割问题。
最大流和最小割之间存在一种对偶关系,即在一个有向图中,最大流的值等于最小割的值。
首先,我们需要明确几个概念:1. 最大流:在有向图中,给定源点s和汇点t,找到从s到t的最大流量。
2. 最小割:在有向图中,将顶点集划分为两个不相交的子集S和T,使得所有从S到T的边的流量之和最小,并且s属于S,t属于T。
现在,我们推导最大流和最小割之间的对偶关系:假设我们有一个有向图G=(V,E),其中V是顶点集,E是边集。
每条边e=(u,v)都有一个容量c(e)。
1. 构造残量网络:对于给定的流f,我们可以构造一个残量网络Gf,其中每条边e=(u,v)的残量容量r(e)=c(e)-f(e)。
如果e不在原图中,则r(e)=c(e)。
2. 增广路径:在残量网络Gf中,从源点s到汇点t的一条路径,如果这条路径上所有边的残量容量都大于0,那么这条路径就是一个增广路径。
3. 最大流算法:通过不断寻找增广路径并更新流量,我们可以找到一个最大流f*。
4. 最小割:假设我们有一个最大流f*,我们可以将顶点集划分为两个子集S和T,使得S包含源点s,T包含汇点t,并且所有从S到T的边都在最大流f*中达到其容量。
这样的划分就是一个最小割。
5. 对偶关系:最大流f*的值等于最小割的容量。
这是因为最大流f*是通过不断增加流量来找到的,而最小割是将图划分为两个部分,使得从S到T的边的流量之和最小。
由于增广路径的存在,最大流f*不可能超过最小割的容量,反之亦然。
因此,我们证明了最大流和最小割之间的对偶关系。
在实际应用中,我们可以利用这种对偶关系来求解最大流问题或最小割问题。
例如,如果我们知道最小割的容量,那么我们就可以直接得到最大流的值,而不需要显式地求解最大流问题。
同样地,如果我们找到了一个最大流,那么我们就可以通过划分顶点集来找到一个最小割。
网络最大流问题
一产生背景
流量问题在实际中是一种常见的问题,在许多实际的网络系统中都存在着流量和最大流问题。
例如铁路运输系统中的车辆流,城市给排水系统的水流问题,控制系统中的信息流问题,常见的人流,物流,水流,气流,电流,现金流等。
在一定条件下,求解给定系统的最大流量,就是网络最大流问题.网络系统最大流问题是图与网络理论中十分重要的最优化问题,它对于解决生产实际问题起着十分重要的作用。
二基本概念与定理
设cij为弧(i,j)的容量,fij为弧(i,j)的流量。
容量是弧(i,j)单位时间内的最大通过能力,流量是弧(i,j)单位时间内的实际通过量,流量的集合f={fij}称为网络的流。
发点到收点的总流量记为v=v(f)。
设D=(V,A)是一有向图且对任意E均有容量cij =(vi,vj),记C={cij︱(vi,vj)∈A},此外D中只有一个源vs和汇vt( 即D中与vs相关联的弧只能以vs为起点,与vt相关联的弧只能以vt为终点),则称D=(V,A,C, vs,vt)为一网络。
引例1:图1给出了一张网络,其中:vs为源,vt为汇,弧旁的数字为该段弧的容量cij与流量fij,则显然有0≤fij ≤ cij 。
v2 (3,3) v4
(3,3)(5,5)
vt (2,2) (2,2) (2,2) vt
(6,4) (6,2)
v1 (6,6) v3
图1
最大流问题可以建立如下形式的线性规划数学模型。
图1最大流问题的线性规划数学模型为
12
max 0(,)0s s ij ij j i ij ij v f f f f i s t f c =+⎧-=≠⎪⎨⎪≤≤⎩∑∑所有弧(i,j)
由线性规划理论知,满足式上式的约束条件的解{fij}称为可行解,在最大流
问题中称为可行流。
可行流满足下列三个条件:
(1)0(2)(3)i j i j m j i m j i sj it vs vt f c
f f
v f f ≤≤===∑∑∑∑
条件(2)和条件(3)也称为流量守恒条件。
另外对有多个发点和多个收点的网络,可以另外虚设一个总发点和一个总收
点,并将其分别与各发点、收点连起来(图*),就可以转换为只含一个发点和一
个收点的网络。
S T
S*
T*
图*
所以一般只研究具有一个发点和一个收点的网络
在图D 中,从发点到收点的一条路线称为链,从发点到收点的方向规定为
链的方向。
与链的方向相同的弧称为前向弧,前向弧集合记为u+ ,与链的方向
相反的弧称为后向弧,后向弧集合记为u-。
设f 是一个可行流,如果存在一条从发点vs 到收点vt 到的链u 满足:
(1)所有前向弧上fij <cij
(2) 所有后向弧上fij >0 ,则称链u 为增广链.
设,,,,s t S T V S T v S v T ∈⋂=∅∈∈则称
{}
(,)(,)|,i j i j S T v v v S v T =∈∈
为图D 的一个割集;称 (,)(,)(,)(,)i j i j v v s t C S T c v v ∈=∑ 为割集(S ,T )的容量。
显然对任意可行流f 及任意割集(S ,T )总有V(f)=C(S,T)。
故有某个可行
流f*及某一割集(S*,T*)使得V(f*)= C (S*,T*),则f*为D 的最大流,(S*,
T*)为最小容量割集。
定理1 图D 上的可行流f*是最大流的充要条件是D 上不存在关于f*的增
广链。
三 求解网络最大流的方法(标号法)
标号法是一种图上迭代计算方法,该算法首先给出一个初始可行流,通过标
号找出一条增广链,然后调整增广链上的流量,得到更大的流量。
再用标号找出
一条新的增广链,再调整直到标号过程不能进行下去为止,这时的可行流就是最
大流。
标号法步骤如下:
第一步 找出一个初始可行流fij(0),例如所有弧的流量fij(0) =0.
第二步 对点进行标号找出一条增广链。
(1) 起点标号(∞)
(2) 选一个点vi 已标号且另一端未标号的弧沿着某条链向收点检查
(a )如果弧是前向弧且有fij <cij ,则vj 标号
j i j i j
c f θ=- (b )如果弧是后向弧且有fij ﹥0,则vj 标号j ij f θ=
当收点已得到标号时,说明已找到增广链,依据v 的标号反向追踪得到一条
增广链。
当收点不能得到标号时,说明不存在增广链,计算结束
第三步 调整流量
(1) 求增广链上点的vi 标号的最小值,得到调整量号
min j j j θθ=
(2) 调整流量
1(,)(,)(,)ij i j ij i j ij i j f v v u f f v v u f v v u θθ+-
⎧+∈⎪⎪=-∈⎨⎪∉⎪⎩
得到新的可行流f1,去掉所有标号,返回到第二步从发点重新标号寻找增广
链,直到收点不能标号为止。
四 例题应用
例2:用标号法求网络最大流(图1),弧旁数字为(cij ,fij(0))。
解 (1) 标号过程。
见图2。
(2) 增广链为{vs ,v1,v2,v3,vt} (注意2132(,),(,)v v v v u -∈)。
(3)调整量θ=2调整后得图3。
(4) 二次标号过程。
见图3。
标号无法进行下去,最大流流量V(f*)=3+6=9,最小割集(S*,T*), S*={vs},
T*={ v1,v2,v3,v4,vt}。
(-v1,2)
v2 (3,3) v4 (5,5)
(3,3)
vs (2,2) (2,2) (2,2) vt (v3,2) (0,+∞)
(6,4) (6,2)
v1 (6,6) v3
(v1,2) (-v2,2)
图2
v2 (3,3) v4
(5,5)
(3,3)
vs (2,0) (2,0) (2,2) vt
(0,+∞)
(6,6) (6,4)
v1 (6,6) v3
图3
例3:在下面的有向图中1是发点,6是收点,求最大流.
2 1 4
4 2
1 2 4 2 6
5 6
3 3 5
图解法如下:
2(1,+4) 1 4(2,+1)
4 2
1(0,+inf) 2 4 2 6 (5,4)
5 6
3(5,+5) 3 5(2,+4)
2(5,-3) 1 4(5,+2)
(4,4) 2
1(0,inf) 2 (4,4) 2 6(5,2)
5 (6,4)
3(1,+5) 3 5(3,+3)
2(5,-1) 1 4(5,+1)
(4,4) 2
1(0,inf) 2 (4,4) 2 6(4,+1)
(5,2) (6,6)
3(1,+3) (3,2) 5(3,1)
2 1 4
(4,4) (2,1)
1(0,inf) 2 (4,4) (2,1) 6
(5,3) (6,6)
3(1,2) (3,3) 5
图中红色的是可增广链,可见S={1,3}, S’={2,4,5,6}, 蓝色的三条边(1,2), (3,5),(2,3)组成的集合是最小割,割集容量为(1,2)和(3,5)两条边的容量之和7,也就是最大流的流量.
参考文献
[1] 杨民助.运筹学[M].西安:西安交通大学出版社,2000,201-204
[2] 宁宣熙.运筹学实用教程[M].第二版.北京:科学出版社,2007,147-152
[3] 黄桐城.运筹学基础教程[M].第一版.上海:上海人民出版社,2004,124-128。