44

非线性优化求解器IPOPT

 2 years ago
source link: https://blog.csdn.net/nudt_zrs/article/details/123239598?spm=1001.2101.3001.6650.5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-5-123239598-blog-103387026.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=10
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

非线性优化求解器IPOPT

original.png
牛仔很忙吧 newUpTime2.png 已于 2022-04-24 11:47:00 修改 articleReadEyes2.png 2955

目录

1、IPOPT的安装(简洁版本)

2、IPOPT测试案例

3、ADOL-C的使用

4、CppAD的使用

 5、IPOPT的initial gauss 以及 warm star

参考链接:


优化,在Apollo规划模块中占据了重要的地位

Apollo中 OSQP 和 IPOPT 的应用:

OSQPIPOPT

参考线:discrete_points_smoother(

FemPosSmooth

参考线:qp_spline_smoother

参考线:spiral_smoother

分段五次螺旋线非线性优化拟合

参考线:discrete_points_smoother(CosThetaSmooth

ipopt+adol-c

Lattice中横向规划中使用的基于二次规划的轨迹规划Hybrid A*的轨迹优化

路径规划的QP

速度规划中DP之后的QP

速度规划中DP之后的IPOPT

其中OSQP在之前的文章中测试过,这篇文章主要进行IPOPT的相关实践

非线性优化的一般形式为:

min f(x)

s.t. g^{L} \leq g(x)\leq g^{U} \

x^{L} \leq x \leq x^{U} \

IPOPT是一种常用的非线性优化求解器,使用内点法进行求解

对于复杂问题,需要借助自动微分工具,帮助求解梯度、Yacobian矩阵、Hessian矩阵,

如ADOL-C,CppAD

1、IPOPT的安装(简洁版本)

(1).安装apt包

sudo apt-get install gcc g++ gfortran git patch wget pkg-config liblapack-dev libmetis-dev

(2).安装BLAS and LAPACK

即为前面apt安装的liblapack-dev

(3).安装HSL 官网注册申请下载

需要教育网邮箱申请,

同时下载如下库.并将前面下载的HSL包解压后改名为coinhsl(例如coinhsl-archive-2021.05.05 => coinhsl)后复制到ThirdParty-HSL文件夹中,最后进行编译安装.

(4).安装IPOPT

Ipopt源码下载

make test的输出应该如下:

(5).安装成功与否
进入IPOPT源码文件夹如下位置,用官方例子测试

Ubuntu 16.04 安装Ipopt 3.12.7 和 CppAD - 简书

Ubuntu18.04配置Ipopt,CppAD 通过C++求解最优控制_小朱 智能驾驶的博客-CSDN博客_c++ ipopt

2、IPOPT测试案例

 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA54mb5LuU5b6I5b-Z5ZCn,size_20,color_FFFFFF,t_70,g_se,x_16

3、ADOL-C的使用

4、CppAD的使用

CMakeList.txt

 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA54mb5LuU5b6I5b-Z5ZCn,size_12,color_FFFFFF,t_70,g_se,x_16

 5、IPOPT的initial gauss 以及 warm star

参考链接:

Ipopt: Documentation

非线性优化求解器IPOPT的使用学习 - Challenging-eXtraordinary

基础理论:

导数、梯度、 Jacobian、Hessian - 知乎

Chapter 11 导数、梯度、 Jacobian、Hessian {Gradient Related Concepts} | 数值分析笔记

梯度向量、Jacobian、Hessian矩阵_Alinooo的博客-CSDN博客_梯度向量怎么求

自动微分工具:ADOL-C、CppAD

自动微分的理论:

自动微分 - 知乎

ipopt CppAD 非线性规划_梦醒时分1218的博客-CSDN博客_cppad

无人车系统(十):c++与python非线性规(优)划(化)工具_昔风不起,唯有努力生存!-CSDN博客 C++自动微分(Automatic differentiation)原理1_Daniel 的技术笔记 不积跬步无以至千里,不积小流无以成江海。-CSDN博客_c++ 自动微分

 自动微分的使用 - propagator的个人空间 - OSCHINA - 中文开源技术交流社区

后记:关于非线性优化,,我只在CasADi(MATLAB,Python)中进行过简单的测试

SX、MX以及Opti方法(像在写数学表达式),使用最基本的Opti方法

还有一种方式是AMPL,我在讲座中看到过

以上方案可以作为研究中初步的仿真测试,实际运行还是要用C++

https://www.youtube.com/watch?v=lx8RcYcYVuU

Convex Optimization | edX

CasADi/ACADOS学习 - 知乎

https://blog.csdn.net/u010442396/category_10110539.html

文章知识点与官方知识档案匹配,可进一步学习相关知识

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK