五、线性规划 单纯形法的一个例子

1、一个简单示例

        查看如下线性规划方程及约束:

        

         这不是方程形式,但我们可以通过添加松弛变量将其设为方程形式:

        

        添加松弛变量(s1、s2、s3)形成了一组简单的基本变量:

        每个变量只显示在一个方程中。 并基本解是(x, y, s_1, s_2, s_3) = (0, 0, 3, 2, 7),是可行的。 如果有类似Ax \leq b这样的不等式的时候,其中b \geq 0,添加松弛变量是有用的。

         下面是生成的表格,以及一个可行区域图(x 和 y 中的原始 LP),并标记了相应的基本可行解:

         在一个严谨的二维线性程序中,每个顶点都应该有对应于非基本变量的两个严格的约束。在这个表格中,非基本变量是 x 和 y,它们“拥有”的约束是 x ≥ 0 和 y ≥ 0 约束。 所以我们应该在这两个约束紧密的角落或顶点:x = 0 和 y = 0 的交点。

        让我们以 y 为中心,将其带入基础。 (这是一个任意的选择:我们也可以以 x 为中心。)因为 s_2 的 y 系数是 -2,所以它不满足约束,s_1s_3 的比率为 3/1 和 7/1,其中最小的是 3。所以 y 替换了基础中的 s_1,为我们提供了下面的新表格(和新角点):

         基本可行解为 (x, y, s_1, s_2, s_3) = (0, 3, 0, 8, 4)。 新表格的非基本变量是 x 和 s_1。 和以前一样,x “拥有” x ≥ 0 约束。 同时,s_1 “拥有” s_1 \geq 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),所以唯一的选择是继续顺时针。 在表格中,这对应于我们不希望在 s_1 上旋转的方式(其减少的成本是负数,因此旋转会减少 z)。 相反,转动的唯一有用选择是 x,其降低的成本是正的。

        在 x 的列中,y 和 s_2 的系数都是负的,所以它们不能留。因此 x 替换了基础中的 s_3,为我们提供了下面的新表格(和新角点):

         现在所有减少的成本都是负数,所以 z 最大化并且 (2, 5) 是最优解。(这里,s_1s_3 是非基本的。它们“拥有”的约束是 -x + y ≤ 3 约束和 x + y ≤ 7 约束。所以我们最终到达线 -x + y = 3 和 x + y = 7 相交处。)

        如果我们决定首先以 x 为轴心,我们将得到相同的最终答案,但会绕可行区域逆时针旋转,需要三个转动步骤。

2、无界线性规划

        让我们退一步,回到我们在点 (0, 3) 的时候。 但是现在,假设约束 x + y ≤ 7(对应于变量 s_3)不存在。 然后画面和可行区域将如下所示:

         可行域在我们想要去的方向上是无界的。

        以 x 为中心仍然是一个可行的方案。 但是现在,两个基本变量在第一阶段都被排除了:它们在 x 的列中都有一个负系数。 没有可供选择的变量。

        这就是线性规划无界时的样子,z 可以任意大。 没有最优解。

        从上图中,我们也可以了解到线性规划是如何无界的。为此,让我们写下当我们增加 x(输入变量)同时保持 s_1(另一个非基本变量)为 0 时会发生什么的方程式。然后我们有

         换句话说,当我们以 x 为轴心时,我们沿着 y = x + 3 线行进; 具有松弛变量的完整解的变化为 (x, y, s1, s2) = (x, x + 3, 0, x + 8)。

        当我们执行单纯形法的任何转动步骤时,因为 x 列的系数都是负数,所以 y = x + 3 和 s_2 = 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 带入基础。 和以前一样,s_2 不在考虑之列,因为它在 y 的列中有一个负系数。 同时,s_1s_3 的比率为 3/1 和 6/2,因此它们因比率最小而并列。 当我们增加 y 时,s_1s_3 将减少并同时达到 0。

        在这种情况下我们选择哪个变量? 目前,我们无法判断哪种选择更好,但任何一种选择都会给我们一个有效的画面。 让我们选择s_1,因为这是我们上次所做的。 我们得到:

         这就是事情开始出错的地方。 我们应该以 x 为中心,因为它是唯一降低成本的变量。 y 和 s_2 在 x 的列中都有负系数,所以离开变量必须是 s_3。 但是当我们做到这一点时,变量的值不会改变!

         问题是 x = 0、-x + y = 3 和 x + 2y = 6 这三条线都在 (0, 3) 点相交。以前,当 x 和 s_1 是非基本的时,我们想到 (0, 3) 作为 x = 0 和 -x + y = 3 的交集。现在,s_1s_3 是非基本的,我们已经“移动”到 -x + y = 3 和 x + 2y = 6 的交集。这是 也是 (0, 3)。

        这称为退化旋转。 退化旋转存在一个大问题是,通常,我们可以说:单纯形法总是在提高 z 的值,所以它永远不会重新访问一个顶点,并且由于只有有限多个顶点,它最终必须到达正确的一个。对于退化的旋转,z 的值并不总是提高。 所以我们不能保证单纯形法不会永远持续下去,停留在以不同方式表示的同一个顶点。

        在这个例子中,我们将在一步之后离开点 (0, 3)。 但在更复杂的例子中,当许多约束在一个顶点处相遇时,为了避免永远停留在那个顶点的情况,我们需要制定避免无限循环的旋转规则,通过告诉我们在出现平局的情况下从基础中删除的正确变量。

猜你喜欢

转载自blog.csdn.net/bashendixie5/article/details/124651900
今日推荐