【学习笔记】线性规划与对偶

线性规划与对偶

对偶在干什么

约束形式上是将变量和约束对称

原问题(Primal) 对偶问题(Dual)
变量(x₁, x₂, ...) 约束(不等式)
约束(不等式) 变量(y₁, y₂, ...)
目标函数系数(c,利润) 约束右侧常数(b,资源量)
约束右侧常数(b,资源量) 目标函数系数(c,价格)
求 最大值(Max) 求 最小值(Min)

如果用一句话概括:对偶问题是在为原问题寻找一个“最紧的边界”。

假设你的原问题是最大化利润(就像工厂故事)。你直接去排生产计划,可能很难知道“最多”能赚到多少钱。

对偶问题(收购商压价)则是在从外部给你设限。它说:“不管你怎么生产,你的利润都不可能超过我出的这个价。”

对偶算法干的事情,就是不断地调整外部这个“天花板”,把它越压越低,直到它刚好和原问题从内部努力够到的“地板”碰在一起。

这个“碰在一起”的时刻,就是强对偶定理,它证明了原问题的最优解 = 对偶问题的最优解。

所以,对偶本质上是在干一件“夹逼”的事情: 原问题从可行域内部向上(或向下)寻找最优,对偶问题从外部反过来限制,两者最终汇聚于同一点。

是否建议转对偶问题

什么时候转? 当原问题的约束条件(不等式)非常多,但变量(决策量)非常少时,转对偶是神技。因为对偶后,变量数 = 原约束数,问题规模会急剧缩小。

什么时候千万别转? 如果原问题本身变量很少、约束也很少,或者反过来变量极多、约束极少,转对偶反而会把一个简单问题变成一个更复杂的庞然大物。

标准型对偶

要求背诵

原问题:\((𝑃) max 𝑐^𝑇 𝑥, 𝐴𝑥 ≤ 𝑏, 𝑥 ≥ 0,\)
对偶问题:\((𝐷) min 𝑏^𝑇 𝑦, 𝐴^𝑇 𝑦 ≥ 𝑐, 𝑦 ≥ 0.\)

原问题和对偶问题的形式关系:最小化取目标的相反数;\(≥\) 约束两边取反;等式约束对应自由对偶变量;自由原变量对应等式约束。

强对偶定理:若原问题有有限最优值,则对偶问题也有最优解,且
\(OPT_P = OPT_D\).

对偶构造

\((𝑃) \max 3𝑥_1 + 2𝑥_2, 𝑥_1 + 𝑥_2 ≤ 4, 2𝑥_1 + 𝑥_2 ≤ 5, 𝑥 ≥ 0.\)

按固定顺序机械构造:

  1. 两行 \(≤\) 约束生成 \(𝑦_1, 𝑦_2 ≥ 0;\)
  2. 右端项 \((4, 5)\) 生成最小化目标 \(4𝑦_1 + 5𝑦_2\)
  3. \(𝑥_1, 𝑥_2\) 两列分别生成 \(𝑦_1 + 2𝑦_2 ≥ 3\)\(𝑦_1 + 𝑦_2 ≥ 2\)

\((𝐷) \min 4𝑦_1 + 5𝑦_2, 𝑦_1 + 2𝑦_2 ≥ 3, 𝑦_1 + 𝑦_2 ≥ 2, 𝑦_1, 𝑦_2 ≥ 0.\)

费用流对偶

把费用流的变量和约束列出来,可以发现费用流实际上也是一个线性规划问题

费用流直接当 LP 硬算太慢,所以把它转成对偶。对偶揭示出这个问题的本质是‘给节点找势能’。基于这个发现,我们设计了一个让‘流量’和‘势能’互相拉扯的算法(原始对偶算法),这样就能把繁杂的矩阵运算,简化为图论里经典的‘最短路’计算,从而大幅降低复杂度

单纯形法

单纯形法是求解线性规划的万能工具

posted @ 2026-09-01 20:56  Aistyr  阅读(10)  评论(0)    收藏  举报