线性规划的两阶段法求解示例
字数 4444 2025-10-25 22:15:07

线性规划的两阶段法求解示例

题目描述:
考虑以下线性规划问题:
最大化:\(z = 3x_1 + 2x_2\)
约束条件:

  1. \(2x_1 + x_2 \geq 4\)
  2. \(3x_1 + 4x_2 \geq 6\)
  3. \(x_1 + x_2 \leq 3\)
  4. \(x_1 \geq 0, x_2 \geq 0\)

注意,这个问题包含“≥”和“≤”两种类型的不等式约束,并且目标函数是最大化。我们将使用两阶段法来求解。

解题过程:

第一阶段:引入人工变量,构建辅助问题。

  1. 将约束转化为标准形式。
    对于“≥”约束,我们减去一个剩余变量(也称为松弛变量,但用于“≥”)。同时,为了获得一个初始基本可行解,我们需要引入人工变量。

    • 约束1:\(2x_1 + x_2 \geq 4\) 变为 \(2x_1 + x_2 - s_1 = 4\)(引入剩余变量 \(s_1 \geq 0\))。为了在基变量中包含这个约束,我们添加人工变量 \(a_1 \geq 0\),得到 \(2x_1 + x_2 - s_1 + a_1 = 4\)
    • 约束2:\(3x_1 + 4x_2 \geq 6\) 变为 \(3x_1 + 4x_2 - s_2 = 6\)(引入剩余变量 \(s_2 \geq 0\))。添加人工变量 \(a_2 \geq 0\),得到 \(3x_1 + 4x_2 - s_2 + a_2 = 6\)
    • 约束3:\(x_1 + x_2 \leq 3\) 变为 \(x_1 + x_2 + s_3 = 3\)(引入松弛变量 \(s_3 \geq 0\))。这个约束不需要人工变量,因为松弛变量 \(s_3\) 可以直接作为基变量。
  2. 构建辅助问题(第一阶段问题)。
    目标是最小化所有人工变量的和,即 \(w = a_1 + a_2\)
    约束条件为:
    \(2x_1 + x_2 - s_1 + a_1 = 4\)
    \(3x_1 + 4x_2 - s_2 + a_2 = 6\)
    \(x_1 + x_2 + s_3 = 3\)
    \(x_1, x_2, s_1, s_2, s_3, a_1, a_2 \geq 0\)

    为了使用单纯形法,我们需要用非基变量(初始时为 \(x_1, x_2, s_1, s_2\))表示目标函数 \(w\)
    从约束方程可得:\(a_1 = 4 - 2x_1 - x_2 + s_1\), \(a_2 = 6 - 3x_1 - 4x_2 + s_2\)
    代入 \(w\)\(w = a_1 + a_2 = (4 - 2x_1 - x_2 + s_1) + (6 - 3x_1 - 4x_2 + s_2) = 10 - 5x_1 - 5x_2 + s_1 + s_2\)
    所以,第一阶段问题表示为:最小化 \(w = 10 - 5x_1 - 5x_2 + s_1 + s_2\),等价于最大化 \(-w = -10 + 5x_1 + 5x_2 - s_1 - s_2\)。我们使用单纯形法求解这个最大化问题。

  3. 构建第一阶段的初始单纯形表。
    初始基变量是 \(a_1, a_2, s_3\)
    我们将目标函数行表示为 \(-w + 5x_1 + 5x_2 - s_1 - s_2 = -10\)

基变量 \(x_1\) \(x_2\) \(s_1\) \(s_2\) \(s_3\) \(a_1\) \(a_2\) 右端项
\(a_1\) 2 1 -1 0 0 1 0 4
\(a_2\) 3 4 0 -1 0 0 1 6
\(s_3\) 1 1 0 0 1 0 0 3
\(-w\) 5 5 -1 -1 0 0 0 -10
  1. 进行第一阶段的单纯形迭代。
    • 迭代1:选择检验数最大的正数对应的变量入基。\(x_1\)\(x_2\) 的检验数都是5,任意选择,比如选 \(x_1\) 入基。
      计算比率:\(a_1\) 行:4/2=2;\(a_2\) 行:6/3=2;\(s_3\) 行:3/1=3。最小正比率为2,有两个,任意选择,比如选 \(a_1\) 行作为主元行。主元是2。
      进行行变换,使 \(x_1\) 列变为单位向量,主元行变为1,其他行该列元素变为0。

      • \(a_1\) 行除以2:\([1, 0.5, -0.5, 0, 0, 0.5, 0, 2]\)
      • 新的 \(a_2\) 行 = 旧 \(a_2\) 行 - 3 * 新 \(a_1\) 行:\([0, 2.5, 1.5, -1, 0, -1.5, 1, 0]\)
      • 新的 \(s_3\) 行 = 旧 \(s_3\) 行 - 1 * 新 \(a_1\) 行:\([0, 0.5, 0.5, 0, 1, -0.5, 0, 1]\)
      • 新的 \(-w\) 行 = 旧 \(-w\) 行 - 5 * 新 \(a_1\) 行:\([0, 2.5, 1.5, -1, 0, -2.5, 0, -20]\)
        更新基变量:\(a_1\) 出基,\(x_1\) 入基。新的基变量是 \(x_1, a_2, s_3\)

      新的单纯形表:

基变量 \(x_1\) \(x_2\) \(s_1\) \(s_2\) \(s_3\) \(a_1\) \(a_2\) 右端项
\(x_1\) 1 0.5 -0.5 0 0 0.5 0 2
\(a_2\) 0 2.5 1.5 -1 0 -1.5 1 0
\(s_3\) 0 0.5 0.5 0 1 -0.5 0 1
\(-w\) 0 2.5 1.5 -1 0 -2.5 0 -20
  • 迭代2:检验数中仍有正数,\(x_2\) 的检验数为2.5,选择 \(x_2\) 入基。
    计算比率:\(x_1\) 行:2/0.5=4;\(a_2\) 行:0/2.5=0(比率为0或负数通常不考虑,因为可能不满足可行性或代表无界);\(s_3\) 行:1/0.5=2。最小正比率为2(来自 \(s_3\) 行)。主元是0.5。
    进行行变换:

    • \(s_3\) 行除以0.5:\([0, 1, 1, 0, 2, -1, 0, 2]\)
    • 新的 \(x_1\) 行 = 旧 \(x_1\) 行 - 0.5 * 新 \(s_3\) 行:\([1, 0, -1, 0, -1, 1, 0, 1]\)
    • 新的 \(a_2\) 行 = 旧 \(a_2\) 行 - 2.5 * 新 \(s_3\) 行:\([0, 0, -1, -1, -5, 1, 1, -5]\) (注意右端项变为负数,这可能会在后续导致问题,我们先继续)
    • 新的 \(-w\) 行 = 旧 \(-w\) 行 - 2.5 * 新 \(s_3\) 行:\([0, 0, -1, -1, -5, 0, 0, -25]\)
      更新基变量:\(s_3\) 出基,\(x_2\) 入基。新的基变量是 \(x_1, a_2, x_2\)

    新的单纯形表:

基变量 \(x_1\) \(x_2\) \(s_1\) \(s_2\) \(s_3\) \(a_1\) \(a_2\) 右端项
\(x_1\) 1 0 -1 0 -1 1 0 1
\(a_2\) 0 0 -1 -1 -5 1 1 -5
\(x_2\) 0 1 1 0 2 -1 0 2
\(-w\) 0 0 -1 -1 -5 0 0 -25

现在,我们发现基变量 \(a_2\) 的值是-5,小于0,这违反了可行性条件。但是我们的目标是最小化 \(w\)(即最大化 \(-w\))。观察 \(-w\) 行,所有非基变量(\(s_1, s_2, s_3, a_1\))的检验数都是非正的(-1, -1, -5, 0),已经满足最优性条件(对于最大化问题,检验数≤0)。然而,基变量中含有取负值的人工变量 \(a_2\),并且右端项为负,这意味着辅助问题的最优值 \(w = 25 > 0\)。根据两阶段法原理,如果第一阶段最终的最优值 \(w > 0\),则原问题无可行解。

因此,我们得出结论:原线性规划问题无可行解。

总结:
在这个例子中,我们使用两阶段法求解一个线性规划问题。第一阶段的目标是判断原问题是否存在可行解。我们通过引入人工变量构建了一个辅助问题,并利用单纯形法求解。求解过程中,虽然单纯形表的检验数行满足了最优性条件,但基变量中的人工变量仍未完全被驱赶出基,且辅助目标函数的最优值大于零。这表明不存在一组变量能同时满足所有原始约束条件(包括非负约束),因此原问题无可行解。两阶段法的第一阶段有效地帮助我们识别了这种情况。

线性规划的两阶段法求解示例 题目描述: 考虑以下线性规划问题: 最大化:\( z = 3x_ 1 + 2x_ 2 \) 约束条件: \( 2x_ 1 + x_ 2 \geq 4 \) \( 3x_ 1 + 4x_ 2 \geq 6 \) \( x_ 1 + x_ 2 \leq 3 \) \( x_ 1 \geq 0, x_ 2 \geq 0 \) 注意,这个问题包含“≥”和“≤”两种类型的不等式约束,并且目标函数是最大化。我们将使用两阶段法来求解。 解题过程: 第一阶段:引入人工变量,构建辅助问题。 将约束转化为标准形式。 对于“≥”约束,我们减去一个剩余变量(也称为松弛变量,但用于“≥”)。同时,为了获得一个初始基本可行解,我们需要引入人工变量。 约束1:\( 2x_ 1 + x_ 2 \geq 4 \) 变为 \( 2x_ 1 + x_ 2 - s_ 1 = 4 \)(引入剩余变量 \( s_ 1 \geq 0 \))。为了在基变量中包含这个约束,我们添加人工变量 \( a_ 1 \geq 0 \),得到 \( 2x_ 1 + x_ 2 - s_ 1 + a_ 1 = 4 \)。 约束2:\( 3x_ 1 + 4x_ 2 \geq 6 \) 变为 \( 3x_ 1 + 4x_ 2 - s_ 2 = 6 \)(引入剩余变量 \( s_ 2 \geq 0 \))。添加人工变量 \( a_ 2 \geq 0 \),得到 \( 3x_ 1 + 4x_ 2 - s_ 2 + a_ 2 = 6 \)。 约束3:\( x_ 1 + x_ 2 \leq 3 \) 变为 \( x_ 1 + x_ 2 + s_ 3 = 3 \)(引入松弛变量 \( s_ 3 \geq 0 \))。这个约束不需要人工变量,因为松弛变量 \( s_ 3 \) 可以直接作为基变量。 构建辅助问题(第一阶段问题)。 目标是最小化所有人工变量的和,即 \( w = a_ 1 + a_ 2 \)。 约束条件为: \( 2x_ 1 + x_ 2 - s_ 1 + a_ 1 = 4 \) \( 3x_ 1 + 4x_ 2 - s_ 2 + a_ 2 = 6 \) \( x_ 1 + x_ 2 + s_ 3 = 3 \) \( x_ 1, x_ 2, s_ 1, s_ 2, s_ 3, a_ 1, a_ 2 \geq 0 \) 为了使用单纯形法,我们需要用非基变量(初始时为 \( x_ 1, x_ 2, s_ 1, s_ 2 \))表示目标函数 \( w \)。 从约束方程可得:\( a_ 1 = 4 - 2x_ 1 - x_ 2 + s_ 1 \), \( a_ 2 = 6 - 3x_ 1 - 4x_ 2 + s_ 2 \)。 代入 \( w \):\( w = a_ 1 + a_ 2 = (4 - 2x_ 1 - x_ 2 + s_ 1) + (6 - 3x_ 1 - 4x_ 2 + s_ 2) = 10 - 5x_ 1 - 5x_ 2 + s_ 1 + s_ 2 \)。 所以,第一阶段问题表示为:最小化 \( w = 10 - 5x_ 1 - 5x_ 2 + s_ 1 + s_ 2 \),等价于最大化 \( -w = -10 + 5x_ 1 + 5x_ 2 - s_ 1 - s_ 2 \)。我们使用单纯形法求解这个最大化问题。 构建第一阶段的初始单纯形表。 初始基变量是 \( a_ 1, a_ 2, s_ 3 \)。 我们将目标函数行表示为 \( -w + 5x_ 1 + 5x_ 2 - s_ 1 - s_ 2 = -10 \)。 | 基变量 | \( x_ 1 \) | \( x_ 2 \) | \( s_ 1 \) | \( s_ 2 \) | \( s_ 3 \) | \( a_ 1 \) | \( a_ 2 \) | 右端项 | | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | | \( a_ 1 \) | 2 | 1 | -1 | 0 | 0 | 1 | 0 | 4 | | \( a_ 2 \) | 3 | 4 | 0 | -1 | 0 | 0 | 1 | 6 | | \( s_ 3 \) | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 3 | | \( -w \) | 5 | 5 | -1 | -1 | 0 | 0 | 0 | -10 | 进行第一阶段的单纯形迭代。 迭代1:选择检验数最大的正数对应的变量入基。\( x_ 1 \) 和 \( x_ 2 \) 的检验数都是5,任意选择,比如选 \( x_ 1 \) 入基。 计算比率:\( a_ 1 \) 行:4/2=2;\( a_ 2 \) 行:6/3=2;\( s_ 3 \) 行:3/1=3。最小正比率为2,有两个,任意选择,比如选 \( a_ 1 \) 行作为主元行。主元是2。 进行行变换,使 \( x_ 1 \) 列变为单位向量,主元行变为1,其他行该列元素变为0。 将 \( a_ 1 \) 行除以2:\( [ 1, 0.5, -0.5, 0, 0, 0.5, 0, 2 ] \) 新的 \( a_ 2 \) 行 = 旧 \( a_ 2 \) 行 - 3 * 新 \( a_ 1 \) 行:\( [ 0, 2.5, 1.5, -1, 0, -1.5, 1, 0 ] \) 新的 \( s_ 3 \) 行 = 旧 \( s_ 3 \) 行 - 1 * 新 \( a_ 1 \) 行:\( [ 0, 0.5, 0.5, 0, 1, -0.5, 0, 1 ] \) 新的 \( -w \) 行 = 旧 \( -w \) 行 - 5 * 新 \( a_ 1 \) 行:\( [ 0, 2.5, 1.5, -1, 0, -2.5, 0, -20 ] \) 更新基变量:\( a_ 1 \) 出基,\( x_ 1 \) 入基。新的基变量是 \( x_ 1, a_ 2, s_ 3 \)。 新的单纯形表: | 基变量 | \( x_ 1 \) | \( x_ 2 \) | \( s_ 1 \) | \( s_ 2 \) | \( s_ 3 \) | \( a_ 1 \) | \( a_ 2 \) | 右端项 | | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | | \( x_ 1 \) | 1 | 0.5 | -0.5 | 0 | 0 | 0.5 | 0 | 2 | | \( a_ 2 \) | 0 | 2.5 | 1.5 | -1 | 0 | -1.5 | 1 | 0 | | \( s_ 3 \) | 0 | 0.5 | 0.5 | 0 | 1 | -0.5 | 0 | 1 | | \( -w \) | 0 | 2.5 | 1.5 | -1 | 0 | -2.5 | 0 | -20 | 迭代2:检验数中仍有正数,\( x_ 2 \) 的检验数为2.5,选择 \( x_ 2 \) 入基。 计算比率:\( x_ 1 \) 行:2/0.5=4;\( a_ 2 \) 行:0/2.5=0(比率为0或负数通常不考虑,因为可能不满足可行性或代表无界);\( s_ 3 \) 行:1/0.5=2。最小正比率为2(来自 \( s_ 3 \) 行)。主元是0.5。 进行行变换: 将 \( s_ 3 \) 行除以0.5:\( [ 0, 1, 1, 0, 2, -1, 0, 2 ] \) 新的 \( x_ 1 \) 行 = 旧 \( x_ 1 \) 行 - 0.5 * 新 \( s_ 3 \) 行:\( [ 1, 0, -1, 0, -1, 1, 0, 1 ] \) 新的 \( a_ 2 \) 行 = 旧 \( a_ 2 \) 行 - 2.5 * 新 \( s_ 3 \) 行:\( [ 0, 0, -1, -1, -5, 1, 1, -5 ] \) (注意右端项变为负数,这可能会在后续导致问题,我们先继续) 新的 \( -w \) 行 = 旧 \( -w \) 行 - 2.5 * 新 \( s_ 3 \) 行:\( [ 0, 0, -1, -1, -5, 0, 0, -25 ] \) 更新基变量:\( s_ 3 \) 出基,\( x_ 2 \) 入基。新的基变量是 \( x_ 1, a_ 2, x_ 2 \)。 新的单纯形表: | 基变量 | \( x_ 1 \) | \( x_ 2 \) | \( s_ 1 \) | \( s_ 2 \) | \( s_ 3 \) | \( a_ 1 \) | \( a_ 2 \) | 右端项 | | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | | \( x_ 1 \) | 1 | 0 | -1 | 0 | -1 | 1 | 0 | 1 | | \( a_ 2 \) | 0 | 0 | -1 | -1 | -5 | 1 | 1 | -5 | | \( x_ 2 \) | 0 | 1 | 1 | 0 | 2 | -1 | 0 | 2 | | \( -w \) | 0 | 0 | -1 | -1 | -5 | 0 | 0 | -25 | 现在,我们发现基变量 \( a_ 2 \) 的值是-5,小于0,这违反了可行性条件。但是我们的目标是最小化 \( w \)(即最大化 \( -w \))。观察 \( -w \) 行,所有非基变量(\( s_ 1, s_ 2, s_ 3, a_ 1 \))的检验数都是非正的(-1, -1, -5, 0),已经满足最优性条件(对于最大化问题,检验数≤0)。然而,基变量中含有取负值的人工变量 \( a_ 2 \),并且右端项为负,这意味着辅助问题的最优值 \( w = 25 > 0 \)。根据两阶段法原理,如果第一阶段最终的最优值 \( w > 0 \),则原问题无可行解。 因此,我们得出结论:原线性规划问题无可行解。 总结: 在这个例子中,我们使用两阶段法求解一个线性规划问题。第一阶段的目标是判断原问题是否存在可行解。我们通过引入人工变量构建了一个辅助问题,并利用单纯形法求解。求解过程中,虽然单纯形表的检验数行满足了最优性条件,但基变量中的人工变量仍未完全被驱赶出基,且辅助目标函数的最优值大于零。这表明不存在一组变量能同时满足所有原始约束条件(包括非负约束),因此原问题无可行解。两阶段法的第一阶段有效地帮助我们识别了这种情况。