一、预备知识
我们在上两篇博客中讲了两阶段法和大M法的简单原理和流程,其中,我们只是把两阶段法和大M法当作了表达原问题的一种特别的方式,好像我们是凑巧通过两阶段法和大M法能够获得原问题的最优解。笔者怎么想也想不通,这个凑巧成功背后的原理到底是什么,所以有了以下思考。
先再声明我们的结论:两阶段法和大M法是通过检验原有问题的所以约束能否同时满足判断是否有可行解的。
二、提出问题
1、原问题
这是我们的原问题:
对了,之前的两篇博客我们都忘记提到一个重要概念了,那就是人工变量该怎样添加? 按照笔者的理解,添加人工变量只是方便验证原有问题的所以约束能否同时满足,因此可以在任意约束添加人工变量,甚至可以添加多个人工变量。
2、针对两阶段法的问题
这是两阶段法中的第一阶段问题 ,对此,我们的问题是①为什么人工变量之和等于0时,对应原问题有可行解?②为什么要让目标函数等于人工变量之和?
问题①:其实这个问题是非常简单的。我们先假设x5的最小值只能等于1,我们还原到原问题的约束,得到-2x1+x3=-1,就说明原问题在满足其他约束的情况下,第二个等式约束无法满足,那么就没有可行解。
问题②:在问题①中我们已经解释了,我们最终结果就只要人工变量之和等于0,所以我们不用求人工变量之和等于0,我们甚至可以求Min=ax1+bx2+cx3(a,b,c>0即可)。
我们用Lingo求解,并将该问题两阶段法的第一阶段问题求解,观察到人工变量之和为0,说明原问题存在可行解,求解代码及过程如下:
再次说明:两阶段法的第一阶段问题可以在任意约束中添加多个人工变量,目标函数也可求取任意正系数的人工变量之和,即Min=ax1+bx2+cx3(a,b,c>0即可)
3、针对大M法的问题
这是大M法对应的问题,对此,我们的问题是:①为什么M一定是尽可能大的正数?可不可以是较小的正数(甚至是负数)呢?②这样的变化对原有目标函数值不会有影响吗?
问题①: 为了解决这个问题,笔者尝试了很多组参数,发现几组有价值的参数,供大家观赏。分别是(-1000,-1000,-1000),(0,0,0),(0,0,0.0001),(-19.999,-8.999,0),(-20,-9,0),(-20.0001,-9.0001,0)。其中(a,b,c)分别表示人工变量对应的系数。
实验结论:
(-1000,-1000,-1000),最优解不变。
(0,0,0),最优解不变。
(0,0,0.0001)
(0,0,0.0001),给问题存在无界解;(可以直观看出来)
(-19.9999,-8.9999,0)时,最优解不变;
(-20,-9,0)时,目标函数值不变,但是解发生变化;
(-20.0001,-9.0001,0)目标函数值变化,解变化;
我们列举了最后三种参数情况的求解结果:
这说明我们采用大M法时,可以不用把M当作尽可能大的正数,而是存在边界的,原来我们真的是凑巧获得的最优解。
笔者暂时也无法判断出为何会这样,如果我们有更高的视角维度,就可以从几何的角度理解,可惜我们无法想象高维空间,但是我们仍然可以通过代数的方法进行理解。笔者感觉应该可以从对偶问题的角度进行尝试。
三、结论
(1)两阶段法和大M法是通过检验原有问题的所以约束能否同时满足判断是否有可行解的。
(2)两阶段法的第一阶段问题可以求任意正系数人工变量之和,Min=ax1+bx2+cx3(a,b,c>0即可)
(3)大M法的目标函数中人工变量的系数也不一定需要是尽可能大的值,而是存在边界的。
(4) 无论是两阶段法还是大M法,可以在约束中添加任意多个人工变量,但是在目标函数中需要有相应的措施。那为什么我们只在每个约束添加一个人工变量呢?是方便构造单位矩阵呀!这样我们就可以直接用单纯形表迭代啦!