系统分析:线性规划、非线性规划与排队模型 · 第 3 / 11 篇(展开目录)

从线性规划建模、单纯形法、对偶与灵敏度、运输与指派,到非线性规划、随机过程、马尔可夫链、排队模型和决策分析,每章都配手算例题和自测,最后一章用综合例题把方法串起来。

  1. 第1章 线性规划建模:从文字题到标准型
  2. 第2章 单纯形法:单纯形表、大 M 法与两阶段法
  3. 第3章 对偶与灵敏度分析:最终单纯形表还能回答什么
  4. 第4章 运输问题与指派问题:Vogel 法、位势法与匈牙利法
  5. 第5章 非线性规划(一):一维搜索与多元无约束优化
  6. 第6章 非线性规划(二):拉格朗日乘子与 KKT 条件
  7. 第7章 随机过程基础:几何分布、指数分布与泊松过程
  8. 第8章 马尔可夫链:离散时间与连续时间
  9. 第9章 排队模型:从 M/M/1 到 M/M/m
  10. 第10章 决策分析:不确定性准则、决策树与效用
  11. 第11章 综合例题讲解与解析

约 30 分钟 · 需要第2章的单纯形表

读完你能: 写出任意线性规划的对偶;从最终单纯形表读出对偶解(影子价格);用互补松弛检验最优性;计算右端 bib_i、目标系数 cjc_j 的允许变化范围;判断改动某个非基变量的整列后原解是否仍最优。

主线例子: max⁡ z=5x1+4x2+3x3\max\ z=5x_1+4x_2+3x_3,约束 2x1+3x2+x3≤52x_1+3x_2+x_3\le5,4x1+x2+2x3≤114x_1+x_2+2x_3\le11,3x1+4x2+2x3≤83x_1+4x_2+2x_3\le8,xj≥0x_j\ge0。

1. 先把主线例子解出来

加松弛变量 s1,s2,s3s_1,s_2,s_3,按第2章(化为最小化 −z-z)迭代两次得到最终表:

基 x1x_1 x2x_2 x3x_3 s1s_1 s2s_2 s3s_3 右端
x1x_1 1 2 0 2 0 −1 2
s2s_2 0 −5 0 −2 1 0 1
x3x_3 0 −1 1 −3 0 2 1
检验行 0 3 0 1 0 1 13

最优解 x1=2, x2=0, x3=1x_1=2,\ x_2=0,\ x_3=1,z=13z=13。第一、三种资源用满(s1=s3=0s_1=s_3=0),第二种剩 1 个单位(s2=1s_2=1)。

这张表里藏着两样东西,本章反复使用:

  • SS 矩阵:最终表中松弛变量 s1,s2,s3s_1,s_2,s_3 那三列,S=(20−1−210−302).S=\begin{pmatrix}2&0&-1\\-2&1&0\\-3&0&2\end{pmatrix}. 它记录了单纯形法做过的全部行变换:最终表的任何一列都等于 SS 乘以初始表的对应列,最终右端 =S B=S\,B。
  • yTy^{T}:检验行中松弛变量那三格,yT=(1,0,1)y^{T}=(1,0,1)。它等于 CBTSC_B^{T}S,其中 CB=(5,0,3)C_B=(5,0,3) 是当前基变量 (x1,s2,x3)(x_1,s_2,x_3) 的目标系数。yy 就是下面要讲的对偶解。

2. 写出对偶

每个线性规划都有一个“影子问题”——对偶。对称形式下:

原问题 对偶问题
max⁡ z=CTX\max\ z=C^{T}X min⁡ z=BTW\min\ z=B^{T}W
AX≤BAX\le B ATW≥CA^{T}W\ge C
X≥0X\ge0 W≥0W\ge0

反过来,min⁡ CTX, AX≥B, X≥0\min\ C^{T}X,\ AX\ge B,\ X\ge0 的对偶是 max⁡ BTW, ATW≤C, W≥0\max\ B^{T}W,\ A^{T}W\le C,\ W\ge0。对偶的对偶就是原问题。

记忆方法是“转置三件套”:

  1. 原问题的每条约束对应一个对偶变量 wiw_i;原问题的每个变量对应一条对偶约束。
  2. 目标系数和右端互换:原目标系数 CC 变成对偶约束右端,原右端 BB 变成对偶目标系数。
  3. 系数矩阵转置:原约束的行变成对偶约束的列。

主线例子的对偶:

min⁡ 5w1+11w2+8w3s.t. 2w1+4w2+3w3≥5(x1)3w1+w2+4w3≥4(x2)w1+2w2+2w3≥3(x3)w1,w2,w3≥0.\begin{aligned} \min\ & 5w_1+11w_2+8w_3\\ \text{s.t.}\ & 2w_1+4w_2+3w_3\ge5\quad(x_1)\\ & 3w_1+w_2+4w_3\ge4\quad(x_2)\\ & w_1+2w_2+2w_3\ge3\quad(x_3)\\ & w_1,w_2,w_3\ge0 . \end{aligned}

非对称形式(约束方向不统一、有等式或自由变量)按下表处理,以原问题是最大化为例:

原问题(max) 对偶(min)
第 ii 条约束是 ≤\le wi≥0w_i\ge0
第 ii 条约束是 ≥\ge wi≤0w_i\le0
第 ii 条约束是 == wiw_i 自由
xj≥0x_j\ge0 第 jj 条对偶约束是 ≥\ge
xjx_j 自由 第 jj 条对偶约束是 ==

不想记表就先统一形式

最大化问题先把所有约束都化成 ≤\le(≥\ge 两边乘 −1-1,等式拆成一对 ≤\le 与 ≥\ge),最小化问题都化成 ≥\ge,再套对称形式。结果和查表一致。

3. 对偶定理与影子价格

弱对偶: 对任意原问题可行解 XX 和对偶可行解 WW,有 CTX≤BTWC^{T}X\le B^{T}W(原问题是最大化时)。也就是说,对偶的任何可行目标值都是原问题最优值的上界。

对偶定理: 如果原问题或对偶之一有最优解,另一个也有,并且两个最优值相等。

主线例子中,W=y=(1,0,1)W=y=(1,0,1) 代入对偶约束:2+0+3=5≥52+0+3=5\ge5,3+0+4=7≥43+0+4=7\ge4,1+0+2=3≥31+0+2=3\ge3,可行;目标 5⋅1+11⋅0+8⋅1=135\cdot1+11\cdot0+8\cdot1=13,正好等于原问题最优值 13。

从哪张表读对偶解? 本章采用最大化目标、约束加松弛变量、检验行为 yTA−CTy^{T}A-C^{T} 的约定,因此松弛变量列中的检验数就是对偶最优解。若是最小化目标、减去剩余变量或把约束乘过 −1-1,必须按列的符号还原,不能一律原样抄数。反过来解对偶时,也可通过检验数与松弛/剩余列的对应关系恢复原问题的解。这在原问题有很多 ≥\ge 约束时很有用——直接解它要引入大量人工变量,解它的对偶却往往只需要松弛变量。

影子价格的含义: wiw_i 表示第 ii 种资源再多 1 单位,最优值增加多少(在最优基不变的范围内)。主线例子里:

  • w1=1w_1=1:资源 1 多 1 单位,利润多 1;
  • w2=0w_2=0:资源 2 本来就没用完,多给也没用;
  • w3=1w_3=1:资源 3 多 1 单位,利润多 1。

所以如果要花钱买资源,单价低于影子价格才划算。

4. 互补松弛

设 X∗X^*、W∗W^* 分别是原问题和对偶的可行解。它们同时最优,当且仅当:

si∗ wi∗=0 (i=1,…,m),ej∗ xj∗=0 (j=1,…,n),s_i^*\,w_i^*=0\ (i=1,\dots,m),\qquad e_j^*\,x_j^*=0\ (j=1,\dots,n),

其中 sis_i 是原问题第 ii 条约束的松弛,eje_j 是对偶第 jj 条约束的剩余。意思是:一边有“余量”,另一边对应的量就必须为 0。

主线例子中:

配对 原问题一侧 对偶一侧 乘积
资源 1 s1=0s_1=0 w1=1w_1=1 0
资源 2 s2=1s_2=1 w2=0w_2=0 0
资源 3 s3=0s_3=0 w3=1w_3=1 0
产品 1 x1=2x_1=2 e1=5−5=0e_1=5-5=0 0
产品 2 x2=0x_2=0 e2=7−4=3e_2=7-4=3 0
产品 3 x3=1x_3=1 e3=3−3=0e_3=3-3=0 0

e2=3e_2=3 也有含义:按影子价格计算,生产一件产品 2 要“占用”价值 7 的资源,却只卖 4,所以不生产它。这个 3 正是最终表中 x2x_2 的检验数。

互补松弛的常见用法

已知原问题最优解时,用互补松弛反求对偶解:xj>0x_j>0 的变量对应的对偶约束必须取等号,si>0s_i>0 的约束对应的 wi=0w_i=0。剩下的方程联立就能解出 W∗W^*。

5. 灵敏度分析的总思路

问题参数小改一点,最优解还成立吗?不需要重解。如果单纯形法对新数据做同样的行变换,最终表会变成:

XTX^{T} 松弛列 右端
XBX_B SA∗S A^{*} SS SBS B
检验行 yTA∗−C∗Ty^{T}A^{*}-C^{*T} yTy^{T} yTBy^{T}B

其中 A∗A^*、C∗C^* 是原变量(不含松弛)的系数。只改右端或非基列、非基目标系数时,基矩阵及其目标系数不变,SS 和 yy 可以沿用;若改了基变量的目标系数,要重算 yy;若改了基列,还要重算基逆矩阵 SS。下面先讨论可直接沿用它们的情况,检查两件事:

  • 可行性: 右端 SBSB 是否仍然全部 ≥0\ge0;
  • 最优性: 检验行是否仍然全部 ≥0\ge0。

都满足,原来的基仍然最优;不满足,就从修订后的表继续单纯形法。

6. 右端 bib_i 变化

设 b2→b2+Δb_2\to b_2+\Delta,即 B→B+Δe2B\to B+\Delta e_2。新右端为 SB+Δ Se2SB+\Delta\,S e_2,Se2Se_2 就是 SS 的第二列。检验行不受影响,只需检查可行性。

例1:资源 1 的允许范围。 SS 第一列为 (2,−2,−3)T(2,-2,-3)^{T}:

SB+ΔSe1=(2+2Δ1−2Δ1−3Δ)≥0 ⇒ −1≤Δ≤13.SB+\Delta Se_1=\begin{pmatrix}2+2\Delta\\1-2\Delta\\1-3\Delta\end{pmatrix}\ge0 \ \Rightarrow\ -1\le\Delta\le\tfrac13 .

所以 b1∈[4, 16/3]b_1\in[4,\ 16/3] 时最优基不变。在此范围内最优值为 13+w1Δ=13+Δ13+w_1\Delta=13+\Delta。

例2:资源 2 最多能削减多少? SS 第二列为 (0,1,0)T(0,1,0)^{T},新右端 (2, 1+Δ, 1)(2,\ 1+\Delta,\ 1),只要求 1+Δ≥01+\Delta\ge0,即 Δ≥−1\Delta\ge-1。资源 2 最多削减 1 单位(从 11 降到 10)而当前解仍可行——正好等于它的剩余量 s2=1s_2=1。这类问题的本质就是:非紧约束最多能削减到刚好用满为止。

例3:资源 3。 SS 第三列 (−1,0,2)T(-1,0,2)^{T},新右端 (2−Δ, 1, 1+2Δ)≥0(2-\Delta,\ 1,\ 1+2\Delta)\ge0,得 −12≤Δ≤2-\tfrac12\le\Delta\le2,即 b3∈[7.5, 10]b_3\in[7.5,\ 10]。

7. 非基变量的系数变化

x2x_2 是非基变量(取值 0),改动它的系数不影响可行性,只可能影响最优性——看它的检验数 yTA2∗−c2y^{T}A_2^*-c_2 是否仍 ≥0\ge0。

例4:c2c_2 的范围。 yTA2∗=1⋅3+0⋅1+1⋅4=7y^{T}A_2^*=1\cdot3+0\cdot1+1\cdot4=7,检验数 7−c2≥07-c_2\ge0,所以 c2≤7c_2\le7 时当前解仍最优。原来 c2=4c_2=4,还差 3——正是最终表中 x2x_2 的检验数。产品 2 的单价涨过 7,才值得生产。

例5:整列一起变。 若产品 2 改进工艺,系数列从 (3,1,4)T(3,1,4)^{T} 变为 (2,1,3)T(2,1,3)^{T},同时售价变为 6:

yTA2∗c−c2c=(1,0,1)(213)−6=5−6=−1<0.y^{T}A_2^{*c}-c_2^{c}=(1,0,1)\begin{pmatrix}2\\1\\3\end{pmatrix}-6=5-6=-1<0 .

检验数变负,当前解不再最优。修订表中 x2x_2 列为 SA2∗c=(1,−3,0)TS A_2^{*c}=(1,-3,0)^{T},从这里让 x2x_2 进基继续迭代即可(新最优值为 15)。

用对偶的语言说:一个基可行解最优,当且仅当对应的对偶解可行。 改动非基变量 x2x_2 只改变第二条对偶约束,用 W∗=(1,0,1)W^*=(1,0,1) 代进去检查是否仍成立即可,和上面的计算完全一样。

8. 基变量的目标系数变化

x1x_1 是基变量。c1→5+Δc_1\to5+\Delta 时,CBC_B 变了,整个检验行都会变。最快的算法是:检验行加上 Δ\Delta 乘以 x1x_1 所在行(只对非基列有意义)。

x1x_1 行为 (1, 2, 0, 2, 0, −1)(1,\ 2,\ 0,\ 2,\ 0,\ -1),非基变量是 x2,s1,s3x_2,s_1,s_3:

x2: 3+2Δ≥0,s1: 1+2Δ≥0,s3: 1−Δ≥0.x_2:\ 3+2\Delta\ge0,\qquad s_1:\ 1+2\Delta\ge0,\qquad s_3:\ 1-\Delta\ge0 .

取交集 −12≤Δ≤1-\tfrac12\le\Delta\le1,即 c1∈[4.5, 6]c_1\in[4.5,\ 6] 时当前解仍最优,最优值为 13+2Δ13+2\Delta(x1=2x_1=2)。

为什么是“加上一行”

修订后的检验行在 x1x_1 列会出现 −Δ-\Delta,不再是单位列的形式。把 x1x_1 行乘 Δ\Delta 加到检验行上,就把这个 −Δ-\Delta 消回 0——这和第2章主元消元是同一个动作。基变量的检验数始终为 0,所以只检查非基列。

如果基变量的系数列也一起变了,修订表中它所在的列不再是单位列,要先用行变换把它恢复成单位列,再检查可行性和最优性;不满足时继续单纯形法。

9. 小结

  • 对偶:约束 ↔ 变量,目标系数 ↔ 右端,矩阵转置;max 的 ≤\le 对应 min 的 ≥\ge。
  • 原、对偶的最优值相等;对偶解可从松弛/剩余列的检验数恢复,但要核对目标与列的符号约定,含义是影子价格。
  • 互补松弛:有余量的一方,对应的另一方为 0。
  • 修订最终表:右端变成 SBSB,检验行变成 yTA∗−C∗Ty^{T}A^*-C^{*T}。
  • 右端变化只看可行性,非基系数变化只看最优性,基变量系数变化要先恢复单位列再看两者。

自测

1. 写出 $\min\ z=3x_1+2x_2$,$x_1+x_2\ge4$,$x_1-x_2=1$,$x_1\ge0,\ x_2$ 自由 的对偶。

原问题是最小化,第一条 ≥\ge 对应 w1≥0w_1\ge0,第二条等式对应 w2w_2 自由;x1≥0x_1\ge0 对应 ≤\le 约束,x2x_2 自由对应等式约束:

max⁡ 4w1+w2,w1+w2≤3,w1−w2=2,w1≥0, w2 自由.\max\ 4w_1+w_2,\quad w_1+w_2\le3,\quad w_1-w_2=2,\quad w_1\ge0,\ w_2\ \text{自由}.
2. 主线例子中,资源 1 的单价是 0.8 元/单位,最多值得买多少?买完利润变成多少?

影子价格 w1=1>0.8w_1=1>0.8,值得买。最优基不变的上限是 Δ=13\Delta=\tfrac13,即最多买 13\tfrac13 单位,毛利增加 13\tfrac13,扣掉成本 0.8×130.8\times\tfrac13,净增 0.23≈0.067\tfrac{0.2}{3}\approx0.067。超过 13\tfrac13 后最优基改变,影子价格变为 0(b1>16/3b_1>16/3 时最优值固定在 40/340/3),再买就亏了。

3. 用互补松弛验证 $X=(2,0,1)$ 和 $W=(1,0,1)$ 同时最优,不用单纯形表。

两者都可行(第3节已验证)。x1=2>0x_1=2>0、x3=1>0x_3=1>0 要求对偶第一、三条约束取等号:2+0+3=52+0+3=5、1+0+2=31+0+2=3,成立。s2=11−(8+0+2)=1>0s_2=11-(8+0+2)=1>0 要求 w2=0w_2=0,成立。w1,w3>0w_1,w_3>0 要求原约束一、三取等号:4+0+1=54+0+1=5、6+0+2=86+0+2=8,成立。所有乘积为 0,两者同时最优。