1.优化问题
min f(x)
s.t.g(x)<=0 h(x)=0
假设:(1)目标函数有下界(2)下水平集不能无界
2.凸包问题:给定点集,求构成凸包的点
3.常见的凸集:超平面、半平面、球的表面、球、多项式、半正定锥
4.保持凸性的运算:
(1)两个凸集的交集
(2)两个凸集的和
(3)两个凸集的叉乘
5.hessian矩阵在函数光滑时是对称矩阵
6.梯度:使每一点下降最快的方向
7.区分Hessian矩阵与Jacobian矩阵,Hessian矩阵对应的函数是向量映射到标量,矩阵元素是二阶信息,而Jacobian矩阵对应的函数是向量映射到向量,矩阵元素是一阶信息
8.凸函数最重要的性质就是琴生不等式,能取到等号则是一般凸函数,不取等号则是强凸函数
9.凸函数<=>上方图是凸集
10.凸函数的下水平集是凸集
11.关心凸函数的原因
(1)凸性容易保持
(2)任何的局部最优解都是全局最优解
(3)解集是凸的
(4)凸函数在很多运算中能够被保留(求和、仿射变换、逐点max)
12.一阶条件 => 仅凸函数的最优性
13.二阶条件:满足 ∇ 2 f ( x ) ⪰ 0 \nabla^{2} f(x) \succeq 0 ∇2f(x)⪰0,一个光滑的函数是凸的。Hessian函数是光滑函数的一个很好的局部模型
13.强凸意味着hessian矩阵严格正定。有利于提高算法的收敛速率
14.次梯度的反方向不一定是下降方向
15.梯度单调性:任何凸函数的(次)梯度都是单调的
16.最速下降法就是以负梯度方向为迭代方向,当函数非光滑时,迭代点不存在梯度时,以次梯度集合内的取最小模长的负方向为迭代方向
17.迭代方向的步长选择:
(1)恒定步长:导致不停的震荡,始终无法收敛
(2)不断衰减的步长:可以保证收敛,但是随着步长越来越短,收敛越来越慢
(3)精确线搜索:求解时间损耗
(4)非精确线搜索:不再求解子优化问题,希望每次得到一个接近最优解的步长
18.条件数很大将导致最速下降法每次迭代震荡很厉害,因此当条件数很大时,不适用最速下降法
19.修正阻尼牛顿法:最小化二次逼近,如果函数是二次函数,那么牛顿法只需一步就能达到最优。
20.当函数是二次型时,近似没有起到效果,迭代的过程就是求解原函数最优解的过程,因此当然一次迭代就能得到最优解
21.将牛顿法与最速下降法相比,牛顿法需要的迭代次数很少就能直达最优解,但是由于需要求解hessian矩阵的逆,导致,每一步的迭代时间有所增加
22.评价数值优化方法的三个方面:(1)收敛速度(2)适用于不同功能的稳定性(3)每次迭代的计算量
23.牛顿法的适用条件是hessian矩阵正定,否则会出现上述两种情况,若半正定可能找不到最优解,若负定,将使迭代方向变成上升方向,因此我们必须保证迭代方向与负梯度方向成锐角
24.工程上的方法:构造一个足够接近hessian的正定矩阵M、通过因式分解而不是求逆来求解线性系统、线搜索不需要grad和Hessian
25.自动驾驶规划目标:算出一条满足约束的最优轨迹
最优:平滑、舒适、尽可能短(耗时少)
约束:轨迹连续性、无碰撞、交规、车辆动力学
26.一般求复杂函数在复杂约束下的最小值问题都采用迭代法:牛顿、最速下降、高斯牛顿
27.凸优化:求凸函数在凸空间的最小值问题
28.静态+动态避障约束空间都不是凸的
29.求解非凸问题的主要思路是找非凸问题中的凸结构
30.对于非凸函数和非凸空间:连续空间离散化后,离散约束空间的最优解,不断迭代得到最优解
31.采样点越少,容易收敛到局部最优。采样越多,容易发生维数灾难
32.为什么引入二次规划?
多项式求极值是二维空间的问题,而运动规划的优化问题是高维的。高维空间的优化问题是十分复杂的,我们如果将其建立为一个类似于我们熟悉的多项式求极值问题,我们当然希望选择对优化来说最理想的二次。如果问题的维度也高,次数也高,就很难求解了。
33.维度是指变量的个数,而次数是指多项式的阶次
34.二次规划在自动驾驶中有两个比较经典的应用:
(1)百度Apollo EM planner用QP求解局部最优解
(2)MPC控制器将有约束的MPC问题转化为QP问题
35.运动规划的是在凸空间么?
显然特别不凸,因为中间有车挡着,相当于有洞。任何中空的或具有凹痕都不是凸集。如果能实现路径规划与速度规划解耦,可以通过动态规划算法在 l ( s ) l(s) l(s)空间内寻找几个凸集,在每个凸集内部,可以实现QP算法
36.梯度下降法工程上实现通常采用负梯度方向为优化方向,结合Armijo条件计算步长
x k + 1 = x k − τ ∇ f ( x k ) x^{k+1}=x^{k}-\tau \nabla f\left(x^{k}\right) xk+1=xk−τ∇f(xk)
Armijo Condition:
f ( x k ) − f ( x k + α d ) ≥ − c ⋅ α d T ∇ f ( x k ) f\left(x^{k}\right)-f\left(x^{k}+\alpha d\right) \geq-c \cdot \alpha d^{T} \nabla f\left(x^{k}\right) f(xk)−f(xk+αd)≥−c⋅αdT∇f(xk)
37.牛顿法: x k + 1 = x k − [ ∇ 2 f ( x k ) ] − 1 ∇ f ( x k ) x^{k+1}=x^{k}-\left[\nabla^{2} f\left(x^{k}\right)\right]^{-1} \nabla f\left(x^{k}\right) xk+1=xk−[∇2f(xk)]−1∇f(xk),牛顿法要求Hessian矩阵非奇异且正定,另外Hessian矩阵的获取和求逆计算可能会非常耗时
38.实际应用中Hessian矩阵正定通常难以保证,工程上当Hessian是半正定时,需要加入一个很小的单位阵就可以将Hessian矩阵改造为正定矩阵: M = ∇ 2 f ( x ) + ϵ I , ϵ = min ( 1 , ∥ ∇ f ( x ) ∥ ∞ ) / 10 M=\nabla^{2} f(x)+\epsilon I, \epsilon=\min \left(1,\|\nabla f(x)\|_{\infty}\right) / 10 M=∇2f(x)+ϵI,ϵ=min(1,∥∇f(x)∥∞)/10当梯度接近0,M也会逐渐接近真实的Hessian矩阵,另外,由于改造过后的Hessian矩阵是正定的,可以采用Cholesky分解的方式,来求解牛顿方向: M d = − ∇ f ( x ) , M = L L T M d=-\nabla f(x), \quad M=L L^{T} Md=−∇f(x),M=LLT,从而避免耗时的求逆操作。
当Hessian矩阵是不定的时候,可以采用Bunch-Kaufman分解,即 M = L B L T = ∇ 2 f ( x ) M=L B L^{T}=\nabla^{2} f(x) M=LBLT=∇2f(x),其中B矩阵是一个块对角矩阵,都是由1X1和2X2的小块矩阵构成的,可以很容易地去修改这些小块矩阵的特征值,把他们改成正数。
39.拟牛顿方法:尽可能采用一阶信息还原出二阶信息,从而实现超出一阶方法的收敛速度,同时避免求解目标函数的二阶导数