Numerical Optimization Ch18. Sequential Quadratic Programming

第十八章: 逐步二次规划


求解带非线性约束优化问题的一种最高效的算法是通过求解二次的子问题产生迭代步. 此 逐步二次规划sequential quadratic programming, SQP算法可用于线搜索和信赖域的框架中, 且对于小型或大型的问题均适宜. 对比 第十七章中适用于线性约束的LCL算法, SQP算法在约束带显著非线性性时能体现更强大的能力.

本章中讨论的所有算法均属于积极集法, 因此更确切地说, 本章标题应当是"求解非线性规划的积极集法". 在下一章中我们将考虑非线性规划的内点法, 它也是处理不等式约束问题的一种有力手段.

我们有两类积极集SQP算法:

  • IQP算法: 每次迭代都求解一个一般的不等式约束二次规划, 同时计算迭代步以和产生对最优积极集的估计;
  • EQP算法: 将IQP算法的计算过程分成两步. 首先估计最优积极集, 然后求解一个等式约束二次规划得到迭代步.

本章我们将介绍这两种算法.

我们对SQP的讨论分两个阶段. 首先我们将考虑局部算法, 它们是SQP算法的动机且使得我们能够以一种简单的方式引入迭代步的计算技术. 接着, 我们考虑实用的线搜索和信赖域的框架, 它们能保证算法的全局收敛性. 我们还将考虑算法对大型问题的拓展.

1. 局部SQP算法

1.1 等式约束与SQP框架

我们从等式约束问题开始 min f ( x ) s u b j e c t   t o c ( x ) = 0 , \begin{array}{rl}\min & f(x)\\\mathrm{subject\,to} & c(x)=0,\end{array} 其中 f : R n R , c : R n R m f:\mathbb{R}^n\to\mathbb{R},c:\mathbb{R}^n\to\mathbb{R}^m 为光滑函数. SQP算法的思想就是, 在当前迭代点 x k x_k , 以一个二次规划的子问题近似上述问题, 之后使用子问题的(近似)解定义新的迭代点 x k + 1 x_{k+1} . 此处的问题就在于如何设计这样一个二次规划子问题, 使得其能给出非线性优化问题的一个好的迭代步. 可能SQP算法最简单的一种推导方式, 就是我们下面要介绍的——将其视作对原问题KKT最优性条件的牛顿法.

对等式约束问题, 其Lagrange函数为 L ( x , λ ) = f ( x ) λ T c ( x ) \mathcal{L}(x,\lambda)=f(x)-\lambda^Tc(x) . 我们使用 A ( x ) A(x) 表示约束的Jacobi矩阵, 即 A ( x ) T = [ c 1 ( x ) , c 2 ( x ) , , c m ( x ) ] , A(x)^T=[\nabla c_1(x),\nabla c_2(x),\ldots,\nabla c_m(x)], 其中 c i ( x ) c_i(x) c ( x ) c(x) 的第 i i 个分量. 于是KKT条件可写成有 n + m n+m 个方程: F ( x , λ ) = [ f ( x ) A ( x ) T λ c ( x ) ] = 0. F(x,\lambda)=\begin{bmatrix}\nabla f(x)-A(x)^T\lambda\\c(x)\end{bmatrix}=0. A ( x ) A(x^*) 行满秩时, 任何等式约束的解 ( x , λ ) (x^*,\lambda^*) 都将满足上述方程. 一种求解该非线性方程组的方法就是牛顿法, 可见第十一章.

该方程组对 x , λ x,\lambda 的Jacobi阵为 F ( x , λ ) = [ x x 2 L ( x , λ ) A ( x ) T A ( x ) O ] . F'(x,\lambda)=\begin{bmatrix}\nabla^2_{xx}\mathcal{L}(x,\lambda) & -A(x)^T\\A(x) & O\end{bmatrix}. 于是迭代更新格式为 [ x k + 1 λ k + 1 ] = [ x k λ k ] + [ p k p λ ] , \begin{bmatrix}x_{k+1}\\\lambda_{k+1}\end{bmatrix}=\begin{bmatrix}x_k\\\lambda_k\end{bmatrix}+\begin{bmatrix}p_k\\p_{\lambda}\end{bmatrix}, 其中 p k , p λ p_k,p_{\lambda} 为以下Newton-KKT方程的解: [ x x 2 L k A k T A k O ] [ p k p λ ] = [ f k + A k T λ k c k ] . \begin{bmatrix}\nabla^2_{xx}\mathcal{L}_k & -A_k^T\\A_k & O\end{bmatrix}\begin{bmatrix}p_k\\p_{\lambda}\end{bmatrix}=\begin{bmatrix}-\nabla f_k+A_k^T\lambda_k\\-c_k\end{bmatrix}. 当KKT矩阵非奇异时, 此牛顿迭代是有定义的. 由第十六章的引理, 可知KKT矩阵非奇异的充分条件如下.

假设1

  1. 约束的Jacobi矩阵 A ( x ) A(x) 行满秩;
  2. x x 2 L ( x , λ ) \nabla^2_{xx}\mathcal{L}(x,\lambda) 在约束的切空间上正定, 即 d T x x 2 L ( x , λ ) d > 0 , d : A ( x ) d = 0 d^T\nabla^2_{xx}\mathcal{L}(x,\lambda)d>0,\forall d\ne:A(x)d=0 .

这里第一条假设是在第十二章中的LICQ. 此假设贯穿本章. 而若最优点 ( x , λ ) (x^*,\lambda^*) 满足二阶充分性条件, 则只要当前 ( x , λ ) (x,\lambda) 靠近 ( x , λ ) (x^*,\lambda^*) , 第二条假设就成立. 我们将证明, 在一定条件下, 牛顿迭代是局部二次收敛的, 从而导出了求解等式约束问题的一个优秀的局部算法.

我们还有另一种看待牛顿迭代的方式. 假设在 ( x k , λ k ) (x_k,\lambda_k) , 我们用二次规划近似原问题: min p f k + f k T p + 1 2 p T x x 2 L k p s u b j e c t   t o A k p + c k = 0. \begin{array}{rl}\min\limits_p & f_k+\nabla f_k^Tp + \frac{1}{2}p^T\nabla^2_{xx}\mathcal{L}_kp\\\mathrm{subject\,to} & A_kp+c_k=0.\end{array} 若假设1成立, 则此问题有唯一解 ( p k , l k ) (p_k,l_k) 满足KKT条件 x x 2 L k p k + f k A k T l k = 0 , A k p k + c k = 0. \begin{aligned}\nabla^2_{xx}\mathcal{L}_kp_k+\nabla f_k-A_k^Tl_k&=0,\\A_kp_k+c_k&=0.\end{aligned} p k , l k p_k,l_k 可以通过求解牛顿方程得到. 若对之前的牛顿方程加以改造, 我们会得到 [ x x 2 L k A k T A k O ] [ p k λ k + 1 ] = [ f k c k ] . \begin{bmatrix}\nabla^2_{xx}\mathcal{L}_k & -A_k^T\\A_k & O\end{bmatrix}\begin{bmatrix}p_k\\\lambda_{k+1}\end{bmatrix}=\begin{bmatrix}-\nabla f_k\\-c_k\end{bmatrix}. 由系数矩阵的非奇异性, 我们有 λ k + 1 = l k \lambda_{k+1}=l_k .

因此, 新迭代点 ( x k + 1 , λ k + 1 ) (x_{k+1},\lambda_{k+1}) 可定义为近似二次规划模型的解, 或是之前由牛顿法应用于原问题最优性条件得到的迭代点. 这两种观点都很有用: 牛顿法的观点有助于分析, 而SQP框架则使我们能够推出实用的算法, 并推广至不等式约束情形.

以下为(局部)SQP算法的最简形式.

算法1 (Local SQP Algorithm for solving equality-constrained problem)
Choose an initial pair ( x 0 , λ 0 ) (x_0,\lambda_0) ; set k 0 k\leftarrow0 ;
repeat until a convergence test is satisfied
\quad\quad Evaluate f k , f k , x x 2 L k , c k , A k f_k,\nabla f_k,\nabla^2_{xx}\mathcal{L}_k,c_k,A_k ;
\quad\quad Solve the quadratic program to obtain p k , l k p_k,l_k ;
\quad\quad Set x k + 1 x k + p k , λ k + 1 l k x_{k+1}\leftarrow x_k+p_k,\lambda_{k+1}\leftarrow l_k ;
end (repeat)

需说明, 在近似二次规划模型中目标函数的线性项 f k T p \nabla f_k^Tp 可以用 x L ( x k , λ k ) T p \nabla_x\mathcal{L}(x_k,\lambda_k)^Tp 替换(约束使得这二者是相等的). 这样, 目标函数就可以看做是对Lagrange函数的二次近似. 这就为我们选取二次模型提供了动机: 我们首先以在原本的等式约束下极小化Lagrange函数替换原本的非线性规划问题, 再用二次模型近似Lagrange函数和用线性模型近似约束, 就得到了本小节中的二次模型.

1.2 不等式约束

SQP框架很容易就能被拓展至一般的非线性规划问题: min f ( x ) s u b j e c t   t o c i ( x ) = 0 , i E , c i ( x ) 0 , i I . \begin{array}{rl}\min & f(x)\\\mathrm{subject\,to} & c_i(x)=0,\quad i\in\mathcal{E},\\& c_i(x)\ge0,\quad i\in\mathcal{I}.\end{array} 为此, 我们线性化不等式和等式约束, 得到 min p f k + f k T p + 1 2 p T x x 2 L k p s u b j e c t   t o c i ( x k ) T p + c i ( x k ) = 0 , i E , c i ( x k ) T p + c i ( x k ) 0 , i I . \begin{array}{rl}\min\limits_p & f_k+\nabla f_k^Tp+\frac{1}{2}p^T\nabla^2_{xx}\mathcal{L}_kp\\\mathrm{subject\,to} & \nabla c_i(x_k)^Tp+c_i(x_k)=0,\quad i\in\mathcal{E},\\& \nabla c_i(x_k)^Tp+c_i(x_k)\ge0,\quad i\in\mathcal{I}.\end{array} 我们可以使用第十六章中的算法求解这一二次规划. 而新的迭代点则为 ( x k + p k , λ k + 1 ) (x_k+p_k,\lambda_{k+1}) , 其中 p k , λ k + 1 p_k,\lambda_{k+1} 分别为上述二次规划的解和对应的Lagrange乘子. 对于一般非线性规划的局部SQP算法则只需将算法1中计算迭代步的步骤换成求解以上二次规划.

在此IQP算法中, 二次规划子问题解处的积极集 A k \mathcal{A}_k 构成了我们对最优积极集的估计. 若SQP算法能够准确地定位最优积极集(且在后续迭代不改变), 则它将会表现得像对不等式约束优化问题的牛顿法, 达到快速收敛. 以下结论就给出了所需的条件.

定理1 x x^* 为非线性规划的局部解, 存在 λ \lambda^* , 满足KKT条件. 假设在 ( x , λ ) (x^*,\lambda^*) 处满足LICQ、严格互补松弛条件和二阶充分性条件. 则若 ( x k , λ k ) (x_k,\lambda_k) 足够靠近 ( x , λ ) (x^*,\lambda^*) , 则子问题就有一局部解, 其积极集 A k \mathcal{A}_k 与最优积极 A ( x ) \mathcal{A}(x^*) 相同.

证明可见 Robinson S M1定理2.1.

更重要的一点是, 即使当前迭代点离解较远, SQP算法通常能够改善积极集的估计并将迭代点导向解. 可见第7节.

2. 实用SQP算法概览

2.1 IQP和EQP

我们有两种设计求解一般非线性规划问题SQP算法的方式. 第一种是之前介绍的, 其将在每次迭代求解二次规划子问题, 并将子问题解处的积极集作为最优积极集的估计. 此方法被称为是IQP(inequality-constrained QP)算法. 它在实际实施中相当成功. 而它的主要缺陷在于求解二次规划子问题的计算耗费. 这在问题规模较大时会变得很高. 不过, 随着SQP算法的迭代点收敛到解, 如果我们使用前一次迭代的信息估计当前子问题的最优解, 求解二次规划将会变得更方便. 之后我们会介绍这一"热启动"策略.

第二种算法则是在每次迭代选取约束的子集作为所谓的工作集, 并求解相应的等式约束子问题. 每次迭代, 工作集都将基于Lagrange乘子的估计或是一个附加子问题的求解更新. 由于求解等式约束二次规划更方便, 此EQPequality-constrained QP算法对大规模问题更具优势.

EQP算法的一个例子是第5节中的逐步线性二次规划算法(sequential linear-quadratic programming method, SLQP method). 此方法首先忽略二次项 p T x x 2 L k p p^T\nabla^2_{xx}\mathcal{L}_kp 并添加信赖域约束 p Δ k \Vert p\Vert\le\Delta_k . 而线性规划子问题的积极集则作为当前迭代的工作集. 之后算法利用工作集求解等式约束二次规划(此时二次项 p T x x 2 L k p p^T\nabla^2_{xx}\mathcal{L}_kp 再被加入), 得到SQP迭代步. 另一种成功的EQP算法是第十六章的投影梯度算法. 此算法中, 工作集由沿着投影梯度路径极小化二次模型得到, 之后再对可行面做面上的二次规划.

2.2 收敛性的增强

为更加实用, SQP必须能够有一定的全局收敛性以及要能在非凸问题上起作用. 我们现在概述如何改动局部SQP算法以满足这些目标.

我们先回顾无约束优化. 在最简单的情形, 极小化函数 f f 的牛顿迭代将会抵达以下二次模型的极小点 m k ( p ) = f k + f k T p + 1 2 p T 2 f k p . m_k(p)=f_k+\nabla f_k^Tp+\frac{1}{2}p^T\nabla^2f_kp. 这一框架在解附近是比较有用, 而且这往往需要Hessian阵 2 f ( x k ) \nabla^2f(x_k) 正定. 而当 x k x_k 离解较远时, 模型函数 m k m_k 可能就不是凸的. 而信赖域的框架则保证新迭代点总是良定且有用的. 线搜索算法则会修改 m k ( p ) m_k(p) 中的Hessian阵使其正定(可能以一个拟牛顿近似矩阵 B k B_k 替换), 以保证 p k p_k 是目标函数的一个下降方向.

类似的策略也可以用来增强SQP算法的全局收敛. 若 x x 2 L k \nabla^2_{xx}\mathcal{L}_k 在积极约束的切空间上正定, 则二次规划子问题有唯一解. 而当 x x 2 L k \nabla^2_{xx}\mathcal{L}_k 不满足这一性质, 线搜索算法就将它替换成一正定近似 B k B_k , 或者是在计算矩阵分解时修改 x x 2 L k \nabla^2_{xx}\mathcal{L}_k . 如此, 子问题就是良定的, 不过这些修改可能会给模型引入不必要的麻烦.

信赖域SQP算法则给子问题增加一个信赖域约束. 这些算法能够处理不定Hessian阵 x x 2 L k \nabla^2_{xx}\mathcal{L}_k . 不过, 信赖域的引入可能使得子问题不可行. 为解决这一困境的程序会将算法复杂化, 增加它们的计算成本. 根据以上, 权衡二者, 当前尚不能说线搜索和信赖域框架下的SQP哪一方显著优于哪一方.

用于接收和拒绝迭代步的技术同样会影响SQP算法的效率. 在无约束优化中, 价值函数就是目标函数 f f , 且其在极小化过程中保持不变. 而对于约束优化问题, 我们将使用价值函数或滤子(可见第十五章). 它们就可能会包含一些参数, 而这些参数需要随着算法的推进更新.

3. 算法细节

本节中, 我们将扩展上一节中的想法, 并介绍各种用于实用SQP算法的细节. 具体地, 我们将关注

  • 保证子问题可行的技术;
  • 二次模型Hessian阵的替代方案;
  • 迭代步接收机制.

3.1 处理不相容的线性化

线性化约束可能给SQP算法带来不可行的子问题. 例如考虑1维情形, 约束有 x 1 , x 2 4 x\le1,x^2\ge4 . 当我们在 x k = 1 x_k=1 处线性化约束, 可得不等式 p 0 , 2 p 3 0 , -p\ge0,\quad 2p-3\ge0, 显然这二者是不相容的(inconsistent).

为克服这一困难, 我们可以重构非线性规划为 l 1 l_1 惩罚问题: min x , v , w , t f ( x ) + μ i E ( v i + w i ) + μ i I t i s u b j e c t   t o c i ( x ) = v i w i , i E , c i ( x ) t i , i I , v , w , t 0 , \begin{array}{rl}\min\limits_{x,v,w,t} & f(x)+\mu\sum\limits_{i\in\mathcal{E}}(v_i+w_i)+\mu\sum\limits_{i\in\mathcal{I}}t_i\\\mathrm{subject\,to} & c_i(x)=v_i-w_i,\quad i\in\mathcal{E},\\& c_i(x)\ge -t_i,\quad i\in\mathcal{I},\\ & v,w,t\ge0,\end{array} 其中 μ > 0 \mu>0 为惩罚因子. 对应于上述 l 1 l_1 问题的二次子问题(约束被线性化)总是可行的. 与第十七章相同, 若非线性原问题有解 x x^* 满足一些正则化的假设, 且若惩罚因子 μ \mu 充分大, 则 x x^* (同时有 v i = w i = 0 , i E ; t i = 0 , i I v_i^*=w_i^*=0,i\in\mathcal{E};t_i^*=0,i\in\mathcal{I} )为 l 1 l_1 问题的解. 若非线性原问题无可行解且 μ \mu 已充分大, 则 l 1 l_1 问题通常会得到不可行度量的一个稳定点. μ \mu 的选取已在第十七章中讨论过了, 我们将在第5节再次考虑. 软件包SNOPT就使用 l 1 l_1 重构(有时也被称作是弹性模式(elastic mode))处理线性化约束造成的不相容问题.

其他松弛约束的方法将在第5节信赖域的框架中给出.

3.2 Hessian的替换——拟牛顿近似

Lagrange函数的Hessian阵 x x 2 L ( x k , λ k ) \nabla^2_{xx}\mathcal{L}(x_k,\lambda_k) 由目标函数和约束的二阶导数组成. 在一些应用场景下, 这一信息并不容易获取, 因此可以考虑用拟牛顿近似代替 x x 2 L ( x k , λ k ) \nabla^2_{xx}\mathcal{L}(x_k,\lambda_k) , 例如BFGS、SR1.

B k B_k 的更新将使用以下两个向量 s k , y k s_k,y_k : s k = x k + 1 x k , y k = x L ( x k + 1 , λ k + 1 ) x L ( x k , λ k + 1 ) . s_k=x_{k+1}-x_k,\quad y_k=\nabla_x\mathcal{L}(x_{k+1},\lambda_{k+1})-\nabla_x\mathcal{L}(x_k,\lambda_{k+1}). 我们使用BFGS或SR1公式计算新的近似 B k + 1 B_{k+1} . 我们可将此过程视作拟牛顿更新在Lagrange函数 L ( x , λ ) \mathcal{L}(x,\lambda) ( λ \lambda 固定)的应用. 而这一观点则迅速解释了此方法的优势和缺陷.

x x 2 L \nabla^2_{xx}\mathcal{L} 在极小化的区域中正定, BFGS拟牛顿近似 B k B_k 就能反映问题的一些曲率信息, 迭代将会强健、迅速地收敛. 而若 x x 2 L \nabla^2_{xx}\mathcal{L} 有负特征值, 则以正定矩阵作为近似的BFGS算法就会引发问题. 此外, BFGS更新需要 s k , y k s_k,y_k 满足曲率条件 s k T y k > 0 s_k^Ty_k>0 , 而这在此并不一定成立(即使迭代点非常靠近解).

为克服这一难点, 我们可以在条件 s k T y k θ s k T B k s k s_k^Ty_k\ge\theta s_k^TB_ks_k 不满足时跳过BFGS迭代, 其中 θ \theta 为一正参数(比如 1 0 2 10^{-2} ). 此策略有时可能效果不是很好, 甚至失效, 因此我们不能将其视为处理一般情形的合适准则.

一种更加高效的修正则可保证更新总是良定的. 如下程序2, 它主要是通过修改 y k y_k 的定义.

程序2 (Damped BFGS Updating)
Given: symmetric and positive definite matrix B k B_k ;
Define s k s_k and y k y_k and set r k = θ k y k + ( 1 θ k ) B k s k , r_k=\theta_ky_k+(1-\theta_k)B_ks_k, where the scalar θ k \theta_k is defined as θ k = { 1 , s k T y k 0.2 s k T B k s k , ( 0.8 s k T B k s k ) / ( s k T B k s k s k T y k ) , s k T y k < 0.2 s k T B k s k ; \theta_k=\left\{\begin{array}{ll}1, & s_k^Ty_k\ge0.2s_k^TB_ks_k,\\(0.8s_k^TB_ks_k)/(s_k^TB_ks_k-s_k^Ty_k), & s_k^Ty_k<0.2s_k^TB_ks_k;\end{array}\right. Update B k B_k as follows: B k + 1 = B k B k s k s k T B k s k T B k s k + r k r k T s k T r k . B_{k+1}=B_k-\frac{B_ks_ks_k^TB_k}{s_k^TB_ks_k}+\frac{r_kr_k^T}{s_k^Tr_k}. 以上阻滞BFGS更新damped BFGS updating实际上保证了 s k s_k r k r_k 上的投影. 不妨设 s k T B k s k = 1 s_k^TB_ks_k=1 , 则当 s k T y k 0.2 s k T B k s k s_k^Ty_k\ge0.2s_k^TB_ks_k , 则显然 s k T r k = s k T y k 0.2 s_k^Tr_k=s_k^Ty_k\ge0.2 . 而若 s k T y k < 0.2 s k T B k s k s_k^Ty_k<0.2s_k^TB_ks_k , 则 s k T r k = s k T ( 0.8 s k T B k s k s k T B k s k s k T y k y k + 0.2 s k T B k s k s k T y k s k T B k s k s k T y k B k s k ) = 0.8 s k T y k 1 s k T y k + 0.2 s k T y k 1 s k T y k = 0.2. \begin{aligned}s_k^Tr_k&=s_k^T\left(\frac{0.8s_k^TB_ks_k}{s_k^TB_ks_k-s_k^Ty_k}y_k+\frac{0.2s_k^TB_ks_k-s_k^Ty_k}{s_k^TB_ks_k-s_k^Ty_k}B_ks_k\right)\\&=\frac{0.8s_k^Ty_k}{1-s_k^Ty_k}+\frac{0.2-s_k^Ty_k}{1-s_k^Ty_k}=0.2.\end{aligned} 于是 s k s_k r k r_k 上的投影至少是0.2. 这样即可保证 B k + 1 B_{k+1} 是正定的.

进一步注意, 若选取 θ k = 0 \theta_k=0 , 则有 B k + 1 = B k B_{k+1}=B_k , 而 θ k = 1 \theta_k=1 则是标准的BFGS更新. 对 θ k ( 0 , 1 ) \theta_k\in(0,1) , 以上公式则可视为当前 B k B_k 与标准BFGS公式的凸组合. θ k \theta_k 的选取保证了新的近似矩阵与当前的 B k B_k 足够接近, 从而有正定性.

阻滞BFGS更新一般效果不错, 但它在困难的问题上也可能表现不佳. 比如, 它不能解决Lagrange函数Hessian阵可能不是正定的问题. 为此, SR1更新可能会更合适, 并且实际上是信赖域SQP算法的一个尚佳选择. 而在线搜索框架中, 不定的Hessian近似是无法接受的, 因此就需要修改SR1公式, 比如增加一个充分大的纯量矩阵. 我们在下一章中会给出讨论.

以上讨论的所有拟牛顿近似 B k B_k 都是稠密的 n × n n\times n 矩阵, 存储和操作这些矩阵对大规模情形并不友好. 这时有限内存更新就更受青睐.

3.3 既约Hessian阵的拟牛顿近似

观察等式约束问题的KKT系统, 我们会发现 p k p_k A k T A_k^T 值域的部分完全由第二行 A k p k = c k A_kp_k=-c_k 决定. 而Lagrange函数Hessian阵 x x 2 L k \nabla^2_{xx}\mathcal{L}_k 则仅影响 p k p_k 位于正交补空间(即 A k A_k 核空间)中的部分. 因此, 考虑用拟牛顿算法计算 x x 2 L k \nabla^2_{xx}\mathcal{L}_k 中影响 p k p_k 位于 A k A_k 核空间部分的近似, 似乎更加合理. 本节我们就考虑基于这些既约Hessian阵近似的拟牛顿算法. 我们只讨论等式约束问题, 这是因为用于一般性问题的现存的SQP算法仅在产生一个等式约束的子问题后才使用既约Hessian阵的方法.

为推导既约Hessian阵方法, 我们用第十六章中的零空间方法解本章中的KKT方程. 我们定义 Y k , Z k Y_k,Z_k 分别为 A k T A_k^T 的值域基矩阵和 A k A_k 的零空间矩阵. 将 p k p_k 表示成 p k = Y k p Y + Z k p Z , p_k=Y_kp_Y+Z_kp_Z, 再将此表示代入KKT方程, 我们就得到下面用于求解 p Y , p Z p_Y,p_Z 的系统: ( A k Y k ) p Y = c k , ( Z k T x x 2 L k Z k ) p Z = Z k T x x 2 L k Y k p Y Z k T f k . \begin{aligned}(A_kY_k)p_Y&=-c_k,\\(Z_k^T\nabla^2_{xx}\mathcal{L}_kZ_k)p_Z&=-Z_k^T\nabla^2_{xx}\mathcal{L}_kY_kp_Y-Z_k^T\nabla f_k.\end{aligned} 而从KKT方程的第一行, 我们得出Lagrange乘子 λ k + 1 \lambda_{k+1} (有时也称之为QP乘子)可通过求解以下系统得到: ( A k Y k ) T λ k + 1 = Y k T ( f k + x x 2 L p k ) . (A_kY_k)^T\lambda_{k+1}=Y_k^T(\nabla f_k+\nabla^2_{xx}\mathcal{L}p_k). 我们可以在零空间方法中通过引入多种近似, 避免 x x 2 L k \nabla^2_{xx}\mathcal{L}_k . 首先, 去除上式中与 p k p_k 有关的项, 从而将 p k , λ k + 1 p_k,\lambda_{k+1} 的计算分开, 且消除在计算 λ k + 1 \lambda_{k+1} 时对 x x 2 L k \nabla^2_{xx}\mathcal{L}_k 的需要. 这样的简化手段其实也是合理的, 因为当算法趋近于解时, p k p_k 将趋于0, 而 f k \nabla f_k 一般则不会. 因此, 在解附近这样计算的乘子会是QP乘子的良好估计. 更确切地, 若选取 Y k = A k T Y_k=A_k^T (这在 A k A_k 行满秩时行得通), 我们有 λ ^ k + 1 = ( A k A k T ) 1 A k f k . \hat\lambda_{k+1}=(A_kA_k^T)^{-1}A_k\nabla f_k. 这被称为是最小二乘形式的乘子(least-squares multipliers), 因为它们可以表为以下问题的解: min λ x L ( x k , λ ) 2 2 = f k A k T λ 2 2 . \min\limits_{\lambda}\Vert\nabla_x\mathcal{L}(x_k,\lambda)\Vert^2_2=\Vert\nabla f_k-A_k^T\lambda\Vert_2^2. 这说明, 最小二乘形式的乘子对于当前点距离解较远的情形也同样有用, 因为它们趋近于满足一阶最优性条件. 总的来说, 最小二乘形式乘子将SQP算法从 x , λ x,\lambda 的原始对偶迭代变成了仅 x x 变量的纯原始迭代.

我们的第二步简化是要移除计算 p Z p_Z 的方程右端的交叉项 Z k T x x 2 L k Y k p Y Z_k^T\nabla^2_{xx}\mathcal{L}_kY_kp_Y , 从而由简化系统 ( Z k T x x 2 L k Z k ) p Z = Z k T f k . (Z_k^T\nabla^2_{xx}\mathcal{L}_kZ_k)p_Z=-Z_k^T\nabla f_k. 这样的简化使我们只需要近似矩阵 Z k T x x 2 L k Z k \Z_k^T\nabla^2_{xx}\mathcal{L}_kZ_k , 而不需近似 ( n m ) × m (n-m)\times m 的交叉项矩阵 Z k T x x 2 L k Y k Z_k^T\nabla^2_{xx}\mathcal{L}_kY_k , 后者在 m n m m\gg n-m 时相对较大. 由于法分量 p Y p_Y 比切向分量 p Z p_Z 通常更快地收敛于0, 因此这一简化也是合理的.

下面介绍如何近似 Z k T x x 2 L k Z k Z_k^T\nabla^2_{xx}\mathcal{L}_kZ_k . 假设我们已有一迭代步 α k p k = x k + 1 x k = α Z k p Z + α k Y k p Y \alpha_kp_k=x_{k+1}-x_k=\alpha Z_kp_Z+\alpha_kY_kp_Y . 由Taylor定理, 记 x x 2 L k + 1 = x x 2 L ( x k + 1 , λ k + 1 ) \nabla^2_{xx}\mathcal{L}_{k+1}=\nabla^2_{xx}\mathcal{L}(x_{k+1},\lambda_{k+1}) , 我们有 x x 2 L k + 1 α k p k x L ( x k + α k p k , λ k + 1 ) x L ( x k , λ k + 1 ) . \nabla^2_{xx}\mathcal{L}_{k+1}\alpha_kp_k\approx\nabla_x\mathcal{L}(x_k+\alpha_kp_k,\lambda_{k+1})-\nabla_x\mathcal{L}(x_k,\lambda_{k+1}). 左乘 Z k T Z_k^T , 我们有 Z k T x x 2 L l + 1 Z k α k p Z Z k T x x 2 L k + 1 Y k α k p Y + Z k T [ x L ( x k + α k p k , λ k + 1 ) x L ( x k , λ k + 1 ) ] . \begin{aligned}&Z_k^T\nabla^2_{xx}\mathcal{L}_{l+1}Z_k\alpha_kp_Z\\&\approx-Z_k^T\nabla^2_{xx}\mathcal{L}_{k+1}Y_k\alpha_kp_Y+Z_k^T[\nabla_x\mathcal{L}(x_k+\alpha_kp_k,\lambda_{k+1})-\nabla_x\mathcal{L}(x_k,\lambda_{k+1})].\end{aligned} 类似地, 略去交叉项 Z k T x x 2 L k + 1 Y k α k p Y Z_k^T\nabla^2_{xx}\mathcal{L}_{k+1}Y_k\alpha_kp_Y , 于是有满足割线方程的 M k M_k : M k + 1 s k = y k , M_{k+1}s_k=y_k, 其中 s k = α k p Z , y k = Z k T [ x L ( x k + α k p k , λ k + 1 ) x L ( x K , λ k + 1 ) ] . s_k=\alpha_kp_Z,\quad y_k=Z_k^T[\nabla_x\mathcal{L}(x_k+\alpha_kp_k,\lambda_{k+1})-\nabla_x\mathcal{L}(x_K,\lambda_{k+1})]. 于是我们便可以将BFGS或SR1公式应用于这些校正向量 s k , y k s_k,y_k 上, 从而定义 M k + 1 M_{k+1} . 此既约Hessian阵方法较于之前介绍的(满)拟牛顿近似的优势在于, 既约Hessian阵更有可能正定(即使当前迭代点距离解有一定的距离). 而当使用BFGS公式时, 上述阻滞机制往往就没那么必要.

3.4 迭代步的接收——价值函数

SQP算法通常使用价值函数决定是否接收一个试探步. 在线搜索算法中, 价值函数控制步长的大小; 而在信赖域算法中, 它决定当前的迭代步是否被接收以及当前的信赖域半径是否应当有所调整. 在SQP算法中有许多可以使用的价值函数, 包括非光滑罚函数和增广Lagrange函数. 我们仅讨论第十五章第十七章的精确、非光滑的 l 1 l_1 价值函数.

为方便, 不等式约束 c ( x ) 0 c(x)\ge0 通常被转换成以下形式: c ˉ ( x , s ) = c ( x ) s = 0 , \bar c(x,s)=c(x)-s=0, 其中 s 0 s\ge0 为松弛变量. (条件 s 0 s\ge0 通常不被价值函数控制.) 因此, 在后面的讨论中, 我们假设所有的约束都是等式约束.

l 1 l_1 价值函数具有形式 ϕ 1 ( x ; μ ) = f ( x ) + μ c ( x ) 1 . \phi_1(x;\mu)=f(x)+\mu\Vert c(x)\Vert_1. 线搜索算法中, 若 α k p k \alpha_kp_k 满足以下充分下降条件, 它就会被接收: ϕ 1 ( x k + α k p k ; μ k ) ϕ 1 ( x k ; μ k ) + η α k D ( ϕ 1 ( x k ; μ ) ; p k ) , η ( 0 , 1 ) , \phi_1(x_k+\alpha_kp_k;\mu_k)\le\phi_1(x_k;\mu_k)+\eta\alpha_kD(\phi_1(x_k;\mu);p_k),\quad\eta\in(0,1), 其中 D ( ϕ 1 ( x k ; μ ) ; p k ) D(\phi_1(x_k;\mu);p_k) 表示 ϕ 1 \phi_1 p k p_k 上的方向导数. 这类似于无约束优化中的Armijo条件(若 D ( ϕ 1 ( x k ; μ ) ; p k ) < 0 D(\phi_1(x_k;\mu);p_k)<0 ). 我们下面证明, 若惩罚因子 μ \mu 充分大, 则 p k p_k 是下降方向.

定理2 p k , λ k + 1 p_k,\lambda_{k+1} 由SQP迭代产生. 于是 ϕ 1 \phi_1 p k p_k 上的方向导数满足 D ( ϕ 1 ( x k ; μ ) ; p k ) = f k T p k μ c k 1 . D(\phi_1(x_k;\mu);p_k)=\nabla f_k^Tp_k-\mu\Vert c_k\Vert_1. 进一步, 我们有 D ( ϕ 1 ( x k ; μ ) ; p k ) p k T x x 2 L k p k ( μ λ k + 1 ) c k 1 . D(\phi_1(x_k;\mu);p_k)\le-p_k^T\nabla^2_{xx}\mathcal{L}_kp_k-(\mu-\Vert\lambda_{k+1}\Vert_{\infty})\Vert c_k\Vert_1. 证明: 由Taylor定理, 我们有 ϕ 1 ( x k + α p ; μ ) ϕ 1 ( x k ; μ ) = f ( x k + α p ) f k + μ c ( x k + α p ) 1 μ c k 1 α f k T p + γ α 2 p 2 + μ c k + α A k p 1 μ c k 1 , \begin{aligned}\phi_1(x_k+\alpha p;\mu)-\phi_1(x_k;\mu)&=f(x_k+\alpha p)-f_k+\mu\Vert c(x_k+\alpha p)\Vert_1-\mu\Vert c_k\Vert_1\\&\le\alpha\nabla f_k^Tp+\gamma\alpha^2\Vert p\Vert^2+\mu\Vert c_k+\alpha A_kp\Vert_1-\mu\Vert c_k\Vert_1,\end{aligned} 其中 γ \gamma f , c f,c 二阶导数的界. 若 p = p k p=p_k 满足KKT方程, 则有 A k p k = c k A_kp_k=-c_k , 于是对 α 1 \alpha\le 1 我们有 ϕ 1 ( x k + α p k ; μ ) ϕ 1 ( x k ; μ ) α [ f k T p k μ c k 1 ] + α 2 γ p k 2 . \phi_1(x_k+\alpha p_k;\mu)-\phi_1(x_k;\mu)\le\alpha[\nabla f_k^Tp_k-\mu\Vert c_k\Vert_1]+\alpha^2\gamma\Vert p_k\Vert^2. 类似有下界: ϕ 1 ( x k + α p k ; μ ) ϕ 1 ( x k ; μ ) α [ f k T p k μ c k 1 ] α 2 γ p k 2 . \phi_1(x_k+\alpha p_k;\mu)-\phi_1(x_k;\mu)\ge\alpha[\nabla f_k^Tp_k-\mu\Vert c_k\Vert_1]-\alpha^2\gamma\Vert p_k\Vert^2. 取极限, 即可得 D ( ϕ 1 ( x k ; μ ) ; p k ) = f k T p k μ c k 1 . D(\phi_1(x_k;\mu);p_k)=\nabla f_k^Tp_k-\mu\Vert c_k\Vert_1. 而由 p k p_k 满足的式子可得 D ( ϕ 1 ( x k ; μ ) ; p k ) = p k T x x 2 L k p k + p k T A k T λ k + 1 μ c k 1 . D(\phi_1(x_k;\mu);p_k)=-p_k^T\nabla^2_{xx}\mathcal{L}_kp_k+p_k^TA_k^T\lambda_{k+1}-\mu\Vert c_k\Vert_1. 而从KKT方程的第二行, p k T A k T λ k + 1 p_k^TA_k^T\lambda_{k+1} 就可用 c k T λ k + 1 -c_k^T\lambda_{k+1} 代替. 再利用不等式 c k T λ k + 1 c k 1 λ k + 1 , -c_k^T\lambda_{k+1}\le\Vert c_k\Vert_1\Vert\lambda_{k+1}\Vert_{\infty}, 就证明了结论.

利用上面的定理, 若 ϕ k 0 , x x 2 L k \phi_k\ne0,\nabla^2_{xx}\mathcal{L}_k 正定, 则当 μ > λ k + 1 \mu>\Vert\lambda_{k+1}\Vert_{\infty} 时, p k p_k 就是一下降方向. 事实上, 加在 x x 2 L k \nabla^2_{xx}\mathcal{L}_k 上的条件可以放松——我们只需既约Hessian阵 Z k T x x 2 L k Z k Z_k^T\nabla^2_{xx}\mathcal{L}_kZ_k 正定. 下面关注惩罚因子的更新策略.

  1. 一种更新 ϕ 1 ( x ; μ ) \phi_1(x;\mu) 的惩罚因子 μ \mu 的策略是, (若需要则)增加前一次的值. 然而现已知这样的策略可能会选取不合适的 μ \mu 且经常会影响迭代的进程.

  2. 一种替代的策略是要求方向导数充分负: D ( ϕ 1 ( x k ; μ ) ; p k ) = f k T p k μ c k 1 ρ μ c k 1 , ρ ( 0 , 1 ) . D(\phi_1(x_k;\mu);p_k)=\nabla f_k^Tp_k-\mu\Vert c_k\Vert_1\le-\rho\mu\Vert c_k\Vert_1,\quad\rho\in(0,1). 于是 μ f k T p k ( 1 ρ ) c k 1 . \mu\ge\frac{\nabla f_k^Tp_k}{(1-\rho)\Vert c_k\Vert_1}. 此方式不依赖于Lagrange乘子, 且在实际应用中表现良好.

  3. 一种更加高效的选取方式则是考虑迭代步对价值函数模型的影响. 这适用于线搜索和信赖域的框架. 我们定义 ϕ 1 \phi_1 的(分段)二次模型为 q μ ( p ) = f k + f k T p + σ 2 p T x x 2 L k p + μ m ( p ) , q_{\mu}(p)=f_k+\nabla f_k^Tp+\frac{\sigma}{2}p^T\nabla^2_{xx}\mathcal{L}_kp+\mu m(p), 其中 m ( p ) = c k + A k p k 1 , m(p)=\Vert c_k+A_kp_k\Vert_1, σ \sigma 为待定的参数. 计算出 p k p_k 后, 我们选取充分大的惩罚因子 μ \mu 使得 q μ ( 0 ) q μ ( p k ) ρ μ [ m ( 0 ) m ( p k ) ] , ρ ( 0 , 1 ) . q_{\mu}(0)-q_{\mu}(p_k)\ge\rho\mu[m(0)-m(p_k)],\quad \rho\in(0,1). 整理可得 μ f k T p k + ( σ / 2 ) p k T x x 2 L k p k ( 1 ρ ) c k 1 . \mu\ge\frac{\nabla f_k^Tp_k+(\sigma/2)p_k^T\nabla^2_{xx}\mathcal{L}_kp_k}{(1-\rho)\Vert c_k\Vert_1}. 若前一次迭代的 μ \mu 满足上式, 则就不改变. 否则就增大 μ \mu 满足不等式并超过一定的边界.
    这里的常数 σ \sigma 用于处理 x x 2 L k \nabla^2_{xx}\mathcal{L}_k 不正定的情形. 我们定义 σ = { 1 , p k T x x 2 L k p k > 0 , 0 , o t h e r w i s e . \sigma=\left\{\begin{array}{ll}1, & p_k^T\nabla^2_{xx}\mathcal{L}_kp_k>0,\\0, & otherwise.\end{array}\right. 易验证, 若 μ \mu 满足条件, 此 σ \sigma 的选取将保证 D ( ϕ 1 ( x k ; μ ) ; p k ) ρ μ c k 1 D(\phi_1(x_k;\mu);p_k)\le-\rho\mu\Vert c_k\Vert_1 , 于是 p k p_k ϕ 1 \phi_1 的下降方向. 反过来, 这一结论对 σ = 1 , p k T x x 2 L k p k < 0 \sigma=1,p_k^T\nabla^2_{xx}\mathcal{L}_kp_k<0 不一定对.

比较后两种方案, 我们会发现当 σ > 0 \sigma>0 , 则最后一种方案将选取更大的惩罚因子, 从而给约束违反置更大的权重. 这一性质在 p k p_k 减小约束违反度却增大目标值时具有优势, 这是因为这时迭代步将更容易由价值函数所接受.

3.5 Maratos效应与二阶校正

第十五章, 我们用例4说明许多价值函数可能会阻碍优化算法的进程, 比如一种现象称为是Maratos效应. 我们现在说明, 当时的迭代步就是由SQP算法产生的.

例1 (Ch15. Example 4, revisited) 考虑问题 min f ( x 1 , x 2 ) = 2 ( x 1 2 + x 2 2 1 ) x 1 , s u b j e c t   t o   x 1 2 + x 2 2 1 = 0. \min f(x_1,x_2)=2(x_1^2+x_2^2-1)-x_1,\quad\mathrm{subject\,to\,}x_1^2+x_2^2-1=0. 在迭代点 x k = ( cos θ , sin θ ) T x_k=(\cos\theta,\sin\theta)^T , 我们通过求解SQP子问题(以 x x 2 L ( x , λ ) = I \nabla^2_{xx}\mathcal{L}(x^*,\lambda^*)=I 代替 x x 2 L k \nabla^2_{xx}\mathcal{L}_k )得到 p k p_k . 因 f k = cos θ , f k = [ 4 cos θ 1 4 sin θ ] , A k T = [ 2 cos θ 2 sin θ ] , f_k=-\cos\theta,\quad\nabla f_k=\begin{bmatrix}4\cos\theta-1\\4\sin\theta\end{bmatrix},\quad A_k^T=\begin{bmatrix}2\cos\theta\\2\sin\theta\end{bmatrix}, 于是二次子问题为 min p ( 4 cos θ 1 ) p 1 + 4 sin θ p 2 + 1 2 p 1 2 + 1 2 p 2 2 s u b j e c t   t o p 2 + cot θ p 1 = 0. \begin{array}{rl}\min\limits_p & (4\cos\theta-1)p_1+4\sin\theta p_2+\frac{1}{2}p_1^2+\frac{1}{2}p_2^2\\\mathrm{subject\,to} & p_2+\cot\theta p_1=0.\end{array} 求解子问题, 即得方向 p k = [ sin 2 θ sin θ cos θ ] . p_k=\begin{bmatrix}\sin^2\theta\\-\sin\theta\cos\theta\end{bmatrix}. 我们在第十五章提到, Maratos效应可由二阶校正克服. 下面我们介绍一种可能的实施方案.

假设SQP算法已计算出迭代步 p k p_k , 而它却增加了价值函数 ϕ 1 \phi_1 . 一个可能的原因是我们使用线性近似约束不够精确. 为此, 我们可以先用约束的二次近似 c i ( x k ) + c i ( x k ) T p + 1 2 p T 2 c i ( x k ) p c_i(x_k)+\nabla c_i(x_k)^Tp+\frac{1}{2}p^T\nabla^2c_i(x_k)p 替代线性模型 c i ( x k ) + c i ( x k ) T c_i(x_k)+\nabla c_i(x_k)^T , 预解系统. 然而即使约束的Hessian可以获取, 但最终得到的二次约束子问题可能会过难求解. 于是, 我们先计算约束在新点 x k + p k x_k+p_k 处的值, 之后利用近似 c i ( x k + p k ) c i ( x k ) + c i ( x k ) T p k + 1 2 p k T 2 c i ( x k ) p k . c_i(x_k+p_k)\approx c_i(x_k)+\nabla c_i(x_k)^Tp_k+\frac{1}{2}p_k^T\nabla^2c_i(x_k)p_k. 假设(现还未知的)二阶步 p p 不会和 p k p_k 差太多, 于是我们可以近似最后一项: p T 2 c i ( x k ) p = p k T 2 c i ( x k ) p k . p^T\nabla^2c_i(x_k)p=p_k^T\nabla^2c_i(x_k)p_k. 整理后, 即可得二阶校正子问题: min p f k T p + 1 2 p T x x 2 L k p s u b j e c t   t o c i ( x k ) T p + d i = 0 , i E , c i ( x k ) T p + d i 0 , i I , \begin{array}{rl}\min\limits_p & \nabla f_k^Tp+\frac{1}{2}p^T\nabla^2_{xx}\mathcal{L}_kp\\\mathrm{subject\,to} & \nabla c_i(x_k)^Tp+d_i=0, \quad i\in\mathcal{E},\\&\nabla c_i(x_k)^Tp+d_i\ge0,\quad i\in\mathcal{I},\end{array} 其中 d i = c i ( x k + p k ) c i ( x k ) T p k , i E I . d_i=c_i(x_k+p_k)-\nabla c_i(x_k)^Tp_k,\quad i\in\mathcal{E}\cup\mathcal{I}. 可见以上二阶校正步 p p 的定义与第十五章中是相合的. 二阶校正步需要计算约束值 c i ( x k + p k ) , i E I c_i(x_k+p_k),i\in\mathcal{E}\cup\mathcal{I} , 因此并不是每次价值函数增加我们都要去二阶校正. 一种策略是在价值函数和约束违反度同时增加时, 再去二阶校正.

可以证明, 当SQP算法产生了 p k p_k , 则在一满足二阶充分条件的解附近, 以上算法将接收 p k p_k 或校正步 p k + p ^ k p_k+\hat p_k . 因此价值函数就不会影响迭代, 算法具有如局部算法一样的超线性收敛性.

4. 实用线搜索SQP算法

从先前的讨论中, 我们知道各种SQP算法的不同在于如何计算Hessian的近似、迭代步的接收机制以及一些其他的算法特征上. 现在我们介绍一种求解非线性规划问题的具体的、实用的SQP算法. 为说明简单, 我们不考虑加入处理约束不相容以及二阶校正的机制, 而是仅仅求解子问题. 假设二次规划的子问题是凸的, 从而可以使用第十六章中二次规划的积极集法.

算法3 (Line Search SQP Algorithm)
Choose parameters η ( 0 , 0.5 ) , τ ( 0 , 1 ) \eta\in(0,0.5),\tau\in(0,1) , and an initial pair ( x 0 , λ 0 ) (x_0,\lambda_0) ;
Evaluate f 0 , f 0 , c 0 , A 0 f_0,\nabla f_0,c_0,A_0 ;
If a quasi-Newton approximation is used, choose an initial n × n n\times n symmetric positive definite Hessian approximation B 0 B_0 , otherwise compute x x 2 L 0 \nabla^2_{xx}\mathcal{L}_0 ;
repeat until a convergence test is satisfied
\quad\quad Compute p k p_k by solving subproblem using active-set method; let λ ^ \hat\lambda be the corresponding multiplier;
\quad\quad Set p λ λ ^ λ k p_{\lambda}\leftarrow\hat\lambda-\lambda_k ;
\quad\quad Choose μ k \mu_k to satisfy μ k f k T p k + ( σ / 2 ) p k T x x 2 L k p k ( 1 ρ ) c k 1 \mu_k\ge\frac{\nabla f_k^Tp_k+(\sigma/2)p_k^T\nabla^2_{xx}\mathcal{L}_kp_k}{(1-\rho)\Vert c_k\Vert_1} \quad\quad with σ = 1 \sigma=1
\quad\quad Set α k 1 \alpha_k\leftarrow1 ;
\quad\quad while ϕ 1 ( x k + α k p k ; μ k ) > ϕ 1 ( x k ; μ k ) + η α k D ( ϕ 1 ( x k ; μ k ) ; p k ) \phi_1(x_k+\alpha_kp_k;\mu_k)>\phi_1(x_k;\mu_k)+\eta\alpha_kD(\phi_1(x_k;\mu_k);p_k)
\quad\quad\quad\quad Reset α k τ α α k \alpha_k\leftarrow\tau_{\alpha}\alpha_k for some τ α ( 0 , τ ] \tau_{\alpha}\in(0,\tau] ;
\quad\quad end (while)
\quad\quad Set x k + 1 x k + α k p k x_{k+1}\leftarrow x_k+\alpha_kp_k and λ k + 1 λ k + α k p λ \lambda_{k+1}\leftarrow\lambda_k+\alpha_kp_{\lambda} ;
\quad\quad Evaluate f k + 1 , f k + 1 , c k + 1 , A k + 1 f_{k+1},\nabla f_{k+1},c_{k+1},A_{k+1} , (and possibly x x 2 L k + 1 \nabla^2_{xx}\mathcal{L}_{k+1} );
\quad\quad If a quasi-Newton approximation is used, set s k α k p k y k x L ( x k + 1 , λ k + 1 ) x L ( x k , λ k + 1 ) , s_k\leftarrow\alpha_kp_k\quad y_k\leftarrow\nabla_x\mathcal{L}(x_{k+1},\lambda_{k+1})-\nabla_x\mathcal{L}(x_k,\lambda_{k+1}), \quad\quad and obtain B k + 1 B_{k+1} by updating B k B_k using a quasi-Newton formula;
end (repeat)

若使用热启动, 我们在二次子问题的求解上可以节省巨大的存储量. 例如, 我们可以初始化每个QP的工作集为上一步SQP迭代最后的积极集.

对于上述算法中的拟牛顿近似, 我们可以使用有限内存BFGS算法. 若使用精确的Hessian阵 x x 2 L k \nabla^2_{xx}\mathcal{L}_k , 则我们假设其经过了必要的修改, 从而在等式约束的零空间上是正定的.

除了价值函数, 我们也可以在内部的"while"循环中使用滤子(可见第十五章)决定步长 α k \alpha_k . 也正如第十五章说明的, 若由回溯线搜索得到的试探步长小于给定的阈值, 则需调用一次可行性恢复阶段. 同时, 不论是使用价值函数还是滤子, 譬如二阶校正的机制都可以用来克服Maratos效应.

5. 信赖域SQP算法

信赖域SQP算法由许多吸引人的性质. 比如

  • 它们不需要Hessian阵 x x 2 L k \nabla^2_{xx}\mathcal{L}_k 正定;
  • 它们可以在Hessian和Jacobi阵奇异的情形下控制迭代步的质量;
  • 它们提供了一种强制全局收敛的机制.

一些嵌套了IQP算法, 而另一些则与EQP算法结合.

构造信赖域SQP算法的最简单的方式就是给二次子问题增加信赖域约束: min p f k + f k T p + 1 2 p T x x 2 L k p s u b j e c t   t o c i ( x k ) T p + c i ( x k ) = 0 , i E , c i ( x k ) T p + c i ( x k ) 0 , i I , p Δ k . \begin{array}{rl}\min\limits_p & f_k+\nabla f_k^Tp+\frac{1}{2} p^T\nabla^2_{xx}\mathcal{L}_kp\\\mathrm{subject\,to} & \nabla c_i(x_k)^Tp+c_i(x_k)=0,\quad i\in\mathcal{E},\\&\nabla c_i(x_k)^Tp+c_i(x_k)\ge0,\quad i\in\mathcal{I},\\&\Vert p\Vert\le\Delta_k.\end{array} 即使等式和不等式约束的线性化相容, 此问题也可能因信赖域约束的存在而无解. 一个例子可见下图.Inconsistent constraints in trust-region model

此例中仅包含一个等式约束, 其线性化由实直线表示. 此时任何满足线性化约束的 p p 必定位于信赖域之外.
为解决约束线性化和信赖域约束的矛盾, 单纯增加 δ k \delta_k 直至约束相容并不合适. 这种方法会破坏我们使用信赖域约束最初的目的, 即定义一个区域, 在其中我们相信模型可以较准确地反映目标函数和约束函数的性态. 进一步, 这样的方法会影响算法的收敛性质.

一种更加合理的看法是, 我们没有理由要每一步都精确满足满足线性约束, 而应当是在每一步改善可行性, 并仅在信赖域约束满足的前提下要求精确性. 这种观点是本节要介绍的三类方法的基础: 松弛方法(relaxation methods)、罚函数方法(penalty methods)、滤子法(filter methods).

5.1 求解等式约束优化的一个松弛方法

我们以等式约束问题介绍此方法. 其向一般非线性规划的拓展可见下一章, 因为这会用到内点法的技术.

在迭代点 x k x_k , 我们通过求解以下子问题计算SQP迭代步: min p f k + f k T p + 1 2 p T x x 2 L k p s u b j e c t   t o A k p + c k = r k , p 2 Δ k . \begin{array}{rl}\min\limits_p & f_k+\nabla f_k^Tp+\frac{1}{2}p^T\nabla^2_{xx}\mathcal{L}_kp\\\mathrm{subject\,to} & A_kp+c_k=r_k,\\&\Vert p\Vert_2\le\Delta_k.\end{array} 松弛向量 r k r_k 的选取需要仔细考量, 这会影响到算法的效率. 我们的目标是选取最小的使得约束相容的 r k r_k . 为此我们首先求解附加子问题 min v A k v + c k 2 2 s u b j e c t   t o v 2 0.8 Δ k . \begin{array}{rl}\min\limits_v & \Vert A_kv+c_k\Vert_2^2\\\mathrm{subject\,to} & \Vert v\Vert_2\le0.8\Delta_k.\end{array} 记此子问题的解为 v k v_k , 我们定义 r k = A k v k + c k . r_k=A_kv_k+c_k. 之后求解信赖域子问题得 p k p_k , 定义新迭代点 x k + 1 = x k + p k x_{k+1}=x_k+p_k , 再用最小二乘公式得新的乘子估计 λ k + 1 \lambda_{k+1} .

乍一看, 这种方法并不是很实用. 这是因为信赖域子问题和附加子问题并不是很好求解, 特别是当 x x 2 L k \nabla^2_{xx}\mathcal{L}_k 不定时. 幸运的是, 我们对这些问题可以设计计算有用的求不精确解的程序.

我们可用第四章的折线算法求解附加的子问题. 此法需要计算Cauchy点 p U p^U , 即目标函数沿当前点处负梯度 A k T c k -A_k^Tc_k 的极小点, 以及牛顿步 p B p^B , 即目标函数的无约束极小点. 由于目标函数的Hessian阵奇异, 因此 p B p^B 有无穷多选取的方式, 它们均满足 A k p B + c k = 0 A_kp^B+c_k=0 . 我们选取具有最小欧式范数的, 即 p B = A k T [ A k A k T ] 1 c k . p^B=-A_k^T[A_kA_k^T]^{-1}c_k. 之后令 v k v_k 为目标函数在由 p U , p B p^U,p^B 定义路径上的极小点. 求解信赖域子问题的近似解 p k p_k 我们倾向使用第十六章的投影CG. 应用算法时, 我们需要监控信赖域约束, 在搜索触碰边界或是遇到负曲率时停止搜索. 注意投影CG需要可行的初始点, 我们可以选 v k v_k .

适用于此方法的一个价值函数为非光滑 l 2 l_2 函数 ϕ 2 ( x ; μ ) = f ( x ) + μ c ( x ) 2 \phi_2(x;\mu)=f(x)+\mu\Vert c(x)\Vert_2 . 我们将其近似为(实际上也是从信赖域子问题得到的) q μ ( p ) = f k + f k T p + 1 2 p T x x 2 L k p + μ m ( p ) , q_{\mu}(p)=f_k+\nabla f_k^Tp+\frac{1}{2}p^T\nabla^2_{xx}\mathcal{L}_kp+\mu m(p), 其中 m ( p ) = c k + A k p 2 . m(p)=\Vert c_k+A_kp\Vert_2. 其中惩罚因子的选取满足 μ f k T p k + ( σ / 2 ) p k T x x 2 L k p k ( 1 ρ ) c k 1 . \mu\ge\frac{\nabla f_k^Tp_k+(\sigma/2)p_k^T\nabla^2_{xx}\mathcal{L}_kp_k}{(1-\rho)\Vert c_k\Vert_1}. 为评估 p k p_k 的可接受程度, 我们将计算比值 ρ k = a r e d k p r e d k = ϕ 2 ( x k , μ ) ϕ 2 ( x k + p k , μ ) q μ ( 0 ) q μ ( p k ) . \rho_k=\frac{\mathrm{ared}_k}{\mathrm{pred}_k}=\frac{\phi_2(x_k,\mu)-\phi_2(x_k+p_k,\mu)}{q_{\mu}(0)-q_{\mu}(p_k)}. 下面给出求解等式约束问题的信赖域SQP算法.

算法4 (Byrd-Omojokun Trust-Region SQP Method)
Choose constants ϵ > 0 , η , γ ( 0 , 1 ) \epsilon>0,\eta,\gamma\in(0,1) ;
Choose starting point x 0 x_0 , initial trust region Δ 0 > 0 \Delta_0>0 ;
for k = 0 , 1 , 2 , k=0,1,2,\ldots
\quad\quad Compute f k , c k , f k , A k f_k,c_k,\nabla f_k,A_k ;
\quad\quad Compute multiplier estimates λ ^ k \hat\lambda_k : λ ^ k = ( A k A k T ) 1 A k f k . \hat\lambda_{k}=(A_kA_k^T)^{-1}A_k\nabla f_k. \quad\quad if f k A k T λ ^ k < ϵ \Vert \nabla f_k-A_k^T\hat\lambda_k\Vert_{\infty}<\epsilon and c k < ϵ \Vert c_k\Vert_{\infty}<\epsilon
\quad\quad\quad\quad stop with approximate solution x k x_k ;
\quad\quad Solve auxiliary subproblem for v k v_k and compute r k r_k ;
\quad\quad Compute x x 2 L k \nabla^2_{xx}\mathcal{L}_k or a quasi-Newton approximation;
\quad\quad Compute p k p_k by applying the projected CG method;
\quad\quad Choose μ k \mu_k ;
\quad\quad Compute ρ k = a r e d k / p r e d k \rho_k=\mathrm{ared}_k/\mathrm{pred}_k ;
\quad\quad if ρ k > η \rho_k>\eta
\quad\quad\quad\quad Set x k + 1 = x k + p k x_{k+1}=x_k+p_k ;
\quad\quad\quad\quad Choose Δ k + 1 \Delta_{k+1} to satisfy Δ k + 1 Δ k \Delta_{k+1}\ge\Delta_k ;
\quad\quad else
\quad\quad\quad\quad Set x k + 1 = x k x_{k+1}=x_k ;
\quad\quad\quad\quad Choose Δ k + 1 \Delta_{k+1} to satisfy Δ k + 1 γ p k \Delta_{k+1}\le\gamma\Vert p_k\Vert ;
end (for)

我们可以加上二阶校正避免Maratos效应. 除了计算目标函数 f f 和约束 c c , 此算法主要的成本在于投影CG迭代上, 它需要计算Hessian阵 x x 2 L k \nabla^2_{xx}\mathcal{L}_k 与向量的乘积以及投影矩阵的分解和回代. 可见第十六章.

5.2 逐步 l 1 l_1 二次规划(S l 1 l_1 QP)

本小节我们将线性化后的约束以 l 1 l_1 惩罚项的形式, 加入二次规划的目标函数, 从而得到以下子问题: min p q μ ( p ) = d e f f k + f k T p + 1 2 p T x x 2 L k p + μ i E c i ( x k ) + c i ( x k ) T p + μ i I [ c i ( x k ) + c i ( x k ) T p ] s u b j e c t   t o p Δ k , \begin{array}{rl}\min\limits_p & q_{\mu}(p)\xlongequal{def}f_k+\nabla f_k^Tp+\frac{1}{2}p^T\nabla^2_{xx}\mathcal{L}_kp+\mu\sum\limits_{i\in\mathcal{E}}|c_i(x_k)+\nabla c_i(x_k)^Tp|+\mu\sum\limits_{i\in\mathcal{I}}[c_i(x_k)+\nabla c_i(x_k)^Tp]^{-}\\\mathrm{subject\,to} & \Vert p\Vert_{\infty}\le\Delta_k,\end{array} 其中 μ \mu 为惩罚因子, [ y ] = max { 0 , y } [y]^{-}=\max\{0,-y\} . 引入松弛变量, 我们可重构问题如下: min p , v , w , t f k + f k T p + 1 2 p T x x 2 L k p + μ i E ( v i + w i ) + μ i I t i s u b j e c t   t o c i ( x k ) T p + c i ( x k ) = v i w i , i E , c i ( x k ) T p + c i ( x k ) t i , i I , v , w , t 0 , p Δ k . \begin{array}{rl}\min\limits_{p,v,w,t} & f_k+\nabla f_k^Tp+\frac{1}{2}p^T\nabla^2_{xx}\mathcal{L}_kp+\mu\sum\limits_{i\in\mathcal{E}}(v_i+w_i)+\mu\sum\limits_{i\in\mathcal{I}}t_i\\\mathrm{subject\,to} & \nabla c_i(x_k)^Tp+c_i(x_k)=v_i-w_i,\quad i\in\mathcal{E},\\&\nabla c_i(x_k)^Tp+c_i(x_k)\ge-t_i,\quad i\in\mathcal{I},\\&v,w,t\ge0,\\&\Vert p\Vert_{\infty}\le\Delta_k.\end{array} 此构造就是弹性模式的线性化, 并加上了一个信赖域约束.

此问题的约束总是相容的. 由于信赖域用 l l_{\infty} 范数定义, 所以上述问题是一个光滑的二次规划, 可以用二次规划的算法求解. 热启动可以显著减少求解的时间, 在实际实施总是被使用.

基于以上, 我们很自然地选取价值函数为 l 1 l_1 价值函数 ϕ 1 ( x ; μ ) = f ( x ) + μ E c i ( x ) + μ i I [ c i ( x ) ] . \phi_1(x;\mu)=f(x)+\mu\sum_{\in\mathcal{E}}|c_i(x)|+\mu\sum_{i\in\mathcal{I}}[c_i(x)]^{-}. 事实上, 上述信赖域子问题中的目标函数就可以视作 ϕ 1 ( x , μ ) \phi_1(x,\mu) x k x_k 的近似.

解信赖域子问题得 p k p_k 后, 再计算比值 ρ k \rho_k . 我们可用类似于算法4的规则接受或拒绝迭代步. 同时二阶校正步可用于避免Maratos效应.

S l 1 l_1 QP算法由许多吸引人的性质. 比如

  • 避免了约束的不相容;
  • 保证了信赖域约束总能被满足;
  • 矩阵 x x 2 L k \nabla^2_{xx}\mathcal{L}_k 可不用修改(或使用拟牛顿近似). 算法不需正定性.

因罚函数的特殊性, 惩罚因子 μ \mu 的选取就至关重要. 不像之前介绍的SQP算法, 它们仅使用罚函数决定是否接收试探点, S l 1 l_1 QP算法的 p k p_k 本身就依赖于 μ \mu . 可见第十七章第二节. 如果 μ \mu 太小, 则算法可能会远离解; 若太大则会进程缓慢. 为在广泛的应用上获得较好的使用表现, 我们应当谨慎选取 μ \mu 的值. 可见下面的算法5.

5.3 逐步线性二次规划(SLQP)

以上讨论的SQP算法需要在每步迭代求解一般的(带不等式约束的)二次规划. 而求解这一子问题的成本限制了实际中可以求解问题的规模. 另外, 现已证实让SQP算法包含(不定)二阶导数信息是困难的.

逐步线性二次规划(sequential linear-quadratic programming, SLQP)算法则尝试通过两阶段计算克服这些问题, 而这两个阶段均能很好地根据变量的数量进行尺度变换. 第一阶段, 求解一个线性规划得到工作集 W \mathcal{W} . 第二阶段, 将第一阶段中确定的工作集中的约束全部变为等式约束, 忽略工作集外的约束, 求解一个等式约束二次规划(EQP阶段). 算法得到的迭代步就是这两个阶段得到的迭代步的组合.

5.3.1 LP阶段

在LP阶段, 我们要求解以下问题: min p f k + f k T p s u b j e c t   t o c i ( x k ) + c i ( x k ) T p = 0 , i E , c i ( x k ) + c i ( x k ) T p 0 , i I , p Δ k L P , \begin{array}{rl}\min\limits_p & f_k+\nabla f_k^Tp\\\mathrm{subject\,to} & c_i(x_k)+\nabla c_i(x_k)^Tp=0,\quad i\in\mathcal{E},\\& c_i(x_k)+\nabla c_i(x_k)^Tp\ge0,\quad i\in\mathcal{I},\\&\Vert p\Vert_{\infty}\le\Delta_k^{\mathrm{LP}},\end{array} 这与标准的SQP子问题差了目标函数中的二阶项, 而且这里使用了 l l_{\infty} 范数定义信赖域. 由于上述约束可能不相容, 我们就求解以下 l 1 l_1 重构问题: min p l μ ( p ) = d e f f k + f k T p + μ i E c i ( x k ) + c i ( x k ) T p + μ i I [ c i ( x k ) + c i ( x k ) T p ] s u b j e c t   t o p Δ k L P . \begin{array}{rl}\min\limits_p & l_{\mu}(p)\xlongequal{def}f_k+\nabla f_k^Tp+\mu\sum\limits_{i\in\mathcal{E}}|c_i(x_k)+\nabla c_i(x_k)^Tp|+\mu\sum\limits_{i\in\mathcal{I}}[c_i(x_k)+\nabla c_i(x_k)^Tp]^{-}\\\mathrm{subject\,to} & \Vert p\Vert_{\infty}\le\Delta_k^{\mathrm{LP}}.\end{array} 通过引入松弛变量, 我们还可以将上面重构为LP问题. 我们可用第十三章中的单纯形法求解, 记解为 p L P p^{\mathrm{LP}} . 由此得到以下最优积极集的显式估计: A k ( p L P ) = { i E c i ( x k ) + c i ( x k ) T p L P = 0 } { i I c i ( x k ) + c i ( x k ) T p L P = 0 } . \mathcal{A}_k(p^{\mathrm{LP}})=\{i\in\mathcal{E}\mid c_i(x_k)+\nabla c_i(x_k)^Tp^{\mathrm{LP}}=0\}\cup\{i\in\mathcal{I}\mid c_i(x_k)+\nabla c_i(x_k)^Tp^{\mathrm{LP}}=0\}. 类似地, 定义违反约束集 V k \mathcal{V}_k V k ( p L P ) = { i E c i ( x k ) + c i ( x k ) T p L P 0 } { i I c i ( x k ) + c i ( x k ) T p L P < 0 } . \mathcal{V}_k(p^{\mathrm{LP}})=\{i\in\mathcal{E}\mid c_i(x_k)+\nabla c_i(x_k)^Tp^{\mathrm{LP}}\ne0\}\cup\{i\in\mathcal{I}\mid c_i(x_k)+\nabla c_i(x_k)^Tp^{\mathrm{LP}}<0\}. 我们定义工作集 W k \mathcal{W}_k 为积极集 A k ( p L P ) \mathcal{A}_k(p^{\mathrm{LP}}) 线性无关子集. 为确保算法改进罚函数 ϕ 1 \phi_1 的值, 我们定义Cauchy步, p C = α L P p L P , p^C=\alpha^{\mathrm{LP}}p^{\mathrm{LP}}, 其中 α L P ( 0 , 1 ] \alpha^{\mathrm{LP}}\in(0,1] 为使得模型 q μ q_{\mu} 充分下降的步长.

5.3.2 EQP阶段

给定工作集 W k \mathcal{W}_k , 在第二阶段我们要求解等式约束二次规划(EQP): min p f k + 1 2 p T x x 2 L k p + ( f k + μ k i V k γ i c i ( x k ) ) T p s u b j e c t   t o c i ( x k ) + c i ( x k ) T p = 0 , i E W k , c i ( x k ) + c i ( x k ) T p = 0 , i I W k , p 2 Δ k , \begin{array}{rl}\min\limits_p & f_k+\frac{1}{2}p^T\nabla^2_{xx}\mathcal{L}_kp+\left(\nabla f_k+\mu_k\sum\limits_{i\in\mathcal{V}_k}\gamma_i\nabla c_i(x_k)\right)^Tp\\\mathrm{subject\,to} & c_i(x_k)+\nabla c_i(x_k)^Tp=0,\quad i\in\mathcal{E}\cap\mathcal{W}_k,\\& c_i(x_k)+\nabla c_i(x_k)^Tp=0,\quad i\in\mathcal{I}\cap\mathcal{W}_k,\\&\Vert p\Vert_2\le\Delta_k,\end{array} 其中 γ i \gamma_i 为第 i i 个违反约束的代数符号. 注意这里的信赖域是球形的, 且 Δ k \Delta_k 与LP问题中用的 Δ k L P \Delta_k^{\mathrm{LP}} 不同. 我们可结合投影CG和Steihaug策略求解问题, 得到向量 p Q p^Q . 于是SLQP算法给出的迭代步 p k p_k p k = p C + α Q ( p Q p C ) , p_k=p^C+\alpha^Q(p^Q-p^C), 其中 α Q [ 0 , 1 ] \alpha^Q\in[0,1] 为近似极小化 q μ q_{\mu} 的步长.

EQP阶段使用的信赖域半径 Δ k \Delta_k 可使用标准的信赖域更新策略更新. 而LP阶段的半径 Δ k + 1 L P \Delta_{k+1}^{\mathrm{LP}} 就更需斟酌. 它会影响我们对最优积极集的估计. Δ k + 1 L P \Delta_{k+1}^{\mathrm{LP}} 应当设为比 p k p_k 稍大些, 同时还需受限于其他条件. 在Hessian阵 x x 2 L k \nabla^2_{xx}\mathcal{L}_k 中使用的乘子估计 λ k \lambda_k 则可用基于工作集 W k \mathcal{W}_k 的最小二乘估计, 同时对 i I i\in\mathcal{I} 修改满足 λ i 0 \lambda_i\ge0 .

SLQP算法的一个吸引人的特点时, 求解大规模的LP和EQP子问题的技术可以直接调用. 高质量的LP软件可以处理具有大量变量和约束的LP问题, 而EQP子问题则可以用投影CG高效求解.

5.4 一种更新惩罚因子的技术

l 1 l_1 罚函数的特点, 我们之前提到诸如S l 1 l_1 QP和SLQP的罚函数法可能对惩罚因子 μ \mu 比较敏感. 我们现在介绍一种选取 μ \mu 的程序, 它已被证实在实际使用中高效, 且能保证全局收敛性的.

我们的目标是选取 μ \mu 足够小以避免价值函数中不必要的不平衡, 而又足够大使得每步迭代均能充分改进线性化的可行性. 我们以S l 1 l_1 QP算法为例展开说明, 之后再介绍对于SLQP的推广.

我们在 x k x_k 定义约束违反度的一个分段线性模型: m k ( p ) = i E c i ( x k ) + c i ( x k ) T p + i I [ c i ( x k ) + c i ( x k ) T p ] , m_k(p)=\sum_{i\in\mathcal{E}}|c_i(x_k)+\nabla c_i(x_k)^Tp|+\sum_{i\in\mathcal{I}}[c_i(x_k)+\nabla c_i(x_k)^Tp]^{-}, 因此SQP子问题的目标函数可以写作 q μ ( p ) = f k + f k T p + 1 2 p T x x 2 L k p + μ m k ( p ) . q_{\mu}(p)=f_k+\nabla f_k^Tp+\frac{1}{2}p^T\nabla^2_{xx}\mathcal{L}_kp+\mu m_k(p). 我们先使用前一次迭代的 μ k 1 \mu_{k-1} , 求解QP子问题.

  • 若最终松弛变量 v i , w i , t i v_i,w_i,t_i 均为0(即 m k ( p k ) = 0 m_k(p_k)=0 ), 则当前 μ \mu 就是合适的, 我们置 μ k = μ k 1 \mu_k=\mu_{k-1} . 这种情形是最好的, 我们可以以长度不超过信赖域半径的 p k p_k 满足线性化的可行性.
  • m k ( p ) > 0 m_k(p)>0 , 则可能需要增大惩罚因子. 问题是增大多少. 为得到参考值, 我们使用无穷大的 μ \mu (即目标函数为 m k ( p ) m_k(p) )重新求解QP. 计算新的迭代步 p p_{\infty} 后, 有两种可能的结果.
    1. m k ( p ) = 0 m_k(p_{\infty})=0 , 这就意味着线性化约束与信赖域相容, 我们就选取 μ k > μ k 1 \mu_k>\mu_{k-1} 使得 m k ( p k ) = 0 m_k(p_k)=0 .
    2. 否则, 选取 μ k μ k 1 \mu_k\ge\mu_{k-1} 使得 m k m_k p k p_k 上的下降至少是由 p p_{\infty} 给出的下降的分数倍.

选取合适的 μ k : μ k > μ k 1 \mu_k:\mu_k>\mu_{k-1} 往往需要不断地增大当前的试探值并重新求解二次规划. 为说明得更精确, 我们将QP问题的解写作 p ( μ ) p(\mu) 以强调它对惩罚因子的依赖. 类似, p p_{\infty} 表示 m k ( p ) m_k(p) 在信赖域约束下的极小点. 下面的算法阐述了惩罚因子 μ k \mu_k 的选取方式以及S l 1 l_1 QP迭代步 p k p_k 的计算.

算法5 (Penalty Update and Step Computation)
Initial data: x k , μ k 1 > 0 , Δ k > 0 x_k,\mu_{k-1}>0,\Delta_k>0 , and parameters ϵ 1 , ϵ 2 ( 0 , 1 ) \epsilon_1,\epsilon_2\in(0,1) .
Solve the subproblem with μ = μ k 1 \mu=\mu_{k-1} to obtain p ( μ k 1 ) p(\mu_{k-1}) ;
if m k ( p ( μ k 1 ) ) = 0 m_k(p(\mu_{k-1}))=0
\quad\quad Set μ + μ k 1 \mu^+\leftarrow\mu_{k-1} ;
else
\quad\quad Compute p p_{\infty} ;
\quad\quad if m k ( p ) = 0 m_k(p_{\infty})=0
\quad\quad\quad\quad Find μ + > μ k 1 \mu^+>\mu_{k-1} such that m k ( p ( μ + ) ) = 0 m_k(p(\mu^+))=0 ;
\quad\quad else
\quad\quad\quad\quad Find μ + μ k 1 \mu^+\ge\mu_{k-1} such that
\quad\quad\quad\quad\quad\quad m k ( 0 ) m k ( p ( μ + ) ) ϵ 1 [ m k ( 0 ) m k ( p ) ] m_k(0)-m_k(p(\mu^+))\ge\epsilon_1[m_k(0)-m_k(p_{\infty})] ;
\quad\quad end (if)
end (if)
Increase μ + \mu^+ if necessary to satisfy q μ + ( 0 ) q μ + ( p ( μ + ) ) ϵ 2 μ + [ m k ( 0 ) m k ( p ( μ + ) ) ] ; q_{\mu^+}(0)-q_{\mu^+}(p(\mu^+))\ge\epsilon_2\mu^+[m_k(0)-m_k(p(\mu^+))]; Set μ k μ + \mu_k\leftarrow \mu^+ and p k p ( μ + ) p_k\leftarrow p(\mu^+) .

注意倒数第二行的不等式与先前3.4节中的条件相同. 尽管算法5需要求解额外的二次规划, 但我们有希望减少总的迭代数(以及总的需求解的QP数量). 在识别合适惩罚因子这个方面, 这要比第十七章仅关注可行性的框架2更快.

数值实验表明以上这些"希望"在算法5在SLQP算法的拓展上得到了印证. 其中仅需将 x x 2 L k \nabla^2_{xx}\mathcal{L}_k 置0, 再将算法5用于确定 μ \mu 和计算LP步 p L P p^{\mathrm{LP}} . 这里算法5需要求解额外的LP, 而这些成本并不高, 毕竟我们还有先前求解LP的解作为热启动.

6. 非线性投影梯度法

第十六章, 我们讨论了对带界约束的二次规划的投影梯度法. 现将此算法拓展至求解问题 min f ( x ) , s u b j e c t   t o   l x u , \min f(x),\quad\mathrm{subject\,to\,} l\le x\le u, 其中 f f 为一非线性函数, l , u l,u 分别为下界和上界约束向量.

6.1 线搜索

我们先讨论线搜索. 在当前迭代点 x k x_k , 我们构建二次模型 q k ( x ) = f k + f k T ( x x k ) + 1 2 ( x x k ) T B k ( x x k ) , q_k(x) = f_k+\nabla f_k^T(x-x_k)+\frac{1}{2}(x-x_k)^TB_k(x-x_k), 其中 B k B_k 2 f ( x ) \nabla^2f(x) 的正定近似. 之后就可使用二次规划的投影梯度法求解, 得到子问题 min q k ( x ) , s u b j e c t   t o   l x u \min q_k(x),\quad\mathrm{subject\,to\,}l\le x\le u 的近似解 x ^ \hat x . 搜索方向定义为 p k = x ^ x k p_k=\hat x-x_k , 新迭代点为 x k + 1 = x k + α k p k x_{k+1}=x_k+\alpha_kp_k , 其中步长 α k \alpha_k 满足 f ( x k + α k p k ) f ( x k ) + η α k f k T p k , η ( 0 , 1 ) . f(x_k+\alpha_kp_k)\le f(x_k)+\eta\alpha_k\nabla f_k^Tp_k,\quad\eta\in(0,1). 下面说明这样得到的 p k p_k 的确是目标函数的下降方向. 回忆一下, 这个算法首先沿着分段线性路径——投影最速下降路径——找到 q k q_k 的极小点Cauchy点 x C x^C . 接着判定约束积极的分量位置, 并将它们固定, 对剩下的变量做子空间极小, 最终得到子问题的近似解.

若投影梯度非零, 则Cauchy点 x C x^C 满足 q k ( x C ) < q k ( x k ) q_k(x^C)<q_k(x_k) . 因投影梯度法产生的子问题近似解 x ^ \hat x 满足 q k ( x ^ ) q k ( x C ) q_k(\hat x)\le q_k(x^C) , 于是我们有 f k = q k ( x k ) > q k ( x C ) q k ( x ^ ) = f k + f k T p k + 1 2 p k T B k p k . f_k=q_k(x_k)>q_k(x^C)\ge q_k(\hat x)=f_k+\nabla f_k^Tp_k+\frac{1}{2}p_k^TB_kp_k. B k B_k 正定, 所以 f k T p k < 0 \nabla f_k^Tp_k<0 .

6.2 信赖域

再考虑信赖域投影梯度法. 我们同样构建二次模型, 但无需 q k q_k 是凸的, 因此我们可以定义 B k B_k 为Hessian阵 2 f ( x k ) \nabla^2f(x_k) 或由BFGS、SR1公式得来的拟牛顿近似矩阵. 迭代步 p k p_k 则是由求解子问题 min q k ( x ) , s u b j e c t   t o   { l x u , x x k Δ k } \min q_k(x),\quad\mathrm{subject\,to\,}\{l\le x\le u,\Vert x-x_k\Vert_{\infty}\le\Delta_k\} 得来. 此问题可进一步写成界约束的二次规划: min q k ( x ) , s u b j e c t   t o   max ( l , x k Δ k e ) x min ( u , x k + Δ k e ) . \min q_k(x),\quad\mathrm{subject\,to\,}\max(l,x_k-\Delta_ke)\le x\le\min(u,x_k+\Delta_ke). 同样的, 二次规划的投影梯度法可以派上用场. 注意 p k p_k 需由标准信赖域策略判定接收或是拒绝, Δ k \Delta_k 也需由函数与模型下降的比值进行调整.

以上大概介绍的两个投影梯度法需要在每次迭代求解不等式约束的二次规划子问题, 因此形式上是IQP算法. 不过由于使用了二次规划投影梯度法, 它们也可以视为EQP算法. 此算法首先通过Cauchy点识别一个工作集, 之后求解一等式约束子问题, 最后将解投影回约束. 对于大型问题, 用共轭梯度法做子空间极小是相当高效的. 有时我们需要预处理使算法更加地实用. 这其中最广为使用的是不完全(或修改)Cholesky分解. 可见第七章.

投影梯度法原则上可以拓展到更加一般的(线性或凸的)约束. 而实际中的实施往往局限于界约束的问题, 这是因为计算到一般约束集的投影成本较高.

7. 收敛性分析

数值实验表明, SQP和SLQP算法均能从较远的初始点出发收敛到解. 这就引发了对收敛性的研究. 这些研究在提升算法的设计和实施效用上是有价值的.

一些早期的结论需要很强的假设, 例如乘子的有界性, 子问题的是定性和约束Jacobi阵的正则性(或光滑性). 近期许多研究都弱化了这些假设. 现在我们给出一个全局收敛性的结果, 它给出了标准SQP算法找到非线性规划KKT点的条件.

考虑一SQP算法, 它通过求解二次规划子问题得到搜索方向 p k p_k . 假设子问题中 x x 2 L k \nabla^2_{xx}\mathcal{L}_k 由某个对称正定 B k B_k 代替. 新迭代点为 x k + α k p k x_k+\alpha_kp_k , 其中 α k \alpha_k 使用回溯线搜索得到, 搜索从单位步长出发, 当 ϕ 1 ( x k + α k p k ; μ ) ϕ 1 ( x k ; μ ) η α k ( q μ ( 0 ) q μ ( p k ) ) , η ( 0 , 1 ) \phi_1(x_k+\alpha_kp_k;\mu)\le\phi_1(x_k;\mu)-\eta\alpha_k(q_{\mu}(0)-q_{\mu}(p_k)),\quad\eta\in(0,1) 时终止. 为建立收敛性的结果, 我们假设每个二次规划子问题都是可行的, 且会确定出一个有界解 p k p_k . 我们还假定惩罚因子 μ \mu 对所有 k k 都相同且充分大.

定理3 将SQP算法用于求解非线性规划. 假设序列 { x k } \{x_k\} { x k + p k } \{x_k+p_k\} 被包含在 R n \mathbb{R}^n 的一个有界闭凸集中, f , c i f,c_i 有连续一阶导数. 假设 B k B_k 和乘子有界, μ \mu 满足 μ λ k + ρ , k \mu\ge\Vert\lambda_k\Vert_{\infty}+\rho,\forall k , 其中 ρ \rho 为一正常数. 则 { x k } \{x_k\} 的所有聚点均是非线性规划的KKT点.

此定理的结论十分令人满意, 但假设条件有点严格. 例如 { x k + p k } \{x_k+p_k\} 位于一有界集内就排除了 B k B_k 或约束Jacobi阵病态的可能. 更加现实情形下的全局收敛性可见A. R. Conn, N. I. M. Gould和P. L. Toint2.

7.1 收敛速度

下面推导保证SQP算法局部收敛性的条件. 我们仅讨论对等式约束优化的算法1, 考虑精确Hessian阵和拟牛顿近似. 在积极集达最优后, 这里给出的结果亦可用于不等式约束问题的算法.

我们先列出一些假设条件.

假设2 等式约束问题局部解 x x^* 满足以下条件:

  1. 函数 f , c f,c x x^* 的一个邻域内二次可微且二阶导数Lipschitz连续.
  2. x x^* 处LICQ成立. 这表明KKT条件对某个乘子向量 λ \lambda^* 成立.
  3. ( x , λ ) (x^*,\lambda^*) 成立二阶充分条件.

我们首先考虑使用精确二阶导数的SQP算法.

定理4 假设假设2成立. 若 ( x 0 , λ 0 ) (x_0,\lambda_0) 充分靠近 ( x , λ ) (x^*,\lambda^*) , 则由算法1产生的 ( x k , λ k ) (x_k,\lambda_k) 二次收敛于 ( x , λ ) (x^*,\lambda^*) .

证明可从第十一章的定理2直接推得.

对于算法1的拟牛顿版本, Lagrange函数的Hessian阵 x x 2 L ( x k , λ k ) \nabla^2_{xx}\mathcal{L}(x_k,\lambda_k) 由一个拟牛顿近似 B k B_k 所替代. 我们在第三节例讨论了使用对(满)Hessian近似的算法和保持对既约Hessian阵 Z k T x x 2 L ( x k , λ k ) Z k Z_k^T\nabla^2_{xx}\mathcal{L}(x_k,\lambda_k)Z_k 近似的既约Hessian阵算法. 这里假设 Z k Z_k n × ( n m ) n\times (n-m) A k A_k 的零空间矩阵, 且列是相互正交的.

在KKT系统的第一行左乘 Z k T Z_k^T , 我们有 Z k T x x 2 L k p k = Z k T f k . Z_k^T\nabla^2_{xx}\mathcal{L}_kp_k=-Z_k^T\nabla f_k. 这与第二行 A k p k = c k A_kp_k=-c_k x k , λ k x_k,\lambda_k 离最优不远时足以确定 p k p_k . 换句话说, 只有投影Hessian阵 Z k T x x 2 L k Z_k^T\nabla^2_{xx}\mathcal{L}_k 的部分是有用的, 而 x x 2 L k \nabla^2_{xx}\mathcal{L}_k 剩下的部分(即在 A k T A_k^T 值域上的投影)在决定 p k p_k 的时候用处并不大.

在上式左端乘以 Z k Z_k 并定义投影到 A k A_k 的零空间的投影矩阵 P k P_k : P k = I A k T [ A k A k T ] 1 A k = Z k Z k T , P_k=I-A_k^T[A_kA_k^T]^{-1}A_k=Z_kZ_k^T, 我们就等价地有 P k x x 2 L k p k = P k f k . P_k\nabla^2_{xx}\mathcal{L}_kp_k=-P_k\nabla f_k. 于是结合定理4, 这说明拟牛顿法在拟牛顿矩阵 B k B_k 使得 P k B k P_kB_k P k x x 2 L k P_k\nabla^2_{xx}\mathcal{L}_k 的合理近似时, 是局部收敛的, 且在近似地较好时, 可能会超线性收敛. 更确切地, 我们给出一个可以视为是无约束向等式约束问题拓展的拟牛顿收敛定理. 以下, 用 x x 2 L \nabla^2_{xx}\mathcal{L}_* 表示 x x 2 L ( x , λ ) \nabla^2_{xx}\mathcal{L}(x^*,\lambda^*) .

定理5 假设假设2的条件成立, { x k } \{x_k\} 由算法1产生, 其中使用拟牛顿矩阵 B k B_k , x k x_k 收敛于 x x^* . 则 x k x_k 超线性收敛当且仅当 B k B_k 满足 lim k P k ( B k x x 2 L ) ( x k + 1 x k ) x k + 1 x k = 0. \lim_{k\to\infty}\frac{\Vert P_k(B_k-\nabla^2_{xx}\mathcal{L}_*)(x_{k+1}-x_k)\Vert}{\Vert x_{k+1}-x_k\Vert}=0.

我们可以将这个结果用于本章更早些提到的拟牛顿更新格式, 其中 s k = x k + 1 x k , y k = x L ( x k + 1 , λ k + 1 ) x L ( x k , λ k + 1 ) . s_k=x_{k+1}-x_k,\quad y_k=\nabla_x\mathcal{L}(x_{k+1},\lambda_{k+1})-\nabla_x\mathcal{L}(x_k,\lambda_{k+1}). 为确保BFGS近似总是良定的, 我们假设在解处Lagrange函数的Hessian是正定的.

定理6 假设假设2的条件成立. 设 x x 2 L \nabla^2_{xx}\mathcal{L}_* B 0 B_0 对称正定. 若 x 0 x \Vert x_0-x^*\Vert B 0 x x 2 L \Vert B_0-\nabla^2_{xx}\mathcal{L}_*\Vert 充分小, 且序列 { x k } \{x_k\} 由算法1产生, 其中使用拟牛顿近似 B k B_k ( r k = s k r_k=s_k ), 满足 lim k P k ( B k x x 2 L ) ( x k + 1 x k ) x k + 1 x k = 0. \lim_{k\to\infty}\frac{\Vert P_k(B_k-\nabla^2_{xx}\mathcal{L}_*)(x_{k+1}-x_k)\Vert}{\Vert x_{k+1}-x_k\Vert}=0. x k x_k 超线性收敛于 x x^* .

对于程序2给出的阻滞BFGS更新策略, 我们可以证明其R-超线性收敛速度, 但通常并没有Q-超线性收敛.

现在考虑更新对 Z k T x x 2 L k Z k Z_k^T\nabla^2_{xx}\mathcal{L}_kZ_k 近似的 M k M_k 的既约HessianSQP算法. 从 P k P_k 的定义中, 我们知道 Z k M k Z k T Z_kM_kZ_k^T 可视作双边投影阵 P k x x 2 L k p k P_k\nabla^2_{xx}\mathcal{L}_kp_k 的近似. 由于既约Hessian阵算法并不近似单边投影阵 P k x x 2 L k P_k\nabla^2_{xx}\mathcal{L}_k , 因此之前的极限式就不一定成立. 对于这种方法, 我们专门给出超线性收敛的条件: lim k [ P k ( B k x x 2 L ) P k ( x k + 1 x k ) x k + 1 x k + P k ( B k x x 2 L ) ( I P k ) ( x k + 1 x k ) x k + 1 x k ] = 0 , \lim_{k\to\infty}\left[\frac{P_k(B_k-\nabla^2_{xx}\mathcal{L}_*)P_k(x_{k+1}-x_k)}{\Vert x_{k+1}-x_k\Vert}+\frac{P_k(B_k-\nabla^2_{xx}\mathcal{L}_*)(I-P_k)(x_{k+1}-x_k)}{\Vert x_{k+1}-x_k\Vert}\right]=0, 并定义 B k = Z k M k Z k T B_k=Z_kM_kZ_k^T . 下面的结论表明若要达到一种弱化的超线性收敛——两步超线性收敛, 我们有必要使得上面极限中的第一项趋于0.

定理7 假设假设2的第一条成立, B k B_k 有界. { x k } \{x_k\} 由算法1产生, 其中使用近似Hessian阵 B k B_k , x k x x_k\to x^* , 且有 lim k P k ( B k x x 2 L ) P k ( x k + 1 x k ) x k + 1 x k = 0. \lim_{k\to\infty}\frac{\Vert P_k(B_k-\nabla^2_{xx}\mathcal{L}_*)P_k(x_{k+1}-x_k)}{\Vert x_{k+1}-x_k\Vert}=0. x k x_k 两步超线性收敛于 x x^* , 即 lim k x k + 2 x x k x = 0. \lim_{k\to\infty}\frac{\Vert x_{k+2}-x^*\Vert}{\Vert x_k-x^*\Vert}=0. 在使用BFGS更新的既约Hessian阵方法中, 迭代格式为 x k + 1 = x k + Y k p Y + Z k p Z x_{k+1}=x_k+Y_kp_Y+Z_kp_Z , 其中 Z k T x x 2 L k Z k Z_k^T\nabla^2_{xx}\mathcal{L}_kZ_k M k M_k 替代. 既约Hessian近似 M k M_k 由BFGS公式使用校正向量更新, 初始近似 M 0 M_0 对称正定. 若用于定义校正向量的零空间矩阵 Z k Z_k 变化较为"平滑", 我们就可用定理7说明 x k x_k 两步超线性收敛.


  1. Robinson S M . Perturbed Kuhn-Tucker points and rates of convergence for a class of nonlinear-programming algorithms[J]. Mathematical Programming, 1974, 7(1):1-16. ↩︎

  2. A. R. Conn, N. I. M. Gould and P. L. Toint, Trust-Region Methods, MPS-SIAM Series for Optimization, SIAM, 2000. ↩︎

猜你喜欢

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