发布日期:2024-05-13 来源: 网络 阅读量()
网络流优化问题是一类最基本的优化问题,很多很多的问题都可以建模为或者转化为网络流优化问题,此处我们就暂时不举啥实例了,以后慢慢在笔记讲解的过程中穿插一些实例来讲解。目前我看了一下关于网络流优化的网络资源比较少,同时各类资源零七碎八的,像最短路问题,最大流问题等貌似大家都看过一点,但又不是那么系统性的。 当然网络流优化问题本身作为一种研究的较为成熟的问题,其已经有很好的教材了,就是 Network Flows Theory, Algorithm and Application,作者:Ahuja R.K., Magnant T.L., Orlin J.B., 1993. 这本书从内容来说是一本非常不错的书,网络流优化问题的主要内容都覆盖上了,而且读起来也不是非常的困难。同样这本书的缺点也非常明显:1是其厚度有800多页,从头到位读起来显然有点不现实;2是仔细读起来会发现里边的typo比较多,有时候会让人产生一点困惑;3是语言组织来说感觉不是那么精炼,有些地方没有一些预设的优化背景的知识去连蒙带猜就不容易理解是啥意思。那么我们这里笔记主要优势是笔记梳理的思路更加精炼,会更加突出核心思想,比自己单纯看书要快也更能抓住重点。本节笔记对应教材 第一章 Introduction。 网络流优化问题一般是指 在有向图中分配流量,使每条边的流量不会超过它的容量约束(Capacity),同时达到路径长度最小或者花费最小等目标函数的优化问题。因为在运筹学中,我们经常把有向图称为网络。所以这类基于有向图流量分配的优化问题也被称之为网络流优化问题。网络流优化属于组合优化问题的一种。 网络流优化中最为关心的指标有两个,一个是每条边的成本,如何分配流使得成本最小,另外一个是容量约束(capacity constraint),要在满足容量约束的条件下来分配流。这两个关键指标分别就对应最短路问题和最大流问题,而最小成本最大流问题是同时考虑这两个指标的更加一般的问题。由此就构成了网络流优化问题中最基本的三类问题。因此我们的系列笔记也会围绕这三类问题展开。下面对这三类最基本问题进行一个简单介绍。 1 Shortest path problem(最短路问题) Shortest path problem 对大家来说是一类耳熟能详的问题了。如下图所示,图中边上的数值对应两个节点之间的距离。可以看到从 2 Maximun flow problem(最大流问题) Maximun flow problem 也是常见的一类网络流优化问题,如下图所示,图中边上的数值表示每条边流量的下限和上限。那么从 3 Minimum cost flow problem (最小成本最大流问题) 最小成本最大流问题可以看做是 最短路问题和最大流问题的结合版本。在最小成本最大流问题中既要像最短路那样去考虑成本最小,同时也要考虑到每条边上存在着流量的限制(capacity的限制)。本质上来说,最短路问题和最大流问题都可以看做是一种特殊的最小成本最大流问题,而且网络流优化的很多问题都可以由最小成本最大流问题转化得来,它就是我们网络优化问题中最为核心的问题。下面直接给出最小成本最大流的问题: 定义一个有向图 其中 分析约束(1.2)可以看出 若 若 若 若采用矩阵来表达上面的优化问题 1 Shortest path problem (最短路问题) 实际上 Shortest path 可以看做是一种特殊的 Minimum cost flow problem。设 Shortest path 问题中 2 Maximum flow problem (最大流问题) Maximum flow problem 实际上也是一种特殊的 Minimum cost flow problem。设 Maximum flow problem 的起点和终点为 3 Assignment problem (指派问题) 将两个元素数量相同的集合进行匹配,令 若 同理对于 若 由此整理可得指派问题的形式为: 可以看出指派问题是一种特殊的 Minimum cost flow problem 4 Transportation problem(运输问题) 定义一个有向图 观察运输问题的特性不难发现,运输问题左边产地的节点只有出没有入,而右边的节点只有入没有出,并且最终要保证产销平衡。那么这里实际上和指派问题类似有 若 同理对于 若 由此整理可得运输问题的形式为: 对于产销平衡的问题而言有: 可以看出运输问题也是一种特殊的 Minimum cost flow problem 5 Circulation problem (组环问题) 由于所有的节点都是等于0 的 同时 这样的问题经常发生在航空优化领域中,在航空优化问题中是一类非常常见的优化问题,组环和排班问题经常一起出现。如下图所示是航班组合问题的一个简单示意解: 某航空公司需要完成四个航班飞行任务: 1 西安-成都,2 成都-拉萨,3 广州-北京,4 北京-杭州。 由于要保证每次执行了若干次飞行任务之后让飞机和机组成员依旧返回出发点,需要将上面四个航班飞行任务进行组环(保证每次都能返回出发地)。组环的解如下所示: 从上图中可以看到,西安-成都-拉萨-西安构成了一个环,广州-北京-杭州-广州构成了另外一个环。图中蓝色的连线部分 拉萨-西安和杭州-广州 并没有真正的飞行任务,但是为了让航班形成一个环 所虚拟出来的一个飞行任务。那么这一段飞行任务不会携带乘客,需要空飞,在航空业中专业名词称为“置位”。那么组环问题是 在让航班构成一个一个的环的前提下,尽量减少成本花费(也基本意味着要尽量减少置位情况的发生)。 Circulation problem (组环问题)也是一种特殊的 Minimum cost flow problem,可见网络流优化问题在实际中有着很多的应用场景。 有很多条路径,那么我们需要寻找出最短的一条路径。在图中就是
这条路径。
可以通行的最大流量的多少?这就是最大流问题。从图中不难观察得出,有两条流量的路径一条是
输送的流量是3,另外一条是
输送的流量是2,所以从
最大的流量为 2+3=5
,
个节点,
个边
(1.1)
(1.2)
(1.3)
表示所有出节点
的流量,
表示所有进节点
的流量。
则表示进出相等,节点
就是一个普通的节点;
表示流出大于流入,节点
是一个源头;
表示流出小于流入,节点
是一个需求节点。
(1.4)
(1.5)
(1.6)
是
矩阵,即图
的关联矩阵(Node-arc incidence matrix)
分别为起点和终点。我们只需令
其它的
。如果我们想求以
为起点,到图中所有其它节点的最短,则可以令
,其它的
。
,我们令
,令所有的节点cost
,同时我们在
之间增加一个虚拟的边,并令这条边的cost
,并令
。
,
,
。举个例子来讲,如下图所示左边是工人集合
,右边代表工件集合
,每个工人有且只能加工一个工件,每个工人加工每个工件的熟练度不一样,因此工人
加工工件
的 cost为
如何实现工人和工件的分配使得总的cost最小。
,则表明该节点只有出没有入,进一步有
,带入式(1.2)可得:
(2.1)
,则表明该节点只有入没有出,进一步有
,带入式(1.2)可得:
(2.2)
(2.3)
(2.4)
(2.5)
(2.6)
,
个节点,
个边,由两部分构成分别为
。如下图所示,图上左边的节点表示产品生产地,右边表示产品销售地。节点上的数字表示产量或者需求量,例如左边
节点的产量为10,
节点的产量为5,右边
节点销量为2等等。现在需要将产品从左边(产地)运送到右边(销售地),如何运输才能保证运输成本最小。这就是运输问题的基本形式。下图中边上的数值即表示从
到
运输2个产品,依次类推。
,则表明该节点只有出没有入,进一步有
,带入式(1.2)可得:
(2.1)
,则表明该节点只有入没有出,进一步有
,带入式(1.2)可得:
(2.2)
(2.3)
(2.4)
(2.5)
,
表示在边
至少需要一个流的服务。
表明所有的流是若干个环,也就是没有源头节点也没有目的节点。
表示在边
至少需要一个流的服务。