单纯形法每一步只做一件事:从当前极点沿一条边走到更好的相邻极点。矩阵语言中,这就是换掉基中的一列。
目标函数在当前基下的表达
标准形
mincBTxB+cNTxN,BxB+NxN=b
给出
xB=B−1b−B−1NxN.
代入目标:
z=cBTB−1b+(cNT−cBTB−1N)xN.
若定义
σj=zj−cj=cBTB−1Aj−cj,
则最小化问题中,σj>0 表示增大非基变量 xj 会降低目标,适合进基;所有 σj≤0 时当前基最优。
有的教材定义相反的 cj−zj。两套都能用,但进基判据也会反过来,不能混写。
进基与出基
选定进基列 Ak 后,令
y=B−1Ak,bˉ=B−1b.
增大 xk=θ 时
xB=bˉ−yθ.
为了保持 xB≥0,只能对 yi>0 的行要求
θ≤yibˉi.
因此用最小比值检验
θ∗=i:yi>0minyibˉi.
达到最小比值的基变量先降到零,负责出基。若进基列 y≤0,目标可以沿该方向无限改善,问题无界。
完整算例
mins.t.−10x1−5x23x1+4x2+x3=9,5x1+2x2+x4=8,x≥0.
初始基 (x3,x4) 给出 (0,0,9,8)。x1 的目标改善更快,令其进基。主元列为 (3,5)T,比值为
9/3=3,8/5=1.6,
所以 x4 出基,走到 x1=8/5。完成主元行归一化并消去同列其他元素后,重新计算检验数;若仍有正检验数,就继续换基。
这个例子中,比值检验不是在比较“哪个约束更重要”,而是在问沿该边走多远会最先撞到可行域边界。
表格计算的自检
每次主元变换后检查:
- 基变量列是否恢复为单位阵;
- 右端是否仍非负;
- 基变量对应检验数是否为零;
- 当前目标值是否按期望方向改善;
- 原变量代回原约束是否成立。
考试要点
- 必须写进基、出基和比值,不能只给最终表。
- 最小比值只考虑主元列中的正元素。
- 没有正元素且检验数可改善,结论是无界。
- 并列最小比值可能导致退化;可按 Bland 规则用最小编号打破并列,避免循环。