10分钟看明白大M法和两阶段法

相信学习本章节的朋友都是掌握了单纯形法后,准备学习大M和两阶段法,但是却不知道如何下手;亦或是知道大概过程但是又不清楚中间原理如何实现的。那么这篇文章将会解决以上两种情况给大家带来的困惑。

首先我们先提出几个问题:
1. 为何学过单纯形法后还要继续学习大M法和两阶段法。
2. 大M法和两阶段法的过程有何不同,不同应用场景怎样灵活使用。


针对问题一: 在运用单纯性法解题时,我们通常会苦恼于其繁琐的过程----换基迭代,一个不小心就会计算错误,但是除了这个问题以外,我们在还没有进行画表,即进行选择基向量时也有可能不知所措。这是因为我们平时遇到最多的情况就是不用进行初等行变换就可以得到单位矩阵,进而直接将其作为基向量进行单纯性表的计算,从而忽视了一些特殊情况。这种情况就是无法直接得到单位矩阵----即无法直接得出基向量,在这种情况下我们就需要运用大M法和两阶段法来进行寻找基变量。


针对问题二: 在讲解问题二之前,我们先来说明以下大M法和两阶段法的应用是如何实现的,相信这也是大多数人点进来的原因。接下来的讲解中我们以下面这个线性规划问题为例。

minS = 2x1 + 3x2 + x3

x1 + 4x2 + 2x3 ≥ 8

3x1 + 2x2 ≥ 6

x1,x2,x3 ≥ 0


下面使用 大M法进行大致解答(解题过程中会省略迭代,建议看完后自己动手写一遍):

  1. 首先,我们要将不等式化为标准形式,但化完之后----也就是添加过‘-x4’和‘-x5’后,并不能直接得到单位矩阵,正如上文所说,这就是大M法等要引入人工变量的情况。为了得到单位矩阵,我们要将原式化成:

10分钟看明白大M法和两阶段法_第1张图片

  1. 根据上图,我们可以发现x6和x7已经构成了单位矩阵,所以接下来我们就可以将其按照一般单纯形法的解题过程进行求解。特别说明:当人工变量出基之后就不要再让其入基,毕竟我们的目的就是以人工变量为跳板求出需要的基变量。最终结果为X{4/5,9/5,0,0,0}; 最优值S = 7(博主自己求解的,答案仅供参考,不一样请留言)

其中M指的是一个绝对值无限大的值,一般情况下在函数为Min时要用’M‘,在Max情况下要用'-M'。目的是保证人工变量一定能够被替换----出基,因为最后大M法中所引入的人工变量最后的赋值均为0,否则等式也不会成立。


接下来讲解一下 两阶段法 的求解过程:

(下文部分引自知乎网友:饭饭。原文有改动)

第一阶段: 首先,构造一个只含有人工变量的目标函数,并求其极小值(标准化)。如果,最后能求得Z=0(Z = y1+y2+y3…)。说明原目标函数存在基可行解。因为添加的人工变量本来是作为基变量,最后得到的最优单纯型表显然是把人工变量转变成了非基变量,因为非基变量等于零才有Z=0(也就是所有的人工变量都已经出基)。所以,此时一定在原有变量的之中找到了基变量,构成了一个单位阵,即找到了存在的初始可行解。既然找到了初始可行解,那么第二阶段就可以进行了。
第二阶段:(因为之前做的各种行变化,都并不影响约束条件本身。)去掉人工变量,把价值系数换成原本的系数。就可以像初始单纯型表那样直接计算了。

对于仍然不理解为何Z值为0,就说明原式有可行解的朋友。我先抛砖引玉的大概说下:y变量是我们为了找到基变量所引入的人工变量,而人工变量只能从原有的x中去寻找,所以最终基变量中一定是不会存在y变量的(若有可行解的话),那么此时y变量一定是出基变成了非基变量,也就是最后赋0,因此Z=0。

(下文部分引自知乎网友:常枫浩。原意无改动)

我的想法:人工变量是强行引入的(比如国足引入里皮),与原变量无关,所以如果确定的初始可行解含有人工变量(必须有里皮才可以,离不开里皮),则说明原问题必须引入外变量才有解(说明国足必须引入外援才行),这说明原问题无解(说明国足真的不行)。反之,若最终确定的可行解不含人工变量(最后赶走里皮国足还行),则说明原问题有可行解,在这个基础上求最优解即可。

用两阶段法怎样解题

如上文所说,首先构造一个只含人工变量的目标函数,并将人工变量加入等式中,有几个等式就创建几个人工变量(这里忽略标准化过程),博主没有查到为何要将人工变量加入等式中,知道的朋友可以在评论区说一下。
10分钟看明白大M法和两阶段法_第2张图片
接下来就是以y变量为基变量进行单纯形法的计算,最终如果能够使得所有的人工变量均出基说明有可行解,并且这时只看X等变量,即忽略人工变量的系数值。就可得到目标函数最优解和对应的x解值。最终答案与上文相同。

原创不易,你的鼓励是最大的支持。(约耗时1小时47分钟)

你可能感兴趣的:(运筹学,算法)