首页 > 其他分享 >线性规划

线性规划

时间:2023-04-30 13:11:39浏览次数:27  
标签:线性规划 源点 流量 我们 汇点 节点

线性规划问题

线性规划问题指的是:给定若干个变量,这些变量满足一系列线性等式关系或线性不等式关系,要在满足这些关系的前提下求出某个这些变量的线性函数的最大值或最小值。

我们可以用“归约”的思想把线性规划问题的描述统一为标准的形式,称为“标准型”:首先我们可以把问题归约为所有自变量都是正数的情况,如果存在一个自变量\(x\)可以取负数,那么我们就定义两个新的变量\(x^+\)和\(x^{-}\),并永远用\(x^{+}-x^-\)来替换\(x\)。这样就保证了所有变量的取值范围都\(\geq 0\)。任何一个线性规划给出的约束的不等关系\(a_1x_1+a_2x_2+\cdots+a_nx_n \geq 0\)可以写作\(a_1x_1+\cdots+a_nx_n-s_n=0\)且\(s_n \geq 0\),这样就在所有自变量都\(\geq 0\)的基础上,把所有的不等式约束都转化为了“等式约束”。对于要求的目标函数,如果是求最小值,我们就给它取个负号,最后再取回来,这样就转化为了求最大值。因此,一切线性规划问题都可以转化为标准型——变量非负,等式约束,求最大值。

我们可以通过作图来求解线性规划问题:如果变量的数量为2,那么等式关系就对应着平面上的一条直线。令目标函数等于某个量,这个量的变化可以看作确定斜率的直线的平移。所以我们的点在直线围成的多边形的边上运动,同时经过该点做该斜率的直线,直线能达到使目标函数最小的地方就是我们的最优解。变量个数为3的情况同理,此时可行域是空间中的多面体,平移的直线变成了平移的平面, 其它情况都类似。

如果变量的个数达到\(n\)个,我们难以用“作图”来描述。但我们注意到这样一个事实:在二维中我们的答案一定对应着目标函数的极值点,假设可行域是一个凸多边形,我们的答案总是在其某个顶点上取到,并且在最终的顶点上,它相对于我们的平移直线一定是最高的点;三维情形也是类似的,我们最终答案的顶点一定是在目标函数意义下最高的。

我们用“单纯形法”来描述这一事实,并由此在\(n\)维的线性规划中也得出了一个可行的算法:我们把所有“空间多面体的顶点”想象为“节点”,“空间多面体的棱”想象为“边”。从任意某个节点出发,如果它周围有一个节点,在那上面目标函数的取值更大,就走到那个节点,直到无法走到任何节点,即此时到达了一个极值点。那么可以证明这个极值点就是最优解。

值得注意的是,线性规划的正确性是由“实数”这一定义域保证的,对于很多的应用性问题,尽管给出的约束都是整数,但最优解不一定在整数处取到。如果要加上“解必须是整数”这一限制,问题就会变得非常复杂——它已经不再是“线性规划”问题而是“整数规划”问题了。

网络流

在一张只有一个源点和一个汇点的有向图上,边权代表“最大容量”。想象单位时间内有水流从源点流向汇点,每个节点没有储存水流的能力,因此流进的流量必须等于流出的流量,并且每条边上的流量不能超过最大容量,问单位时间最多能流过多大的水流?

这就是最大流问题。我们发现它其实就是一个线性规划的问题:有\(|E|\)个变量,代表每条边的流量,每条边的流量不能超过最大容量是线性不等式约束,每个节点流进等于流出是线性等式约束,要求的目标函数是从源点出发的流量综合(或流入汇点的流量综合)是线性函数。因此我们只需要在这些约束的基础上执行“单纯形法”就可以求出最大流了。

我们想更仔细地看一看,“单纯形法”对应到“网络最大流”这个具体的问题上是如何工作的。在单纯形法中,我们每次要走到一个某个使得目标函数更大的节点上。在这里,“目标函数更大”就对应着“流过了更多的水流”。如果把最终的“最大流的解”拆分成若干从源点到汇点的单一路径,那么这种“目标函数变得更大”就对应着在原先的水流分布上找到了一条新的从源点到汇点的路径可以流通。因此,我们可以记下每条边还最多可以通过多少流量,然后以这个流量为边权找一条从源点到汇点的边权始终为正的路径(用BFS就可以完成),取路上经过的最小边权作为流量,这就是一条通路了。不停执行这个过程,就是在执行“单纯形法”,因此直到我们找不到任何通路,我们就一定到达了最大流。这就是网络最大流的“增广路算法”。

但是,单单在“残量网络”上寻找增广路这种转化和数学上的“单纯形法”还是存在出入的,很容易举出反例以上算法中一条路径有可能堵住了别的路径,导致最终无法成功找出最大流。原因在于我们在线性规划问题中“叠加两个解”的时候是在实数上操作的,而在增广路上一旦我们选定了某个流量,就不能再添加反向的流量了。我们在“增加流量”这一操作上抹去了原本应该存在的其它选择——一条容量为5的边,假设我们已经正向给了它大小为3的流量, 那么接下来它可以选择继续正项增加2的流量,也可以选择反向增加3的流量——残量网络应当是包括两个方向的!这样我们就得到了一个完整的残量网络来执行我们的单纯形算法。

最大流最小割定理

对于一个网络流,我们把点划分成集合\(L,R\),其中源点在\(L\)中,汇点在\(R\)中。有若干边是横跨\(L,R\)的,有从\(L\)到\(R\)的也有从\(R\)到\(L\)的,这些边就称为一个“割”。我们定义割的大小是所有从\(L\)到\(R\)的边的容量之和

显然,任意一个流的大小都不可能超过任意一个割的大小。因为割的大小本身就限制了最大的流的大小。因此我们证明了最大流小于等于最小割。

现在我们要证明,存在一个割的大小等于最大流。考虑执行完了增广路算法的残量网络,在这张图上一定不再存在从源点到汇点的路径了(如果存在就又找到了一条增广路),即在此时的残量网络上源点到汇点是不连通的。那么我们令集合\(P\)中存放所有从源点出发可达的节点,余下的节点存放在集合\(Q\)中。我们证明\(P,Q\)形成的割的大小就等于最大流——对于原图中从\(P\)到\(Q\)的所有边,它们在残量网络中一定被设为了0,不然就找到了一条到达\(Q\)中某个点的路径,与\(P,Q\)的定义矛盾,因此在原图中从\(P\)到\(Q\)的边都被流满了;原图中从\(Q\)到\(P\)的边必须流量为0,否则就会出现从\(P\)到\(Q\)的残量边,再次矛盾。因此这个割的大小就恰好等于\(P\)到\(Q\)的流量——最大流。 满足这个取等条件的割根据性质一定就是最小割。

标签:线性规划,源点,流量,我们,汇点,节点
From: https://www.cnblogs.com/qixingzhi/p/17365156.html

相关文章

  • 线性规划——物流配送问题的R实现
    物流配送是电商物流的主要方式,基于电子商务的特点,对整个物流配送体系实行统一的信息管理和调度;按照用户订货要求,在物流中心进行理货工作,并将配好的货物送交收货人。物流仓储配送服务已然成为中国电子商务最为核心的作业环节,能够提供一个全面完善的物流仓储配送解决方案也成为了很......
  • 带有PV面板和电池的孤岛微电网的混合整数线性规划(MILP)调度
    带有PV面板和电池的孤岛微电网的混合整数线性规划(MILP)调度测试环境:MATLAB,YALMIP,GUROBI将负荷和太阳辐射预测作为输入。返回计划范围内(例如一周)的每个组件的计划。试图最大程度地减少甩负荷和减少发电量。ID:14100644860196918......
  • 司守奎《数学建模算法与应用》课后习题:线性规划
    写在最前面:    我是一个刚学数模的小白,觉得把自己的思路和代码啊公式写出来能提升学习效率,在参考了司守奎老师的《数学建模算法与应用》(第二版)一书后想把自己的想......
  • 线性规划 2
    强对偶性的证明接续上次的讨论,我们已经得到了弱对偶性,这导出了最大匹配不大于最小点覆盖。然而需要了解的是,在二分图中二者相等,这就对应着强对偶性。我们首先需要考察的......
  • 线性规划
    十级考点线性规划。一开始打算把单纯形写了跑路的,到后面发现这是个大坑。填了得了。线性规划的定义线性规划是一个需要最大/小化某个受限于有限个线性约束(线性等式和线性......
  • 线性规划 1
    推荐阅读:https://www.cnblogs.com/frankkk/p/9179190.htmlhttps://zhuanlan.zhihu.com/p/31644892https://blunt-axe.gitee.io/2020/02/19/20200219-LP-Duality/写到一......
  • Matlab遗传算法工具箱的使用及实例(线性规划)
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • Matlab遗传算法工具箱的使用及实例(非线性规划)
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • 转化为线性规划问题
    非线性复合函数绝对值(例如1-范数和无穷范数)含绝对值()1非线性复合函数,如果只是简单的嵌套函数,内层就是包含全部变量的线性函数且外层没有变量,可以直接等价于线性目标函......
  • 9/6 学了一点线性规划,打了一把cf div2被薄纱
    9/6日23:18才参加完cf的一场div2比赛,真难,我只会A题,后面再读题也不会了。希望下一次参赛能会更多。下午学习了数学建模的线性规划部分,深刻的感觉到自己的不足的数学功底,......