应用运筹学基础:线性规划(2)单纯形法TsReaper

这一节课讲解了求解线性规划问题的方法:单纯形法(simplexmethod)。

记辅助向量$v=\begin{bmatrix}\lambda_1&\lambda_2&\dots&\lambda_k&0&0&\dots&0\end{bmatrix}^T$,我们仍然构造$x'=x+\epsilonv$和$x''=x-\epsilonv$(熟悉的套路...)。显然有$x=\frac{x'+x''}{2}$,由于$x$是最优解,当然$x'$和$x''$也是最优解。如果存在$\lambda_i<0$,那么我们取$\epsilon=\min\limits_{\lambda_i<0}-\frac{x_i}{\lambda_i}$,就能把$x'$中$x_1$到$x_k$的某一个变成0;如果不存在$\lambda_i<0$,那么我们取$\epsilon=\min\frac{x_i}{\lambda_i}$,就能把$x''$中$x_1$到$x_k$的某一个变成0。也就是说,非0元素少了一个。这样一直构造下去,我们就能不断减少非0元素,直到$x_1$到$x_k$在$A$中对应的$k$列线性无关,$x$就变成了一个基可行解。而且在构造过程中,最优性没有改变,$x$还是最优解。

接下来介绍用单纯形法(simplexmethod)求解线性规划问题的方式。单纯形法的每一步都在引入一个非基变量取代某一基变量,找出目标函数值更优的另一基本可行解,这样一步一步调整到最优解。

来看一个例题:$$\begin{matrix}&\max\limits_{x}\quad3x_1+2x_2\\\text{s.t.}&2x_1+x_2\le12\\&x_1+2x_2\le9\\&x_1,x_2\ge0\end{matrix}$$引入松弛变量,将原问题变为$$\begin{matrix}&\max\limits_{x}\quadz=3x_1+2x_2\\\text{s.t.}&2x_1+x_2+x_3=12\\&x_1+2x_2+x_4=9\\&x_1,x_2,x_3,x_4\ge0\end{matrix}$$首先,我们有一个可行解:$x=\begin{bmatrix}0&0&12&9\end{bmatrix}^T$,当前目标函数值为$z=0$。我们把各个变量用非基变量进行表示,有$$x_3=12-2x_1-x_2\\x_4=9-x_1-2x_2\\z=3x_1+2x_2$$看起来$x_1$对$z$的贡献比$x_2$来的大($x_1$的系数比较大,这个系数称为“检验数”),我们考虑把$x_1$变成基变量。要注意,$x_3\ge0$和$x_4\ge0$的条件仍然需要成立。根据$x_1$与$x_3$和$x_4$之间的表达式不难看出,当$x_1=6$时,$x_3$最先变成0,我们把它从基变量中去除。

现在,可行解变为$x=\begin{bmatrix}6&0&0&3\end{bmatrix}^T$,当前目标函数值为$z=18$。继续把各个变量用非基变量进行表示,有$$x_1=6-x_2/2-x_3/2\\x_4=3-3x_2/2+x_3/2\\z=18+x_2/2-3x_3/2$$从系数可以看出,只有增加$x_2$才能对目标函数值的增大有所贡献,考虑把$x_2$变成基变量。从$x_2$与$x_1$和$x_4$的关系式中也不难发现,当$x_2=2$时,$x_4$最先变成0,我们把它从基变量中去除。

当然,完全有可能出现某一个变量可以无限增大,求不出最优解的情况。考虑以下线性规划问题:$$\begin{matrix}&\max\limits_{x}\quad2x_1+x_2\\\text{s.t.}&-3x_1+x_2\le3\\&-4x_1+x_2\le5\\&x_1,x_2\ge0\end{matrix}$$加入松弛变量后有$$\begin{matrix}&\max\limits_{x}\quad2x_1+x_2\\\text{s.t.}&-3x_1+x_2+x_3=3\\&-4x_1+x_2+x_4=5\\&x_1,x_2,x_3,x_4\ge0\end{matrix}$$有初始可行解$x=\begin{bmatrix}0&0&3&5\end{bmatrix}^T$,仍然用非基变量表示其它变量,有$$x_3=3+3x_1-x_2\\x_4=5+4x_1-x_2\\z=2x_1+x_2$$从$x_1$和$x_3$与$x_4$的关系式中可以看出,不管$x_1$如何增大,两个基变量都不会小于0,而且$x_1$的检验数也是正数,那么这个优化问题没有最优解。

归纳起来,单纯形法的基本步骤如下(来自wiki):

可以用矩阵的形式,把各个变量用非基变量进行表示。

设要优化的线性规划问题(标准形式)为$$\begin{matrix}&\max\limits_{x}\quadz=c^Tx\\\text{s.t.}&Ax\leb\\&x\ge0\end{matrix}$$我们可以把各个矩阵或向量根据基变量和非基变量分为两部分:令$c^T=\begin{bmatrix}c_B^T&c_N^T\end{bmatrix}$,令$A=\begin{bmatrix}A_B&A_N\end{bmatrix}$,令$x=\begin{bmatrix}x_B^T&x_N^T\end{bmatrix}^T$,显然我们有$$A_Bx_B+A_Nx_N=b\\z=c_B^Tx_B+c_N^Tx_N$$通过移项就能用$x_N$表示其它变量:$$x_B=A_B^{-1}b-A_B^{-1}A_Nx_N\\z=c_B^TA_B^{-1}b+(c_N^T-c_B^TA_B^{-1}A_N)x_N$$当然啦,由于基可行解中$x_N=0$,我们有$$x_B=A_B^{-1}b\\z=c_B^TA_B^{-1}b$$单纯形表可以帮助我们利用矩阵形式,通过列表的方式求解线性规划问题,也利于编程实现。

首先画一张这样的表:$$\begin{array}{c|cc|c}&c_B^T&c_N^T&0\\\hlinex_B&A_B&A_N&b\end{array}$$利用行变换将$A_B$变为$I$,根据线性代数的知识,这相当于左乘了一个$A_B^{-1}$,那么表会变成这样:$$\begin{array}{c|cc|c}&c_B^T&c_N^T&0\\\hlinex_B&I&A_B^{-1}A_N&A_B^{-1}b\end{array}$$然后再把下面一行乘上$c_B^T$,用上面一行减一减,得到$$\begin{array}{c|cc|c}&0&c_N^T-c_B^TA_B^{-1}A_N&-c_B^TA_B^{-1}b\\\hlinex_B&I&A_B^{-1}A_N&A_B^{-1}b\end{array}$$这是一张非常神奇的表:第一行第二列($x_B$那一列我们不看)就是检验数,第一行第三列就是$-z$,而基变量和非基变量之间的系数也可以通过第二行的第二、三两列求出,计算起来非常方便。表格每这样计算一次,就是单纯形法里的一次迭代。

虽然这个表格看起来有点麻烦(比如,看起来每次迭代好像都要重新写上$A_B$和$A_N$什么的,从头开始变化?),但实际操作起来是非常简便的,每次迭代的变化不会很多。看一个例子就知道了:

$$\begin{matrix}&\max\limits_{x}\quad3x_1+2x_2\\\text{s.t.}&2x_1+x_2\le12\\&x_1+2x_2\le9\\&x_1,x_2\ge0\end{matrix}$$这个例子和上一节的例子是一样的。仍然加入松弛变量变化为标准形式:$$\begin{matrix}&\max\limits_{x}\quadz=3x_1+2x_2\\\text{s.t.}&2x_1+x_2+x_3=12\\&x_1+2x_2+x_4=9\\&x_1,x_2,x_3,x_4\ge0\end{matrix}$$初始的基可行解是$x=\begin{bmatrix}0&0&12&9\end{bmatrix}^T$,绘制初始的单纯形表:$$\begin{array}{c|cccc|c}&3&2&0&0&0\\\hlinex_3&2&1&1&0&12\\x_4&1&2&0&1&9\end{array}$$由于$x_B=\begin{bmatrix}x_3&x_4\end{bmatrix}^T$,所以此时的$A_B$由第二行和第三行的三、四两列组成,而且恰好是$I$;$c_B^T$由第一行的第三、四两列组成,而且恰好是0,我们直接来到了最后一步。

退化是指一个基可行解中,存在至少一个基变量为0的情况。也就是说,这个基变量可以和另一个非基变量任意互换,而不影响结果(反正两个变量在这个解里取值都是0)。

不过,我们可以使用如下法则让单纯形法一定不会陷入循环(也就是一定能找到最优解):在有多个可以入基的变量时,选择下标最小的一个;在有多个可以出基的变量时,也选择下标最小的一个。不过我不会证明...

接下来证明单纯形法在非退化的情况下为什么可以取到最优解,以及为什么可以停止。

首先证明:若检验数向量$\hat{c}=c_N-c_B^TA_B^{-1}A_N$的每一维都小等于0,那么此时基可行解$x$是最优解。

反证:假设有一个更优的$y$才是最优解。令$d=x-y$,我们有$$Ax-Ay=b-b=0\\=Ad=A_Bd_B+A_Nd_N$$那么$$d_B=-A_B^{-1}A_Nd_N$$则$$c^Td=c_B^Td_B+c_N^Td_N\\=(c_N^T-c_B^TA_B^{-1}A_N)d_N=\hat{c}d_N$$要注意,这里的B(基变量)和N(非基变量)都是对于$x$而言的。

显然根据基可行解的定义$x_N=0$,又$y\ge0$,所以$d_N\ge0$;又$\hat{c}\le0$,所以$c^Td=\hat{c}d_N\le0$,那么$c^Ty=c^Tx+c^Td\lec^Tx$,说明$y$并没有比$x$更优,矛盾。这就说明了为什么在检验数均小等于0时停止算法,就能得到最优解。

类似地,我们可以说明若基可行解$x$是非退化的最优解,那么检验数向量的每一维都小等于0。否则由于$x$是非退化的最优解,如果有一个检验数大于0,它对应的非基变量一定有增加的空间(而不会像退化的解一样,增加的空间为0),那么就能构造一个更优的解。这就说明了,在非退化的情况下,肯定有解满足算法停止的情况。

THE END
1.第四节单纯形法单纯形法的基本思想是:从可行域的一个基可行解(一个顶点)出发,判断该解是否为最优解,如果不是最优解就转移到另一个较好的基可行解,如果目标函数达到最优,则已得到最优解,否则继续转移到其他较好的基可行解。由于基可行解(顶点)数目有限,所以在一般情况下经过有限次迭代后就一定能求出最优解。 https://www.360doc.cn/article/55518189_1105824506.html
2.单纯形法表的解题步骤.pdfMade By Haowei Song 单纯形法表的解题步骤 单纯形法表结构如下: cj → 对应变量的价值系数 θ i CB X b b x1 x2 x3 xj 基变量的 θ规则 基变量 资源列 价值系数 求的值 σj 检验数 ①一般形式 若线性规划问题标准形式如下: =+ + + + max z 2x 3x 0x 0x 0x 1 2 3 4 5 + + ?x1 ...https://max.book118.com/html/2017/0611/113507628.shtm
1.运筹学单纯形法总结(单纯形法原理单纯形法流程单纯形表...参考博客 : 【运筹学】线性规划数学模型 ( 单纯形法原理 | 单纯形法流程 | 查找初始基可行解 )单纯形法的理论基础 :定理 1 1 1 ( 可行域是凸集 ) : 如果线性规划的问题 存在可行解 , 其 可行域 必定是 凸集 ;定理 2 2 2 ( 基可行解是凸集顶点 ) : 线性规划的 基可行解 X B X_B XB? ...https://blog.csdn.net/shulianghan/article/details/114498881
2.运筹学表上作业法(示例使用“闭回路法“计算检验数...运筹学 三、单纯形法(2)(计算步骤,单纯形表) 利用单纯形法做单纯形法的题目,必须会画单纯形表,下图是单纯形表分布: 还是以例题看解题步骤更直观: 第一步,先标准化: 接下来是画单纯形表,先画初始单纯形表, 讲解:Cj那一行写的是目标函数的系数,Cb那一列表示的是基变量的系数(由于初始单纯形表的基变量是...https://www.pianshen.com/article/33632240677/
3.天津科技大学研招网5.掌握EMP与TCA代谢途径及代谢特点(包括物质代谢过程特点;能量代谢分析及其依据);TCA代谢回补途径;HMP代谢途径的生理意义;糖异生代谢方式与生理意义;乙醛酸循环代谢方式与生理意义;糖代谢的应用如柠檬酸发酵机制。各糖代谢途径中关键的不可逆步骤,关键的限速酶和调节机理。 https://apps.eol.cn/138/article/781451.html
4.EXCEL中的规划求解Fylstra提供的有界变量单纯形法和分支边界法。 2、如何加载“规划求解” 安装office的时候,系统默认的安装方式不会安装宏程序,需要 用户根据自己的需求选择安装。 下面是加载“规划求解”宏的步骤: 1)在“工具”菜单上,单击“加载宏”。 2)在弹出的对话框中的“可用加载宏”列表框中,选定待添加的加 ...http://www.360doc.com/document/15/1213/10/27997709_520017600.shtml
5.2018年硕士研究生入学考试考试大纲1.正弦量的有效值,正弦量的相量表示,相量法的基本概念。 2.电路元件的电压-电流关系的相量形式,阻抗、导纳及其等效互换,基尔霍夫定律的相量形式。 3.用相量法分析正弦稳态电路时的电路方程、电路定理,正弦稳态电路的分析,相量图。 4.正弦电流电路的瞬时功率、有功功率、无功功率、表观功率(视在功率),功率因...https://yz.shmtu.edu.cn/2021/0426/c8936a133164/page.htm
6.运筹学单纯形法总结(单纯形法原理单纯形法流程单纯形...? ?12、第二次迭代 : 生成新的单纯形表 ? ?13、第二次迭代 : 计算检验数、最优解判定 ? ?四、单纯形法案例二 ? ?1、线性规划示例 ? ?2、转化成标准形式 ? ?3、初始基可行解 ? ?5、计算检验数 ? ?6、...https://blog.51cto.com/u_14202100/5082032
7.单纯形法和单纯形表什么是初始单纯形表腾讯云开发者社区线性规划常用的方法是单纯形表法,下面用一个简单的例子告诉大家如何用最简单的方法求取目标函数Z值。 用单纯形方法求解线性规划问题 : 首先引入松弛变量 ,把原问题化为 标准形式: 具体步骤如下: 第1步,确定初始单纯形表 第2步: 判别检验所有的检验系数 (1)如果所有的检验系数 ...https://cloud.tencent.com/developer/article/2167008
8.医学图像配准范文9篇(全文)本文采用小波变换进行图像融合,将待融合的两幅图像进行精确的匹配,以互信息作为相似性测度,采用改进单纯形法作为优化搜索算法,求出最优配准变换参数,得到空间位置、图像大小一致的图像。针对配准后的图像进行离散小波分解,将两幅图像分解在不同频率下的不同特征域上,对于高频系数融合采用基于像素点绝对值取大的规则,...https://www.99xueshu.com/w/ikey8ebq6cef.html