Skip to content

算法Algorithm

序列二次规划

Sequential quadratic programming · SQP

将非线性约束线性化,以 Lagrangian 的曲率构造局部 QP,并通过乘子更新和罚函数验收控制真实约束误差。

形式陈述 ​

先考虑二次连续可微的等式约束优化问题

minf(x),c(x)=0,L(x,λ)=f(x)+λTc(x).

在 (xk,λk),记 gk=∇f(xk)、Jk=Jc(xk),选取实对称 Bk 近似 ∇xx2L(xk,λk)。先固定 Jk 满行秩、Bk 在 ker⁡Jk 上正定的分支:线性化等式可行,且下面的 QP 在该仿射空间上有唯一最小点。序列二次规划每轮解

minp gkTp+12pTBkp,c(xk)+Jkp=0.

令 λ^k 为这个 QP 的等式乘子,则它的方程为

(BkJkTJk0)(pkλ^k)=(−gk−c(xk)).

这里的 λ^k 是新的乘子候选,不是乘子增量。完整步为 xk+1=xk+pk,λk+1=λ^k;阻尼步可取 xk+1=xk+αpk、λk+1=λk+α(λ^k−λk)。

若还有 giineq(x)≤0,QP 加入 giineq(xk)+∇giineq(xk)Tp≤0。把这些线性不等式记为 Ap≤b,并假设已有同时满足等式与不等式的 QP 可行初值 p0。在上述 Jk 满行秩、Bk 在 ker⁡Jk 上正定的分支,取该核的满列秩基矩阵 Z,令 p=p0+Zz,就把等式消去。去掉常数项后的子问题是

minz 12zT(ZTBkZ)z+[ZT(gk+Bkp0)]Tz,AZz≤b−Ap0.

当 Z 至少有一列时,约化 Hessian ZTBkZ 正定,且 z=0 是可行初值,因而可调用只接收线性不等式的活跃集法,并遵守该页的独立工作行与退化处理约定。若 ker⁡Jk={0},等式已把步唯一固定为 p0,无须 QP 迭代。没有可行初值或缺少所需曲率时,需要匹配的恢复或内层方法;不能只把块驻点方程的任意解称为 QP 最小点。内层求得 z 及按原不等式行顺序排列的乘子 ν 后,先恢复 p=p0+Zz,再解

JkTλ^k=−gk−Bkp−ATν.

约化驻点式使右端正交于 ker⁡Jk,因而属于 imJkT;Jk 满行秩又保证 λ^k 唯一。这样得到原 QP 的完整乘子候选,供外层阻尼更新使用。零维核的分支可取 ν=0,再由同一方程恢复等式乘子。原函数与约束的非线性没有消失,而是要在下一轮重新线性化。

直觉

约束曲面先被切平面替代。目标的线性项决定沿切平面的推动,二次项衡量沿这张局部约束几何移动的成本。曲面本身也在弯,因此正确的二阶信息来自目标与约束共同组成的 Lagrangian,而不只是 ∇2f。

QP 给出在直线约束上合理的步,真实曲面却在步末偏离那条直线。即使从可行点出发,新点一般也会不可行;小步的误差是二阶量,但大步的二阶量可以很大。外层的作用是同时管理目标下降和真实违约。

线性化可行不等于真实可行
例子与边界

一步 QP,完整步被拒绝,半步通过 ​

取

f(x,y)=(x−2)2+y2,c(x,y)=x2+y2−1.

从可行点 z0=(3/5,4/5) 与乘子 λ0=1/5 出发。此时

g0=(−14/5,8/5)T,J0=(6/5,8/5),B0=2(1+λ0)I=125I.

QP 要求 (3/5)px+(4/5)py=0。解块方程得到

p=(16/15,−4/5),λ^=1/5.

核对 J0p=0,但完整候选 z0+p=(5/3,0) 的真实约束误差为 16/9。对单位圆,因 c(z0)=0,J0p=0,恰有

c(z0+αp)=α2‖p‖2=169α2.

采用精确 ℓ1 罚作验收函数 Φ(z)=f(z)+2|c(z)|。当前点的函数值为 Φ(z0)=13/5。完整候选虽然把目标降到 1/9,违约罚金却使 Φ(z0+p)=11/3,所以拒绝。

取半步,得到 z+=(17/15,2/5)、c(z+)=4/9、f(z+)=41/45,于是 Φ(z+)=9/5。在当前可行点,方向导数为

Φ′(z0;p)=g0Tp+2|J0p|=−64/15.

以 Armijo 系数 10−1 检查半步:

95≤135+11012(−6415)=17975.

因此半步通过。新点仍不在圆上,下一轮必须重新计算约束与 Jacobian,不能宣布可行性已经恢复。

若只用目标 Hessian ​

本例 ∇2f=2I。若把它替换进同一个 QP,方向变成 (32/25,−24/25),长度为 8/5,比 Lagrangian 步的 4/3 更大。这个方向依然满足切线约束,但完整步的圆约束误差为 64/25。忽略约束曲率改变了算法,即使偶尔仍能下降,也不再是对完整 KKT 方程的精确 Newton 步。

最优点为 (1,0),对应 λ∗=1。目标 Hessian 是 2I,而该点 Lagrangian Hessian 是 4I;约束曲率在极限处也没有自动消失。

推论与应用

从 KKT Newton 方程推导 SQP ​

等式KKT 方程写作

F(x,λ)=(∇f(x)+Jc(x)Tλc(x))=0.

它的 Jacobian 为

JF=(∇xx2LJcTJc0).

对 F=0 作Newton 迭代,未知量是 (p,δλ)。把第一行的 JcTλ 移项,并令 λ^=λ+δλ,就得到前面 QP 的块方程。这一步直接解释了为何二阶块必须是 ∇2L。

设解处 Jc 满行秩,并且 B∗=∇xx2L(x∗,λ∗) 在 ker⁡Jc 上正定。若块矩阵把 (u,v) 映为零,第二行给出 Jcu=0;第一行左乘 uT 得 uTB∗u=0,故 u=0,再由满行秩得 v=0。因此 KKT Jacobian 非奇异。若它在邻域内 Lipschitz 连续,精确完整步从足够近的初值出发便有局部至少二次的误差上界。仅有 C2 连续性时,不能凭空添加同样的二次速率。

全局化需要额外规则 ​

对等式罚函数 Φρ=f+ρ‖c‖1,QP 的线性化约束给出 Jp=−c,其方向导数满足

Φρ′(x;p)=∇f(x)Tp−ρ‖c(x)‖1.

若 B≻0 且 ρ>‖λ^‖∞,由 QP 驻点式可得

Φρ′(x;p)≤−pTBp−(ρ−‖λ^‖∞)‖c(x)‖1<0

除非方向与违约都为零。这为回溯验收提供下降方向。原始精确 Lagrangian Hessian 未必全空间正定;全局化版本可以作曲率修正,或使用明确的信赖域 QP。修改后的算法要按自己的假设分析。

线性化还可能根本不可行。例如 c(x)=x2−1 在 x=0 给出 −1+0p=0,无解。此时应触发约束恢复或弹性 QP,而不是尝试求一个不存在的方向。即使靠近正则解,ℓ1 验收也可能因二阶约束误差拒绝完整 Newton 步,即 Maratos 现象;二阶校正可用于恢复快速局部行为。前面的局部完整步定理不自动保证任意罚函数线搜索最终都接受一步。

计算与终止 ​

等式版本直接稠密分解的成本为 O((n+m)3);不等式 QP 还有工作集或内点迭代的成本。拟 Newton 版本可用BFGS近似 Lagrangian 曲率,但梯度差应在同一个新乘子下比较两个原变量位置,而不是机械使用目标梯度差。

最终需要检查真实原约束、乘子符号、互补性和 Lagrangian 驻点残差。QP 内层已经收敛,只说明局部模型被解好;一个很小的阻尼步,也可能只是罚函数或线性化出了问题。记录这两层状态,才能判断应继续 SQP、改善内层精度,还是进入约束恢复。

参考资料
关系图谱10 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系