【学习笔记】线性规划与对偶
线性规划与对偶
对偶在干什么
约束形式上是将变量和约束对称
| 原问题(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, 𝑦_2 ≥ 0;\)
- 右端项 \((4, 5)\) 生成最小化目标 \(4𝑦_1 + 5𝑦_2\);
- \(𝑥_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 硬算太慢,所以把它转成对偶。对偶揭示出这个问题的本质是‘给节点找势能’。基于这个发现,我们设计了一个让‘流量’和‘势能’互相拉扯的算法(原始对偶算法),这样就能把繁杂的矩阵运算,简化为图论里经典的‘最短路’计算,从而大幅降低复杂度
单纯形法
单纯形法是求解线性规划的万能工具

浙公网安备 33010602011771号