文档维护:Arvin
网页部署:Arvin
▶
写在前面:本文内容是作者在深蓝学院机器人中的数值优化学习时的笔记,作者按照自己的理解进行了记录,如果有错误的地方还请执政。如涉侵权,请联系删除。
有约束优化(笔记)
分类
低维线性规划(LP)
目标函数:
f(x1,x2…xd)=c1x1+c2x2+⋯+cdxd
约束:
a1,1x1+⋯+a1,dxd⩽b1a2,1x1+⋯+a2,dxd⩽b2an,1x1+⋯+an,dxd⩽bn
每个约束表示Rd中的一个半空间,半空间的交集形成可行域,可行域是Rd中的凸多面体。
我们使c=(c1,c2,…cd)(即目标函数梯度),沿此方向最前的那个点vopt就是LP问题的解。
一维
目标函数:
f(x)=cx
约束:
a1x⩽b1a2x⩽b2⋮anx⩽bn⋮
二维:
当新约束的半空间包含原可行域时,vopt不变。
其伪代码如下:
低维二次规划(QP)
目标函数及约束(考虑严格凸低维QP问题):
x∈Rnmin21xTMQx+cQTx, s.t. AQx≤bQ
因为是严格凸的,所以MQ≻0,且是对称的所以可以进行分解:
MQ=LQLQT
我们将其构造成求最小范数问题:
y∈Rnmin21yTy, s.t. Ey≤f
其中:
E=AQLQ−T,f=AQ(LQLQT)−1cQ+bQ
是如何构造成上述形式呢?
y=LQTx+LQ−1cQorx=LQ−Ty−(LQLQT)−1cQ
即我们先求得最小范数问题的解y∗,再根据上式求得x∗。
如下图所示:
其伪代码为:
约束优化的三种序列无约束优化方法
外点罚函数法
参考链接:内点罚函数和外点罚函数的优缺点
简而言之,外点罚函数法是指对于可行域外的点,惩罚项为正,即对该点进行惩罚;对于可行域内的点,惩罚项为0,即不做任何惩罚。因此,该算法在迭代过程中点列一般处于可行域之外,惩罚项会促使无约束优化问题的解落在可行域内。罚函数一般由约束部分乘正系数组成,通过增大该系数,我们可以更严厉地惩罚违反约束的行为,从而迫使惩罚函数的最小值更接近约束问题的可行区域。
L2−PenaltyFunction:EqualityConstrainedCase
只具有等式约束的规划问题:
minxs.t.f(x)ci(x)=0,i∈E
该规划问题的惩罚函数为:
PE(x,σ)=f(x)+21σi∈E∑ci2(x)
红色部分是二次惩罚函数,其中σ是惩罚权重。
一般的,随着惩罚权重的增加,无约束的最小值接近受约束的最小值。
σ→+∞limargminxPE(x,σ)=argminxf(x),s.t.ci(x)=0,i∈E
L2−PenaltyFunction:InequalityConstrainedCase
对于不等式约束的规划问题:
mins.t.f(x)ci(x)⩽0,i∈I
其惩罚函数为:
PI(x,σ)=f(x)+21σi∈I∑max[ci(x),0]2
同样的上述式子的红色部分是二次惩罚项,但是其二阶导数不是连续的。
随着惩罚权重的增加,无约束的最小值接近受约束的最小值。
σ→+∞limargminxPI(x,σ)=argminxf(x),s.t.ci(x)≤0,i∈I
优点:
- 将约束优化问题转化为无约束优化问题,当ci(x)光滑时可以调用一般的无约束光滑优化问题算法求解;
- 二次罚函数形式简洁直观而在实际中广泛使用。
缺点:
- 需要$\sigma\rightarrow\infty $,此时海瑟矩阵条件数过大,对于无约束优化问题的数值方法拟牛顿法与共轭梯度法存在数值困难,且需要多次迭代求解子问题;
- 对于存在不等式约束的P(x,σ)可能不存在二次可微性质,光滑性降低;
- 不精确,与原问题最优解存在距离。
L1−PenaltyFunction:Exactness
由于L2-罚函数法存在数值困难,并且与原问题的解存在误差,因此考虑精确罚函数法。精确罚函数是一种问题求解时不需要令罚因子趋于正无穷(或零)的罚函数。换句话说,若罚因子选取适当,对罚函数进行极小化得到的解恰好就是原问题的精确解。这个性质在设计算法时非常有用,使用精确罚函数的算法通常会有比较好的性质。由于L1-罚函数非光滑,因此无约束优化问题P的收敛速度无法保证,这实际上就相当于用牺牲收敛速度的方式来换取优化问题P的精确最优解。
一般的具有约束的优化问题同时包含等式约束和不等式约束:
mins.t.f(x)ci(x)=0,cj(x)⩽0,i∈Ej∈I
其惩罚函数是:
P(x,σ)=f(x)+σi∈E∑∣ci(x)∣+σj∈I∑max[cj(x),0]
红色部分是L1惩罚函数,他的导数是不连续的。
有:
∃M∈R>0,∀σ>M,argminxP(x,σ)=argminxf(x),s.t.ci(x)=0,i∈E,cj(x)≤0,j∈I
内点罚函数法:障碍函数法
前面介绍的L1和L2罚函数均属于外点罚函数,即在求解过程中允许自变量x位于原问题可行域之外,当罚因子趋于无穷时,子问题最优解序列从可行域外部逼近最优解。自然地,如果我们想要使得子问题最优解序列从可行域内部逼近最优解,则需要构造内点罚函数。顾名思义,内点罚函数在迭代时始终要求自变量x不能违反约束,因此它主要用于不等式约束优化问题。
如下图所示,考虑含不等式约束的优化问题,为了使迭代点始终在可行域内,当迭代点趋于可行域边界时,我们需要罚函数趋于正无穷。常见的罚函数有三种:对数罚函数,逆罚函数和指数罚函数。对于原问题,它的最优解通常位于可行域边界,即ci(x)≤0中至少有一个取到等号,此时需要调整惩罚因子σ使其趋于0,这会减弱障碍罚函数在边界附近的惩罚效果。
不等式约束的规划问题:
mins.t.f(x)ci(x)⩽0,i∈I
三种障碍函数的式子为:
-
对数障碍函数:
Bln(x,σ)=f(x)−σi∈I∑ln(−ci(x))
-
逆障碍函数:
Binv(x,σ)=f(x)+σi∈I∑inv(−ci(x)),inv(x):=1/xifx>0
-
指数障碍函数:
Bexpi(x,σ)=f(x)+σi∈I∑expi(−ci(x)),expi(x):=e1/xifx>0
通常地,随着权重的衰减,无约束的最小值接近受约束的最小值
σ→0+limargminxB(x,σ)=argminxf(x),s.t. ci(x)≤0,i∈I
总结
如下图所示,无论是外点惩罚法或者是内点惩罚法,随着权重趋于无穷或者趋于0都会导致函数变得不光滑,海森矩阵条件数趋于无穷,因此使用数值方法(拟牛顿法等)求解会越来越困难。
等式约束优化问题的拉格朗日松弛法
参考链接:
“拉格朗日对偶问题”如何直观理解?
【数学】拉格朗日对偶,从0到完全理解_拉格朗日法对偶格式
等式约束凸优化问题:
minxs.t.f(x)Ax=b
拉格朗日函数:
L(x,λ):=f(x)+⟨λ,Ax−b⟩=f(x)+λT(Ax−b)
显然有:
λmaxf(x)+⟨λ,Ax−b⟩={f(x),Ax−b=0∞, otherwise
因此优化问题等价于,
xminf(x), s.t. Ax=b⟷xminλmaxL(x,λ)
约束优化问题的最优解正是拉格朗日的鞍点。
Uzawa’s Method
综上分析,Uzawa’s Method迭代过程分为两个步骤
{xk+1=argminL(x,λk)λk+1=λk+α(Axk+1−b)
- 给定λk,求解minxL(x,λk)无约束优化问题,求解得到xk+1
- 更新λ,L(xk+1,λ)关于λ的梯度为∂λ∂Lx+1=Axk+1−b,若要求解maxλL(xk+1,λ),则沿着梯度上升方向进入步长迭代,即λk+1=λk+α(Axk+1−b),σ为迭代步长。
该方法的前提就是原函数连续凸,L(x,λ)关于x严格凸,则minxL(x,λk)只存在一个最优解,可求出唯一xk+1进而更新λk+1,否则xk+1会存在多个,不知道选择哪个去更新λ。因此缺点很明显,该方法要求原函数必须为连续凸函数,梯度上升步长需要调整且收敛速率不能保证。
- 原始优化问题应该是凸的。
- 关于原始变量的拉格朗日函数应该是严格凸的。
- 对偶上升步长需要调整。
- 收敛速度不理想。
一般约束优化的方法
KKT条件
参考链接:Karush-Kuhn-Tucker (KKT)条件
Karush-Kuhn-Tucker (KKT)条件是非线性规划(nonlinear programming)最佳解的必要条件。KKT条件将Lagrange乘数法(Lagrange multipliers)所处理涉及等式的约束优化问题推广至不等式。在实际应用上,KKT条件(方程组)一般不存在代数解,许多优化算法可供数值计算选用。
一般的约束优化问题
minxs.t.f(x)hi(x)≤0,i=1,…,mℓj(x)=0,j=1,…,r
如果上述优化问题没有退化即不等式约束起了作用(这句话具体理解可以看参考链接),它的最优解满足:
-
stationarity
0∈∂x[f(x)+i=1∑muihi(x)+j=1∑rvjℓj(x)]
-
complementary slackness
ui⋅hi(x)=0,i=1,…,m
-
primal feasibility
hi(x)≤0,ℓj(x)=0,i=1,…,m,j=1,…,r
-
dual feasibility
ui≥0,i=1,…,m
Powell-Hestense-Rockafellar Augmented-Lagrangian-Method(PHR-ALM)
参考链接:
约束优化:PHR-ALM 增广拉格朗日函数法
“拉格朗日对偶问题”如何直观理解?
对于等式约束优化问题:
x∈Rnmins.t.f(x)h(x)=0
Uzawa的方法是对偶函数进行双梯度上升:
d(λ):=xminf(x)+λTh(x)
如果关于x的拉格朗日函数不是严格凸的,对偶函数就是非光滑的。那么其梯度就可能不存在,这是这种方法就会出现问题。
已知maxλf(x)+λTh(x)={f(x),h(x)=0∞, otherwise是一个不连续函数,如何处理这个不连续的函数,一个非常直观的方法就是将该问题近似成一个连续问题,这是PHR的基本思想。如何近似呢?增加一项2ρ1∥λ−λˉ∥2,用来近似平滑原来不连续的函数maxλf(x)+λTh(x),其中ρ>0用来惩罚λ与先验值λˉ之间的偏差。
xminλmaxf(x)+λTh(x)−2ρ1∥λ−λˉ∥2
这样一来,函数被近似成一个光滑函数,同时f(x)+λTh(x)是关于λ的线性函数,既是凸函数又是凹函数,而且−2ρ1∥λ−λˉ∥2是关于λ的严格凹函数,因此整个函数仍为严格凹,对于严格凹问题maxλf(x)+λTh(x)−2ρ1∥λ−λˉ∥2有唯一最优解λ∗满足:
∂λ∂{f(x)+λ⊤h(x)−2ρ1λ−λˉ2}=h(x)−ρ1(λ−λˉ)=0
可解得
λ∗(λˉ)=λˉ+ρh(x)
带入到原式中:
xminλmaxf(x)+λTh(x)−2ρ1∥λ−λˉ∥2=xminf(x)+λ∗(λˉ)Th(x)−2ρ1∥λ∗(λˉ)−λˉ∥2=xminf(x)+(λˉ+ρh(x))Th(x)−2ρ∥h(x)∥2=xminf(x)+λˉTh(x)+2ρ∥h(x)∥2
上述都是近似的过程,但是我们如何确保近似的精度呢?
- 减少近似权重,使ρ1→0或$\rho\to+\infty $
- 更新先验值λˉ←λ∗(λˉ)
对于等式约束的PHR更新方法:
x←argxminf(x)+λˉTh(x)+2ρ∥h(x)∥2λˉ←λˉ+ρh(x)
拉格朗日函数变为增广拉格朗日函数:
xminλmaxf(x)+2ρ∥h(x)∥2+λTh(x)
明显地,相应的原始问题变为
x∈Rnminf(x)+2ρ∥h(x)∥2s.t.h(x)=0
此时得到一个与原问题近似的无约束最优化问题,通过在原拉格朗日函数的基础之上增加一个增广项获得一个增广拉格朗日函数,来得到近似光滑且容易解的优化问题。
对于原本非凸等式约束优化问题:
x∈Rnmins.t.f(x)h(x)=0
其PHR增广拉格朗日函数的更常用等效形式为:
Lρ(x,λ):=f(x)+2ρh(x)+ρλ2
KKT解析可以通过以下方式解决:
⎩⎨⎧xk+1=argminxLρk(x,λk)λk+1=λk+ρkh(xk+1)ρk+1=min[(1+γ)ρk,β]
- pk迭代过程不是下降的,γ≥0,β>0,ρ0>0
- 不需要每次都求解很精确的xk,因为外循环会不断的细化λk和xk
对于不等式约束非凸优化问题:
对于不等式约束的非凸问题,核心思想是通过引入松弛变量s,将不等式约束转化为等式约束,然后再写成增广拉格朗日函数形式。如下图所示,引入松弛变量s,原问题维度从n维上升到n+m维。原问题为:
minx∈Rns.t.f(x)g(x)≤0
引入松弛变量后变为等式约束的非凸优化问题:
x∈Rn,s∈Rmminf(x)s.t.g(x)+[s]2=0
将转化后的问题写成增广拉格朗日函数形式:
x∈Rn,s∈Rmminf(x)+2ρg(x)+[s]2+ρλ2=x∈Rnmins∈Rmminf(x)+2ρg(x)+[s]2+ρλ2=x∈Rnminf(x)+2ρmax[g(x)+ρλ,0]2
为了与等式约束拉格朗日乘子区别开我们将λ写成μ
Lρ(x,μ):=f(x)+2ρmax[g(x)+ρμ,0]2
其中ρ>0,μ⪰0。PHR-ALM只是重复下降+对偶函数上升迭代。
⎩⎨⎧x←argminxLρ(x,λ,μ)λ←λ+ρh(x)μ←max[μ+ρg(x),0]ρ←min[(1+γ)ρ,β]
-
如何选择参数
ρini=1,λini=μini=0,γ=1,β=103
-
内层循环迭代停止条件,内层循环就是解无约束优化问题
∥∇xLρ(x,λ,μ)∥∞<ξkmin[1,max[∥h(x)∥∞,∥max[g(x),−ρμ]∞]with positive ξk converging to 0
-
外层迭代停止条件,即度量KKT条件的残差
max[∥h(x)∥∞,max[g(x),−ρμ]∞]<ϵcons,∥∇xLρ(x,λ,μ)∥∞<ϵprec
应用
参考链接:约束优化的应用:控制分配问题、碰撞距离计算、非线性MPC
控制分配问题、碰撞距离计算、非线性模型预测控制
作业
作业一:严格凸的等式约束QP的KKT推导和求解
问题如下:
x∈Rnmin21x⊤Qx+c⊤xs.t.Ax=b
其中Q是对称正定矩阵(spd)。
根据课程所学,它的最优解满足:
-
stationarity
0∈∂x[f(x)+i=1∑muihi(x)+j=1∑rvjℓj(x)]
即:
∂x[21x⊤Qx+c⊤x+v(Ax−b)]=0
可得:
Qx+c⊤+vA=0
-
complementary slackness
无
-
primal feasibility
Ax−b=0
-
dual feaesibility
无
综上,假设最优解为x∗,v∗其满足
{Qx∗+c+ATv∗=0Ax∗=b
有
[QAAT0][x∗v∗]=[−cb]
下面我们还需证明[QAAT0]可逆
我们构造下面这个式子
[I−AQ−10I][QAAT0][I0−Q−1ATI]=[Q00−AQ−1AT]
因为Q是对称正定(SPD)的,所以−AQ−1AT也是对称正定(SPD),所以[Q00−AQ−1AT]是可逆的,即[QAAT0]可逆。
则此QP问题的解为:
[x∗y∗]=[QAAT0]1[−cb]
作业二:低维严格凸QP线性时间复杂度算法的补全
根据课程算法:
根据伪代码补全即可(详细代码见文件)
编译然后运行可执行文件结果如下:
作业三:用PHR-ALM方法求解NMPC
分析
根据课程MPC问题可以表示成:
u0:NminJ(s1(u0:N),…,sN(u0:N),u0:N)s.t. G(sk(u0:N),uk)≤0, ∀i∈{0,…,N}
其中
J(s1,…,sN,u0,…,uN):=k=1∑N[(xk−xkref)2+(yk−ykref)2+wv(ak−ak−1)2+wδ(δk−δk−1)2]
F(sk,uk)=sk+1, ∀ i∈{0,…,N}⟷sk(u0:N), ∀ i∈{1,…,N}
∀ k∈{0,…,N}amin≤ak≤amaxδmin≤δk≤δmaxvmin≤vk≤vmaxG(sk,uk)≤0
加入松弛变量,我们可以得到:
G(sk(u0:N),uk)+[s]2=0
所以拉格朗日函数为:
L(u0.N,μ):=J(s1(u0.N),...,sN(u0.N),u0.N)+2ρmax(G(sk(u0.N),uk)+ρμ,02
然后进行迭代:
⎩⎨⎧u0:N←argminLp(u0:N,μ)μ←max[μ+ρG(sk(u0:N),uk),0]ρ←min[(1+γ)ρ,β]
运行
-
根据说明安装osqp
-
创建工作空间,将src文件夹复制进去。
-
编译
cd catkin_ws
catkin_make
-
执行launch文件
roslaunch mpc_car simulation.launch
结果
如下图所示: