线性规划之单纯形法

一、前言

迭代改进思想是算法设计中常用的求解最优问题的方法,一般思路是:

  • 任取一个可行解
  • 判断可行解是否是最优的,若是,算法结束
  • 若不是,找到一个比当前可行解更好的可行解,并替代它,继续步骤2
    事实上,判断可行解的过程就能找到(或不能)一个更好的可行解。
    线性规划问题,是在约束条件下求最大值或最小值的问题。
    例如
    线性规划之单纯形法_第1张图片
    线性规划之单纯形法_第2张图片
    显然z=3x+5y的x越大越好,y越大越好。x=3,y=1得zmax=14

而解线性规划问题最好的方法,就是单纯形法了,它也是用到了迭代改进的思想。此外,网络最大流问题,二分图的最大匹配问题,稳定婚姻问题均用到了迭代改进的思想。

二、单纯形法

单纯形法,是美国数学家George B. Dantzig于1947年发明的解决线性规划问题的经典算法,他被公认为是线性规划理论之父,也是单纯形法的发明者,由于瑞典皇家科学院不设诺贝尔数学奖,因此无缘得此殊荣。
后来1975年,苏联的Kantorovich和荷裔美国人Koopmans因为对线性规划理论及其经济学应用的贡献获得诺贝尔经济学奖。
准备工作:标准形式,引入松弛变量。
单纯形法要求先要把线性规划的不等式转化为标准形式

  1. 必须是一个最大化问题。若是最小化问题,如求z=3x+5y的最小值,可以在转化为求-z=-3x-5y的最大值。
  2. 所有约束都用线性方程组的形式表示,即全用等号表示。
  3. 所有变量非负。
    为了使不等式转变为等式,引入松弛变量,看个例子就明白了。
    在这里插入图片描述
    引入松弛变量u,v,得:
    线性规划之单纯形法_第3张图片

验算一下,u=4-x-y≥0,得x+y≤5,是等价的。同理v=6-x-3y≥0等价于x+3y≤6。
引入松弛变量的目的就是把不等式转化为等式。
单纯形法步骤演示
第一步,初始化,先给出单纯形法的初始表
(x,y)=(0,0)为起点,则(x,y,u,v)=(0,0,4,6), 简写为(0,0,1,1),表示x和y为非基本变量,u和v为基本变量。
线性规划之单纯形法_第4张图片

以u,v为基本变量(它们组成单位矩阵),x和y为非基本变量。第一行和第二行对应线性方程组的系数,最后一行(目标行)对应目标函数的系数取反(为什么取反,目前还没搞懂)。
最后一列表示基本变量的取值,最后一行最后一列是目标函数的取值。
第二步,最优测试
如果目标行(矩阵最后一行,不包括最后一列,因为它是目标函数的取值)的所有单元格都是非负的,则当前为最优解,算法结束,这是基于一个定理:

极点定理:可行区域非空的任意线性规划问题有最优解,而且,最优解总是能够在可行区域的一个极点上找到。

最优解的基本变量的值为矩阵的最右列中,最优解为最后一行最后一列对应的值。
显然,当前初始化的最后一行存在负数,说明可以进一步优化。
第三步,确定输入变量
输入变量,是指由非基本变量(如当前的x和y)转变为基本变量的变量。
从目标行(最后一行)单元格中选择一个负数绝对值最大的单元格,若负数绝对值相同,则任选其一。
选择绝对值最大的负数是基于这样一个事实,即负数绝对值更大的列,更有增长的潜力。
如上例选择了-5,因为-5绝对值大于-3。该单元格确定了输入变量和主元列(如下图蓝色方框标出)。
线性规划之单纯形法_第5张图片

第四步,确定分离变量
分离变量,是指由基本变量(如u,v,它们的系数都是1和0组成)转变为非基本变量的变量。
分离变量的选择:
在这里插入图片描述
线性规划之单纯形法_第6张图片
用最右列的(4和6)分别除以输入变量对应列的系数(1和3),选择较小的比值theta对应的变量。当较小的是v。
这一步,确定了分离变量和主元行(下图绿框标出)。
线性规划之单纯形法_第7张图片
第五步,建立下一张表格
上述第三步确定了输入变量y,第四步确定了分离变量u。
由(0,0,1,1)转变为(0,1,1,0),表示x和v为非基本变量,y和u为基本变量。
线性规划之单纯形法_第8张图片
将上述矩阵,经过行初等变换,转变为下面的矩阵(基本变量对应的系数恰好为单位)(可以自己算一算):
线性规划之单纯形法_第9张图片
转换结果:
线性规划之单纯形法_第10张图片
这里就完成了一次单纯形法的循环,由于还可以优化,会继续回到第二步,就不详细叙述了。
再进行一次循环,矩阵将变成:
线性规划之单纯形法_第11张图片
最后一行(不包括最后一列)的值全为非负数说,说明当前为最优解14,最后一列是基本变量的取值,x=3,y=1

你可能感兴趣的:(算法,算法,线性规划)