1、一个简单示例
查看如下线性规划方程及约束:
这不是方程形式,但我们可以通过添加松弛变量将其设为方程形式:
添加松弛变量(s1、s2、s3)形成了一组简单的基本变量:
每个变量只显示在一个方程中。 并基本解是,是可行的。 如果有类似这样的不等式的时候,其中,添加松弛变量是有用的。
下面是生成的表格,以及一个可行区域图(x 和 y 中的原始 LP),并标记了相应的基本可行解:
在一个严谨的二维线性程序中,每个顶点都应该有对应于非基本变量的两个严格的约束。在这个表格中,非基本变量是 x 和 y,它们“拥有”的约束是 x ≥ 0 和 y ≥ 0 约束。 所以我们应该在这两个约束紧密的角落或顶点:x = 0 和 y = 0 的交点。
让我们以 y 为中心,将其带入基础。 (这是一个任意的选择:我们也可以以 x 为中心。)因为 的 y 系数是 -2,所以它不满足约束, 和 的比率为 3/1 和 7/1,其中最小的是 3。所以 y 替换了基础中的 ,为我们提供了下面的新表格(和新角点):
基本可行解为 。 新表格的非基本变量是 x 和 。 和以前一样,x “拥有” x ≥ 0 约束。 同时, “拥有” 约束,但在原始线性规划中,这是 -x + y ≤ 3 约束。 所以我们要的是 x = 0 和 -x + y = 3 相交的角落,就是 (0, 3) 处。
转动变量的选择对应于选择我们绕多边形的方向:我们使用 (0, 0) 中的哪条边。 从 (0, 0) 到 (0, 3) 的边远离y ≥ 0 约束,因此y成为基本的变量。 我们也可以将x带入基础,远离 x ≥ 0 约束。
但是现在,在 (0, 3) 处,只有一个好的转动选择。 我们不想回到 (0, 0),所以唯一的选择是继续顺时针。 在表格中,这对应于我们不希望在 上旋转的方式(其减少的成本是负数,因此旋转会减少 z)。 相反,转动的唯一有用选择是 x,其降低的成本是正的。
在 x 的列中,y 和 的系数都是负的,所以它们不能留。因此 x 替换了基础中的 ,为我们提供了下面的新表格(和新角点):
现在所有减少的成本都是负数,所以 z 最大化并且 (2, 5) 是最优解。(这里, 和 是非基本的。它们“拥有”的约束是 -x + y ≤ 3 约束和 x + y ≤ 7 约束。所以我们最终到达线 -x + y = 3 和 x + y = 7 相交处。)
如果我们决定首先以 x 为轴心,我们将得到相同的最终答案,但会绕可行区域逆时针旋转,需要三个转动步骤。
2、无界线性规划
让我们退一步,回到我们在点 (0, 3) 的时候。 但是现在,假设约束 x + y ≤ 7(对应于变量 )不存在。 然后画面和可行区域将如下所示:
可行域在我们想要去的方向上是无界的。
以 x 为中心仍然是一个可行的方案。 但是现在,两个基本变量在第一阶段都被排除了:它们在 x 的列中都有一个负系数。 没有可供选择的变量。
这就是线性规划无界时的样子,z 可以任意大。 没有最优解。
从上图中,我们也可以了解到线性规划是如何无界的。为此,让我们写下当我们增加 x(输入变量)同时保持 (另一个非基本变量)为 0 时会发生什么的方程式。然后我们有
换句话说,当我们以 x 为轴心时,我们沿着 y = x + 3 线行进; 具有松弛变量的完整解的变化为 (x, y, s1, s2) = (x, x + 3, 0, x + 8)。
当我们执行单纯形法的任何转动步骤时,因为 x 列的系数都是负数,所以 y = x + 3 和 = x + 8 的斜率都是正数,这意味着我们可以无限制地增加 x。 由于 x 的成本为 5,因此我们知道这给了我们任意大的目标值:更准确地说,点 (x, y, s1, s2) = (x, x + 3, 0, x + 8) 有 z 的目标值 = 5x + 9。
每当我们从表格中得知线性规划是无界的时,我们就可以执行这样的分析来找到无限的可行解,沿着这些可行解,目标值会无界地提高。
3、退化旋转的一个例子
现在假设我们用约束 x + 2y ≤ 6 替换 x + y ≤ 7 约束。这是初始表和可行域图:
约束 −x+y ≤ 3 几乎不相关。 线 -x+y = 3 在角点 (3, 0) 接触可行区域,并且不会改变任何东西的可行性。
我们可以像以前一样继续,将 y 带入基础。 和以前一样, 不在考虑之列,因为它在 y 的列中有一个负系数。 同时, 和 的比率为 3/1 和 6/2,因此它们因比率最小而并列。 当我们增加 y 时, 和 将减少并同时达到 0。
在这种情况下我们选择哪个变量? 目前,我们无法判断哪种选择更好,但任何一种选择都会给我们一个有效的画面。 让我们选择,因为这是我们上次所做的。 我们得到:
这就是事情开始出错的地方。 我们应该以 x 为中心,因为它是唯一降低成本的变量。 y 和 在 x 的列中都有负系数,所以离开变量必须是 。 但是当我们做到这一点时,变量的值不会改变!
问题是 x = 0、-x + y = 3 和 x + 2y = 6 这三条线都在 (0, 3) 点相交。以前,当 x 和 是非基本的时,我们想到 (0, 3) 作为 x = 0 和 -x + y = 3 的交集。现在, 和 是非基本的,我们已经“移动”到 -x + y = 3 和 x + 2y = 6 的交集。这是 也是 (0, 3)。
这称为退化旋转。 退化旋转存在一个大问题是,通常,我们可以说:单纯形法总是在提高 z 的值,所以它永远不会重新访问一个顶点,并且由于只有有限多个顶点,它最终必须到达正确的一个。对于退化的旋转,z 的值并不总是提高。 所以我们不能保证单纯形法不会永远持续下去,停留在以不同方式表示的同一个顶点。
在这个例子中,我们将在一步之后离开点 (0, 3)。 但在更复杂的例子中,当许多约束在一个顶点处相遇时,为了避免永远停留在那个顶点的情况,我们需要制定避免无限循环的旋转规则,通过告诉我们在出现平局的情况下从基础中删除的正确变量。