线性规划

施工中,梦到哪句说哪句


定义

一般形式:

\[\begin{align*} \min_{x}/\max_{x}\; &c^Tx \\ \text{s.t. } &A_1x = b_1,\\ &A_2x\ge b_2,\\ &A_3x\le b_3,\\ &x\ge 0. \end{align*} \]

其中 \(A_{1,2,3}\) 为矩阵,\(b_{1,2,3},c\) 为向量,向量大小关系定义为偏序关系(即可能无大小关系,不过没影响)。

标准形式(与 oi-wiki 统一):

\[\begin{align*} \min_{x}\; &c^Tx \\ \text{s.t. } &Ax = b,\\ &x\ge 0. \end{align*} \]

其中 \(A\)\(n\times m\) 矩阵,\(b\) 为满足 \(b\ge 0\)\(n\) 维向量,\(c\)\(m\) 维向量。

一般形式转标准形式:

  1. \(c\) 添加负号,将 \(\max\) 转为 \(\min\)
  2. \(A_{i,*},b_i\) 添加负号,并翻转对应不等式方向,将 \(b_i\le 0\) 转为 \(b_i\ge 0\)
  3. 对于不等约束 \(a_i^Tx\ge(\le)b_i\),添加 \(s_i\),转为约束 \(a_i^Tx\mp s_i=b_i\)\(s_i\ge 0\)
  4. 对于非正变量 \(x_i\le 0\),把 \(c_i,A_{*,i}\) 添加负号,转为 \(x_i\ge 0\)
  5. 对于无约束变量 \(x_i\),令 \(x_i=x_i^+-x_i^-\),约束 \(x_i^+,x_i^-\ge 0\)

对偶

Lagrange 乘子法与 KKT 条件

这部分只有结论和感性理解,没有证明,严谨证明见其他博客。

Lagrange 乘子法,求解的问题形如:

\[\begin{align*} \min_x\;&f(x) \\ \text{s.t. }&g_i(x)=0,~i=1,\dots,m,\\ &h_j(x)\le 0,~j=1,\dots,n. \end{align*} \]

只有等式约束

设 Lagrange 函数

\[L(x,\alpha_1,\dots,\alpha_m)=f(x)+\sum_{i=1}^m\alpha_ig_i(x) \]

极值点即要求:

\[\begin{cases} \frac{\partial g}{\partial x}=0 \\ \frac{\partial g}{\partial\alpha_i}=0,~i=1,\dots,m\\ \end{cases} \]

有不等约束

类似地,设 Lagrange 函数:

\[L(x,\alpha,\beta)=f(x)+\sum_{i=1}^m\alpha_ig_i(x)+\sum_{j=1}^n\beta_jh_j(x) \]

我们希望答案为:

\[a=\min_{x}\max_{\alpha,\beta}L(x,\alpha,\beta) \]

这是一个类似博弈的东西,我们希望在这个博弈下,\(h_j(x)\) 无法 \(>0\),则我们限制 \(\beta\ge 0\),鼓励 \(h_j(x)\le 0\),惩罚 \(h_j(x)>0\)

进而,我们发现 \(\beta\) 想最大化答案,必须在所有满足 \(h_i(x)<0\)\(i\) 下,满足 \(\beta_i=0\)

于是我们得到 KKT 条件

  • \(h_j(x)\le 0\),原始约束,在构造出 \(L\) 后忽略;
  • \(\beta\ge 0\),乘子约束,在构造出 \(L\) 后持有;
  • \(\forall j,~h_j(x)\beta_j=0\),最优解性质,不需要作为求解的约束,当且仅当此条件成立时,可行解是最优解。

Lagrange 乘子法对偶

\(\alpha,\beta\) 的视角观察上述博弈:

\[b=\max_{\alpha,\beta}\min_{x}L(x,\alpha,\beta) \]

\[p(\alpha,\beta)=\min_{x}L(x,\alpha,\beta) \]

则对偶问题为

\[\begin{align*} \max_{\alpha,\beta}\;&p(\alpha,\beta) \\ \text{s.t. }&\beta\ge 0 \end{align*} \]

结论1:

\[b\le a \]

结论2:若两个问题至少有一个可行,则

\[b=a \]

LP 对偶

尝试用 Lagrange 乘子法解标准形式线性规划。

\[\begin{align*} \min_{x}\; &c^Tx \\ \text{s.t. } &Ax = b,\\ &x\ge 0. \end{align*} \]

构造 \(Ax=b\) 约束对应乘子 \(y\)\(x\ge 0\) 对应乘子 \(s\) 和 Lagrange 函数:

\[L(x,y,s)=c^Tx+y^T(Ax-b)-s^Tx,~s\ge 0 \]

考虑对偶,设:

\[g(y,s)=\min_x\{-b^Ty+(A^Ty+c-s)^Tx\} \]

要使 \(g(y,s)\) 有意义(\(\ne -\infty\)),则 \(A^Ty+c^T-s^T=0\)。把 \(y\) 取相反数,得到最终对偶问题为:

\[\begin{align*} \min_{y}\; &b^Ty \\ \text{s.t. } &A^Ty\le c. \end{align*} \]

对偶定理

根据 2.1.3 Lagrange 乘子法与 KKT 条件 中的两个结论,我们能得到弱对偶定理和强对偶定理

弱对偶定理:对偶问题是原问题的下界,即

\[\max_y\{b^Ty:A^Ty\le c\}\le\min_x\{c^Tx:A^Tx=b,x\ge 0\} \]

具体分为四种情况:

  1. 原问题和对偶问题均不可行,即 \(-\infty\le+\infty\)
  2. 原问题无界,对偶问题不可行,即 \(-\infty\le-\infty\)
  3. 原问题不可行,对偶问题无界,即 \(+\infty\le+\infty\)
  4. 均可行且均有界。

证明见 oi-wiki。

强对偶定理:当两个问题中至少有一个可行,则两个问题答案相同,具体分为三种情况

  1. 原问题无界,对偶问题不可行:\(-\infty=-\infty\)
  2. 原问题不可行,对偶问题无界:\(+\infty=+\infty\)
  3. 均可行且均有界。

强对偶定理推论:若 \(c^Tx=b^Ty\),则 \(x,y\) 分别是对应问题的最优解。

互补松弛条件

根据 KKT 条件,我们能特化出互补松弛条件。

KKT 条件告诉我们:

\[-x^Ts=0 \]

代入 \(-A^Ty+c-s=0\),得

\[\boxed{x^T(A^Ty-c)=0} \]

当且仅当此条件成立时,\(x,y\) 分别是对应问题最优解。

另一形式:

对于原问题 \(\min_x\{c^Tx:Ax\ge b,x\ge 0\}\) 和对偶问题 \(\max_y\{b^Ty:A^Ty\le c,y\ge 0\}\),当且仅当

\[x^T(A^Ty-c)=y^T(Ax-b)=0 \]

时,\(x,y\) 是最优解。

Primal-Dual Method / 原始-对偶方法

感觉 oi-wiki 写得挺清楚的,平移过来,略加修改。

对于标准形式的原问题(注意 \(b\ge 0\)

\[(P)\qquad\min\{c^Tx : Ax=b\ge 0,~ x\ge 0\} \]

和它的对偶问题

\[(D)\qquad\max\{b^Ty : A^Ty\le c\}, \]

上一节已经说明,要找到它们的最优解,只需要找到问题 \((P)\)\((D)\) 的一组可行解,使得它们满足互补松弛条件 \(x^T(A^Ty-c)=0\).那不妨考虑如下流程:

  1. 从对偶问题 \((D)\) 的一个可行解 \(y\) 出发,计算对偶问题的紧约束的集合

    \[I = \{i : (A^Ty - c)_i = 0\}. \]

  2. 根据互补松弛条件,如果存在问题 \((P)\) 的可行解 \(x\) 使得 \(x_i>0\) 仅在 \(i\in I\) 上成立,就意味着已经找到一组最优解.因此,考虑线性规划问题

    \[(RP)\qquad \begin{aligned} \min_{x,s}\;& \mathbf 1^Ts \\ \text{subject to } & Ax + s = b, \\ & x_i \ge 0,~\forall i \in I,\\ & x_i = 0,~\forall i \notin I,\\ & s \ge 0. \end{aligned} \]

  3. 如果问题 \((RP)\) 的最小值是 \(0\),那么最优解 \((x^*,0)\) 中的 \(x^*\) 就是原问题 \((P)\) 的最优解.否则,可以求出它的对偶问题 \((DRP)\) 的解 \(\bar y\)

    \[(DRP)\qquad \begin{aligned} \max_{y}\;& b^Ty \\ \text{subject to }& \sum_{j}a_{ji}y_j \le 0,~\forall i\in I,\\ & y \le 1. \end{aligned} \]

    根据强对偶定理可知,\(b^T\bar y = 1^Ts^*>0\)

  4. 根据问题 \((DRP)\) 的解改进对偶问题 \((D)\) 的可行解.设 \(y' = y + \varepsilon \bar y\),其中,\(\varepsilon>0\),则一定有 \(b^Ty' = b^Ty + \varepsilon b^T\bar y > b^Ty\).因此,只要保证 \(y'\) 仍然是对偶问题的可行解 \((D)\),就要尽可能大地选取 \(\varepsilon\) 的值.

    对于 \(i\in I\),有

    \[\sum_ja_{ji}y'_j = \sum_ja_{ji}y_j + \varepsilon \sum_ja_{ji}\bar y_j \le c_i, \]

    所以,问题 \((D)\) 的这些约束总是可以满足的.

    对于剩下的约束,即 \(i\notin I\) 时,只需要取

    \[\varepsilon = \min\left\{\dfrac{c_i - \sum_{j}a_{ji}y_j}{\sum_{j}a_{ji}\bar y_j}:i\notin I,~\textstyle\sum_{j}a_{ji}\bar y_j>0\right\} \]

    就可以在保证可行性的前提下,尽可能大地改进对偶问题的解,然后回到步骤 1 继续迭代.特别地,如果上式中的集合为空集,即 \(\varepsilon=+\infty\),那么,对偶问题 \((D)\) 无界,原问题 \((P)\) 不可行.

这个过程中其实只有问题 \((DRP)\) 是确实需要求解的,它与问题 \((RP)\) 通过强对偶定理相互联系.问题 \((DRP)\) 提供了一个改进对偶问题解的方向,而且相对于对偶问题 \((D)\) 本身,问题 \((DRP)\) 的形式更加简单.因为 \(b\ge 0\),所以问题 \((RP)\) 存在可行解 \(x=0,s=b\),问题 \((DRP)\) 存在可行解 \(y=0\),根据弱对偶定理,两个问题必定都有界.直接从 \((DRP)\) 的角度观察,约束 \(y\le 1\) 只是一组规范化条件,保证了问题 \((DRP)\) 有界.

例. Dijkstra 算法

参考

\(n\) 个点 \(m\) 条边有向图,求起点为 \(1\) 终点为 \(n\) 最短路。设第 \(i\) 条边从 \(u_i\) 指向 \(v_i\),边权 \(w_i\),点 \(u\) 入边集 \(in_u\),出边集 \(out_u\)

构造类似费用流的东西求最短路,设第 \(i\) 条边流量为 \(x_i\),可得线性规划:

\[(P)\qquad \begin{align*} \min_{x}\;&w^Tx \\ \text{subject to }&\forall u\in[1,n],\sum_{i\in in_u}x_i-\sum_{i\in out_u}x_i= \begin{cases} -1,\;u=1 \\ 1,\;u=n \\ 0,\;otherwise \end{cases} \\ &x\ge \bm{0} \end{align*} \]

注意到现在不标准,因为 \(Ax=b\) 对应的 \(b\) 有一维 \(<0\),但发现这 \(n\) 条约束线性相关(直接求和 \(=\bm{0}\)),把 \(u=1\) 对应的约束去掉即可,不再写一遍了。

对偶问题:

\[(D)\qquad \begin{align*} \max_{y}\;&y_n \\ \text{subject to }&\forall i\in[1,m],[v_i\ne 1]y_{v_i}-[u_i\ne 1]y_{u_i}\le w_i \end{align*} \]

严格等价于

\[(D)\qquad \begin{align*} \max_{y}\;&y_n-y_1 \\ \text{subject to }&\forall i\in[1,m],y_{v_i}-y_{u_i}\le w_i \\ &y_1=0 \end{align*} \]

于是我们发现,最短路的对偶就是差分约束

\((D)\) 初始可行解:\(y=\bm{0}\)。设 \(I=\{i\in[1,m]:y_{v_i}-y_{u_i}=w_i\}\) 为紧约束集合。

\[(RP)\qquad \begin{align*} \min_{x,s}\;&\bm{1}^Ts \\ \text{subject to }&\forall u\in[2,n],\sum_{i\in in_u}x_i-\sum_{i\in out_u}x_i+s_i=[u=n] \\ &\forall i\in I, x_i\ge 0 \\ &\forall i\notin I, x_i=0 \\ &s\ge\bm{0} \end{align*} \]

求对偶,做等价变换(与 \((D)\) 类似)

\[(DRP)\qquad \begin{align*} \max_{x,s}\;&\bar{y}_n-\bar{y}_1 \\ \text{subject to }&\forall i\in I,\bar{y}_{v_i}-\bar{y}_{u_i}\le 0 \\ &\bar{y}\le\bm{1} \\ &\bar{y}_1=0 \end{align*} \]

手玩一下前几步:

  1. \(\bar{y}_i=[i\ne 1]\)\(\varepsilon=\min\limits_{u\in out_1}w_u\)。不妨设 \(\varepsilon\) 最小值取在 \(u=2\)\(D=w_2\),则 \(y'=(0,w_2,D,D,\dots)^T\)(这里混用两种符号是有道理的,稍后可见)。
  2. \(I=\{(1,2)\}\)\(\bar{y}'=(0,0,1,1,1,\dots)^T\)\(\varepsilon=\min\left\{w_i-(D-y_{u_i}):\bar{y}_{v_i}=1\land \bar{y}_{u_i}=0\right\}=\min\left\{y_{u_i}+w_i-D:\bar{y}_{v_i}=1\land \bar{y}_{u_i}=0\right\}\)

发现如果一个点已经确定了最短路,则在 \(y\) 上记为 \(dis_u\),否则记为 \(D\),发现 \(\varepsilon\) 的意义就是找到 \(dis_u+w\) 最小的边松弛,这就是 Dijkstra。


根据来源文章的要求,添加开源协议:

本页面的全部内容在 CC BY-SA 4.0SATA 协议之条款下提供,附加条款亦可能应用

posted @ 2026-07-01 22:04  SmpaelFx  阅读(0)  评论(0)    收藏  举报