约束优化问题的常用解决办法及优缺点、轨迹规划中应用
求解以下一般约束优化问题(可以非凸、非线性):
罚函数法(外点罚函数)
目标函数中加入违反约束部分的二次项,惩罚约束不满足的部分,从而转化为无约束优化问题求解。
优点:
- 初值点可以任意选择不需要满足约束
缺点:
- 只是近似结果,惩罚项系数必须无穷大才能保证约束满足;
- 惩罚项系数无穷大容易导致问题病态,从而下降速度骤降,表现为梯度仍然很大时每步代价函数下降却很小,从而难以继续优化更新;
- 适用于等式约束,不等式约束一般需要max(G(x),0)转化。
高飞组的gcopter,egoswarm等的连续时间不等式约束(速度限制、避障等)都是采用的这种罚函数方法来转化为无约束优化,从而用L-BFGS这种无约束优化器求解
内点法(障碍函数法)
目标函数中加入-1/x或者-ln(-G(x)),惩罚接近0的约束,从而转化为无约束优化问题求解。
优点:
- 约束保证满足
缺点:
- 只是近似结果,惩罚项系数必须无穷小才能趋于原问题的最优解;
- 惩罚项系数无穷大容易导致问题病态,从而下降速度骤降;
- 适用于不等式约束,等式约束一般需要转化;
- 初值必须选取满足约束,实践中很难选。
IPOPT是常用的解非线性优化的工具
增广拉格朗日方法
增广拉格朗日方法(Augmented Lagrangian Method, ALM),非常重要,是为了解决罚函数病态的问题,在罚函数基础上加上了一个拉格朗日项:
或者看作是在拉格朗日函数的基础上加了一个正则项
,这里c(x)是等式约束。
然后优化这个增广拉格朗日函数,类似primal-dual方法:
这是个无约束优化
注意对偶量
是要梯度上升而非下降:
不停增大
优势:
- 相比于罚函数法,
不需要趋于无穷而是只需要足够大,就可以得到原问题的准确解,改善了病态性;
- 相比于primal-dual方法,由于正则项
的加入,使得原本可能非严格凸的
拉格朗日函数变得严格凸(只要
够大),从而问题有唯一解。
缺点:
- 需要引入新的对偶变量
,增加了优化维数。尤其是约束数量很多的时候会增加很多
,内存开销大
- 适用于等式约束,不等式约束需要转化
- 每一步更新都需要解一个完整的子问题
,计算量大
- 仍然可能
很大导致一定程度的病态问题。
浙大2025TASE上发表的MS-minco(弧长和角度为分段夹持多项式,用于差速轮无人车),终端位置的等式约束就不是同胚变换或者罚函数(因为不能写成优化变量的简单表达形式,同时必须严格满足),而是用的ALM。分段中间位置的避碰还是用的罚函数,因为构造ALM需要每个采样点多加一个对偶变量,并多次求解子问题更新,没必要,还不如增大惩罚项系数。
微分同胚变换
简单的不等式约束如T>=0,可以换一个优化变量,使得
,从而天然满足约束
优点:
- 应用简单,不需要改变目标函数
缺点:
- 原来的凸优化问题经过变量变化后,可能变为非凸问题。但是极值点数量不会变化
- 扭曲的变换容易导致问题病态,如
无穷时
- 只有简单的集合(圆、点放射形状集合)可以找到简单的同胚变换,一般形式的很难。比如直接对x进行不等式约束,或者g(x)<=0,这里g(x)是个简单函数,而不是一堆复杂变换。
- 只适用于不等式约束
gcopter里限制中间点q在凸集内部的方法就是微分同胚变换,包括限制时间T>=0也是。但是每段多项式中间的采样点处的避碰约束就不能用微分同胚变换,是因为他们关于优化变量(q,T)——也就是中间点位置和时间——是很复杂的变换,没办法写出简单的同胚变换。
等式消去
对于等式约束,一般意味着优化变量中有冗余,可以通过解方程组消去一些变量(用一部分变量表示其他部分)。
比如gcopter的minco里,5次多项式首尾终端条件+分段处4阶导数连续性,可以直接由(q,T)得到所有分段的多项式系数(c,T)。如果用(c,T)表示轨迹则需加上首尾终端等式约束+分段处4阶导数连续性等式约束,用(q,T)则天然满足这些等式约束。
以上这些方法都是将约束优化转换为无约束优化求解,目的是消去约束。也有直面这些约束的处理办法:
梯度投影法
- 可行方向:在每次迭代中,计算目标函数的梯度,并将其投影到当前点的可行方向集合上,得到搜索方向。
- 步长选择:沿搜索方向选择适当的步长,确保新迭代点仍在可行域内。
- 迭代更新:重复上述过程,直到满足收敛条件。
优点:
- 约束保证满足
- 对于凸优化问题,梯度投影法通常具有全局收敛性。在满足一定条件下,算法能够收敛到局部最优解或全局最优解
缺点:
- 投影计算成本高,尤其是非线性约束投影算子计算很复杂,高维时投影也很复杂。
- 不太适合非凸问题
序列二次规划(SQP)
如果优化问题是QP(目标函数二次,约束线性),那么由于其线性特性(梯度和约束都是线性的),可以由主动集(active set)直接求KKT方程(先猜哪些不等式约束的起作用的,然后解 拉格朗日函数对x和
的梯度为0 的线性方程组)得到解,不需要像ALM那样用迭代的方法更新
。
对于一般的非线性优化问题,可以每次迭代近似构造一个QP求解,这就是SQP。
SQP是和内点法、罚函数法完全不同的技术路线,在每次迭代中,基于当前点构造一个原问题的二次规划(QP)子问题。这个子问题用目标函数的二阶近似(Hessian矩阵)和约束的一阶近似(Jacobian矩阵)来局部模拟原问题。求解这个QP子问题,得到搜索方向,然后通过线搜索确定步长,迭代直至收敛。
优点:
- 由于是牛顿法在非二次问题上的推广,具有超线性收敛很快的收敛速度。
缺点:
- 每一步都需要计算或近似Hessian矩阵,并求解一个可能非凸的QP子问题,计算开销大。因此只适用于中小规模问题,大规模问题还得用内点法。