线性规划
施工中,梦到哪句说哪句
定义
一般形式:
其中 \(A_{1,2,3}\) 为矩阵,\(b_{1,2,3},c\) 为向量,向量大小关系定义为偏序关系(即可能无大小关系,不过没影响)。
标准形式(与 oi-wiki 统一):
其中 \(A\) 为 \(n\times m\) 矩阵,\(b\) 为满足 \(b\ge 0\) 的 \(n\) 维向量,\(c\) 为 \(m\) 维向量。
一般形式转标准形式:
- 给 \(c\) 添加负号,将 \(\max\) 转为 \(\min\);
- 给 \(A_{i,*},b_i\) 添加负号,并翻转对应不等式方向,将 \(b_i\le 0\) 转为 \(b_i\ge 0\);
- 对于不等约束 \(a_i^Tx\ge(\le)b_i\),添加 \(s_i\),转为约束 \(a_i^Tx\mp s_i=b_i\) 且 \(s_i\ge 0\);
- 对于非正变量 \(x_i\le 0\),把 \(c_i,A_{*,i}\) 添加负号,转为 \(x_i\ge 0\);
- 对于无约束变量 \(x_i\),令 \(x_i=x_i^+-x_i^-\),约束 \(x_i^+,x_i^-\ge 0\)。
对偶
Lagrange 乘子法与 KKT 条件
这部分只有结论和感性理解,没有证明,严谨证明见其他博客。
Lagrange 乘子法,求解的问题形如:
只有等式约束
设 Lagrange 函数
极值点即要求:
有不等约束
类似地,设 Lagrange 函数:
我们希望答案为:
这是一个类似博弈的东西,我们希望在这个博弈下,\(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\) 的视角观察上述博弈:
设
则对偶问题为
结论1:
结论2:若两个问题至少有一个可行,则
LP 对偶
尝试用 Lagrange 乘子法解标准形式线性规划。
构造 \(Ax=b\) 约束对应乘子 \(y\),\(x\ge 0\) 对应乘子 \(s\) 和 Lagrange 函数:
考虑对偶,设:
要使 \(g(y,s)\) 有意义(\(\ne -\infty\)),则 \(A^Ty+c^T-s^T=0\)。把 \(y\) 取相反数,得到最终对偶问题为:
对偶定理
根据 2.1.3 Lagrange 乘子法与 KKT 条件 中的两个结论,我们能得到弱对偶定理和强对偶定理
弱对偶定理:对偶问题是原问题的下界,即
具体分为四种情况:
- 原问题和对偶问题均不可行,即 \(-\infty\le+\infty\);
- 原问题无界,对偶问题不可行,即 \(-\infty\le-\infty\);
- 原问题不可行,对偶问题无界,即 \(+\infty\le+\infty\);
- 均可行且均有界。
证明见 oi-wiki。
强对偶定理:当两个问题中至少有一个可行,则两个问题答案相同,具体分为三种情况
- 原问题无界,对偶问题不可行:\(-\infty=-\infty\);
- 原问题不可行,对偶问题无界:\(+\infty=+\infty\);
- 均可行且均有界。
强对偶定理推论:若 \(c^Tx=b^Ty\),则 \(x,y\) 分别是对应问题的最优解。
互补松弛条件
根据 KKT 条件,我们能特化出互补松弛条件。
KKT 条件告诉我们:
代入 \(-A^Ty+c-s=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,y\) 是最优解。
Primal-Dual Method / 原始-对偶方法
感觉 oi-wiki 写得挺清楚的,平移过来,略加修改。
对于标准形式的原问题(注意 \(b\ge 0\))
和它的对偶问题
上一节已经说明,要找到它们的最优解,只需要找到问题 \((P)\) 和 \((D)\) 的一组可行解,使得它们满足互补松弛条件 \(x^T(A^Ty-c)=0\).那不妨考虑如下流程:
-
从对偶问题 \((D)\) 的一个可行解 \(y\) 出发,计算对偶问题的紧约束的集合
\[I = \{i : (A^Ty - c)_i = 0\}. \] -
根据互补松弛条件,如果存在问题 \((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} \] -
如果问题 \((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\).
-
根据问题 \((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\),可得线性规划:
注意到现在不标准,因为 \(Ax=b\) 对应的 \(b\) 有一维 \(<0\),但发现这 \(n\) 条约束线性相关(直接求和 \(=\bm{0}\)),把 \(u=1\) 对应的约束去掉即可,不再写一遍了。
对偶问题:
严格等价于
于是我们发现,最短路的对偶就是差分约束。
\((D)\) 初始可行解:\(y=\bm{0}\)。设 \(I=\{i\in[1,m]:y_{v_i}-y_{u_i}=w_i\}\) 为紧约束集合。
求对偶,做等价变换(与 \((D)\) 类似)
手玩一下前几步:
- \(\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\)(这里混用两种符号是有道理的,稍后可见)。
- \(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.0 和 SATA 协议之条款下提供,附加条款亦可能应用

浙公网安备 33010602011771号