单纯形法(四)理论部分(终结)
典式
我们对于AAA先随便选择一个基,不妨假设AAA的前mmm列就是一个基(不是的话先对AAA换列即可,这不是重点,这里假设完全是为了证明简洁,实际操作的时候并不需要),则等式约束Ax=bAx=bAx=b变为:
同样,目标函数cTxc^TxcTx我们改写为:
从而,原来的线性规划变为:
我们之后,都将转为来求解这个线性规划,那么应该注意到,变量仍然是xxx,但是B,b,N,cBT,cNTB,b,N,c_B^T,c_N^TB,b,N,cBT,cNT都是常量了。
上述矩阵有点抽象,为了具体研究,我们把上面的常量进行展开。我们令
【复习一下】B−1b>=0B^{-1}b>=0B−1b>=0吗?
答案:不一定哦,不明白的自己恶补之前的单纯形法系列。
经过上述常量展开,线性规划最终成为了:
我们将上述线性规划称之为与原线性规划(LP)
对应的典式(LP')
。
注意,除了xxx,其他的全是常量。我们要找一个xxx,使得这个目标函数值最小。
之后,我们均基于上述典式来讨论。
λi\lambda_iλi在单纯形法中有一个专门的名字叫做检验数
。
定理
定理1: \quad如果上述用到的基B是一个可行基,而且所有检验数小于等于0,那么可行基对应的基可行解就是最优解。
证明:\quad由于基B是一个可行基,那么对应的基可行解就是(xB,xN)=(xB,0)=(B−1b,0)=(α1,⋯,αm,0,⋯,0)≥0(x_B,x_N)=(x_B,0)=(B^{-1}b,0)=(\alpha_1,\cdots,\alpha_m,0,\cdots,0)\ge 0(xB,xN)=(xB,0)=(B−1b,0)=(α1,⋯,αm,0,⋯,0)≥0,我们把这个基可行解代入到目标函数中去,发现值为f0f_0f0,那么有没有其他更小的值了呢?下面继续证明,所有检验数小于等于0时,没有了。
由于f0f_0f0为常数,而且所有检验数小于等于0,所以如果xNx_NxN中但凡有一个元素不为0,目标函数值都会变大(我们是最小化)。举个例子,如果λm+1=−1,xm+1=10,f0=2\lambda_{m+1}=-1,x_{m+1}=10,f_0=2λm+1=−1,xm+1=10,f0=2,那么z=f0−(−1∗10+0)=12z=f_0-(-1*10+0)=12z=f0−(−1∗10+0)=12,我们发现了什么?xNx_NxN中不能有元素取非0,否则目标函数值都会变大。
而且细心的你会发现,姑且不论你xm+1=10x_{m+1}=10xm+1=10会使目标函数变大不说,而且还可能破坏xB>=0x_B>=0xB>=0,因为你应该注意到x1x_1x1会与xm+1x_{m+1}xm+1有关(下面的那mmm个等式条件)。
证毕。
我们对于这个典式一下子就求完了最优解,超快有没有,而且前面说了这个和原始线性规划是等价的,你可以从典式一步一步写回去,所以典式最优解就是原来线性规划的最优解。
但是,所有检验数都小于等于0,我们通常没有这么好的运气。只是说,我们选了一个可行基之后,改造为典式,发现其检验数全小于等于0,我们就下结论,可行基对应的基可行解就是最优解。
所以我们要面对一般性的情况,如果有检验树大于0怎么办?
引理2: \quad如果原线性规划存在最优解,而且上述用到的基B是一个可行基,而且存在一个检验数λm+k>0\lambda_{m+k}>0λm+k>0,那么xm+kx_{m+k}xm+k对应的对应的系数β1,m+k,⋯,βm,m+k\beta_{1,m+k},\cdots,\beta_{m,m+k}β1,m+k,⋯,βm,m+k至少有一个大于0。
证明:\quad我们采用反证法,假设xm+kx_{m+k}xm+k对应的对应的系数β1,m+k,⋯,βm,m+k\beta_{1,m+k},\cdots,\beta_{m,m+k}β1,m+k,⋯,βm,m+k全部小于等于0。我们上面已经知道了,把基可行解代入的时候目标函数值是f0f_0f0。我们将基可行解进行改造,让这个非基变量xm+kx_{m+k}xm+k从0增大到+∞+\infty+∞,其他非基变量的值保持0不变,不过,其他的m个基变量也因为等式约束的问题,因xm+kx_{m+k}xm+k增大而变了,我们发现其他的m个基变量只增不减,从而仍然大于等于0。为什么?为了给大家更好理解,我们假设k=1k=1k=1,即λm+1>0\lambda_{m+1}>0λm+1>0,根据反证法假设β1,m+1,⋯,βm,m+1\beta_{1,m+1},\cdots,\beta_{m,m+1}β1,m+1,⋯,βm,m+1全小于等于0。又,我们只改造了xm+1x_{m+1}xm+1这个非基变量,其他非基变量仍然为0,所以等式约束变成了下面这样。
我们增大xm+1x_{m+1}xm+1,又前面的系数全小于等于0,那么基变量xix_ixi当然只增不减了。
即,这个被改造的解(a1,⋯,am,+∞,0,⋯,0)(a_1,\cdots,a_m,+\infty,0,\cdots,0)(a1,⋯,am,+∞,0,⋯,0)仍然是可行解,我们代入到目标函数中,看看值是多少。由于λm+k>0\lambda_{m+k}>0λm+k>0,xm+k−>+∞x_{m+k}\quad -> +\inftyxm+k−>+∞所以λm+kxm+k−>+∞\lambda_{m+k}x_{m+k} \quad ->+\inftyλm+kxm+k−>+∞,那么代入目标函数值,此时为f0−+∞+0=−∞f_0-+\infty +0 =-\inftyf0−+∞+0=−∞。发现这个线性规划没有最优解,可以为负无穷,与定理中的条件有最优解矛盾,从而反证法中的假设不成立,即:xm+kx_{m+k}xm+k对应的对应的系数β1,m+k,⋯,βm,m+k\beta_{1,m+k},\cdots,\beta_{m,m+k}β1,m+k,⋯,βm,m+k至少有一个大于0。
证毕。
还是要说的是,上面这个引理并没有指明遇到这种情况的时候,怎么找最优解。所以给出定理3。
定理3: \quad如果上述用到的基B是一个非退化的可行基(即对应的基可行解是非退化的),而且存在一个检验数λm+k>0\lambda_{m+k}>0λm+k>0,而且xm+kx_{m+k}xm+k对应的对应的系数β1,m+k,⋯,βm,m+k\beta_{1,m+k},\cdots,\beta_{m,m+k}β1,m+k,⋯,βm,m+k至少有一个大于0。那么一定存在另外一个非退化的可行基,它对应的基可行解比当前的基可行解得到的目标函数值小,即更优。
证明:\quad有了引理2,这个较容易证明。根据定理中的条件,我们假设检验数λm+1>0,β1,m+1>0\lambda_{m+1}>0,\beta_{1,m+1}>0λm+1>0,β1,m+1>0,我们依然是采用上面构造一个新的可行解的思想。不过这次我们不敢让xm+1x_{m+1}xm+1增大到无穷大了,因为:
如果增大到无穷大,又由于β1,m+1>0\beta_{1,m+1}>0β1,m+1>0,那么x1x_1x1必然无穷小。从而不满足可行解的要求。所以我们出于减小目标函数值得目的,我们当然会适当的增大xm+1=θ>0x_{m+1}=\theta>0xm+1=θ>0,使得其刚好满足等式x1=0=α1−β1,m+1θx_1=0=\alpha_1-\beta_{1,m+1}\thetax1=0=α1−β1,m+1θ,这个时候我们改造成了可行解为(0,a2,⋯,am,θ,0,⋯,0)(0,a_2,\cdots,a_m,\theta,0,\cdots,0)(0,a2,⋯,am,θ,0,⋯,0),代入目标函数值,发现其为f0−λm+1xm+1=f0−λm+1θ<f0f_0 -\lambda_{m+1} x_{m+1}=f_0-\lambda_{m+1}\theta<f_0f0−λm+1xm+1=f0−λm+1θ<f0,真的更优了!根据上一篇的补充,我们发现后面得到那个解是通过原来的基可行解相邻操作而来,从而后面那个解也是基可行解。相邻操作就是将x1=0x_1=0x1=0变成了“出”基变量,变成了非基变量,xm+1x_{m+1}xm+1变成了“入”基变量,成为了新的基变量,而且这个解也是非退化的基可行解!
细心的你会想,我上面假设只有一个检验数大于0,也只假设了检验数对应的这个非基变量对应的众多系数中的一个β\betaβ大于0,如果有多个怎么办?
- 我们先考虑有多个β>0\beta>0β>0,检验数仍然只有一个大于0的情况。我们还是采用之前的技巧,假设是前两个β>0\beta>0β>0,如下面的图,(其他的x3x_3x3为什么不管?因为那一行的β<=0\beta<=0β<=0,那么无论xm+1x_{m+1}xm+1怎么增大,x3x_3x3都会满足x3>=0x_3>=0x3>=0,满足解的可行性,这个前面引理2分析过了。)。那么我们发现xm+1x_{m+1}xm+1仍然不能无限增大,否则x1,x2x_1,x_2x1,x2都有可能变得小于0,从而我们怎么办?当然是看x1,x2x_1,x_2x1,x2随着xm+1x_{m+1}xm+1增大的过程谁先为0喽,一旦有一个为0,立马停止,记录这个时候的xm+1x_{m+1}xm+1为其最终的值θ′\theta^{'}θ′,如果x1x_1x1为0,那么新的基可行解就出来了(0,a2,⋯,am,θ′,0)(0,a_2,\cdots,a_m,\theta^{'},0)(0,a2,⋯,am,θ′,0),如果x2x_2x2为0,新的基可行解就是(a1,0,⋯,am,θ′,0)(a_1,0,\cdots,a_m,\theta^{'},0)(a1,0,⋯,am,θ′,0)。
- 我们再考虑有多个检验数大于0,各自对应系数中有多个β>0\beta>0β>0的情况,这个时候就真的比较麻烦了。因为多个非基变量都想增大到无穷大,但是又因为他们对应的系数中有些β>0\beta>0β>0,所以有所顾忌。这个是很麻烦的一件事,因为好几个非基变量都想增加,所以你让他们几个各自增加多少呢?你根本不知道,谁增加多一些,谁增加少一些会让最终目标函数最优。所以我们采取的策略,仍然是前面的相邻原则,即一次只换出一个基变量,换入一个非基变量,而不是像现在这样,有大换血的可能,因为可能会有好几个基变量为0。至于到底换入哪一个非基变量,(假设前两个检验数大于0)就先看看换入xm+1x_{m+1}xm+1,保持xm+2=0x_{m+2}=0xm+2=0(变成了前面1中的情况,相当于只有一个检验数大于0),其对应的目标函数值是多少,然后看看换入xm+2x_{m+2}xm+2,保持xm+1=0x_{m+1}=0xm+1=0,查看其对应的目标函数值,比一下,如果1好,就换入xm+1x_{m+1}xm+1,其他依次类推。总之,采取一次只换入一个的策略,不就和情况1一样了吗,最后再比一下,决定最终换入谁。那么就简单了。
情况1中的图
证毕。
即:我们可以将原线性规划的基更换为这个新的可行基,然后化成典式,回到定理1,查看检验数是不是全部小于等于0,如果是,那么这个新基对应的基可行解就是最优解,否则,根据定理3,继续出基变量,入新基变量,得到更优的基变量,即更优的基。
总结
从而得到单纯形法的基本原理,使用流程图表示如下:
单纯形法(四)理论部分(终结)相关推荐
- 科目一科目四理论考试助手藏文驾考藏语版
藏文理论驾考宝典 科目一四驾驶证学车驾照考试题库软件APP 2020年藏文版驾驶考试模拟App(带语音), 主要服务于广大藏区的藏文驾驶理论考试学员. 本软件有注意事项.科目一理论练习.科目四理论练习 ...
- 【运筹学】单纯形法的理论推导和定理证明
文章目录 1.前期理论推导,获得Fai 2.根据fai,证明三大定理(这些定理是单纯表法的理论依据) 定理1--最优解 定理2--当...LP问题无界 定理3--当...存在最优解 1.前期理论推导, ...
- 单纯形法Python实现
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一.单纯形法理论基础 二.Python代码实现 1.循环求解 2.最优性检验 3.结果输出 4.完整代码 前言 本文代码参 ...
- 系统化交易与量化交易理论与书籍
股市交易必读书籍: [美]彼得·林奇(Peter Lynch) 约翰·罗瑟查尔德 <彼得·林奇的成功投资(典藏版)>,机械工业出版社,2018年05月 [美]史蒂夫·尼森(Steve Ni ...
- 计算机ms高级应用科目一 科目二考什么,驾考提前知 | 科目一、科目二、科目三、科目四都考什么?...
原标题:驾考提前知 | 科目一.科目二.科目三.科目四都考什么? 科目一 考试内容:驾驶基本理论.道路安全法律法规.交通信号.通行规则等最基本的知识,再加地方性法规.除了记忆之外,灵活掌握规律也很重要 ...
- 手动挡科目三道路驾驶技能考试及理论考试要点
路线 每个驾校的科目三路线可能都不一样,但是考点基本差不多.我当时选的驾校是北京公交驾校,路线图如下: 考试要点 在考试大厅等待叫号,一般大屏都会公布xxx学员找xx号车考试,这边白色车是手动挡,灰色 ...
- 计算机四新知识考试题库答案,科目四题库一共多少题
科目四题库一共多少题 科目四,又称科目四理论考试.驾驶员理论考试,是机动车驾驶证考核的一部分.下面是小编为大家带来的.关于科目四题库一共多少题的知识,欢迎阅读. 科目四新增194道题,从900道题更新 ...
- 如何应用TRIZ理论解决问题呢?
一.TRIZ解决发明技术问题的方法 如何应用TRIZ理论解决问题呢?首先,要对一个实际问题进行细致地分析和准确地定义:然后,依照TRIZ理论提供的方法,把需要解决的实际问题归纳为一个类似的TRIZ标准 ...
- 关于大数据,需要你读懂的10个小故事
自2011年以来,大数据旋风以"迅雷不及掩耳之势"席卷中国.毋庸置疑,大数据已然成为继云计算.物联网之后新一轮的技术变革热潮,不仅是信息领域,经济.政治.社会等诸多领域都" ...
- 大数据陷阱:需要读懂的10个小故事
自2011年以来,大数据旋风以"迅雷不及掩耳之势"席卷中国.毋庸置疑,大数据已然成为继云计算.物联网之后新一轮的技术变革热潮,不仅是信息领域,经济.政治.社会等诸多领域都" ...
最新文章
- java fx配置_JavaFX系列-配置开发环境
- 阿里云地图添加点线面
- 如何应付表数据过大的查询问题?(如何尽量避免大表关联)[转]
- php接口返回错误码,laravel 错误处理,接口错误返回json代码
- 差点就被联通客服给营销了...
- html根据菜单角色配置菜单代码,CSS设置列表样式和创建导航菜单实现代码
- iOS项目的命名规范
- 控制用户创建课程权限
- 分享Silverlight/WPF/Windows Phone一周学习导读(10月22日-10月29日)
- 手写vue日历控件过程
- java 坐标反算_Java实现坐标反算方位角
- 【EXLIBRIS】纸版书目整理 -- 增补至2008年春节【36 种】【36 册】
- 【已解决】Mac每次重启,谷歌Chrome都会丢失所有的扩展程序/extensions/插件
- PHP上传Excel文件
- iOS13.3如何越狱 checkra1n越狱工具0.9.7beta如何使用
- PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
- 手机上的浏览器有几种内核
- ThingsBoard IOT Gateway
- 用dos命令行执行java程序的方法
- 服务器esxi虚拟机升级,ESXi 服务器安装升级补丁
热门文章
- 图灵五周年生日聚会圆满成功,多家媒体对此进行报道
- warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;使用 /NODEFAULTLIB:library问题解决方法
- 独家 | 6种让Python程序变慢的坏习惯
- 用 AI 分析蒙娜丽莎的微笑,情绪分析认为她没那么高兴
- 终于有人把云计算、物联网和大数据讲明白了
- 老友记即将回归!用数据来重温经典剧情:老友记里到底说了多少次Oh my God?...
- 独家 | 教你用卷积神经网络对视觉神经元进行建模(附资源)
- 付睿:对新事物的追寻之旅 | 优秀毕业生专访
- 教你用R语言分析招聘数据,求职/转行不求人~(附代码、数据集)
- 超越EfficientNet!MutualNet:一种自适应相互学习网络宽度和分辨率的网络