单纯形法
单纯形法(simplex method)是求解线性规划的一类算法。它把约束改写成等式,选择一组变量作为基变量,在保持可行的条件下更换这组变量,使目标值逐步改善。几何上,这通常表现为沿可行多面体的边从一个顶点走到另一个顶点;退化时,更换基并不一定改变所在的点。
算法的核心不是背诵一张表的加减规则,而是回答三个问题:增加哪个变量能够改善目标;增加到哪里仍然可行;什么时候能证明再也没有更好的方案。
用剩余资源建立初始状态
沿用线性规划中的两产品教学模型。产量 可以连续取值,收益和资源都按该模型约定的单位计算: 引入非负的松弛变量 ,分别表示两种资源剩余量: 令 时,。这是一个可行生产方案,尚未消耗任何资源。
把约束解成当前基变量的表达式,称为一种字典: 当前基变量是 ,非基变量是 。令非基变量为零,就读出当前解。称它为“基”,是因为在两个独立方程中,所选两列线性无关,能够据此解出对应的两个变量。
第一步:为什么要取最小比值
先让 从零增加,保持另一非基变量 。每增加一个单位 ,目标增加三;两种剩余资源却分别减少一个和两个单位。
若增加量为 ,就有 所以同时要求 、。能走的最大距离是两者的最小值 。在这里,第二种资源先用尽。
因此新状态为 ,收益为 。 进入基, 离开基。
这说明了最小比值检验的原因:每一个正在减少的基变量,都给出“目前有多少/每步减少多少”的上限,必须遵守最紧的那个。若某基变量随着进入变量增加而上升,或者保持不变,它就没有给出这种上限,不能把零或负的下降系数放进比值比较。
换基就是保持等价的消元
从 解出进入变量: 代入其余两式。第一种剩余资源变为 目标式也必须同时更新: 于是新字典是 这次消元也称枢轴变换。没有更换原问题,只是换了求解方程时作为输出的变量。
现在 的目标系数为 ,表示在保持新的非基变量 时,沿这条边每增加一个单位 的净收益。它已计入相应减少 的损失,不再是原始单位收益二。这种调整后的系数称为检验数或约化成本;本文统一把字典右侧能使最大化目标上升的正系数视为可改进方向。
第二步到达最优点
保持 ,增加 。两个基变量的非负性给出 所以 最多增加三, 离开基。由 解得 代回 和 ,逐项整理: 最终字典为 令非基变量 ,得到 ,收益九。
停止依据直接写在目标式中:所有可行解都有 ,故 。当前方案达到九,所以全局最优。最终字典不只是给出一个答案,还给出了对全部可行解成立的上界。这与线性规划中将两条资源约束相加的对偶证据完全一致。
一般步骤怎样从这个例子得到
把问题写成 ,约束为 ,其中 有 个独立行。选择 个线性无关的列形成方阵 ,其余列形成 。把相应变量分为 ,有 若 ,则 是基可行解。目标式为 括号内就是非基变量的检验数。这里是介绍原理的逆矩阵写法;实现时通常求解关于 的线性方程,并更新分解,以减少计算和舍入误差。
选择一个检验数 的非基变量进入基,记其列为 、。让它增加 ,则 只有 的行限制步长,因而 如果没有这样的行,所有基变量都不会下降, 可以任意大,目标也可以任意大;这给出无界方向的证据。若所有检验数都非正,则从当前目标字典立刻得到全局上界,可以停止。此处推导及表格形式可对照MIT的单纯形讲义。
退化:目标有改善系数,却一步也走不了
另取问题 ,约束为 从原点先增加 ,两项最小比值同为一。若让第一松弛变量 离基,到达 后的字典是 基变量 为零。这称为退化基可行解。
虽然 的检验数为正,但保持 时有 ,所以步长只能为零。让 入基、 出基,得到 几何位置仍是 。随后才可以增加 至一,走到 ,收益变为二。
退化使“每次换基严格提高目标”的论证失效,某些选择规则可能循环。Bland规则给变量预先编号,在允许进入的变量中选最小编号;最小比值并列时,选编号最小的基变量离开。这个规则可避免循环,有限终止的证明不是“顶点有限”一句就能代替的,见MIT算法课程的线性规划笔记。有限终止也不等于每种问题都能用很少步骤解决。
起点不存在于眼前时:先求可行解
原点不是所有问题的可行起点。例如 要写成 ,其中 ;若把 都设为零,就会得到负的 。
两阶段法先引入人工变量 ,得到 。第一阶段最小化人工变量总和,此处就是 。初始取 可行;目标有下界零,而 达到零,于是找到原问题的可行点。
一般问题先把等式右端整理为非负,再添加所需人工变量建立起始基。如果第一阶段最优和严格大于零,原约束不可能有可行解;否则任何原可行解加上全零人工变量都会使第一阶段目标为零,造成矛盾。若最优和为零,删去人工变量并恢复原目标;零值人工变量若还留在基中,需要合法换出,或确认其所在行冗余后处理该行,不能直接删除一个仍在使用的基列。
从手算到数值求解
实际程序会用容差判断“接近零”、检验原约束残差与非负性,并计算对偶可行性和目标差。一个非常小的枢轴可能放大舍入误差;把本应为零的数当成正数,还会改变比值检验。变量、资源和金额相差许多数量级时,需要合理缩放。数值软件返回最优状态后,仍可像本例一样利用可行方案和匹配上界来核验结果。
单纯形法处理的是连续变量问题。若产量必须为整数,顶点可以是分数,后续需要整数规划方法;也不能把它与用于一般非线性搜索的Nelder–Mead“单纯形”方法混为一谈。
来源与相关知识
George Dantzig于1947年发展单纯形法,将大规模线性资源配置问题转化为可操作的计算过程,背景见斯坦福大学记录。
- MIT 15.053,The Simplex Method 1,2013:等价消元、松弛变量、基和比值规则。
- MIT 6.854J,Linear Programming notes,2008:字典、退化及防循环规则。
- 先修:矩阵、线性规划;相关:优化、拉格朗日乘数法。