单纯形法基础

首先,梳理一下基础,线性规划一般适用单纯形法求解;非线性规划包括无约束问题,有约束问题,一般做法为将有约束转为无约束;对于离散且容易找到状态的问题,适合用动态规划。

有数学证明指出线性规划问题通常是凸规划,也就是说正常情况下,是能找到最优解的。单纯形法通过添加人工变量的形式,对原问题进行基变换,迭代获得最优解。下面是一个简单的线性规划问题,并初步用单纯形法解决:

有关线性规划单纯形算法的python实验目的 线性规划及单纯形法_迭代


首先,将原问题转化成标准型,方法是通过添加变量来使得约束转为等式:

有关线性规划单纯形算法的python实验目的 线性规划及单纯形法_线性规划_02


对照标准型,进行列表,用于单纯形法迭代计算,新添加的变量称为剩余变量,它们是默认的基。

有关线性规划单纯形算法的python实验目的 线性规划及单纯形法_线性规划_03

讲一下这里,首先看z的系数,选择最大值对应那一列,再用b分别除以该列得到theta,选择theta最小行,由此锁定x4行和x2列,意义是x2进基,x4出基;重复以上操作,并在每次进出基后通过线性变换确保(基行,基列)值为1,同列的其他值为0。因此,x2进基,x4出基后,线性变换并重新确定基为:

有关线性规划单纯形算法的python实验目的 线性规划及单纯形法_线性规划_04


计算theta时,对于系数为负数情况,直接写none即可,none不参与比较。由此锁定x3行和x1列,意义是x1进基,x3出基。再重复一次得到:

有关线性规划单纯形算法的python实验目的 线性规划及单纯形法_线性规划_05

此时,z的系数全小于等于零,迭代结束,即有解为:

有关线性规划单纯形算法的python实验目的 线性规划及单纯形法_迭代_06

这就是非常基本的单纯形法求解顺序(因为目前还未考虑在可行基内迭代这件事情)

大M法

前面的解法有一个前提条件,迭代已经在可行基内,但对于大部分问题,还需要找到可行基,才能迭代,为了一步到位,就出现了大M法;
大M法的原则是先构造包含大M的标准式,把大M视为一个无限大的数值,然后用前面进出基的解法求解即可得到结果;
构造大M标准型
先加变量:
对于有关线性规划单纯形算法的python实验目的 线性规划及单纯形法_单纯形法_07的约束条件,直接加一个剩余变量有关线性规划单纯形算法的python实验目的 线性规划及单纯形法_迭代_08
对于有关线性规划单纯形算法的python实验目的 线性规划及单纯形法_线性规划_09的约束条件,先减去一个剩余变量有关线性规划单纯形算法的python实验目的 线性规划及单纯形法_迭代_08,再加人工变量有关线性规划单纯形算法的python实验目的 线性规划及单纯形法_迭代_11
对于等式约束有关线性规划单纯形算法的python实验目的 线性规划及单纯形法_单纯形法_12,直接加人工变量有关线性规划单纯形算法的python实验目的 线性规划及单纯形法_迭代_11
在问题原来的target函数中,加上:
有关线性规划单纯形算法的python实验目的 线性规划及单纯形法_线性规划_14
最后一步,min条件转为max,选择人工变量作为基变量,将其对应的检验数化为0