目录
在本讲中,只考虑批量数据,在有现成数据和明晰的优化目标情况下,如何求解优化问题
Lectures on convex optimization
Lectures on modern convex optimization
优化问题
组成
-
形式
-
优化对象(位姿x)
-
目标函数/损失函数
-
约束条件(分为了无条件约束和有条件约束)
分类
凸优化
条件:
1、目标函数是凸的
2、不等式约束是凸的
3、所在的空间是凸的
4、等式约束是仿射形式(affine)(AX=b)
常见形式:
1、
2、最常见——一般构造这种形式
3、
4、Second-order Conic Programming
5、Semi-Definite Programming
非凸优化
1、
2、判断问题是凸的还是非凸的,同样也是一门学问
3、常见的处理思路,是借助松弛的思想,将非凸问题转化为近似凸问题
此时需要清楚原非凸问题中的哪个或哪些函数导致了非凸性,之后考虑的是如何利用凸优化模型来逼近原问题
说白了,就是保留原问题部分性质的条件下,使用简单的项替代目标函数中难以处理的项,进而使得问题更易求解。
数据来源
-
批量式betch
一次性给定一批观测数据
如何根据这些数据估计出最准确的结果
-
增量式incremental
数据是随着时间逐渐采集的
如何根据后面的数据调整之前的估计结果
-
将上述问题用到第九章的滤波和优化
-
在本讲中,只考虑批量数据,在有现成数据和明晰的优化目标情况下,如何求解优化问题
优化对象
合理选择
SLAM——位置、姿态、传感器参数
目标函数
目标函数的选择与要处理的问题密切相关
约束条件
注意:无约束优化往往比有约束优化更容易求解,我们很想把有约束优化化成无约束优化问题
将约束加在目标函数中
1、拉格朗日函数
2、罚函数
转换对象空间
1、三角换元
2、流行空间
问题求解
- 解析解——求导,找极值点
- 数值解——求梯度,找增量
常见优化库
-
ceres
代码开源,可用于求解具有边界约束的非线性最小二乘问题和一般无约束优化问题,google开发Ceres Solver — A Large Scale Non-linear Optimization Library
-
g2o
代码开源,用于解决非线性最小二乘问题,特定是将优化中涉及的对象用图(graph)的形式来表示OpenSLAM.org
-
gtsam
使用因子图和贝叶斯网络作为底层计算范式而不是稀疏矩阵来优化最可能的配置,Lio-sam
-
osqp
多位大牛联合开发,用来求解QP问题的求解器,用的人很多,很容易上手OSQP
-
CVX
MATLAB封装包,内嵌多种优化库CVX: Matlab Software for Disciplined Convex Programming | CVX Research, Inc.
-
MOSEK
适用的问题多,学生能免费用,无源代码,库仅支持x86Mosek ApS
-
ooQP
快速鲁棒的QP求解器,代码开源OOQP: Object-Oriented Software for Quadratic Programming
-
GLPK
快速鲁棒LP求解器,代码开源GLPK - GNU Project - Free Software Foundation (FSF)
建议
- 优化只是一种解决问题的手段
- 核心在于如何将问题构造成优化问题
- 不要拘泥于某种优化工具,去尝试各种优化工具,不同的优化库特点不同,擅长的领域也各不相同
学习资料
最优化-建模、算法与理论
中文教材,介绍近年来经典算法流程和理论,可以用来入门
Numerical implementation
理论方面很全,还关注了优化模型在计算机有限精度下优化结果的稳定性和鲁棒性,具有很好的工程实践指导
Lectures on convex optimization
思路清晰,讲凸优化理论问题、光滑、非光滑、结构优化。。。
Lectures on modern convex optimization
关注锥优化、多项式求解复杂度问题
Casadi
用于数值优化和最优控制(即涉及微分方程的优化)的开源软件工具;使用算法微分有效地生成导数信息,建立、求解和执行常微分方程(ODE)或微分代数方程(DAE)系统地正向和伴随灵敏度分析,以及制定和解决非线性程序(NLP)问题和最优控制问题(ocp);可用于c++,Python和MATLAB,在性能上几乎没有差异;c++文档有限,python文档很全,最好从python入手CasADi
Acado
用于自动控制和动态优化的软件环境和算法集;它为使用各种算法进行直接最优控制提供了一个通用框架,包括模型预测控制、状态和参数估计以及鲁棒优化。ACADO工具包实现为自包含的c++代码,并附带用户友好的MATLAB界面。ACADO Toolkit