Ubuntu20.04安装cppAD和Ipopt(肯定好使,不信看结尾我的B站视频)

文章介绍了在Ubuntu系统中安装非线性优化求解器Ipopt和自动微分库CppAD的过程,包括通过apt安装、源码编译以及配置依赖如ASL,BLAS,LAPACK,HSL和MUMPS等。文章特别强调了不同线性求解器对性能的影响,并提供了详细的安装命令和注意事项。
摘要由CSDN通过智能技术生成


由于最近研究非线性模型预测控制(NMPC)需要用到非线性求解器和自动微分的库,安装过程也是有些坎坷,因此记录一下,也希望和我有一样目的的能少踩一点坑。

安装ipopt

最简单的方法是直接用apt命令行安装,

sudo apt install coinor-libipopt-dev

但是这种方式安装的ipopt版本很低,而且可能会报一些错。如果对版本有要求的话就别用这种方法,比如运行Udacity的mpc代码的话就需要3.12版本以上,这个时候就需要通过源码安装。
源码安装可以参考官网安装教程,优秀的工程师是不能害怕英文的。

安装必要工具

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

安装依赖

Ipopt使用了一些不包括在源码的额外的包,例如ASL,Blas,Lapack等。ipopt还需要至少一个线性求解器用于系数对称不定矩阵,通常大部分的求解时间都花费在了求解线性系统,所以线性求解器的选择会影响ipopt的速度和鲁棒性。
因为即将下载好几个库的源码,为了方便管理,可以建立一个文件夹专门存放ipopt和一些依赖库的源码。
例如mkdir ipopt_libs cd ipopt_libs,以后的源码都克隆到这个文件夹下。

ASL

我看很多博客都安装了这个库,我当时也安了,但是我现在发现官网说使用C++指定优化问题是不需要安装的,但是安装也很简单,大家可以试试不安好不好使,我也把安装指令放在下面,

git clone https://github.com/coin-or-tools/ThirdParty-ASL.git
cd ThirdParty-ASL
./get.ASL
./configure
make
sudo make install

BLAS and LAPACK

ipopt的build系统会自己找到安装在你系统里的BLAS和LAPACK,这俩库已经在安装必要工具时安装过了,就是那个liblapack-dev.

HSL

HSL有两个版本,第一个版本Coin-HSL Archive是免费的,这个版本包括MA27,MA28和MC19;第二个版本Coin-HSL Full可以免费用于学术,可以通过学校邮箱申请,这个版本包括更多现代化的代码,包含第一个版本,除此之外还包括MA57等。第二版比第一个版本快,官网说MA57在一些问题上比求解MA27快多了,但是我用第一版也够了,我也申请了一个第二版,成功了,我打算换一下。
这个库需要去官网申请下载,有其他博客提供了免费版的,下载他那个就不用申请了,但是想用学术这个还得自己申请,成功的话会收到一个邮件包含下载链接。
安装指令如下:

git clone https://github.com/coin-or-tools/ThirdParty-HSL.git
cd ThirdParty-HSL
然后把下载的hsl库压缩包解压,重命名包日期去掉,放到ThirdParty-HSL目录下,变成这样ThirdParty-HSL/coinhsl
./configure
make
sudo make install

MUMPS Linear Solver

其实我现在不知道这个安不安有没有影响,我看这个也是线性求解器,上边那个MA27也是线性求解器,我看其他博客有的安了,有的没安也好使,安不安随大家吧,可以先不安试试,安装也很简单,命令如下,

git clone https://github.com/coin-or-tools/ThirdParty-Mumps.git
cd ThirdParty-Mumps
./get.Mumps
./configure
make
sudo make install

ipopt

如果想下载特定版本可以去https://github.com/coin-or/Ipopt/releases下载后解压。
如果下载最新的直接git clone

git clone https://github.com/coin-or/Ipopt.git
cd Ipopt
mkdir build && cd build
sudo ../configure
sudo make 
sudo make test //验证编译是否成功
sudo make install  安到了/usr/local里了
还需要最后一个操作
cd /usr/local/include
sudo cp coin-or coin -r  //把文件夹改名or去掉要不会找不到头文件

至此,ipopt就安装完了。

安装CppAD

直接命令行安装即可,

sudo apt install cppad

至于测试cppad和ipopt能不能用可以看其他博客的测试例子,ipopt那个就不用测试了,直接测试他俩一起求解非线性优化问题那个就行,那个也是cppad官网给的例子,可以照这个学学怎么构建目标函数和约束并调用ipopt求解。

问题

cmakelists.txt中需要加入这两行,用于找到ipopt

include_directories(/usr/local/include)
link_directories(/usr/local/lib)

绝对能用,效果见视频https://www.bilibili.com/video/BV1nm4y187Mg/?spm_id_from=333.999.0.0

  • 12
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值