本页面包含面向开发者和高级用户的 PDLP(OR 工具中提供的线性和二次编程求解器)的数学背景。它只供代码部分参考,不适合自行阅读。感兴趣的读者应先熟悉一下《Practical Large-Scale Linear Programming using Primal-Dual Hybrid Gradient》这篇论文,然后查看代码,然后在代码引用时再回来查阅本文档。
原初
PDLP 考虑以下凸二次规划问题,
其中 A 为 m\times n 矩阵,Q 为对角非负 n\times n 矩阵1。上限向量 u^{c} 和 u^{v} 包含 \Mathbb{R} \cup \{ \infty\} 中的条目,下限向量 l^{c} 和 l^{v} 的条目假设为 $\Mathbb{R} \cup \{le ^v{le ^v{le ^v}。
双数
让 a \in \Mathbb{R}。以 [a]_+ 表示其正部分,[a]_- 表示其负部分,即 a = [a]_+ - [a]_-。应用于向量时,正部分和负部分均按元素计算。
前一原题的对数大于 x \in \Mathbb{R}^n、y \in \Mathbb{R}^m 和 r \in \mathbb{R}^n。矢量 y 包含对线性约束条件的双乘数($l^{c} \le ^le {xl} ^le } ^le 约束条件)。
当 Q = 0 时,x 可以从双声道中丢弃,从而恢复 LP 二元性。
双变量边界
如果目标中的 y-term 是有限的,则我们说 y 满足双变量边界条件,即:
使用共振二元性进行推导
预备知识
让 a \in \Mathbb{R} \cup \{-\infty\} 和 b \in \Mathbb{R} \cup \{\infty\} 与 b \ge a 相加,并考虑间隔 [a, b] \subseteq\Mathbb{R} \cup \{-\infty,in
以 \Mathcal{I}_{[a, b]} : \Mathbb{R}\to \Mathbb{R} \cup \{ \infty\} 为区间的指示函数,即当 x \in [a, b] 时,\Mathcal{I}_{[a, b]}(x) 为零,
将 p(y; a, b): \Mathbb{R}\to \mathbb{R} \cup \{\infty\} 定义为:
当 a 或 b 为无限时,遵循标准的扩展实数算术。
基本结果:p(y; a, b) = (\Mathcal{I}_{[a, b]})^*(y),其中 (\cdot)^* 表示凸共振。
对 l \subseteq (\Mathbb{R} \cup \{-\infty\})^n 和 u \subseteq (\Mathbb{R} \cup \{\infty\})^n,指示函数 $\Mathcal{I}_{[l, u]} 数学符号 \ux{1} \ux_cal{1} \ux_sum_{1] \ux_cal{1} \u x y {1} 数学符号 \ux{x
衍生
在引入辅助变量 \tilde \in \Mathbb{R}^m 和 \tilde x \in \mathbb{R}^n 时,我们将原题重新表述为:
通过对等式约束进行二元化,我们得到:
将最小值与最大值交换,然后再重新分组:
x、\tilde x 和 \tilde a 的联接最小化分解。对于 x,我们可以看到最小化函数(如果存在)满足 Qx + c - A^Ty = r,在这种情况下,最小值为 -\frac{1}{2} x^TQx。对于 \tilde x 和 \tilde a,我们应用凸共振关系的定义,并对符号进行小幅调整。
这样就得出双重结果:
通过扩展 p 的定义,我们获得了在顶部陈述的对数。
马鞍点式
原始-双混合渐变(请参阅 Chambolle 和 Pock)针对的是以下形式的原始问题:
这种共振式二元性相当于马鞍点问题
PDLP 通过设置以下值将凸二次规划问题强制转换为此形式:
- f(x) = 0
- g(x) = c^T x + \frac{1}{2} x^T Q x + \Mathcal{I}_{[l^v, u^v]}(x)
- h(a) = \Mathcal{I}_{[-u^c,-l^c]}(a)
- K = -A
如前所述,h^*(y) = p(y; -u^c,-l^c) 是分段线性凸函数。g 和 h^* 都可以取无限值,这有效地限制了 x 和 y 的域。
请注意,在 PDLP 假设 Q 为对角线的情况下,g 的邻近运算符可计算为闭合形式,这是因为 g 是可分隔的,并且对于任何函数 f_1、f_2 存在以下属性:
有关这一事实的证明,请参阅优化中的一阶方法中的定理 6.13。生成的表达式由
降低成本、双残差和纠正的双目标
马鞍点公式仅显式适用于 (x,y);减少的成本 r 是隐式的。为了在求解马鞍点公式时返回 (x,y,r),我们将 r 定义为 r = Qx + c - A^Ty。校正的双目标是对对二问题的目标值,但代价为有限且不小于零的下限,且始终为小于零的值
PDLP 报告的减少费用和双目标在 OR-tools 版本 9.7 和 9.8 之间发生了变化。如需检查哪个版本适用,请查看 primal_dual_hybrid_gradient.h
中描述 SolverResult::reduced_costs
的注释,看看其中是否提及版本 9.8。
9.7 版及更早版本
为了在更正的双目标为 -\infty 时获得更有意义的双值,我们还报告了一个双目标,它会忽略目标值中的无限项。双残差是已修正的双目标中无限项的 r 值,其他分量为 0;PDLP 返回的减少的成本是经过更正的双目标中的有限项的 r 值,其他分量为 0(这样 $r = \mbox+{residuals}{residuals})。
9.8 及更高版本
为了在更正的双目标为 -\infty 时获得更有意义的双值,我们还报告了一个双目标,它将目标值中的无限项替换为有限数,如下所示:如果其中一个边界有限,则使用该边界而非无穷边界;否则使用零作为边界。这一选择保留了双重目标的凹性,但不一定给出目标值的下限。对余差是更正后的对数目标中来自无限项的 r 值。PDLP 返回的减少费用为 r。
将某些可变边界视为无限
在这两个版本中,如果求解器选项 handle_some_primal_gradients_on_finite_bounds_as_residuals
为 true
(默认值),则在计算双目标和双残差时,额外的变量边界可能会被视为无限。特别是,当 |x_i - l^v_i| > |x_i| 时,l^v_i 会被视为无限;同样地,如果 |x_i - u^v_i| > |x_i|,u^v_i 会被视为无限。
请注意,handle_some_primal_gradients_on_finite_bounds_as_residuals
不会影响计算的迭代;它只会影响终止测试中使用的双目标和残差,以及所报告的统计信息。
重新缩放
假设我们给定一个对角线(列)重新缩放矩阵 C 和一个对角线(行)重新缩放矩阵 R,其中对角线上有正条目。如在 ShardedQuadraticProgram::RescaleQuadraticProgram
中应用重新缩放一样,我们获得了以下转换后的问题:
原始问题的解求为 x = C\tilde x。如果 \tilde y 为对数解,且 \tilde r 降低了转换问题的成本,则 y = R\tilde y 是对解对数,r = C^{-1}\tilde r 会被省略(原始问题的推导成本)。
确定不可行
基本不可行性证书为 (y, r) \in \Mathbb{R}^m\times \Mathbb{R}^n 并满足以下条件:
这种点的存在意味着原始问题没有解决方案。
类似地,双重不可行证书的点 x \in \Mathbb{R}^n 这样:
请注意,线性节目的证书可以通过设置 Q=0 获取。
-
对称正半定目标矩阵 S 可以通过以下方式转换为此形式:S 为 S = R^T R(例如,Cholesky 因式分解),引入由约束 R x - z = 0 定义的额外变量 z,以便 x^T S x = z^T z。↩