流量网络
一个流网络是A.有向图每个边缘都有容量和流量的地方。它们通常用于使用具有有限容量的路由网络来模拟涉及位置之间的项目运输的问题。示例包括在路线网络,管道网络中的流体上建模流量,以及电路组件网络中的电力。
例如,公司可能希望将洛杉矶的包裹从洛杉矶到纽约市使用卡车在中级城市之间运输。如果连接一对城市的路线只有一辆卡车,并且每辆卡车都有最大负载,那么描述交通选项的图表将是流量网络。每个节点将代表一个城市,每个边缘都代表这些城市之间的卡车路线(例如高速公路)。特定途径的容量将是该路线可携带卡车的最大负载。使用此模型,该公司可以决定如何在卡车之间分离他们的包装,以便包裹可以使用可用的路线和卡车到达目的地。公司决定沿着特定卡车路线发货的包裹数量是该路线的流动。
动机
想象一下,一个快递服务想要从城市运送尽可能多的小部件 城市 .不幸的是,没有办法直接发货小部件 来 ,因此快递服务必须使用中级城市运送小部件 , , , 和 .特定的城市通过航班连接,允许在这些城市之间运输小部件。该运输网络可以由以下定向图表表示,其中节点代表城市,指导边缘代表这些城市之间的航班。
显然,任何现实的飞行员都无法携带无限数量的小部件。因此,每次航班都有最大数量的小部件,它可以携带,取决于其货运湾的大小。此最大值称为容量飞行。它是与上图中每条边相关的一个数字,表示城市之间可以运输的小部件的最大数量。下图是上图加上相应的容量。例如,从 来 可以携带最多 小部件,所以边缘 有能力 .
现在,快递服务有了可以用来运输小部件的航班的表示,以及可以在城市之间移动的小部件的最大数量,它可以开始决定在每个航班上运输多少小部件的任务。每次飞行中运输的小部件的数量称为流动飞行。Naive解决方案是为每个航班分配可能的最大小部件数量。然而,这违反了常识限制,即飞入中级城市的小部件的数量必须等于被剥离的小部件的数量。否则,小部件被留下(在比飞行比飞行的情况下的情况下)或者在薄的空气中创造出来(在比流量的情况下),这两个场景不在Courier的兴趣或权力。实际上,分配最大流量可能的叶子 小部件进入城市 只有 小部件离开,意思 小部件的消失了。
所以,对于图表之外的图表中的每个节点 和 ,离开该节点的总流程必须等于输入该节点的总流程。尊重这两个约束的一个可能的分配(边缘的流量可能不超过其容量,并且进入节点的总流量必须等于离开该节点的总流量)如下所示。
自然问题是询问这是否是可以最大化可以从城市发货的小部件数量的赋值 城市 .因为有很多小部件被运送到城市 只是小部件离开的数量吗 或进入 ,总结一个产生这个流量的产生允许运输 小部件。事实上,最佳分配,称为最大流量, 是 小部件,如下图所示。这是一个流程分配(它不一定是独一无二的),最大化快递服务的表现最大限度地提高了从中发货的小部件数量 来 .这些部分描述了其他问题和目标流网络问题以下。
定义
正式,A流网络被定义为
一个流网络 是一个元组 在哪里
是顶点的有向图吗 和导演边
是从边缘到非负实情况的映射, 被称为容量边缘
是特殊的顶点 分别调用源和汇
一个容许流。或者简称为a流动,定义为
流动 对于流动网络 是一个映射 满足以下两个约束:
对于所有边缘
对于每个顶点 , 在哪里 和 表示边的起始顶点和结束顶点 分别
第一个约束(称为可行性条件)简单地说,流动 沿着每个边缘 必须是非负的,可能不超过容量 对于那个边缘。第二个约束(称为流保护条件)说,进入顶点的流程必须等于该顶点的流量,除了源和接收号。
给予顶点 与来源 和水槽 ,使用以下容量绘制流量网络,确保以其相应的容量标记每个边缘。
流量网络的一个可能布局显示在左侧。注意,由于边缘被引导在流量网络中,边沿 即使边缘也不包含在图中 包括在内。而且,由于 是一个源,它没有进入它的边。同样,沉没 没有边缘离开它。
给出前一个例子的流量网络是映射(每个边缘标签等于该边缘的流量)低于可允许的流量?
没有,映射不是允许的流量。虽然映射满足可行性条件(检查每个边缘的流量在零和该边缘的容量之间),但不满足流动节约条件。具体地,总流退出节点 是 ,而总流入节点 是 .改变边缘的流动 从 来 将使这是一个可接受的流动。
有用的概念
虽然许多不同的问题可以作为流量网络制定,但几乎所有的概念都很常见。有些用于将给定的问题陈述转换为规范形式 如上一节所定义,而其他部分用作算法解决方案中的中间计算。
剩余产能
的剩余产能 流量网络 和一个流 是容量的差别吗 和流 .正式定义为
流量网络的剩余容量 和流 是一个映射 这样
对于所有边缘
将每个边缘的重量设定为其剩余容量形成a剩余网络对于流动网络 和流 .该网络模拟了所有边的可用容量,并作为一个中间计算Ford-Fulkerson算法解决这一点最大流问题.
增强路径
一个增强路径是残差网络中的一条有向路径,该路径中的每条边都有未使用的容量。正式定义为
流量网络的增强路径 和流 是有向路径 从源头开始 并在水槽结束 这样的残余能力 这条路径上的所有边都是非零的。具体地说,
是一条定向的路径 和 这样
对于所有边缘 为了 在路上 .
实际上,事实证明了流量网络 与流 如果且才有剩余网络中没有增强路径,则是最大流量。最大流量没有增强路径的“如果”本定理的一部分,很清楚,因为这种路径的存在意味着存在更大的流量(通过增加最小残差的路径中所有边缘的流量沿着该路径的容量)。“只有在本定理的一部分中,没有增强路径意味着最大值,就不那么直观,并且是关键洞察力Ford-Fulkerson算法.
超级节目
通常,一个给定的问题需要建模多个源和/或多个汇。自流网络的规范定义以来 仅指定单个源和单个汇,有时会添加出错对流动网络是必要的。具体来说,多个源需要添加一个supersource,从超源到每个单独的源都有边,而多个汇则需要增加一个Supersink.,从每个单独的水槽到超级水槽的边缘。然后,流动网络的来源 设置为SuperSource和流量网络的宿 被设置为supersk。
由于超级节点的添加不应该影响图上的任何计算,容量 因为新创建的边被设为无穷,所以沿着这些边的流动只被限制为非负的。例如,右边的图是一个流网络 来源 和 下沉 ,带上supersource. 和Supersink. .
流网络问题
有几个不同的问题可以用流网络来建模。有一些特别常见,出现在非常不同的领域。由于流网络问题已经得到了很好的研究,所以在这里只简要地描述每一个问题,以及一些示例应用程序。在每个问题描述中都有更深入的讨论。
最大流量
的最大流量问题是通过单源、单汇流网络求最大可容许流量的问题。它最初是由数学家在1954年提出的,当时他们试图模拟苏联的铁路交通流量。已知的最大流量问题的解包括Ford-Fulkerson算法,edmonds-karp算法, 和大餐的算法.
最大流量算法具有巨大的应用。例子包括航空公司飞行船员调度,流通循环需求问题(如果使用有限的容量有限的路线必须运输带有位置相关需求的货物),并在体育季节时确定以消除丢失的团队。
最低成本流量
最低成本流量问题是找到最便宜的方式通过网络发送一定数量的流量。这就需要扩大流动网络,使每条边 现在也有相关的成本 每条边的单位流量。然后是流程的总成本 (e) \ cdot f (e))。最小的成本流可以解决使用线性规划因为目标函数是线性的,约束也是线性的。
最小成本流的一个常见应用是,给定一些容量和相关成本有限的路线,确定从A点到B点的最便宜的运输方式。例如,卡车路线可能有更大的运力,但成本更高(就时间而言),而飞机路线可能有更小的运力,但成本更低。因此,一个想要最小化运输成本的公司将会寻求用最小成本流来模拟这种能力和成本之间的权衡。
最大二分匹配
最大二分匹配是确定二部图的最大匹配的问题。如果将图建模为一个流网络(从一组节点流到另一组节点),可以使用各种流算法来解决它。例如,Ford-Fulkerson算法可以解决未加权图的二部匹配,如Hopcroft-Karp算法,这使得这更有效,因为它专为二角形图设计而设计。对于加权图案(称为分配问题),其中最著名的算法是匈牙利算法.
最有趣的极大二部匹配是用分配问题来构造的。分配问题最常见的表述是给定一定数量的agent和一定数量的任务,以及每个agent在每个任务上的成本/效益,将每个agent分配给恰好一个任务,使成本/效益最小化/最大化。许多常见的问题都可以用分配问题来表述,因此应用非常多样化。应用程序包括调度、资源分配和运输分割。
运输问题
更一般的赋值问题是运输问题.事实证明,运输问题也是最小成本问题的更具体的版本。运输问题类似于分配问题,而不是分配给完全一项任务的每个代理,而是每个代理可以在多个任务之间分割它们的时间,并且每个任务可以由多个代理参加。因此,可能不会分配一些代理和任务。
运输问题,就像其名称所表明,有时会在地雷和工厂中描述。如果矿山供应工厂,则运输问题可减少以确定将矿石从个别矿区运送到个别工厂的最具成本效益的方式。因此,来自一个矿井的矿石可以被送到多个工厂,而一家工厂可以使用许多地雷的矿石。在这种情况下,成本函数取决于每个矿山和工厂之间的欧几里德距离,以及两者之间的可用运输方法的成本。显然,采矿不是唯一可以以这种方式配制的运输问题的行业,因此问题本身是非常一般的,也是它的应用。
参考文献
- ,J.Network_Flow_Reversed_Edge_1.从2013年1月23日,来自https://en.wikiversity.org/wiki/File:Network_Flow_Reversed_Edge_1.svg
- 李,C.multi-source_multi-sink_flow_problem.检索2009年9月7日,来自https://commons.wikimedia.org/wiki/file:multi-source_multi-sink_flow_problus.svg.