Numerical Optimization Ch16. Quadratic Programming

第十六章: 二次规划


目标函数为二次函数且约束线性的优化问题称为 二次规划(quadratic program, QP). 这类问题自身便很重要; 它们也作为一些约束优化算法的子问题而存在, 例如逐步二次规划、增广Lagrange函数法和内点法.

一般的二次规划具有以下形式: min x q ( x ) = 1 2 x T G x + x T c s u b j e c t   t o a i T x = b i , i E , a i T x b i , i I , \begin{array}{rl}\min\limits_x & q(x)=\frac{1}{2}x^TGx+x^Tc\\\mathrm{subject\,to} & a_i^Tx=b_i,\quad i\in\mathcal{E},\\& a_i^Tx\ge b_i,\quad i\in\mathcal{I},\end{array} 其中 G G n × n n\times n 的对称阵, E , I \mathcal{E},\mathcal{I} 为有限指标集, c , x , { a i } , i E I c,x,\{a_i\},i\in\mathcal{E}\cup\mathcal{I} 均为 R n \mathcal{R}^n 中的向量. 二次规划总能被有限求解(或证明不可行), 但所需计算量则严重依赖于目标函数的特性以及不等式约束的个数.

  • 若Hessian阵 G G 半正定, 我们称此问题为凸二次规划(convex QP), 这时求解问题的复杂度与线性规划类似.
  • G G 为正定阵, 则称其为严格凸二次规划(strictly convex QP).)
  • G G 为不定矩阵, 这就是个非凸二次规划(nonconvex QP). 这种问题具有多个稳定点和局部极小, 因此求解起来更加麻烦.

本章我们集中讨论凸二次规划. 我们先看一个二次规划的有趣应用.

例1 (Portfolio Optimization) 每位投资者都知道在风险和回报间存在某种均衡: 为增加投资的预期回报, 投资者必须愿意承担更大的风险. 投资组合理论就研究在给定 n n 个可能的投资方向以及对应的回报 r i , i = 1 , 2 , , n r_i,i=1,2,\ldots,n 时, 如何对这一平衡建模.

这里的回报 r i r_i 通常并不事先已知, 且常被假设为服从正态分布的随机变量. 于是我们可以用数字特征刻画这些变量: 期望 μ i = E [ r i ] \mu_i=E[r_i] , 方差 σ i 2 = E [ ( r i μ i ) 2 ] \sigma_i^2=E[(r_i-\mu_i)^2] . 这其中方差度量了变量 r i r_i 在期望附近的波动大小. 方差越大, 风险也越大. 这些回报随机变量通常也不是独立的, 我们有它们的相关系数为 ρ i j = E [ ( r i μ i ) ( r j μ j ) ] σ i σ j , i , j = 1 , 2 , , n . \rho_{ij}=\frac{E[(r_i-\mu_i)(r_j-\mu_j)]}{\sigma_i\sigma_j},\quad i,j=1,2,\ldots,n. 相关系数度量了 r i , r j r_i,r_j 往相同方向移动的趋势: 若二者同升同落, 则有正相关系数; ρ i j \rho_{ij} 越接近1, 二者的关系也就更紧密. 趋势相反的 r i , r j r_i,r_j 则有负相关系数.

投资者将自己有限的资源分配到这 n n 个方向上. 假设对于第 i i 个方向, 投资者投入了 x i x_i 份资金; 所有的资金均用于投资; 不允许卖空(short-selling). 即约束有 i = 1 n x i = 1 , x 0 \sum_{i=1}^nx_i=1,x\ge0 . 则此投资组合的回报为 R = i = 1 n x i r i . R=\sum_{i=1}^nx_ir_i. 为评估投资组合的好坏, 我们需要其期望和方差: E [ R ] = E [ i = 1 n x i r i ] = i = 1 n x i E [ r i ] = x T μ , V a r [ R ] = E [ ( R E [ R ] ) 2 ] = i = 1 n j = 1 n x i x j σ i σ j ρ i j = x T G x , E[R]=E\left[\sum_{i=1}^nx_ir_i\right]=\sum_{i=1}^nx_iE[r_i]=x^T\mu,\\\mathrm{Var}[R]=E[(R-E[R])^2]=\sum_{i=1}^n\sum_{j=1}^nx_ix_j\sigma_i\sigma_j\rho_{ij}=x^TGx, 这里 n × n n\times n 对称半正定矩阵 G G 定义为 G i j = ρ i j σ i σ j . G_{ij}=\rho_{ij}\sigma_i\sigma_j. 我们称之为协方差矩阵(covariance matrix).

我们最希望的找到期望高、方差小的投资组合. 这是个双目标的问题. 利用Markowitz提出的模型, 我们利用风险容忍参数(risk tolerance parameter) κ \kappa , 将这二者组合成一个目标函数, 再结合约束求解相应问题: max x T μ κ x T G x , s u b j e c t   t o   i = 1 n x i = 1 , x 0. \max x^T\mu-\kappa x^TGx,\quad\mathrm{subject\,to\,}\sum_{i=1}^nx_i=1,x\ge0. 非负参数 κ \kappa 的取值依赖于每个投资者的偏好: 若他觉得降低风险更重要, κ \kappa 就取大一点; 若他觉得高期望回报更重要, κ \kappa 就取小一点.

在现实生活中构建这一问题的难点在于, 如何获取期望回报、方差和相关系数. 通常金融专家会结合历史数据和他们自身的独到见解给出这些值.

1. 带等式约束的二次规划

我们先讨论只带等式约束的二次规划. 这里的技术同样适用于带不等式约束的问题, 这是因为(后面我们会提到)求解一般QP的一些算法在每步迭代中也需要求解等式约束QP.

1.1 等式约束二次规划的形式

为简单起见, 我们将等式约束以矩阵形式表示, 并将等式约束QP写作 min x q ( x ) = d e f 1 2 x T G x + x T c s u b j e c t   t o A x = b , \begin{array}{rl}\min\limits_x & q(x)\xlongequal{def}\frac{1}{2}x^TGx+x^Tc\\\mathrm{subject\,to} & Ax=b,\end{array} 这里 A A m × n ( m n ) m\times n(m\le n) Jacobi矩阵, 其行为 a i T , i E a_i^T,i\in\mathcal{E} ; b b R m \mathbb{R}^m 中的向量, 其分量为 b i , i E b_i,i\in\mathcal{E} . 当前我们不妨假定 A A 行满秩.

上述等式约束QP的一阶最优性条件为, 若 x x^* 为解, 则存在 λ \lambda^* 使得以下线性系统成立: [ G A T A O ] [ x λ ] = [ c b ] . \begin{bmatrix}G & -A^T\\A & O\end{bmatrix}\begin{bmatrix}x^*\\\lambda^*\end{bmatrix}=\begin{bmatrix}-c\\b\end{bmatrix}. 这里 λ \lambda^* 为Lagrange乘子. 我们可以通过变换这一线性系统变为利于计算的形式. 将 x x^* 表示成 x = x + p x^*=x+p , 其中 x x 为解的某个估计, p p 为搜索步. 代入整理可得 [ G A T A O ] [ p λ ] = [ g h ] , \begin{bmatrix}G & A^T\\A & O\end{bmatrix}\begin{bmatrix}-p\\\lambda^*\end{bmatrix}=\begin{bmatrix}g\\h\end{bmatrix}, 其中 h = A x b , g = c + G x , p = x x . h=Ax-b,\quad g=c+Gx,\quad p=x^*-x. 我们称此为KKT方程(系统). 这里的对称矩阵 [ G A T A O ] \begin{bmatrix}G & A^T\\A & O\end{bmatrix} 我们称为KKT矩阵. 下面的结论给出了使它非奇异的条件. 如第十五章中一样, 我们用 Z Z 表示 A A 核空间的一组基构成的矩阵: A Z = 0 AZ=0 , Z Z 列满秩.

引理1 A A 行满秩, 假设既约Hessian阵(reduced-Hessian matrix) Z T G Z Z^TGZ 正定. 则KKT矩阵 K = [ G A T A O ] K=\begin{bmatrix}G & A^T\\A & O\end{bmatrix} 非奇异, 因此存在唯一满足KKT方程的 ( x , λ ) (x^*,\lambda^*) .

证明: 设存在 w , v w,v 使得 [ G A T A O ] [ w v ] = 0. \begin{bmatrix}G & A^T\\A & O\end{bmatrix}\begin{bmatrix}w\\v\end{bmatrix}=0. A w = 0 Aw=0 , 于是 0 = [ w v ] T [ G A T A O ] [ w v ] = w T G w . 0=\begin{bmatrix}w\\v\end{bmatrix}^T\begin{bmatrix}G & A^T\\A & O\end{bmatrix}\begin{bmatrix}w\\v\end{bmatrix}=w^TGw. w w 位于 A A 的核空间, 因此存在 u R n m u\in\mathbb{R}^{n-m} 使得 w = Z u w=Zu . 因此有 0 = w T G w = u T Z T G Z u , 0=w^TGw=u^TZ^TGZu, 再由 Z T G Z Z^TGZ 正定得 u = 0 w = 0 A T v = 0 u=0\Rightarrow w=0\Rightarrow A^Tv=0 . A A 行满秩, 所以 A T A^T 列满秩 v = 0 \Rightarrow v=0 . 因此方程只有零解 \Leftrightarrow 矩阵非奇异.

例2 考虑二次规划问题 min q ( x ) = 3 x 1 2 + 2 x 1 x 2 + x 1 x 3 + 2.5 x 2 2 + 2 x 2 x 3 + 2 x 3 2 8 x 1 3 x 2 3 x 3 , s u b j e c t   t o   x 1 + x 3 = 3 , x 2 + x 3 = 0. \begin{array}{rl}\min & q(x)=3x_1^2+2x_1x_2+x_1x_3+2.5x_2^2+2x_2x_3+2x_3^2-8x_1-3x_2-3x_3,\\\mathrm{subject\,to\,} & x_1+x_3=3,\quad x_2+x_3=0.\end{array} 因此定义 G = [ 6 2 1 2 5 2 1 2 4 ] , c = [ 8 3 3 ] , A = [ 1 0 1 0 1 1 ] , b = [ 3 0 ] . G=\begin{bmatrix}6 & 2 & 1\\2 & 5 & 2\\1 & 2 & 4\end{bmatrix},\quad c=\begin{bmatrix}-8\\-3\\-3\end{bmatrix},\quad A=\begin{bmatrix}1 & 0 & 1\\0 & 1 & 1\end{bmatrix},\quad b=\begin{bmatrix}3\\0\end{bmatrix}. 这个问题的解和最优Lagrange乘子为 x = ( 2 , 1 , 1 ) T , λ = ( 3 , 2 ) T . x^*=(2,-1,1)^T,\quad \lambda^*=(3,-2)^T. 矩阵 G G 本身正定, 根据 A A 可求得一 Z Z Z = ( 1 , 1 , 1 ) T . Z=(-1,-1,1)^T.
不难证明, 若引理1条件满足, 则存在唯一 ( x , λ ) (x^*,\lambda^*) 满足一阶必要性条件和二阶充分性条件. 因此 x x^* 严格局部极小点. 事实上, 我们可以证明 x x^* 全局解.

定理2 A A 行满秩, 假设既约矩阵 Z T G Z Z^TGZ 正定. 则KKT方程的解 x x^* 是二次规划的唯一全局解.

证明: 设 x x 为另一可行点, 记 p p x x x^*-x . 由于 A x = A x = b Ax^*=Ax=b , 所以 A p = 0 Ap=0 . 代入目标函数可得 q ( x ) = 1 2 ( x p ) T G ( x p ) + c T ( x p ) = 1 2 p T G p p T G x c T p + q ( x ) . \begin{aligned}q(x)&=\frac{1}{2}(x^*-p)^TG(x^*-p)+c^T(x^*-p)\\&=\frac{1}{2}p^TGp-p^TGx^*-c^Tp+q(x^*).\end{aligned} 从KKT方程可知 G x = c + A T λ Gx^*=-c+A^T\lambda^* , 因此由 A p = 0 Ap=0 可得 p T G x = p T ( c + A T λ ) = p T c . p^TGx^*=p^T(-c+A^T\lambda^*)=-p^Tc. 代入前式, q ( x ) = 1 2 p T G p + q ( x ) . q(x)=\frac{1}{2}p^TGp+q(x^*). p p 位于 A A 核空间, 所以存在 u R n m u\in\mathbb{R}^{n-m} 使得 p = Z u p=Zu . 所以 q ( x ) = 1 2 u T Z T G Z u + q ( x ) . q(x)=\frac{1}{2}u^TZ^TGZu+q(x^*). Z T G Z Z^TGZ 的正定性, 除非 u = 0 u=0 (即 x = x x=x^* ), 否则 q ( x ) > q ( x ) q(x)>q(x^*) . 因此 x x^* 为唯一全局解.

类似可证, 当既约Hessian阵半正定时, x x^* 仅为局部极小点; 当既约Hessian阵有负特征值, 则 x x^* 仅是个稳定点.

1.2 求解KKT方程的直接法

本节我们讨论求解KKT方程的高效算法. 注意到若 m 1 m\ge1 , 则KKT矩阵总是不定的. 我们定义一个对称阵 K K 的惯性指数为三元组 ( n + , n , n 0 ) (n_+,n_-,n_0) , 分别表示 K K 的正特征值个数、负特征值个数和0特征值个数. i n e r t i a ( K ) = ( n + , n , n 0 ) . \mathrm{inertia}(K)=(n_+,n_-,n_0). 下面的结论刻画了KKT矩阵的惯性指数.

定理3 K K 为KKT矩阵, 假设 A A 行满秩, 则 i n e r t i a ( K ) = i n e r t i a ( Z T G Z ) + ( m , m , 0 ) . \mathrm{inertia}(K)=\mathrm{inertia}(Z^TGZ)+(m,m,0). 因此, 若 Z T G Z Z^TGZ 正定, i n e r t i a ( K ) = ( n , m , 0 ) \mathrm{inertia}(K)=(n,m,0) .
证明可见Gould N I M1引理3.4, 其中要用到Sylvester惯性定理.

例如对例2, 我们就有 i n e r t i a ( K ) = ( 3 , 2 , 0 ) \mathrm{inertia}(K)=(3,2,0) .

下面介绍求解不定KKT系统的直接法.

1.2.1 对称不定分解法

一种硬求解KKT方程的方式是直接对整个KKT矩阵做三角分解, 之后用三角因子前代回代. 由于不定性存在, 我们就不能使用Cholesky分解, 可以使用带部分旋转的Gauss消去法或是它的稀疏变体得到 L , U L,U , 但此法忽略了对称性.

对此最有效的方法是对称不定分解(symmetric indefinite factorization). 这我们已经在第三章讨论了. 一般对一个对称矩阵 K K , 我们有分解 P T K P = L B L T , P^TKP=LBL^T, 其中 P P 为一置换阵, L L 为单位下三角阵, B B 为分块对角阵(其块为 1 × 1 1\times 1 2 × 2 2\times 2 ). 由矩阵 P P 所定义的对称置换用于增加数值稳定性, 以及保持 K K 的稀疏性. 对称不定分解的计算成本一般是稀疏Gauss消去的一半.

为求解KKT方程, 我们首先计算KKT矩阵的对称不定分解. 之后按以下步骤得到解: L z = P T [ g h ] z ; B z ^ = z z ^ ; L T z ˉ = z ^ z ˉ ; [ p λ ] = P z ˉ . \begin{aligned}求解Lz&=P^T\begin{bmatrix}g\\h\end{bmatrix}\quad 得到z;\\求解B\hat{z}&=z\quad 得到\hat{z};\\求解L^T\bar{z}&=\hat{z}\quad得到\bar{z};\\置\begin{bmatrix}-p\\\lambda^*\end{bmatrix}&=P\bar{z}.\end{aligned} 左乘置换阵 P , P T P,P^T 可通过调整向量分量的位置实现; 求解 B z ^ = z B\hat{z}=z 则需要求解一些较小的 1 × 1 1\times 1 2 × 2 2\times 2 系统, 运算量仅为原系统维数 ( m + n ) (m+n) 的一个小倍数; 基于 L , L T L,L^T 的三角变换反倒是最昂贵的操作, 它们的具体耗费依赖于稀疏程度, 但通常还是比对称不定分解要小得多的. 综上, 直接分解的方法的计算量主要在于对称不定分解.

这一分解整个KKT矩阵的方法在许多问题上十分高效. 但当选取的 P P 不能保持稀疏性时, 计算量就会很大, 此时的 L L 也会比原本的系数矩阵更加稠密.

1.2.2 Schur补方法

假设 G G 正定的, 则在原KKT方程第一行左乘 A G 1 AG^{-1} 再减去第二行可得到关于乘子 λ \lambda^* 的线性系统: ( A G 1 A T ) λ = ( A G 1 g h ) . (AG^{-1}A^T)\lambda^*=(AG^{-1}g-h). 求解这一对称正定系统得到 λ \lambda^* , 再回代如第一行即可得 p p : G p = A T λ g . Gp=A^T\lambda^*-g. 此法需要计算 G 1 G^{-1} m × m m\times m 矩阵 A G 1 A T AG^{-1}A^T 的分解. 因此它在以下情形较为实用:

  • G G 良态且易于求逆(例如 G G 对角或分块对角); 或者
  • G 1 G^{-1} 可显式地通过拟牛顿更新公式得到; 或者
  • 等式约束数目 m m 很小, 从而计算矩阵 A G 1 A T AG^{-1}A^T 的成本不会太大.

所谓的"Schur补(Schur-complement)"来源于以下观察: 利用 G G 做分块矩阵的Gauss消去, 得分块上三角阵 [ G A T O A G 1 A T ] . \begin{bmatrix}G & A^T\\O & -AG^{-1}A^T\end{bmatrix}. 在线性代数的语言中, A G 1 A T AG^{-1}A^T 称为 G G K K 中的Schur补. 将此分块消去应用于右端项, 再回代即可得算式.

我们也可以用类似于Schur补的方法得到KKT矩阵的显式求逆公式: C = G 1 G 1 A T ( A G 1 A T ) 1 A G 1 , E = G 1 A T ( A G 1 A T ) 1 , F = ( A G 1 A T ) 1 . \begin{aligned}C&=G^{-1}-G^{-1}A^T(AG^{-1}A^T)^{-1}AG^{-1},\\E&=G^{-1}A^T(AG^{-1}A^T)^{-1},\\F&=-(AG^{-1}A^T)^{-1}.\end{aligned} 于是将这一显式表示直接左乘KKT方程右端项即可得解. 可以验证这种方式与上述Schur补方法得到的算式是相同的.

1.2.3 零空间方法

零空间方法null-space method不需要 G G 非奇异, 因此比Schur补方法具更广泛的应用. 它仅假设引理1的条件成立, 即 A A 行满秩, Z T G Z Z^TGZ 正定. 不过它需要零空间的基矩阵 Z Z 的信息. 与Schur补方法相同的是, 它将KKT方程解耦成两个较小的系统.

我们将向量 p p 分解成以下两部分: p = Y p Y + Z p Z , p=Yp_Y+Zp_Z, 其中 Z Z n × ( n m ) n\times(n-m) 零空间矩阵, Y Y 为任意使得 [ Y Z ] [Y\mid Z] 非奇异的 n × m n\times m 矩阵, p Y p_Y m m 维向量, p Z p_Z ( n m ) (n-m) 维向量. 我们曾在第十五章第三节讨论过 Y , Z Y,Z , 且说明了 Y x Y Yx_Y 就是 A x = b Ax=b 的特解, Z x Z Zx_Z 为沿约束的位移.

p p 的表示代入KKT方程的第二行, 得 ( A Y ) p Y = h . (AY)p_Y=-h. A A 行满秩, [ Y Z ] [Y\mid Z] 非奇异, 因此乘积 A [ Y Z ] = [ A Y O ] A[Y\mid Z]=[AY\mid O] 亦列满秩, 这就得出 A Y AY 为非奇异阵, p Y p_Y 良定. 与此同时, 又将 p p 的表示代入KKT方程第一行可得 G Y p Y G Z p Z + A T λ = g , -GYp_Y-GZp_Z+A^T\lambda^*=g, 上式左乘 Z T Z^T , ( Z T G Z ) p Z = Z T G Y p Y Z T g . (Z^TGZ)p_Z=-Z^TGYp_Y-Z^Tg. 对此对既约Hessian阵 Z T G Z Z^TGZ 做Cholesky分解即可得 p Z p_Z . 于是可得 p = Y p Y + Z p Z p=Yp_Y+Zp_Z . 至于Lagrange乘子, 第一行左乘 Y T Y^T 得线性系统 ( A Y ) T λ = Y T ( g + G p ) , (AY)^T\lambda^*=Y^T(g+Gp), 而之前已经求过系数矩阵为 A Y AY 的方程, 因此使用同样的因子可得 λ \lambda^* .

例3 考虑例2中的问题. 选取 Y = [ 2 / 3 1 / 3 1 / 3 2 / 3 1 / 3 1 / 3 ] , Z = ( 1 , 1 , 1 ) T . Y=\begin{bmatrix}2/3 & -1/3\\-1/3 & 2/3\\1/3 & 1/3\end{bmatrix}, Z=(-1,-1,1)^T. 注意 A Y = I AY=I . 假设估计解 x = ( 0 , 0 , 0 ) T x=(0,0,0)^T . 于是 h = A x b = b , g = c + G x = c = [ 8 3 3 ] . h=Ax-b=-b,\quad g=c+Gx=c=\begin{bmatrix}-8\\-3\\-3\end{bmatrix}. 计算可得 p Y = [ 3 0 ] , p Z = [ 0 ] , p_Y=\begin{bmatrix}3\\0\end{bmatrix},\quad p_Z=\begin{bmatrix}0\end{bmatrix}, 从而 p = x x = Y p Y + Z p Z = [ 2 1 1 ] . p=x^*-x=Yp_Y+Zp_Z=\begin{bmatrix}2\\-1\\1\end{bmatrix}. 回代得 λ \lambda^* , 最后有 x = [ 2 1 1 ] , λ = [ 3 2 ] . x^*=\begin{bmatrix}2\\-1\\1\end{bmatrix},\quad\lambda^*=\begin{bmatrix}3\\-2\end{bmatrix}.

零空间方法 n m n-m 很小时十分实用. 限制其主要的因素为零空间矩阵 Z Z . 在某些大型问题上, Z Z 的计算很昂贵. 况且 Z Z 并不唯一, 若选择不当, 既约Hessian阵就病态. 若选取 Z Z 使得其列正交(一般对于中小型问题的做法), 则 Z T G Z Z^TGZ 的条件数至少和 G G 差不多. 而当 A A 大且稀疏时, 计算正交的 Z Z 不太现实, 此时我们应选取较差但较好算的 Z Z . 例如第十五章中提到的结合Gauss消去和正交的一种选取方式.

1.2.4 Schur补方法与零空间方法的比较

我们很难给出零空间法和Schur补法的优劣关系. 这是因为即使在同一维度的问题中, 由计算 Z Z 引发的填充(fill-in)也大不相同.

一般, 若 G G 正定且 A G 1 A T AG^{-1}A^T 好算(这可能因 G G 较好求逆, 或 m m 相对 n n 较小)时, 我们推荐使用Schur补方法; 否则, 我们倾向使用零空间方法, 特别是当计算 G G 的因子要比计算零空间矩阵 Z Z Z T G Z Z^TGZ 因子成本高得多时.

1.3 求解KKT方程的迭代法

与直接求解KKT方程相对的是迭代求解. 对于大型系统, 迭代法更加合适且往往易于并行. CG不能直接用于求解KKT方程, 因为它在非正定的系统上不稳定. 此时更好的选择是对一般线性或对称不定系统的Krylov子空间方法, 例如广义极小参量法(GMRES), 拟极小残量法(QMR), 最小二乘QR分解法(LSQR). 其他的迭代方法可由零空间方法推出, 其基础是将CG应用于既约系统. 此类算法是第十八章和第十九章的重点. 我们在本节也将讨论之. 通篇我们假设 Z T G Z Z^TGZ 正定.

1.3.1 利用CG求解既约系统

我们先挖掘等式约束QP下隐含的等式条件. 我们将二次规划的解写作 x = Y x Y + Z x Z , x^*=Yx_Y+Zx_Z, 其中 x Z R n m , x Y R m x_Z\in\mathbb{R}^{n-m},x_Y\in\mathbb{R}^m . 于是约束 A x = b Ax=b 就推出 A Y x Y = b , AYx_Y=b, 这就得到了 x Y x_Y (实际上就是特解). 第十五章中有各种 Y Y 的选取方式, 这里我们不再赘述. 将 x x^* 的表示代入二次目标函数, 得到等价的无约束既约问题 min x Z 1 2 x Z T Z T G Z x Z + x Z T c Z , \min_{x_Z}\frac{1}{2}x_Z^TZ^TGZx_Z+x_Z^Tc_Z, 其中 c Z = Z T G Y x Y + Z T c . c_Z=Z^TGYx_Y+Z^Tc. 于是 x Z x_Z 满足 Z T G Z x Z = c Z . Z^TGZx_Z=-c_Z. Z T G Z Z^TGZ 正定, 我们就可以应用CG.

第五章, 预处理可加快CG的收敛速度. 假设预处理子 W Z Z W_{ZZ} 已经给定. 于是有预处理CG如下.

算法1 (Preconditioned CG for Reduced Systems)
Choose an initial point x Z x_Z ;
Compute r Z = Z T G Z x Z + c Z , g Z = W Z Z 1 r Z , d Z = g Z r_Z=Z^TGZx_Z+c_Z,g_Z=W_{ZZ}^{-1}r_Z,d_Z=-g_Z ;
repeat
α r Z T g Z / d Z T Z T G Z d Z ; x Z x Z + α d Z ; r Z + r Z + α Z T G Z d Z ; g Z + W Z Z 1 r Z + ; β ( r Z + ) T g Z + / r Z T g Z ; d Z g Z + β d Z ; g Z g Z + ; r Z r Z + ; \begin{aligned}\alpha&\leftarrow r_Z^Tg_Z/d_Z^TZ^TGZd_Z;\\x_Z&\leftarrow x_Z+\alpha d_Z;\\r_Z^+&\leftarrow r_Z+\alpha Z^TGZd_Z;\\g_Z^+&\leftarrow W_{ZZ}^{-1}r_Z^+;\\\beta&\leftarrow(r_Z^+)^Tg_Z^+/r_Z^Tg_Z;\\d_Z&\leftarrow-g_Z^+\beta d_Z;\\g_Z&\leftarrow g_Z^+;\quad r_Z\leftarrow r_Z^+;\end{aligned} until a termination test is satisfied

上述算法的终止条件可取为 r Z T W Z Z 1 r Z r_Z^TW_{ZZ}^{-1}r_Z 足够小时.

这一算法中, 我们无需显式构作既约Hessian阵 Z T G Z Z^TGZ , 这是因为CG只需要我们计算矩阵-向量乘积. 事实上我们甚至不需要显式地构造 Z Z . 我们仅需提供 Z , Z T Z,Z^T 与任意向量的乘积即可. 对于 Z Z 的某些选取方式, 计算乘积要比计算 Z Z 本身方便得多.

这里预处理子 W Z Z W_{ZZ} 是一 ( n m ) (n-m) 维对称正定矩阵, 它的选取应当尽可能使 W Z Z 1 / 2 ( Z T G Z ) W Z Z 1 / 2 W_{ZZ}^{-1/2}(Z^TGZ)W_{ZZ}^{-1/2} 的特征值聚成簇, 从而减小最小、最大特征值之间的跨度, 加快收敛速度. 理想的预处理子能使得 W Z Z 1 / 2 ( Z T G Z ) W Z Z 1 / 2 = I W_{ZZ}^{-1/2}(Z^TGZ)W_{ZZ}^{-1/2}=I , 即 W Z Z = Z T G Z W_{ZZ}=Z^TGZ . 受此启发, 我们考虑形式为 W Z Z = Z T H Z W_{ZZ}=Z^THZ 的预处理子, 其中 H H 为使得 Z T H Z Z^THZ 正定的对称阵. H H 的一些选取方式可见下方讨论. 同时这种形式的预处理子也使我们能在 n n 维空间中应用CG.

1.3.2 投影CG算法

若使用如上形式的预处理子和 A x = b Ax=b 的一个特解, 我们可以设计算法1的修正以避免涉及 Z Z 的运算. 此法潜在使用了正交 Z Z , 且不受 A A 的病态或 Z Z 的选取影响.

算法1求得 x Z x_Z 后, 必要左乘 Z Z 代回得到二次规划的解. 因此, 我们可以重写算法1, 使得算法直接在向量 x = Z x Z + Y x Y x=Zx_Z+Yx_Y 上做文章, 其中 Y x Y Yx_Y 固定, x Z x_Z 项则在每步迭代中(隐式地)更新. 具体地, 我们引入 n n 维向量 x , r , g , d x,r,g,d : x = Z x Z + Y x Y , Z T r = r Z , g = Z g Z , d = Z d Z . \begin{aligned}x&=Zx_Z+Yx_Y,\\Z^Tr&=r_Z,\\g&=Zg_Z,\\d&=Zd_Z.\end{aligned} 定义 n × n n\times n 变尺度投影矩阵(scaled projection matrix) P P : P = Z ( Z T H Z ) 1 Z T , P=Z(Z^THZ)^{-1}Z^T, 其中 H H 为之前预处理子中的对称阵. 于是可得 n n 维空间的CG迭代如下.

算法2 (Projected CG Method)
Choose an initial point x x satisfying A x = b Ax=b ;
Compute r = G x + c , g = P r , d = g r=Gx+c,g=Pr,d=-g ;
repeat α r T g / d T G d ; x x + α d ; r + r + α G d ; g + P r + ; β ( r + ) T g + / r T g ; d g + + β d ; g g + ; r r + ; \begin{aligned}\alpha&\leftarrow r^Tg/d^TGd;\\x&\leftarrow x+\alpha d;\\r^+&\leftarrow r+\alpha Gd;\\g^+&\leftarrow Pr^+;\\\beta&\leftarrow(r^+)^Tg^+/r^Tg;\\d&\leftarrow-g^++\beta d;\\g&\leftarrow g^+;\quad r\leftarrow r^+;\end{aligned} until a convergence test is satisfied

停机准则可以设为当 r T g = r T P r r^Tg=r^TPr 小于给定容忍限时.

注意 g + g^+ (我们称之为预处理残差(preconditioned residual))位于 A A 的核空间. 因此在无计算误差时, 由算法2生成的 d d 也已知位于 A A 的核空间里, 从而所有的迭代点 x x 均满足 A x = b Ax=b . 不难验证若 Z T G Z , Z T H Z Z^TGZ,Z^THZ 正定则迭代良定. 事实上, 这是因为 d T G d = u T Z T G Z u , u 0 , r T g = r T Z ( Z T H Z ) 1 Z T r , \begin{aligned}d^TGd&=u^TZ^TGZu,\quad \exists u\ne0,\\r^Tg&=r^TZ(Z^THZ)^{-1}Z^Tr,\end{aligned} 所以算法2中出现的分母均不为0.

矩阵 H H 的两种简单选取方式是: H = d i a g ( G i i ) , H = I H=\mathrm{diag}(|G_{ii}|), H=I . 某些情形下, 将 H H 定义为 G G 的分块对角子阵更有效.

算法2仅在制造投影算子 P P 时用到了零空间矩阵 Z Z . 不过我们可以不用 Z Z 计算投影 P r Pr . 为简单起见, 首先考虑 H = I H=I , 从而 P P 为到 A A 核空间的正交投影算子(并不是 P P 正交). 我们用 P I P_I 表示: P I = Z ( Z T Z ) 1 Z T . P_I=Z(Z^TZ)^{-1}Z^T. 预处理残差 g + = P I r + g^+=P_Ir^+ 的计算有两种方式. 它们也可以用来求 A x = b Ax=b 的特解.

  1. 正规方程法(normal equations approach). 利用 P I P_I 的等价公式 P I = I A T ( A A T ) 1 A . P_I=I-A^T(AA^T)^{-1}A. 于是 g + = r + A T v + g^+=r^+-A^Tv^+ , 其中 v + v^+ 是以下系统的解: A A T v + = A r + . AA^Tv^+=Ar^+. 正规方程可用Cholesky分解求解.
  2. 增广系统法(augmented system approach). 将投影过程表述为以下增广系统的解: [ I A T A O ] [ g + v + ] = [ r + 0 ] , \begin{bmatrix}I&A^T\\A&O\end{bmatrix}\begin{bmatrix}g^+\\v^+\end{bmatrix}=\begin{bmatrix}r^+\\0\end{bmatrix}, 这可用对称不定分解求解.

下面假设 H H 为任意满足条件的对称矩阵. 当 H H 非奇异时, 我们可以这样计算 g + g^+ : g + = P r + , P = H 1 ( I A T ( A H 1 A T ) 1 A H 1 ) . g^+=Pr^+,\quad P=H^{-1}(I-A^T(AH^{-1}A^T)^{-1}AH^{-1}). 否则, 当 z T H z 0 , z : A z = 0 z^THz\ne0,\forall z:Az=0 , 可求解以下系统获得 g + g^+ : [ H A T A O ] [ g + v + ] = [ r + 0 ] . \begin{bmatrix}H&A^T\\A&O\end{bmatrix}\begin{bmatrix}g^+\\v^+\end{bmatrix}=\begin{bmatrix}r^+\\0\end{bmatrix}. H 1 H^{-1} 无简单表示时, 算子的等价表示没有什么大用处. 此时增广系统可以看做之前 H = I H=I 情形的推广. 自然一种完美的预处理是选取 H = G H=G , 但只要 Z T H Z Z^THZ 正定, 其他 H H 也是可以考虑的. [ H A T A O ] \begin{bmatrix}H&A^T\\A&O\end{bmatrix} 通常被称作约束预处理子(constraint preconditioner).

这些方法均没使用零空间矩阵 Z Z , 而仅涉及有 A A 的分解. 还有一层意义在于, 这些方法均可用来求得 A x = b Ax=b 特解. g + = P I r + g^+=P_Ir^+ 的计算依赖于 A A T AA^T 的分解, 因此我们可令 x = A T ( A A T ) 1 b x=A^T(AA^T)^{-1}b . 而增广系统的特殊形式 [ I A T A O ] [ x y ] = [ 0 b ] [ H A T A O ] [ x y ] = [ 0 b ] \begin{bmatrix}I & A^T\\A& O\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix}=\begin{bmatrix}0\\b\end{bmatrix}\quad或\quad\begin{bmatrix}H&A^T\\A&O\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix}=\begin{bmatrix}0\\b\end{bmatrix} 则同样可用来求特解.

需要指出, 这些计算 g + g^+ 的方法往往会带来巨大的舍入误差, 因此迭代仅建议用于改进精度而非求解.

2. 带不等式约束的二次规划

接下来我们讨论几类求解包含不等式和等式约束的凸二次规划的算法. 积极集法Active-set methods自上世纪七十年代以来便被广泛使用, 且对于中小型问题相当有效. 它们能高效地探测问题的无界性和不可行性并往往能返回最优积极集的准确估计. 内点法Interior-point methods距离现在更近. 它们风靡于九十年代, 尤其适用于求解大型问题, 但当需要求解一系列QP时可能并不是最高效的. 我们也将讨论积极集法的一种特殊形式——投影梯度法(gradient projection method)——这在约束为变量界约束时是最有力的工具.

2.1 不等式约束二次规划的最优性条件

我们先利用第十二章的定理1给出不等式约束二次规划的最优性条件, 再讨论解的一些不那么显而易见的性质.

与二次规划相关的Lagrange函数为 L ( x , λ ) = 1 2 x T G x + x T c i I E λ i ( a i T x b i ) . \mathcal{L}(x,\lambda)=\frac{1}{2}x^TGx+x^Tc-\sum_{i\in\mathcal{I}\cup\mathcal{E}}\lambda_i(a_i^Tx-b_i). x x^* 处的积极集为 A ( x ) = { i E I a i T x = b i } . \mathcal{A}(x^*)=\{i\in\mathcal{E}\cup\mathcal{I}\mid a_i^Tx^*=b_i\}. 于是对此的KKT条件: 对任一解 x x^* , 必定存在Lagrange乘子 λ i , i A ( x ) \lambda_i^*,i\in\mathcal{A}(x^*) : G x + c i A ( x ) λ i a i = 0 , a i T x = b i , i A ( x ) , a i T x b i , i I A ( x ) , λ i 0 , i I A ( x ) . \begin{aligned}Gx^*+c-\sum_{i\in\mathcal{A}(x^*)}\lambda_i^*a_i&=0,\\a_i^Tx^*&=b_i,\quad i\in\mathcal{A}(x^*),\\a_i^Tx^*&\ge b_i,\quad i\in\mathcal{I}\setminus\mathcal{A}(x^*),\\\lambda_i^*&\ge0,\quad i\in\mathcal{I}\cap\mathcal{A}(x^*).\end{aligned} 需注意, 原定理假设LICQ成立. 不过由于二次规划的约束均是线性的, 因此仍有 F ( x ) = T Ω ( x ) \mathcal{F}(x^*)=T_{\Omega}(x^*) .

对于凸QP, 当 G G 半正定, 上述KKT条件实际上也 x x^* 为全局解的充分性条件.

定理4 x x^* 满足KKT条件, 其中由 λ i , i A ( x ) \lambda_i^*,i\in\mathcal{A}(x^*) , G G 为半正定矩阵, 则 x x^* 是二次规划的全局解.

证明: 设 x x 为二次规划的任一可行解, 则有 a i T x = b i , i E ; a i T x b i , i A ( x ) I a_i^Tx=b_i,i\in\mathcal{E};a_i^Tx\ge b_i,i\in\mathcal{A}(x^*)\cap\mathcal{I} . 因此有 a i T ( x x ) = 0 , i E ; a i T ( x x ) 0 , i A ( x ) I a_i^T(x-x^*)=0,i\in\mathcal{E};a_i^T(x-x^*)\ge0,i\in\mathcal{A}(x^*)\cap\mathcal{I} . 再由稳定性条件, ( x x ) T ( G x + c ) = i E λ i a i T ( x x ) + i A ( x ) I λ i a i T ( x x ) 0. (x-x^*)^T(Gx^*+c)=\sum_{i\in\mathcal{E}}\lambda_i^*a_i^T(x-x^*)+\sum_{i\in\mathcal{A}(x^*)\cap\mathcal{I}}\lambda_i^*a_i^T(x-x^*)\ge0. 于是, q ( x ) = q ( x ) + ( x x ) T ( G x + c ) + 1 2 ( x x ) T G ( x x ) q ( x ) + 1 2 ( x x ) T G ( x x ) q ( x ) . \begin{aligned}q(x)&=q(x^*)+(x-x^*)^T(Gx^*+c)+\frac{1}{2}(x-x^*)^TG(x-x^*)\\&\ge q(x^*)+\frac{1}{2}(x-x^*)^TG(x-x^*)\\&\ge q(x^*).\end{aligned} 这就证明了 x x^* 是全局解.

类似地, 我们可以证明当 G G 为正定阵时, x x^* 唯一的全局解.

我们也可以推导二阶最优性条件. 对 x x^* , 其临界锥为 w C ( x , λ ) { a i T w = 0 , i E , a i T w = 0 , i I A ( x ) , λ i > 0 , a i T w 0 , i I A ( x ) , λ i = 0. w\in\mathcal{C}(x^*,\lambda^*)\Leftrightarrow\left\{\begin{array}{ll}a_i^Tw=0, & i\in\mathcal{E},\\a_i^Tw=0, & i\in\mathcal{I}\cap\mathcal{A}(x^*),\lambda_i^*>0,\\a_i^Tw\ge0, &i\in\mathcal{I}\cap\mathcal{A}(x^*),\lambda_i^*=0.\end{array}\right. 因此若 x x^* 为KKT点, λ \lambda^* 为相应Lagrange乘子, 若对 w C ( x , λ ) \forall w\in\mathcal{C}(x^*,\lambda^*) , 有 w T G w > 0 , w^TGw>0, x x^* 必定是局部严格极小点. 若还有 λ \lambda^* 唯一确定以及严格互补松弛条件成立, 则条件可换为 Z T G Z Z^TGZ 正定, 其中 Z Z 为积极约束Jacobi阵的零空间矩阵. 事实上, 我们还有判别二次规划局部极小的充分必要条件:

定理5 (局部极小的充分必要条件) 设 x x^* 是二次规划的可行点, 则 x x^* 为局部极小点当且仅当 x x^* 为KKT点, 其中 λ \lambda^* 为满足条件的乘子而且对 w C ( x , λ ) \forall w\in\mathcal{C}(x^*,\lambda^*) , 都有 w T G w 0. w^TGw\ge0.
证明:

  • 必要性. 设 x x^* 为一局部极小点. 因此由一阶必要性条件知 x x^* 为KKT点且存在满足条件的 λ \lambda^* . 设 w C ( x , λ ) w\in\mathcal{C}(x^*,\lambda^*) , 显然对充分小的 t > 0 t>0 , 有 x + t w Ω . x^*+tw\in\Omega. 于是由 w w 的定义, q ( x ) q ( x + t w ) = q ( x ) + t w T [ G x + c ] + 1 2 t 2 w T G w = q ( x ) + t i = 1 m λ i a i T w + 1 2 t 2 w T G w = q ( x ) + 1 2 t 2 w T G w , t > 0. \begin{aligned}q(x^*)\le q(x^*+tw)&=q(x^*)+tw^T[Gx^*+c]+\frac{1}{2}t^2w^TGw\\&=q(x^*)+t\sum_{i=1}^m\lambda_i^*a_i^Tw+\frac{1}{2}t^2w^TGw\\&=q(x^*)+\frac{1}{2}t^2w^TGw,\quad\forall 充分小t>0.\end{aligned} 因此还有 w T G w 0. w^TGw\ge0.
  • 充分性. 设存在Lagrange乘子 λ \lambda^* 使得KKT条件成立, 且 G G 对临界锥中的向量是半正定的. 反证. 倘若 x x^* 不是局部极小点, 则必存在 δ k > 0 , w k C ( x , λ ) \delta_k>0,w_k\in\mathcal{C}(x^*,\lambda^*) 使得 x + δ k w k Ω , q ( x + δ k w k ) < q ( x ) . x^*+\delta_kw_k\in\Omega,\\q(x^*+\delta_kw_k)<q(x^*). 而且 δ k 0 , w k w ˉ \delta_k\to0,w_k\to\bar{w} . 考虑Lagrange函数 L ( x , λ ) = q ( x ) i = 1 m λ i ( a i T x b i ) . \mathcal{L}(x,\lambda^*)=q(x)-\sum_{i=1}^m\lambda_i^*(a_i^Tx-b_i). 由于 L ( x , λ ) \mathcal{L}(x,\lambda^*) x x^* 的二次函数, 且有 x L ( x , λ ) = 0 , x x L ( x , λ ) = G , L ( x + δ k w k , λ ) = q ( x + δ k w k ) i I λ i δ k a i T w k < q ( x ) i I λ i δ k a i T w k . \begin{aligned}\nabla_x\mathcal{L}(x^*,\lambda^*)&=0,\\\nabla_{xx}\mathcal{L}(x^*,\lambda^*)&=G,\\\mathcal{L}(x^*+\delta_kw_k,\lambda^*)&=q(x^*+\delta_kw_k)-\sum_{i\in\mathcal{I}}\lambda_i^*\delta_ka_i^Tw_k\\&< q(x^*)-\sum_{i\in\mathcal{I}}\lambda_i^*\delta_ka_i^Tw_k.\end{aligned} A ˉ = [ a i T ] i E ; i I : λ i > 0 \bar{A}=[a_i^T]_{i\in\mathcal{E};i\in\mathcal{I}:\lambda_i^*>0} , 则 L ( x + δ k w k , λ ) = L ( x , λ ) + 1 2 δ k 2 w k T G w k L ( x , λ ) + O ( w k 2 2 δ k 2 ) = q ( x ) + O ( w k 2 2 δ k 2 ) . \begin{aligned}\mathcal{L}(x^*+\delta_kw_k,\lambda^*)&=\mathcal{L}(x^*,\lambda^*)+\frac{1}{2}\delta_k^2w_k^TGw_k\\&\ge\mathcal{L}(x^*,\lambda^*)+O(\Vert w_k\Vert_2^2\delta_k^2)\\&=q(x^*)+O(\Vert w_k\Vert_2^2\delta_k^2).\end{aligned} 联系前面的不等式, 得到 O ( w k 2 2 δ k 2 ) i I λ i δ k a i T w k ( min i I : λ i > 0 λ i ) δ k A ˉ w k 2 . O(\Vert w_k\Vert_2^2\delta_k^2)\ge\sum_{i\in\mathcal{I}}\lambda_i^*\delta_ka_i^Tw_k\ge\left(\min_{i\in\mathcal{I}:\lambda_i^*>0}\lambda_i^*\right)\delta_k\Vert \bar{A}w_k\Vert_2. 这与 δ k 0 \delta_k\to0 矛盾. 因此必有 x x^* 为局部极小. 证毕

G G 不是正定阵时, 则二次规划可能有多个严格局部解. 这样的问题是非凸QP或不定QP. 这也会给算法上增加难度. 不定QP的例子可见下图.
Nonconvex QP

左边的图中我们画出了可行域和二次目标函数 q ( x ) q(x) 的等高线, 其中 G G 有一个正特征值和一个负特征值. 我们以 + , +,- 标注函数沿此方向将趋向于 + , +\infty,-\infty . 这里 x x^{**} 为局部极大点, x x^* 为局部极小点, 方形区域的中心为稳定点. 右图则表示了 G G 的两个特征值都是负的情形, 此时有全局极大点 x ~ \tilde{x} 和局部极小点 x , x x_*,x_{**} .

2.2 退化

增加算法难度的第二个性质是退化(degeneracy). 这个名词具有许多含义. 前面在第十三章中"(基)退化"是指对应的基变量有取0的分量. 而这里是指

  • 积极约束梯度 a i , i A ( x ) a_i,i\in\mathcal{A}(x^*) 在解 x x^* 处线性相关; 且/或
  • 严格互补松弛条件不成立, 即存在 i A ( x ) i\in\mathcal{A}(x^*) 使得所有满足KKT条件的Lagrange乘子都有 λ i = 0 \lambda_i^*=0 . 这样的约束也被称作是弱积极(weakly active)的.

退化的两个例子可见下图.
Degenerate solutions of QP

左图, 在解 x x_* 处仅有一个约束积极, 而 x x_* 也是目标函数的无约束极小点. 于是由稳定性条件, G x + c = 0 Gx_*+c=0 , 因此这唯一的Lagrange乘子必定为0. 右图, 在 x x_* 处有三个约束积极. 但这三个约束梯度都在 R 2 \mathbb{R}^2 里, 因此必定线性相关.

严格互补松弛条件可见下例: min x 1 2 + ( x 2 + 1 ) 2 , s u b j e c t   t o   x 0 , \min x_1^2+(x_2+1)^2,\quad\mathrm{subject\,to\,}x\ge0, 其在 x = 0 x^*=0 处有解, 两个约束均积极. 这是对约束 x 1 0 x_1\ge0 的Lagrange乘子为0.

退化可能会给算法带来麻烦, 原因主要有二.

  1. 积极约束梯度的线性相关性可能会导致数值不稳定, 因为我们要分解的矩阵可能是亏秩的.
  2. 当问题有弱积极约束时, 算法很难决定这些约束在解处是否积极. 就积极集法和投影梯度法而言, 这样的不确定性会给算法带来锯齿现象(zigzag). 这是因为算法不断地加入、剔除弱积极约束. 对此必须增加防护措施.

3. 凸二次规划的积极集法

下面我们介绍同时带等式和不等式约束的二次规划的积极集法(active-set methods). 我们仅考虑凸的情形, 即 G G 半正定. G G 不定会给算法带来困难, 这也超出了本书的讨论范围. 对非凸QP, 可参见Gould et al2.

若我们提前有最优积极集, 则我们只需将前面求解带等式约束的二次规划的方法应用于如下子问题即可得到解 x x^* : min x q ( x ) = 1 2 x T G x + x T c , s u b j e c t   t o   a i T x = b i , i A ( x ) . \min_x q(x)=\frac{1}{2}x^TGx+x^Tc,\quad\mathrm{subject\,to\,}a_i^Tx=b_i,i\in\mathcal{A}(x^*). 不过通常我们并没有关于 A ( x ) \mathcal{A}(x^*) 的先验知识. 决定这一指标集也是求解带不等式约束问题算法主要要面临的问题.

我们在第十三章已经遇到了一个特殊的积极集法——求解线性规划问题的单纯形法. 本质上来说, 单纯形法从对最优积极集的一个估计或猜想出发, 之后不断利用梯度或Lagrange乘子的信息更新积极集(工作集)——每次迭代有一个指标离基、一个指标进基——直至满足最优性条件. 为什么每次迭代工作集的变化尺度都很小呢? (就修正单纯形法而言)若对偶变量为负, 把所有为负的指标都纳入基中岂不美哉? 私以为如果考量对应的目标函数改变量, 这将不会是个下降算法. 相应的有限终止性也就不存在了. 回到二次规划, 求解QP的积极集法与单纯形法的区别在于迭代点(和解 x x^* )不必再是可行域的顶点.

QP的积极集法有三种形式: 原始、对偶以及原始-对偶. 我们仅限讨论原始方法. 它们将产生对于原始问题的可行点, 并稳步带来目标函数 q ( x ) q(x) 的下降.

原始积极集法通过求解一个二次子问题获取迭代步, 其中子问题的约束均为等式约束, 由原问题中的部分不等式约束和全部等式约束构成. 同样地, 这些起作用约束指标构成的集合被称为工作集(working set), 且在第 k k 个迭代点 x k x_k 处记作 W k \mathcal{W}_k . 我们要求 W k \mathcal{W}_k 中所有约束的梯度 a i a_i 线性无关, 即使在那点处所有积极的约束的梯度是线性相关的.

给定迭代点 x k x_k 和工作集 W k \mathcal{W}_k , 我们首先检验 x k x_k 是否在由工作集定义的子空间上极小化二次函数 q q . 如果不, 我们就求解等式约束QP子问题得到迭代步 p p , 其中等式约束由将 W k \mathcal{W}_k 对应的约束令为等式得到, 而其他不在 W k \mathcal{W}_k 中的约束则暂时不考虑. 为具体地表述子问题, 我们定义 p = x x k , g k = G x k + c . p=x-x_k,\quad g_k=Gx_k+c. 代入目标函数, 我们有 q ( x ) = q ( x k + p ) = 1 2 p T G p + g k T p + ρ k , q(x)=q(x_k+p)=\frac{1}{2}p^TGp+g_k^Tp+\rho_k, 其中 ρ k = 1 2 x k T G x k + c T x k \rho_k=\frac{1}{2}x_k^TGx_k+c^Tx_k p p 无关. 于是第 k k 迭代步 p p 即为以下子问题的解: min p 1 2 p T G p + g k T p s u b j e c t   t o a i T p = 0 , i W k . \begin{array}{rl}\min\limits_p & \frac{1}{2}p^TGp+g_k^Tp\\\mathrm{subject\,to} & a_i^Tp=0,\quad i\in\mathcal{W}_k.\end{array} 记解为 p k p_k . 注意对每个 i W k i\in\mathcal{W}_k , a i T x a_i^Tx 的值并不随沿 p k p_k 的移动而改变: a i T ( x k + α p k ) = a i T x k = b i , α a_i^T(x_k+\alpha p_k)=a_i^Tx_k=b_i,\forall\alpha . 若 W k \mathcal{W}_k 中所有的约束均在 x k x_k 处满足, 则它们在 x k + α p k , α x_k+\alpha p_k,\forall\alpha 处满足. 因 G G 正定, 因此上述子问题的解可以由前面求解等式约束问题的技术解决.

假设当前最优 p k p_k 非零, 我们就需要决定我们能沿 p k p_k 走多远. 若 x k + p k x_k+p_k 对所有约束都可行, 我们就置 x k + 1 = x k + p k x_{k+1}=x_k+p_k . 否则, x k + 1 = x k + α k p k , x_{k+1}=x_k+\alpha_kp_k, 其中步长 α k \alpha_k 选为使所有约束均满足的 [ 0 , 1 ] [0,1] 中的最大值. 事实上, 通过考虑约束 i W k i\notin\mathcal{W}_k , 我们可以得到 α k \alpha_k 显式表示. 若对某个 i ̸ W k i\not\in\mathcal{W}_k a i T p k 0 a_i^Tp_k\ge0 , 则对所有 α k 0 \alpha_k\ge0 我们都有 a i T ( x k + α k p k ) a i T x k b i a_i^T(x_k+\alpha_kp_k)\ge a_i^Tx_k\ge b_i . 即第 i i 个约束对所有非负步长均成立. 但只要有 i ̸ W k : a i T p k < 0 i\not\in\mathcal{W}_k:a_i^Tp_k<0 , 则 a i T ( x k + α k p k ) b i a_i^T(x_k+\alpha_kp_k)\ge b_i 仅当 α k b i a i T x k a i T p k . \alpha_k\le\frac{b_i-a_i^Tx_k}{a_i^Tp_k}. 为最大化 q q 的下降, 我们有 α k = d e f min ( 1 , min i ̸ W k : a i T p k < 0 b i a i T x k a i T p k ) . \alpha_k\xlongequal{def}\min\left(1,\min_{i\not\in\mathcal{W}_k:a_i^Tp_k<0}\frac{b_i-a_i^Tx_k}{a_i^Tp_k}\right). 我们称达到此极小的约束 i i 阻碍约束(blocking constraints)(若 α k = 1 \alpha_k=1 且无新约束在 x k + p k x_k+p_k 积极, 则此迭代无阻碍约束). 注意 α k \alpha_k 是可以为0的, 因为可能有某个积极约束 i W k i\notin\mathcal{W}_k 却有 a i T p k < 0 a_i^Tp_k<0 .

α k < 1 \alpha_k<1 , 则有阻碍约束存在, 我们就将阻碍约束中的一个加入 W k \mathcal{W}_k 得到 W k + 1 \mathcal{W}_{k+1} .
持续这样迭代、给工作集加入新成员直至得到某个 x ^ \hat{x} , 它自身就在当前工作集 W ^ \hat{\mathcal{W}} 上极小化二次目标函数. 这其实就对应了解 p = 0 p=0 . 因 p = 0 p=0 满足最优性条件, 所以存在Lagrange乘子 λ ^ i , i W ^ \hat{\lambda}_i,i\in\hat{\mathcal{W}} , 使得 i W ^ a i λ ^ i = g = G x ^ + c . \sum_{i\in\hat{\mathcal{W}}}a_i\hat{\lambda}_i=g=G\hat{x}+c. 定义不在工作集中的不等式约束的乘子为0, 于是 x ^ , λ ^ \hat{x},\hat{\lambda} 满足KKT稳定性条件. 因步长的控制, w ^ \hat{w} 必在可行域中, 因此可行性条件亦满足.

下面考虑工作集中不等式约束的Lagrange乘子的符号. 如果所有乘子都非负, 则对偶变量的非负性条件也成立了, 因此 x ^ \hat{x} 就已经是原问题的KKT点. 事实上, 由于 G G 半正定, 我们由定理4亦可知 x ^ \hat{x} 是全局解. 若 G G 正定, 则 x ^ \hat{x} 为严格局部极小点和唯一的全局解.

但若有 λ ^ j < 0 , j W ^ I \hat{\lambda}_j<0,j\in\hat{\mathcal{W}}\cap\mathcal{I} , 则非负性条件不成立, 目标函数还有下降的空间. 因此见某个负乘子对应的指标 j j 从工作集中剔除, 再求解新的迭代步. 下面我们证明这样可以产生满足剔除约束的 p p . 我们依然假设工作集中的梯度 a i a_i 线性无关. 在完整阐述算法后, 我们将讨论如何保持这样的性质(可见3.2节).

定理6 x ^ \hat{x} 满足等式约束子问题的一阶稳定性条件, 其中工作集为 W ^ \hat{\mathcal{W}} . a i , i W ^ a_i,i\in\hat{\mathcal{W}} 线性无关. 存在 j W ^ : λ ^ j < 0 j\in\hat{\mathcal{W}}:\hat{\lambda}_j<0 . 令 p p 为下面子问题的解: min p 1 2 p T G p + ( G x ^ + c ) T p , s u b j e c t   t o a i T p = 0 , i W ^ : i j . \begin{array}{rl}\min\limits_p & \frac{1}{2}p^TGp+(G\hat{x}+c)^Tp,\\\mathrm{subject\,to} &a_i^Tp=0,\quad i\in\hat{\mathcal{W}}:i\ne j.\end{array} p p 对约束 j j 可行, 即 a j T p 0 a_j^Tp\ge0 . 进一步, 若 p p 满足子问题的二阶充分性条件, 则有 a j T p > 0 a_j^Tp>0 , 且 p p q ( ) q(\cdot) 的一个下降方向.

证明: 因 p p 是子问题的解, 所以有乘子 λ ~ i , i W ^ : i j \tilde{\lambda}_i,i\in\hat{\mathcal{W}}:i\ne j , 使得 i W ^ , i j λ ~ i a i = G p + ( G x ^ + c ) . \sum_{i\in\hat{\mathcal{W}},i\ne j}\tilde{\lambda}_ia_i=Gp+(G\hat{x}+c). 另外, 由二阶必要性条件可知若 Z Z 为矩阵 [ a i T ] i W ^ , i j [a_i^T]_{i\in\hat{\mathcal{W}},i\ne j} 的零空间矩阵, 则 Z T G Z Z^TGZ 半正定. 显然, 由于 p p 满足子问题的约束, 所以存在 p Z p_Z 使得 p = Z p Z p=Zp_Z . 因此 p T G p 0 p^TGp\ge0 .
因有 i W ^ λ ^ i a i = G x ^ + c , \sum_{i\in\hat{\mathcal{W}}}\hat{\lambda}_ia_i=G\hat{x}+c, 所以 i W ^ , i j ( λ ~ i λ ^ j ) a i λ ^ j a j = G p . \sum_{i\in\hat{\mathcal{W}},i\ne j}(\tilde{\lambda}_i-\hat{\lambda}_j)a_i-\hat{\lambda}_ja_j=Gp. 两边与 p p 内积并利用 a i T p = 0 , i W ^ : i j a_i^Tp=0,i\in\hat{\mathcal{W}}:i\ne j , 有 λ ^ j a j T p = p T G p . -\hat{\lambda}_ja_j^Tp=p^TGp. p T G p 0 , λ ^ j < 0 p^TGp\ge0,\hat{\lambda}_j<0 , 于是 a j T p 0 a_j^Tp\ge0 .

若进一步, 有二阶充分条件成立, 于是有 Z T G Z Z^TGZ 正定. 因此 a j T p = 0 a_j^Tp=0 仅当 p T G p = p Z T Z T G Z p Z = 0 p^TGp=p_Z^TZ^TGZp_Z=0 , 仅当 p Z = 0 , p = 0 p_Z=0,p=0 . 但若 p = 0 p=0 , 则利用 a i , i W ^ a_i,i\in\hat{\mathcal{W}} 的线性无关性必有 λ ^ j = 0 \hat{\lambda}_j=0 . 这与 j j 的选取矛盾. 于是必有 p T G p > 0 a j T p > 0 p^TGp>0\Rightarrow a_j^Tp>0 .
p p q ( ) q(\cdot) 的下降方向的证明可见下面的定理7.

尽管所有 j : λ ^ j < 0 j:\hat{\lambda}_j<0 都能得出一个 p p , 但实际中往往选取乘子最小的指标. 这一选取方式源于第十二章的灵敏度分析. 但因步长可能不大, 因此实际带来的下降可能并不是最好的.

我们断言 只要子问题的解 p k p_k 非零且满足二阶充分性条件, 则它必是 q ( ) q(\cdot) 的严格下降方向.

定理7 设子问题的解 p k p_k 非零且满足二阶充分性条件, 则 q ( ) q(\cdot) 沿 p k p_k 严格下降.

证明: 因 p k p_k 满足二阶充分性条件, 于是 Z T G Z Z^TGZ 正定. 由定理2可知 p k p_k 也是该子问题的唯一全局解. 因 p = 0 p=0 也是子问题的可行点, 因此其目标函数值必定大于 p k p_k 的, 于是 1 2 p k T G p k + g k T p k < 0. \frac{1}{2}p_k^TGp_k+g_k^Tp_k<0. 由凸性可得 p k T G p k 0 p_k^TGp_k\ge0 , 于是 g k T p k < 0 g_k^Tp_k<0 . 因此 q ( x k + α k p k ) = q ( x k ) + α g k T p k + 1 2 α 2 p k T G p k < q ( x k ) , q(x_k+\alpha_kp_k)=q(x_k)+\alpha g_k^Tp_k+\frac{1}{2}\alpha^2p_k^TGp_k<q(x_k), 其中 α > 0 \alpha>0 充分小.

G G 正定, 则二阶充分性条件对所有子问题都成立. 因此只要 p k 0 p_k\ne0 就有严格函数下降. 这点在我们讨论算法的有限终止性时非常重要.

3.1 凸二次规划积极集法算法表述与讨论

我们假设目标函数 q q 在可行集中有界.

算法3 (Active-Set Method for Convex QP)
Compute a feasible starting point x 0 x_0 ;
Set W 0 \mathcal{W}_0 to be a subset of the active contraints at x 0 x_0 ;
for k = 0 , 1 , 2 , k=0,1,2,\ldots
\quad\quad Solve subproblem to find p k p_k ;
\quad\quad if p k = 0 p_k=0
\quad\quad\quad\quad Compute Lagrange multipliers λ ^ i \hat{\lambda}_i with W ^ = W k \hat{\mathcal{W}}=\mathcal{W}_k ;
\quad\quad\quad\quad if λ ^ i 0 , i W k I \hat{\lambda}_i\ge0,i\in\mathcal{W}_k\cap\mathcal{I}
\quad\quad\quad\quad\quad\quad stop with solution x = x k x^*=x_k ;
\quad\quad\quad\quad else
\quad\quad\quad\quad\quad\quad j arg min j W k I λ ^ j j\leftarrow\arg\min_{j\in\mathcal{W}_k\cap\mathcal{I}}\hat{\lambda}_j ;
\quad\quad\quad\quad\quad\quad x k + 1 x k ; W k + 1 W k { j } x_{k+1}\leftarrow x_k;\mathcal{W}_{k+1}\leftarrow \mathcal{W}_k\setminus\{j\} ;
\quad\quad else ( p k 0 p_k\ne 0 )
\quad\quad\quad\quad Compute α k \alpha_k ;
\quad\quad\quad\quad x k + 1 x k + α k p k x_{k+1}\leftarrow x_k+\alpha_kp_k ;
\quad\quad\quad\quad if there are blocking constraints
\quad\quad\quad\quad\quad\quad Obtain W k + 1 \mathcal{W}_{k+1} by adding one of the blocking constraints to W k \mathcal{W}_k ;
\quad\quad\quad\quad else
\quad\quad\quad\quad\quad\quad W k + 1 W k \mathcal{W}_{k+1}\leftarrow\mathcal{W}_k ;
end (for)

这里有几个需要深究的点, 例如

  • 初始可行点 x 0 x_0 怎么得到?
  • 如何选取加入工作集的阻碍约束指标?
  • 线性无关性怎么保持?
  • 依乘子最小准则移除约束是否稳妥?
  • 其中的数值代数如何?

这些我们放在下一小节讨论.

下例中我们用 x , p x,p 的下标表示分量, 上标表示迭代指标.

例4 我们将算法3应用下面的2维问题 min x q ( x ) = ( x 1 1 ) 2 + ( x 2 2.5 ) 2 s u b j e c t   t o x 1 2 x 2 + 2 0 , x 1 2 x 2 + 6 0 , x 1 + 2 x 2 + 2 0 , x 1 0 , x 2 0. \begin{array}{rl}\min\limits_x & q(x)=(x_1-1)^2+(x_2-2.5)^2\\\mathrm{subject\,to} & \begin{aligned}x_1-2x_2+2&\ge0,\\-x_1-2x_2+6&\ge0,\\-x_1+2x_2+2&\ge0,\\x_1&\ge0,\\x_2&\ge0.\end{aligned}\end{array} 表为下图.
Iterates of the active-set method

  • 我们将指标依序以1至5标号. 对此问题, 易得一可行初始解 x 0 = ( 2 , 0 ) x^0=(2,0) . 此点处约束3、5积极且梯度线性无关, 置 W 0 = { 3 , 5 } \mathcal{W}_0=\{3,5\} . 因为单个向量必定线性无关, 因此选取 W 0 = { 5 } \mathcal{W}_0=\{5\} W 0 = { 3 } \mathcal{W}_0=\{3\} 甚至 W 0 = \mathcal{W}_0=\empty 都是可以的. 它们各自将算法导向不同的方向.
    由于 x 0 x^0 为可行域的一个顶点, 显然它就是目标 q q 在工作集 W 0 \mathcal{W}_0 约束下的极小点. 即对于 k = 0 k=0 子问题的解为 p = 0 p=0 . 计算乘子 λ ^ 3 , λ ^ 5 \hat{\lambda}_3,\hat{\lambda}_5 ( λ ^ 3 , λ ^ 5 ) = ( 2 , 1 ) (\hat{\lambda}_3,\hat{\lambda}_5)=(-2,-1) .
    依最小法则, 将约束3移出工作集.
  • W 1 = { 5 } \mathcal{W}_1=\{5\} . 求解子问题得 p 1 = ( 1 , 0 ) T p^1=(-1,0)^T . 此时步长公式计算出 α 1 = 1 \alpha_1=1 , 因为不变化工作集, 新迭代点为 x 2 = ( 1 , 0 ) T x^2=(1,0)^T .
  • W 2 = W 1 = { 5 } \mathcal{W}_2=\mathcal{W}_1=\{5\} , 求解子问题得 p 2 = 0 p^2=0 . 计算乘子得 λ ^ 5 = 5 \hat{\lambda}_5=-5 , 将约束5移出工作集.
  • W 3 = \mathcal{W}_3=\empty . 求解无约束子问题得解 p 3 = ( 0 , 2.5 ) T p^3=(0,2.5)^T . 计算步长 α 3 = 0.6 \alpha_3=0.6 , 有一个阻碍约束是约束1. 新迭代点为 x 4 = ( 1 , 1.5 ) T x^4=(1,1.5)^T .
  • W 4 = { 1 } \mathcal{W}_4=\{1\} . 求解子问题得解 p 4 = ( 0.4 , 0.2 ) T p^4=(0.4,0.2)^T . 计算步长 α 4 = 1 \alpha_4=1 . 无阻碍约束, 不改变工作集. 新迭代点为 x 5 = ( 1.4 , 1.7 ) x^5=(1.4,1.7) .
  • W 5 = { 1 } \mathcal{W}_5=\{1\} . 求解子问题得解 p 5 = 0 p^5=0 . 计算乘子得 λ ^ 1 = 0.8 \hat{\lambda}_1=0.8 , 求解完毕.
    x = ( 1.4 , 1.7 ) T x^*=(1.4,1.7)^T , 算法终止.

3.2 关于积极集法的进一步讨论

3.2.1 初始点

首先对于初始点, 我们已有许多技术可以解决这个问题. 例如我们可以使用求线性规划单纯形法的第一阶段. 由于都是线性约束, 因此线性规划的第一阶段无需多大改动, 可以直接用于二次规划. 下面我们介绍一种变体, 它允许使用者提供 x x 的一个初始估计 x ~ \tilde{x} . 而这一估计不需要是可行的, 但根据当前QP的信息选取可能会减少第一阶段所需的工作量.

给定 x ~ \tilde{x} , 我们定义以下可行性线性规划问题(feasibility linear program): min ( x , z ) e T z s u b j e c t   t o a i T x + γ i z i = b i , i E , a i T x + γ i z i b i , i I , z 0 , \begin{array}{rl}\min\limits_{(x,z)} & e^Tz\\\mathrm{subject\,to} & a_i^Tx+\gamma_iz_i=b_i,\quad i\in\mathcal{E},\\&a_i^Tx+\gamma_iz_i\ge b_i,\quad i\in\mathcal{I},\\& z\ge0,\end{array} 其中 γ i = s i g n ( a i T x ~ b i ) , i E ; γ i = 1 , i I \gamma_i=-\mathrm{sign}(a_i^T\tilde{x}-b_i),i\in\mathcal{E};\gamma_i=1,i\in\mathcal{I} . 对此问题, 一个可行初始点是 x = x ~ , z i = a i T x ~ b i ( i E ) , z i = max ( b i a i T x ~ , 0 ) ( i I ) . x=\tilde{x},\quad z_i=|a_i^T\tilde{x}-b_i|(i\in\mathcal{E}),\quad z_i=\max(b_i-a_i^T\tilde{x},0)(i\in\mathcal{I}). 易验证若 x ~ \tilde{x} 本身就是原二次规划的可行点, 则 ( x ~ , 0 ) (\tilde{x},0) 就是可行性子问题的最优解. 一般, 若原问题有可行解, 则子问题的最优目标值为0, 且子问题的任一解都能得到原问题的一个可行解. 与此同时, 算法3中初始工作集 W 0 \mathcal{W}_0 亦可以从可行性子问题解处取出线性无关的积极约束指标得到.

还有一种方法属于罚函数方法, 这里被称作 M M (big M method). 此法无需经过两个阶段, 而是直接在目标中引入一个约束违反度的度量. 这个度量的结构并不复杂, 即为最原始的约束违反度( η \eta )乘上一个较大的系数 ( M ) (M) . 于是我们要求解的问题成为 min ( x , η ) 1 2 x T G x + x T c + M η , s u b j e c t   t o ( a i T x b i ) η , i E , ( a i T x b i ) η , i E , b i a i T x η , i I , 0 η , \begin{array}{rl}\min\limits_{(x,\eta)} & \frac{1}{2}x^TGx+x^Tc+M\eta,\\\mathrm{subject\,to} & \begin{aligned}(a_i^Tx-b_i)&\le\eta,\quad i\in\mathcal{E},\\-(a_i^Tx-b_i)&\le\eta,\quad i\in\mathcal{E},\\b_i-a_i^Tx&\le\eta,\quad i\in\mathcal{I},\\0&\le\eta,\end{aligned}\end{array} 其中 M M 为某个较大的正值(准确的说, 不小于最优Lagrange乘子的无穷范数即可). 我们可以用精确罚函数的理论(可见第十七章)证明, 只要原问题可行, 则对充分大的 M M , 上述问题的解必会有 η = 0 \eta=0 , 且对应的 x x 就是原问题的一解.

现在的问题在于, 如何较好地选取 M M , 使得求解过程能一劳永逸地进行下去. 我们使用启发式的方法. 若我们得到的解中 η > 0 \eta>0 , 则我们增大 M M 再次求解. 注意对于以上大 M M 子问题, 有一个显然的可行解为 x = x ~ , η x=\tilde{x},\eta 充分大使得所有的约束都是满足的. 这种启发式的方法实际上就是使用无穷范数的精确罚函数方法. 可见第十七章.

M M 法的一种变体是, 使用约束违反的 l 1 l_1 范数而不是 l l_{\infty} 范数, 即 min ( x , s , t , v ) 1 2 x T G x + x T c + M e E T ( s + t ) + M e I T v s u b j e c t   t o a i T x b i + s i t i = 0 , i E , a i T x b i + v i 0 , i I , s 0 , t 0 , v 0. \begin{array}{rl}\min\limits_{(x,s,t,v)} & \frac{1}{2}x^TGx+x^Tc+Me_{\mathcal{E}}^T(s+t)+Me_{\mathcal{I}}^Tv\\\mathrm{subject\,to} & \begin{aligned}a_i^Tx-b_i+s_i-t_i&=0,\quad i\in\mathcal{E},\\a_i^Tx-b_i+v_i&\ge0,\quad i\in\mathcal{I},\end{aligned}\\&s\ge0,t\ge0,v\ge0.\end{array} 这里 e E e_{\mathcal{E}} 是维数为 E |\mathcal{E}| 的全1向量. 类似的也有 e I e_{\mathcal{I}} . 松弛变量 s i , t i , v i s_i,t_i,v_i 用于缓冲约束中的违反度. 实际上上面的大 M M 法和 l 1 l_1 变体都是基于松弛的方法.

3.2.2 阻碍约束与线性无关性

注意不同的初始工作集将会得到不同的后续迭代序列. 当初始积极约束的梯度线性无关, 我们便可以将它们全部纳入 W 0 \mathcal{W}_0 . 否则, 选取一个子集. 例如上例中, 选取 W 0 = { 3 } \mathcal{W}_0=\{3\} , 则 p 0 = ( 0.2 , 0.1 ) T p^0=(0.2,0.1)^T , x 1 = ( 2.2 , 0.1 ) T x^1=(2.2,0.1)^T . 若选取 W 0 = { 5 } \mathcal{W}_0=\{5\} , 则就可直接移动到 x 1 = ( 1 , 0 ) T x^1=(1,0)^T . 若 W 0 = \mathcal{W}_0=\empty , 则 p 1 = ( 1 , 2.5 ) T , α 1 = 2 3 , x 1 = ( 4 3 , 5 3 ) T p^1=(-1,2.5)^T,\alpha_1=\frac{2}{3},x^1=(\frac{4}{3},\frac{5}{3})^T , W 1 = { 1 } \mathcal{W}_1=\{1\} . 从此再经一步迭代即可求得 x x^* .

即使初始工作集 W 0 \mathcal{W}_0 与初始积极集相同, W k \mathcal{W}_k A ( x k ) \mathcal{A}(x^k) 也未必一样. 例如当阻碍约束超过一个时, 不同的选取方式会带来不同的结果.

我们要求 W 0 \mathcal{W}_0 中约束的梯度线性无关, 并且我们的算法应当保证后续的工作集 W k \mathcal{W}_k 依然有这性质. 在遇到阻碍约束时, 其约束梯度便不可能为当前工作集中约束梯度 a i a_i 所线性表示. 事实上, 若设约束 i i 为阻碍约束, 在当前第 k k 步的迭代步为 p k p_k , 于是 a i T p k < 0 a_i^Tp_k<0 . 设 a i a_i 可以被 W k \mathcal{W}_k 中的梯度线性表示, 则存在 μ j , j W k \mu_j, j\in\mathcal{W}_k , 使得 a i = j W k μ j a j a_i=\sum_{j\in\mathcal{W}_k}\mu_ja_j . 因为 p k p_k 是子问题的解, 于是应当有 a j T p k = 0 , j W k a_j^Tp_k=0,j\in\mathcal{W}_k . 这就得到 0 > a i T p k = j W k μ j a j T p k = 0. 0>a_i^Tp_k=\sum_{j\in\mathcal{W}_k}\mu_ja_j^Tp_k=0. 矛盾. 因此阻碍约束的加入并不影响线性无关性. 另一方面, 从工作集中移除指标也不会增加线性相关度.

3.2.3 乘子最小准则

依乘子最小准则移除约束在实际中往往行之有效, 但它对于约束的尺度较为敏感. 例如在约束 i i 两端乘以 β > 0 \beta>0 , 这并没有改变问题的几何性质, 但我们也将乘子缩小为原来的 1 / β 1/\beta . 选取最小乘子的准则类似于Dantzig在线性规划单纯形法中选取进基变量的准则. 与之前相同, 对尺度不敏感的策略往往表现更好. 我们不深究.

注意每次迭代增加或减少至多一个约束的策略给了算法所需迭代数一个天然的下界. 例如, 假设我们有一个在解 x x^* m m 个不等式约束积极的问题. 而我们从一个严格满足所有不等式约束的 x 0 x^0 出发. 此时, 算法至少需要 m m 次迭代才能从 x 0 x^0 移动到 x x^* .

3.2.4 积极集法的数值代数: 分解的更新

我们知道在算法3给出的积极集法中需要求解等式约束的子问题. 二者需要求解KKT系统. 由于在每步迭代后工作集至多只变化一个元素, 因此相邻迭代的KKT矩阵也仅至多相差一行、一列. 具体地, G G 是保持不动的, 而矩阵 A A 则依据工作集的变化增加或删减行.

据此, 我们就无需每次迭代重新计算矩阵的分解, 而是采用更新因子的方式, 减少计算量. 这些更新技术对于积极集法的实施效率是至关重要的.

我们仅讨论使用零空间方法(见本章1.2.3节)的情形. 设 A A m m 个线性无关的行向量, 且假设 Y , Z Y,Z 通过 A A 的QR的分解定义. 因此 A T Π = Q [ R O ] = [ Q 1 Q 2 ] [ R O ] , A^T\Pi=Q\begin{bmatrix}R\\O\end{bmatrix}=\begin{bmatrix}Q_1&Q_2\end{bmatrix}\begin{bmatrix}R\\O\end{bmatrix}, 这里 Π \Pi 是置换阵, R R 为上三角非奇异阵, Q = [ Q 1 Q 2 ] Q=\begin{bmatrix}Q_1&Q_2\end{bmatrix} n × n n\times n 的正交阵: Q 1 , R Q_1,R 都有 m m 列, Q 2 Q_2 n m n-m 列. 选取 Z Z Q 2 Q_2 .

  • 假设下一步迭代工作集新增一个指标, 此时新的约束矩阵为 A ˉ T = [ A T a ] \bar{A}^T=\begin{bmatrix}A^T & a\end{bmatrix} , 这里 a a n n 维向量, 且使得 A ˉ T \bar{A}^T 列满秩. 下面介绍如何经济地更新 Q , R Q,R . 因 Q 1 Q 1 T + Q 2 Q 2 T = I Q_1Q_1^T+Q_2Q_2^T=I , 我们有 A ˉ T [ Π 0 0 1 ] = [ A T Π a ] = Q [ R Q 1 T a 0 Q 2 T a ] . \bar{A}^T\begin{bmatrix}\Pi & 0\\0 & 1\end{bmatrix}=\begin{bmatrix}A^T\Pi & a\end{bmatrix}=Q\begin{bmatrix}R & Q_1^Ta\\0 & Q_2^Ta\end{bmatrix}. 定义正交阵 Q ^ \hat{Q} (例如Householder变换矩阵), 其作用为将 Q 2 T a Q_2^Ta 变为只有第一个分量非零的向量, 即 Q ^ ( Q 2 T a ) = [ γ 0 ] , \hat{Q}(Q_2^Ta)=\begin{bmatrix}\gamma\\0\end{bmatrix}, 这里 γ \gamma 为标量, Q 2 T a = γ \Vert Q_2^Ta\Vert=|\gamma| . 于是有 A ˉ T [ Π 0 0 1 ] = Q [ R Q 1 T a 0 Q ^ T [ γ 0 ] ] = Q [ I O O Q ^ T ] [ R Q 1 T a 0 γ O 0 ] . \bar{A}^T\begin{bmatrix}\Pi & 0\\0 & 1\end{bmatrix}=Q\begin{bmatrix}R& Q_1^Ta\\0 & \hat{Q}^T\begin{bmatrix}\gamma\\0\end{bmatrix}\end{bmatrix}=Q\begin{bmatrix}I & O\\O & \hat{Q}^T\end{bmatrix}\begin{bmatrix}R & Q_1^Ta\\0 & \gamma\\O & 0\end{bmatrix}. 于是此分解就有形式 A ˉ T Π ˉ = Q ˉ [ R ˉ O ] , \bar{A}^T\bar{\Pi}=\bar{Q}\begin{bmatrix}\bar{R}\\O\end{bmatrix}, 其中 Π ˉ = [ Π 0 0 1 ] , Q ˉ = Q [ I O O Q ^ T ] = [ Q 1 Q 2 Q ^ T ] , R ˉ = [ R Q 1 T a 0 γ ] . \bar{\Pi}=\begin{bmatrix}\Pi & 0\\0 & 1\end{bmatrix},\bar{Q}=Q\begin{bmatrix}I & O\\O & \hat{Q}^T\end{bmatrix}=\begin{bmatrix}Q_1 & Q_2\hat{Q}^T\end{bmatrix},\bar{R}=\begin{bmatrix}R & Q_1^Ta\\0 & \gamma\end{bmatrix}. 于是可选取 Z ˉ = Q 2 Q ^ T \bar{Z}=Q_2\hat{Q}^T . 若我们有显式的 Z Z , 需要 Z ˉ \bar{Z} 的显式表示, 我们就需要考虑计算 Q ^ \hat{Q} Q 2 Q ^ T = Z Q ^ T Q_2\hat{Q}^T=Z\hat{Q}^T 的成本. 由 Q ^ \hat{Q} 的特殊结构, 此计算量在 n ( n m ) n(n-m) . 与计算QR分解的计算量 n 2 m n^2m 相比, 更新策略要更经济一些. 这一点在 n m n n-m\ll n 时尤其突出。

  • 再考虑工作集移除指标的情形, 即删除 A A 的一行. 这相当于删除 R R 的一列, 从而破坏了上三角的性质. 这可以由一系列的旋转变换(如Givens变换)恢复. 这些变换会改变 Q Q 的前 m m 列. 之后更新的零空间矩阵就可选取为变换后 Q Q 的后 n m + 1 n-m+1 列. 因此新的零空间矩阵有形式 Z ˉ = [ z ˉ Z ] . \bar{Z}=\begin{bmatrix}\bar{z} & Z\end{bmatrix}. 此操作的计算量取决于移除 A A 的列的位置. 但一般来说是要比重新计算QR分解要小的. 详情可见Gill3.

现在考虑既约Hessian阵. 由子问题的特殊形式, 我们知道KKT系统中的 h = 0 h=0 , 从而 p Y = 0 p_Y=0 . 于是零空间分量 p Z p_Z ( Z T G Z ) p Z = Z T g (Z^TGZ)p_Z=-Z^Tg 的解. 有时我们可以更新既约Hessian Z T G Z Z^TGZ . 假设当前有 Z T G Z = L L T , Z^TGZ=LL^T, 且下一步 Z [ z ˉ Z ] Z\to\begin{bmatrix}\bar{z} & Z\end{bmatrix} . 于是 Z ˉ T G Z ˉ = [ z ˉ T Z T ] G [ z ˉ Z ] = [ z ˉ T G z ˉ z ˉ T G Z Z T G z ˉ Z T G Z ] . \bar{Z}^TG\bar{Z}=\begin{bmatrix}\bar{z}^T\\Z^T\end{bmatrix}G\begin{bmatrix}\bar{z} & Z\end{bmatrix}=\begin{bmatrix}\bar{z}^TG\bar{z} & \bar{z}^TGZ\\Z^TG\bar{z} & Z^TGZ\end{bmatrix}. L ˉ = [ a l 1 l 2 ] , \bar{L}=\begin{bmatrix}a & \\l_1 & l_2\end{bmatrix}, [ z ˉ T G z ˉ z ˉ T G Z Z T G z ˉ Z T G Z ] = L ˉ L ˉ T = [ a 2 a l 1 T a l 1 l 1 l 1 T + l 2 l 2 T ] . \begin{bmatrix}\bar{z}^TG\bar{z} & \bar{z}^TGZ\\Z^TG\bar{z} & Z^TGZ\end{bmatrix}=\bar{L}\bar{L}^T=\begin{bmatrix}a^2 & al_1^T\\al_1 & l_1l_1^T+l_2l_2^T\end{bmatrix}. 于是得到 { a 2 = z ˉ T G z ˉ , a l 1 = Z T G z ˉ , l 1 l 1 T + l 2 l 2 T = L L T , { a = z ˉ T G z ˉ , l 1 = Z T G z ˉ z ˉ T G z ˉ , l 2 l 2 T = L L T l 1 l 1 T . \left\{\begin{array}{l}a^2=\bar{z}^TG\bar{z},\\al_1=Z^TG\bar{z},\\l_1l_1^T+l_2l_2^T=LL^T,\end{array}\right.\Rightarrow\left\{\begin{array}{l}a=\sqrt{\bar{z}^TG\bar{z}},\\l_1=\frac{Z^TG\bar{z}}{\sqrt{\bar{z}^TG\bar{z}}},\\l_2l_2^T=LL^T-l_1l_1^T.\end{array}\right. 于是最终只需要计算 L L T LL^T 的秩1修正的Cholesky分解. 这可以用Householder变换得到. 可见Gill4.

3.3 积极集法在严格凸二次规划上的有限终止性

我们将证明, 若每一非零迭代步 p k p_k 均能得到非零步长 α k \alpha_k , 算法3将经有限步收敛于严格凸QP的极小点.

  • 若子问题的解 p k = 0 p_k=0 , 则当前点 x k x_k q ( ) q(\cdot) 在工作集 W k \mathcal{W}_k 上的唯一全局极小点. 如若它不是原问题的解, 即至少有一个Lagrange乘子是负数. 由定理5和定理7, 可知在剔除一个约束后, 计算出的 p k + 1 p_{k+1} q ( ) q(\cdot) 的严格下降方向. 由假设知 α k > 0 \alpha_k>0 , 于是后续所有迭代点处的函数值 q q 都要低于 q ( x k ) q(x_k) . 这也说明算法将永远不会回到工作集 W k \mathcal{W}_k , 这是因为后续迭代点处的函数值比这一工作集下的全局极小还要小.
  • 算法每经 n n 次迭代就至少有一次有 p k = 0 p_k=0 . 为此, 注意对任意 k : p k 0 k:p_k\ne0 , 我们要么有 α k = 1 \alpha_k=1 (此时到达 q q 在当前工作集的极小点, 于是下一步迭代将有 p k + 1 = 0 p_{k+1}=0 ), 要么就有一个新的约束进入工作集. 若后一情形重复发生, 则至多经 n n 次迭代工作集将有 n n 个指标, 其中对应的了 n n 个线性无关的向量. 此时子问题的解必定为 p k = 0 p_k=0 (或是由于工作集已无法继续变大, 则下一步迭代必定到达极小点).
  • 以上两点表明, 算法将周期性地得到在当前工作集下 q q 的全局极小, 而一旦达到, 它将永远不会再遍历这个工作集(除非已经是原问题的解). 由于工作集的选择有限, 而算法将能提供周期性的下降, 再加上函数有下界, 算法就不可能一直迭代下去. 最终算法就会得到满足原问题最优性条件的工作集和极小点.

每一非零 p k p_k 均有非零步长的假设保证了算法不会循环(cycling). 循环是指在连续的迭代中, 尽管工作集经历了不断的增添和删减, 总是会出现反复的情形, 且 x x 没有任何的移动. 即对于某个整数 k , l 1 k,l\ge1 , 我们有 x k = x k + l , W k = W k + l x^k=x^{k+l},\mathcal{W}_k=\mathcal{W}_{k+l} . 在循环中的每次迭代, 工作集在剔除一个约束后马上就会有新的 i W k i\notin\mathcal{W}_k 加入进来, 此间 x x 没有沿着 p p 做任何移动. 在二次规划中处理退化和循环的程序类似于我们在第十三章中对线性规划单纯形法采用的方法. 我们不再赘述. 而大多QP的实施都忽略循环的可能性.

4. 凸二次规划的内点法

第十四章线性规划的内点法经简单推广即可用于求解凸二次规划. 如此得到的原始-对偶算法易于描述且在许多类型的问题上表现良好. 推广至非凸问题的内点法可见第十九章.

为简单起见, 我们仅讨论带不等式约束的凸二次规划, 带等式约束的可经简单拓展得到. min x q ( x ) = 1 2 x T G x + x T c s u b j e c t   t o A x b , \begin{array}{rl}\min\limits_x & q(x)=\frac{1}{2}x^TGx+x^Tc\\\mathrm{subject\,to} & Ax\ge b,\end{array} 其中 G G 为对称半定矩阵, m × n m\times n 矩阵 A A 和右端项 b b 定义为 A = [ a i ] i I , b = [ b i ] i I , I = { 1 , 2 , , m } . A=[a_i]_{i\in\mathcal{I}},\quad b=[b_i]_{i\in\mathcal{I}},\quad \mathcal{I}=\{1,2,\ldots,m\}. 将KKT条件重写为 G x A T λ + c = 0 , A x b b , ( A x b ) i λ i = 0 , i = 1 , 2 , , m , λ 0. \begin{aligned}Gx-A^T\lambda+c&=0,\\Ax-b&\ge b,\\(Ax-b)_i\lambda_i&=0,\quad i=1,2,\ldots,m,\\\lambda&\ge0.\end{aligned} 引入松弛变量 y 0 y\ge0 , 我们可以将条件写作 G x A T λ + c = 0 , A x y b = 0 , y i λ i = 0 , i = 1 , 2 , , m , ( y , λ ) 0. \begin{aligned}Gx-A^T\lambda+c&=0,\\Ax-y-b&=0,\\y_i\lambda_i&=0,\quad i=1,2,\ldots,m,\\(y,\lambda)&\ge0.\end{aligned} 由于 G G 半正定, 因此KKT条件也是充分条件. 因此我们可以通过求解以上系统得到凸二次规划的解.

给定当前迭代点 ( x , y , λ ) : ( y , λ ) > 0 (x,y,\lambda):(y,\lambda)>0 , 可定义互补度量(类似于第十四章中的对偶度量) μ \mu μ = y T λ m . \mu=\frac{y^T\lambda}{m}. 我们也可以对扰动的KKT条件推导路径跟踪原始-对偶算法, 其中扰动的KKT条件为 F ( x , y , λ ; σ μ ) = [ G x A T λ + c A x y b Y Λ e σ μ e ] = 0 , F(x,y,\lambda;\sigma\mu)=\begin{bmatrix}Gx-A^T\lambda+c\\Ax-y-b\\\mathcal{Y}\Lambda e-\sigma\mu e\end{bmatrix}=0, 这里 Y = d i a g ( y 1 , y 2 , , y m ) , Λ = d i a g ( λ 1 , λ 2 , , λ m ) , e = ( 1 , 1 , , 1 ) T , σ [ 0 , 1 ] . \mathcal{Y}=\mathrm{diag}(y_1,y_2,\ldots,y_m),\quad\Lambda=\mathrm{diag}(\lambda_1,\lambda_2,\ldots,\lambda_m),\quad e=(1,1,\ldots,1)^T,\quad \sigma\in[0,1]. 而所有 σ , μ \sigma,\mu 取的正值对应的解构成了中心路径(central path), 它在 σ μ 0 \sigma\mu\to0 时的极限是二次规划的解.

固定 μ \mu , 利用牛顿法, 我们得到线性系统 [ G O A T A I O O Λ Y ] [ Δ x Δ y Δ λ ] = [ r d r p Λ Y e + σ μ e ] , \begin{bmatrix}G & O & -A^T\\A & -I & O\\O & \Lambda & \mathcal{Y}\end{bmatrix}\begin{bmatrix}\Delta x\\\Delta y\\\Delta\lambda\end{bmatrix}=\begin{bmatrix}-r_d\\-r_p\\-\Lambda\mathcal{Y}e+\sigma\mu e\end{bmatrix}, 其中 r d = G x A T λ + c , r p = A x y b . r_d=Gx-A^T\lambda+c,\quad r_p=Ax-y-b. 于是下一迭代点置为 ( x + , y + , λ + ) = ( x , y , λ ) + α ( Δ x , Δ y , Δ λ ) , (x^+,y^+,\lambda^+)=(x,y,\lambda)+\alpha(\Delta x,\Delta y,\Delta\lambda), 其中 α \alpha 的选取保证不等式 ( y + , λ + ) > 0 (y^+,\lambda^+)>0 以及一些其他的性质成立.

下面我们讨论此原始-对偶算法的细节, 从而使算法更加实用.

4.1 原始-对偶系统的求解

内点法的主要计算量在于原始-对偶系统的求解. 由于Hessian矩阵 G G 的存在, 此系统的系数矩阵要比线性规划时的矩阵更难分解. 因此有必要剖析特殊的结构, 选取合适的分解算法, 亦或者是寻求迭代时合适的预处理子.

如同第十四章, 原始-对偶系统可用更加紧的形式表示. 增广系统形式为 [ G A T A Λ 1 Y ] [ Δ x Δ λ ] = [ r d r p + ( y + σ μ Λ 1 e ) ] . \begin{bmatrix}G & -A^T\\A & \Lambda^{-1}\mathcal{Y}\end{bmatrix}\begin{bmatrix}\Delta x\\\Delta\lambda\end{bmatrix}=\begin{bmatrix}-r_d\\-r_p+(-y+\sigma\mu\Lambda^{-1}e)\end{bmatrix}. 我们可以将其变换成对称形式, 于是对称不定分解就可以用于此系统的求解. 而正规方程组形式为 ( G + A T Y 1 Λ A ) Δ x = r d + A T Y 1 Λ [ r p y + σ μ Λ 1 e ] , (G+A^T\mathcal{Y}^{-1}\Lambda A)\Delta x=-r_d+A^T\mathcal{Y}^{-1}\Lambda[-r_p-y+\sigma\mu\Lambda^{-1}e], 这可用修正Cholesky分解求解. 此法在 A T ( Y 1 Λ ) A A^T(\mathcal{Y}^{-1}\Lambda)A 相较于 G G 不是很稠密时比较高效, 且若不等式约束较多, 正规方程组形式要比增广系统形式小得多.

投影共轭梯度法(算法2)也可以用来求解原始-对偶系统. 我们可以重写KKT系统为 [ G O A T O Y 1 Λ I A I O ] [ Δ x Δ u Δ λ ] = [ r d Λ e + σ μ Y 1 e r p ] , \begin{bmatrix}G & O & -A^T\\O & \mathcal{Y}^{-1}\Lambda & I\\A & -I & O\end{bmatrix}\begin{bmatrix}\Delta x\\\Delta u\\\Delta\lambda\end{bmatrix}=\begin{bmatrix}-r_d\\-\Lambda e+\sigma\mu\mathcal{Y}^{-1}e\\-r_p\end{bmatrix}, 注意到以上可看做等式约束凸二次规划问题(变量为( Δ x , Δ y \Delta x,\Delta y ))的最优性条件. 因此, 做一些必要的替换即可用算法2求解此系统. 此法在直接分解不太可行时(例如需要内存过大)比较有用. 而且投影共轭梯度法并不需要矩阵 G G 的显式计算或分解, 仅需矩阵-向量乘积.

4.2 步长的选取

我们在第十四章提到若对原始和对偶变量使用不同的步长 α p r i , α d u a l \alpha^{\mathrm{pri}},\alpha^{\mathrm{dual}} , 则线性规划的内点法更高效. 之前有关系式 r b k + 1 = ( 1 α k p r i ) r b k , r c k + 1 = ( 1 α k d u a l ) r c k , r_b^{k+1}=\left(1-\alpha_k^{\mathrm{pri}}\right)r_b^k,\quad r_c^{k+1}=\left(1-\alpha_k^{\mathrm{dual}}\right)r_c^k, 因此尽可能地选取大的步长有助于带来残差的下降. 但不同步长会带来好处这点在二次规划就不同了. 假设我们定义新迭代点为 ( x + , y + ) = ( x , y ) + α p r i ( Δ x , Δ y ) , λ + = λ + α d u a l Δ λ , (x^+,y^+)=(x,y)+\alpha^{\mathrm{pri}}(\Delta x,\Delta y),\quad\lambda^+=\lambda+\alpha^{\mathrm{dual}}\Delta\lambda, 其中步长保证了 ( y + , λ + ) (y^+,\lambda^+) 的正性. 利用前面的关系式, 可得新残差满足: r p + = A x + y + b = A ( x + α p r i Δ x ) ( y + α p r i Δ y ) b = r p + α p r i ( A Δ x Δ y ) = ( 1 α p r i ) r p , r d + = G x + A T λ + + c = G ( x + α p r i Δ x ) A T ( λ + α d u a l Δ λ ) + c = r d + ( α p r i G Δ x α d u a l A T Δ λ ) = r d + α d u a l ( G Δ x A T Δ λ ) + ( α p r i α d u a l ) G Δ x = ( 1 α d u a l ) r d + ( α p r i α d u a l ) G Δ x . \begin{aligned}r_p^+&=Ax^+-y^+-b\\&=A(x+\alpha^{\mathrm{pri}}\Delta x)-(y+\alpha^{\mathrm{pri}}\Delta y)-b\\&=r_p+\alpha^{\mathrm{pri}}(A\Delta x-\Delta y)\\&=\left(1-\alpha^{\mathrm{pri}}\right)r_p,\\r_d^+&=Gx^+-A^T\lambda^++c\\&=G(x+\alpha^{\mathrm{pri}}\Delta x)-A^T(\lambda+\alpha^{\mathrm{dual}}\Delta\lambda)+c\\&=r_d+(\alpha^{\mathrm{pri}} G\Delta x-\alpha^{\mathrm{dual}}A^T\Delta\lambda)\\&=r_d+\alpha^{\mathrm{dual}}(G\Delta x-A^T\Delta\lambda)+\left(\alpha^{\mathrm{pri}}-\alpha^{\mathrm{dual}}\right)G\Delta x\\&=\left(1-\alpha^{\mathrm{dual}}\right)r_d+\left(\alpha^{\mathrm{pri}}-\alpha^{\mathrm{dual}}\right)G\Delta x.\end{aligned} α p r i = α d u a l = α \alpha^{\mathrm{pri}}=\alpha^{\mathrm{dual}}=\alpha , 则两个量才对所有 α ( 0 , 1 ) \alpha\in(0,1) 线性递减. 而对不同的步长, 对偶残差 r d + r_d^+ 反倒有可能上升, 从而会使内点法失效.

一种方式是使用相同的步长, 置 α = min ( α τ p r i , α τ d u a l ) \alpha=\min(\alpha_{\tau}^{\mathrm{pri}},\alpha_{\tau}^{\mathrm{dual}}) , 其中 α τ p r i = max { α ( 0 , 1 ] : y + α Δ y ( 1 τ ) y } , α τ d u a l = max { α ( 0 , 1 ] : λ + α Δ λ ( 1 τ ) λ } ; \begin{aligned}\alpha_{\tau}^{\mathrm{pri}}&=\max\{\alpha\in(0,1]:y+\alpha\Delta y\ge(1-\tau)y\},\\\alpha_{\tau}^{\mathrm{dual}}&=\max\{\alpha\in(0,1]:\lambda+\alpha\Delta\lambda\ge(1-\tau)\lambda\};\end{aligned} 其中 τ ( 0 , 1 ) \tau\in(0,1) 控制与边界 y + α Δ y 0 , λ + α Δ λ 0 y+\alpha\Delta y\ge0,\lambda+\alpha\Delta\lambda\ge0 的距离. 然而数值实验表明, 使用不同的原始和对偶步长往往带来更快的收敛速度. 一种选取不等步长的方式是极小化最优度量 G x + A T λ + + c 2 2 + A x + y + b 2 2 + ( y + ) T z + , \Vert Gx^+-A^T\lambda^++c\Vert_2^2+\Vert Ax^+-y^+-b\Vert_2^2+(y^+)^Tz^+, 其中步长受限于 0 α p r i α τ p r i , 0 α d u a l α τ d u a l 0\le\alpha^{\mathrm{pri}}\le\alpha_{\tau}^{\mathrm{pri}},0\le\alpha^{\mathrm{dual}}\le\alpha_{\tau}^{\mathrm{dual}} .

4.3 实用原始-对偶算法

求解凸QP最受欢迎的内点法基于Mehrotra的预估校正法(可见第十四章第2节). 下面我们介绍其向二次规划的推广.

首先置 σ = 0 \sigma=0 , 计算仿射变换步 ( Δ x a f f , Δ y a f f , Δ λ a f f ) (\Delta x^{\mathrm{aff}},\Delta y^{\mathrm{aff}},\Delta\lambda^{\mathrm{aff}}) . 接着计算校正步. 利用 σ = ( μ a f f μ ) 3 \sigma=\left(\frac{\mu^{\mathrm{aff}}}{\mu}\right)^3 计算中心化参数 σ \sigma . 最终的总迭代步由以下系统给出: [ G O A T A I O O Λ Y ] [ Δ x Δ y Δ λ ] = [ r d r p Λ Y e Δ Λ a f f Δ Y a f f e + σ μ e ] . \begin{bmatrix}G & O & -A^T\\A & -I & O\\O & \Lambda & \mathcal{Y}\end{bmatrix}\begin{bmatrix}\Delta x\\\Delta y\\\Delta\lambda\end{bmatrix}=\begin{bmatrix}-r_d\\-r_p\\-\Lambda\mathcal{Y}e-\Delta\Lambda^{\mathrm{aff}}\Delta\mathcal{Y}^{\mathrm{aff}}e+\sigma\mu e\end{bmatrix}. 下面给出具体算法. 为简单起见, 使用相同步长.

算法4 (Predictor-Corrector Algorithm for QP)
Compute ( x 0 , y 0 , λ 0 ) (x_0,y_0,\lambda_0) with ( y 0 , λ 0 ) > 0 (y_0,\lambda_0)>0 ;
for k = 0 , 1 , 2 , k=0,1,2,\ldots
\quad\quad Set ( x , y , λ ) = ( x k , y k , λ k ) (x,y,\lambda)=(x_k,y_k,\lambda_k) and solve the KKT system with σ = 0 \sigma=0 for ( Δ x a f f , Δ y a f f , Δ λ a f f ) (\Delta x^{\mathrm{aff}},\Delta y^{\mathrm{aff}},\Delta\lambda^{\mathrm{aff}}) ;
\quad\quad Calculate μ = y T λ / m \mu=y^T\lambda/m ;
\quad\quad Calculate α ^ a f f = max { α ( 0 , 1 ] ( y , λ ) + α ( Δ y a f f , Δ λ a f f ) 0 } \hat{\alpha}^{\mathrm{aff}}=\max\{\alpha\in(0,1]\mid(y,\lambda)+\alpha(\Delta y^{\mathrm{aff}},\Delta\lambda^{\mathrm{aff}})\ge0\} ;
\quad\quad Calculate μ a f f = ( y + α ^ a f f Δ y a f f ) T ( λ + α ^ a f f Δ λ a f f ) / m \mu^{\mathrm{aff}}=(y+\hat{\alpha}^{\mathrm{aff}}\Delta y^{\mathrm{aff}})^T(\lambda+\hat{\alpha}^{\mathrm{aff}}\Delta\lambda^{\mathrm{aff}})/m ;
\quad\quad Set centering parameter to σ = ( μ a f f / μ ) 3 \sigma=(\mu^{\mathrm{aff}}/\mu)^3 ;
\quad\quad Solve the corrector system for ( Δ x , Δ y , Δ λ ) (\Delta x,\Delta y,\Delta\lambda) ;
\quad\quad Choose τ k ( 0 , 1 ) \tau_k\in(0,1) and set α ^ = min ( α τ k p r i , α τ k d u a l ) \hat{\alpha}=\min(\alpha_{\tau_k}^{\mathrm{pri}},\alpha_{\tau_k}^{\mathrm{dual}}) ;
\quad\quad Set ( x k + 1 , y k + 1 , λ k + 1 ) = ( x k , y k , λ k ) + α ^ ( Δ x , Δ y , Δ λ ) (x_{k+1},y_{k+1},\lambda_{k+1})=(x_k,y_k,\lambda_k)+\hat{\alpha}(\Delta x,\Delta y,\Delta\lambda) ;
end (for)

随着迭代点趋近解, 我们可选取 τ k 1 \tau_k\to1 以加速收敛.

如同线性规划的内点法, 好的初始点能增强此法的效率和强健性. 我们介绍一种简单的启发式方法. 当其从使用者处接收到一点 ( x ˉ , y ˉ , λ ˉ ) (\bar{x},\bar{y},\bar{\lambda}) , 它就移动此点远离 ( y , λ ) 0 (y,\lambda)\ge0 的边界, 从而使算法在早期迭代能获得较大的步长.

首先, 利用 ( x ˉ , y ˉ , λ ˉ ) (\bar{x},\bar{y},\bar{\lambda}) 计算仿射变换步 ( Δ x a f f , Δ y a f f , Δ λ a f f ) (\Delta x^{\mathrm{aff}},\Delta y^{\mathrm{aff}},\Delta\lambda^{\mathrm{aff}}) , 再置 y 0 = max ( 1 , y ˉ + Δ y a f f ) , λ 0 = max ( 1 , λ ˉ + Δ λ a f f ) , x 0 = x ˉ . y_0=\max(1,|\bar{y}+\Delta y^{\mathrm{aff}}|),\quad\lambda_0=\max(1,|\bar{\lambda}+\Delta\lambda^{\mathrm{aff}}|),\quad x_0=\bar{x}.

4.4 内点法与积极集法之比较

现在我们来比较一下在求解凸QP时积极集法和内点法的性质.

  • 积极集法一般需要迭代较多次, 但每次计算搜索方向的成本并不高; 内点法一般迭代次数较少, 但每次计算的成本较高.
  • 积极集法实施起来更复杂, 特别是当更新矩阵分解时要利用 G , A G,A 中的稀疏结构时. 相反, 内点法迭代过程中并不改变矩阵的非零元位置, 因此可以使用标准的稀疏分解, 一劳永逸. 对于特定的稀疏结构(例如 A , G A,G 呈带状), 我们也可以设计特别的自定义的求解器.
  • 对较大规模的问题, 内点法往往更高效. 但当存在热启动时, 积极集法一般收敛得更快, 特别是当初始 x x 可行时.

5. 投影梯度法

在本章第3节中我们介绍了积极集法, 其中积极集和工作集每步迭代后的改变很小. 因此这一方法在大型的问题上可能需要迭代许多次. 例如, 若在起始点 x 0 x^0 处无约束积极, 而在解处又有(比如)200个约束积极, 则到达解至少需要200次迭代.

投影梯度法the gradient projection method允许积极集随着迭代迅速改变. 此法在约束形式简单时是最有力的——尤其是约束为变量的界约束. 因此, 我们也仅考虑以下界约束问题: min x q ( x ) = 1 2 x T G x + x T c s u b j e c t   t o l x u , \begin{array}{rl}\min\limits_x & q(x)=\frac{1}{2}x^TGx+x^Tc\\\mathrm{subject\,to} & l\le x\le u,\end{array} 其中 G G 对称, l , u l,u 分别为 x x 的下界和上界. 投影梯度法可以同时用于凸和非凸的问题. 但我们在本节仍仅考虑 G G 正定的情形. 以上界约束问题的可行域有时被称作box约束, 这是因为可行域是高维空间中的长方体(形). 有时 x x 的一些分量可能会缺少上界或者下界约束, 我们可以分别令 u = + , l = u=+\infty,l=-\infty 解决.

投影梯度法的每次迭代包含两个阶段.

  • 第一阶段中, 我们从当前点 x x 沿着最速下降方向 g = ( G x + c ) -g=-(Gx+c) 搜索. 只要触碰到边界, 算法就"弯折"(实际上是投影)搜索方向使得后续搜索方向上的点仍然是可行的. 我们将沿着分段线性路径搜索直到定位到 q q 第一个局部极小点. 我们以 x c x^c 表示, 类似于第四章, 称其为Cauchy点. 于是工作集便定义为在Cauchy点处积极的界约束, 记为 A ( x c ) \mathcal{A}(x^c) .
  • 在第二阶段, 我们将探索可行域中Cauchy点所在的面, 即求解一子问题, 其中积极分量 x i , i A ( x c ) x_i,i\in\mathcal{A}(x^c) 固定为 x i c x_i^c .

本节余下的部分, 我们将详细介绍投影梯度法. 我们用上标表示迭代数, 下标表示分量位置.

5.1 第一阶段: Cauchy点的计算

我们先推导分段线性路径的显式表示, 然后再概述沿此路径定位第一个局部极小点的程序.

任意点 x x 投影到可行域中的像定义为 P ( x , l , u ) i = { l i , x i < l i , x i , x i [ l i , u i ] , u i , x i > u i . P(x,l,u)_i=\left\{\begin{array}{ll}l_i, & x_i<l_i,\\x_i, & x_i\in[l_i,u_i],\\u_i, & x_i>u_i.\end{array}\right. 于是将在 x x 处的最速下降方向沿线投影到可行域上, 并从 x x 处出发的分段线性路径 x ( t ) x(t) x ( t ) = P ( x t g , l , u ) , x(t)=P(x-tg,l,u), 其中 g = G x + c g=Gx+c . 可见下图.
The piecewise-linear path x(t)

Cauchy点定义为此单变量分段二次函数 q ( x ( t ) ) , t 0 q(x(t)),t\ge0 第一个局部极小点. 这需要检验组成路径的每一段. 为此, 需要计算 x ( t ) x(t) 扭结或间断的位置 t t . 沿着 g -g 搜索触碰到边界的 t t t ˉ i = { ( x i u i ) / g i , g i < 0 , u i < + , ( x i l i ) / g i , g i > 0 , l i > , , o t h e r w i s e . \bar{t}_i=\left\{\begin{array}{ll}(x_i-u_i)/g_i, & g_i<0,u_i<+\infty,\\(x_i-l_i)/g_i, & g_i>0,l_i>-\infty,\\\infty, & otherwise.\end{array}\right. 于是对任何 t t , x ( t ) x(t) 的分量为 x i ( t ) = { x i t g i , t t ˉ i , x i t ˉ i g i , o t h e r w i s e . x_i(t)=\left\{\begin{array}{ll}x_i-tg_i, & t\le\bar{t}_i,\\x_i-\bar{t}_ig_i, & otherwise.\end{array}\right. 为搜索沿 P ( x t g , l , u ) P(x-tg,l,u) 的第一个局部极小点, 我们先消去集合 { t ˉ 1 , t ˉ 2 , , t ˉ n } \{\bar{t}_1,\bar{t}_2,\ldots,\bar{t}_n\} 中重复值和零值, 并经排序得到约减的 { t 1 , t 2 , , t l } : 0 < t 1 < t 2 < \{t_1,t_2,\ldots,t_l\}:0<t_1<t_2<\cdots . 现在我们轮流检验区间 [ 0 , t 1 ] , [ t 1 , t 2 ] , [ t 2 , t 3 ] , [0,t_1],[t_1,t_2],[t_2,t_3],\ldots . 假设我们已经检验到了 t j 1 t_{j-1} 且仍没有找到局部极小点. 对于区间 [ t j 1 , t j ] [t_{j-1},t_j] , 我们有 x ( t ) = x ( t j 1 ) + ( Δ t ) p j 1 , x(t)=x(t_{j-1})+(\Delta t)p^{j-1}, 其中 Δ t = t t j 1 [ 0 , t j t j 1 ] , p i j 1 = { g i , t j 1 < t ˉ i , 0 , o t h e r w i s e . \Delta t=t-t_{j-1}\in[0,t_j-t_{j-1}],\\p_i^{j-1}=\left\{\begin{array}{ll}-g_i, & t_{j-1}<\bar{t}_i,\\0, & otherwise.\end{array}\right. 于是有二次函数 q ( x ( t ) ) = c T ( x ( t j 1 ) + ( Δ t ) p j 1 ) + 1 2 ( x ( t j 1 ) + ( Δ t ) p j 1 ) T G ( x ( t j 1 ) + ( Δ t ) p j 1 ) . q(x(t))=c^T(x(t_{j-1})+(\Delta t)p^{j-1})+\frac{1}{2}(x(t_{j-1})+(\Delta t)p^{j-1})^TG(x(t_{j-1})+(\Delta t)p^{j-1}). 整理可得关于 Δ t \Delta t 的多项式 q ( x ( t ) ) = f j 1 + f j 1 Δ t + 1 2 f j 1 ( Δ t ) 2 , Δ t [ 0 , t j t j 1 ] , q(x(t))=f_{j-1}+f'_{j-1}\Delta t+\frac{1}{2}f''_{j-1}(\Delta t)^2,\quad\Delta t\in[0,t_j-t_{j-1}], 其中 f j 1 = d e f c T x ( t j 1 ) + 1 2 x ( t j 1 ) T G x ( t j 1 ) , f j 1 = d e f c T p j 1 + x ( t j 1 ) T G p j 1 , f j 1 = d e f ( p j 1 ) T G p j 1 . \begin{aligned}f_{j-1}&\xlongequal{def}c^Tx(t_{j-1})+\frac{1}{2}x(t_{j-1})^TGx(t_{j-1}),\\f'_{j-1}&\xlongequal{def}c^Tp^{j-1}+x(t_{j-1})^TGp^{j-1},\\f''_{j-1}&\xlongequal{def}(p^{j-1})^TGp^{j-1}.\end{aligned} 由于 G G 正定, 因此二次项的系数为正. 于是极小点可通过求导得到. 上述二次多项式对 Δ t \Delta t 求导并置零, 可得 Δ t = f j 1 / f j 1 \Delta t^*=-f'_{j-1}/f''_{j-1} . 于是有下面的三种情形:

  1. f j 1 > 0 f'_{j-1}>0 , 则 q ( x ( t ) ) q(x(t)) 极小点在 t = t j 1 t=t_{j-1} ;
  2. 若不然, 若 Δ t [ 0 , t j t j 1 ) \Delta t^*\in[0,t_j-t_{j-1}) , 则有极小点 t = t j 1 + Δ t t=t_{j-1}+\Delta t^* ;
  3. 再不然, 我们考虑下一段区间 [ t j , t j + 1 ] [t_j,t_{j+1}] , 令 j : = j + 1 j:=j+1 , 重复以上讨论.

对下段区间, 我们需要计算新方向 p j p^j 以及新的系数 f j , f j , f j f_j,f_j',f_j'' . 由于 p j p^j 往往仅与 p j 1 p^{j-1} 差一个分量, 因此更新是更佳的手段.

5.2 第二阶段: 子空间极小化

在计算出Cauchy点 x c x^c 后, 积极约束的指标构成积极集 A ( x c ) = { i x i c = l i x i c = u i } . \mathcal{A}(x^c)=\{i\mid x_i^c=l_i或x_i^c=u_i\}. 在投影梯度法迭代的第二阶段, 我们近似求解一子问题, 其中 x i , i A ( x c ) x_i,i\in\mathcal{A}(x^c) 固定为 x i c x_i^c . min x q ( x ) = 1 2 x T G x + x T c s u b j e c t   t o x i = x i c , i A ( x c ) , l i x i u i , i A ( x c ) . \begin{array}{rl}\min\limits_x & q(x)=\frac{1}{2}x^TGx+x^Tc\\\mathrm{subject\,to} & x_i=x_i^c,i\in\mathcal{A}(x^c),\\&l_i\le x_i\le u_i,i\notin\mathcal{A}(x^c).\end{array} 精确求解此问题并不必要, 而且在高维度问题中也并不必须, 这是因为这样子问题的求解难度会于原问题差不多. 事实上, 为得到投影梯度法的全局收敛性, 我们仅需要子问题的解 x + x^+ 落在可行域中, 且函数值不大于 x c x^c 的函数值, 即 q ( x + ) q ( x c ) q(x^+)\le q(x^c) . 在选取 x + = x c x^+=x^c 作为近似解和精确求解子问题之间有一种权衡方式, 是利用算法1或算法2的共轭梯度法. 具体地, 注意到子问题的等式约束, 其Jacobi矩阵 A A 和零空间矩阵 Z Z 具有相当简单的形式. 因此可将共轭梯度法用于仅受限于等式约束的子问题上, 而在触碰不等式约束边界时即终止. 或者, 我们暂时不管界约束, 继续迭代, 最后再将近似解投影回可行域. 负曲率的情形可用第七章的CG-Steihaug算法处理.

我们将求解二次规划的投影梯度法总结如下.

算法5 (Gradient Projection Method for QP)
Compute a feasible starting point x 0 x^0 ;
for k = 0 , 1 , 2 , k=0,1,2,\ldots
\quad\quad if x k x^k satisfies the KKT conditions for the original problem
\quad\quad\quad\quad step with solution x = x k x^*=x^k ;
\quad\quad Set x = x k x=x^k and find the Cauchy point x c x^c ;
\quad\quad Find an approximate solution x + x^+ of subproblem such that q ( x + ) q ( x c ) q(x^+)\le q(x^c) and x + x^+ is feasible;
\quad\quad x k + 1 x + x^{k+1}\leftarrow x^+ ;
end (for)

若算法趋近于一 x x^* , 在那里成立严格互补松弛条件, 则当 k k 充分大, A ( x c ) \mathcal{A}(x^c) 就等于最优积极集. 即约束的指标不会在连续的迭代中重复地进入和离开积极集. 当问题退化时, 积极集可能就不会安定于其最优. 现已有许多技术可防止此类现象发生.

尽管原则上, 投影梯度法可以用于带一般线性约束的问题, 但此时投影所需的计算量可能会很大. 例如, 若约束定义为 a i T x b i , i I a_i^Tx\ge b_i,i\in\mathcal{I} , 于是我们必须求解以下凸二次规划以计算给定 x ˉ \bar{x} 投影至可行域的像: max x x x ˉ 2 , s u b j e c t   t o a i T x b i , i I . \max\limits_x\Vert x-\bar{x}\Vert^2,\quad\mathrm{subject\,to}a_i^Tx\ge b_i,i\in\mathcal{I}. 求解这一投影子问题的成本可能接近求解原问题, 因此这种情形不便使用投影梯度法求解.

当我们使用对偶性质将一严格凸二次规划代以其对偶问题时, 投影梯度法可能会比较有用. 这是因为对偶问题的约束为box约束: max λ q ~ ( λ ) = 1 2 ( A T λ c ) T G 1 ( A T λ c ) T + b T λ , s u b j e c t   t o λ 0. \max\limits_{\lambda}\tilde{q}(\lambda)=-\frac{1}{2}(A^T\lambda-c)^TG^{-1}(A^T\lambda-c)^T+b^T\lambda,\quad\mathrm{subject\,to}\lambda\ge0. G G 形式简单(如对角或分块对角)时, 将更为方便.

6. 关于非凸二次规划的讨论

第3节的积极集法并不能用于Hessian阵 G G 不定的情形, 此处我们给出一些补充. 但这些方法十分复杂, 并且将它们推广到高维情形是很难理解的.

6.1 积极集法

对于积极集法, 我们可以改动算法3中搜索方向和步长的计算以适应不定的情形. 为阐释必要性, 考虑由零空间方法计算的迭代步 p = Z p Z p=Zp_Z , 其中 p Z p_Z 由以下给出: ( Z T G Z ) p Z = Z T g . (Z^TGZ)p_Z=-Z^Tg. 若既约Hessian阵 Z T G Z Z^TGZ 正定, 则此 p p 指向子问题的极小点, 迭代的形式无需改变. 但 Z T G G Z Z^TGGZ 有负特征值, 则 p p 就仅指向子问题的鞍点, 从而并不适合作为迭代步. 此时, 我们寻求 Z T G Z Z^TGZ 的负曲率方向 s Z s_Z . 于是有 q ( x + α Z s Z ) , α . q(x+\alpha Zs_Z)\to-\infty,\alpha\to\infty. 此外, 如有必要, 改变 s Z s_Z 的符号保证 Z s Z Zs_Z q q 在当前点 x x 的非升方向, 即 q ( x ) T Z s Z 0 \nabla q(x)^TZs_Z\le0 . 沿着 Z s Z Zs_Z 移动, 我们将会触碰到边界, 找到可以加入下一工作集的指标. (如果这样的约束找不到, 则问题无界.) 若新工作集的既约Hessian阵仍然不正定, 则就重复以上过程直到加入足够约束使得其正定. 对于此方法, 一个困难在于若我们允许既约Hessian阵有多个负特征值, 则其随工作集的改动将不利于算法的高效运行.

6.2 惯性控制算法

惯性控制算法(inertia controlling methods)是一类求解不定QP的实用方法, 其不允许既约Hessian阵有多于一个负特征值. 如同在凸的情形, 存在找寻初始点 x 0 x_0 的前期阶段. 不过此时再 x 0 x_0 上需要加额外的要求: 要么是顶点(此时既约Hessian阵为零), 要么是一约束稳定点(此时既约Hessian阵正定). 每步迭代, 算法将在工作集中增加或剔除一个约束指标. 若增加, 则既约Hessian阵维度更小且必须保持正定或是零. 因此, 不定的既约Hessian仅能在移除约束时出现. 这只在当前点为当前工作集下子问题的极小点时发生. 此时, 我们会选取搜索方向为既约Hessian阵的一个负曲率方向.

求解不定QP的算法的区别在于:

  • 探测不定性的方式;
  • 负曲率方向的计算;
  • 工作集的处理.

感兴趣者可见Fletcher5, Gill和Murray6.


  1. Gould N I M . On practical conditions for the existence and uniqueness of solutions to the general equality quadratic programming problem[J]. Mathematical Programming, 1985, 32(1):90-99. ↩︎

  2. Gould N , Orban D , Toint P . Numerical methods for large-scale nonlinear optimization[J]. Acta Numerica, 2005, 14(14):299-361. ↩︎

  3. Gill P E . Methods for Modifying Matrix Factorization[J]. Mathematics of Computation, 1974, 28(126):505-535. ↩︎

  4. Gill P E . Methods for Modifying Matrix Factorization[J]. Mathematics of Computation, 1974, 28(126):505-535. ↩︎

  5. Fletcher R . A General Quadratic Programming Algorithm[J]. Journal of the Institute of Mathematics & Its Applications, 1971, 7(1):76-91. ↩︎

  6. Gill P E , Murray W . Numerically stable methods for quadratic programming[J]. Mathematical Programming, 1978, 14(1):349-372. ↩︎

猜你喜欢

转载自blog.csdn.net/m0_37854871/article/details/86932780
今日推荐