当前位置: 首页 > news >正文

Casadi库C++运行速度比python版本慢解决方法

casadi库是一个用来做符号运算的库,https://web.casadi.org/,并在底层对一些优化器做了接口封装。可以用于机器人运动学与动力学或其他优化问题。

当使用cpp版本的时候,会意外发现比python版本慢了许多(一倍以上)。这是因为底层依赖版本的缘故。如果没有必要的原因,建议就使用python版本的casadi。

但如果有必要一定要用cpp版本,可以参考我这篇文章。不过没有太多第三方库编译经验的朋友不要轻易尝试。

踩坑记录

这个库默认编译时是不包含ipopt库的,但如果要用这个求解器,需要先下载安装。

这是一种下载方法(但请先不要下,因为下到的版本会比较老影响运行速度。而新的版本要更新的ubuntu才能支持)

sudo apt-get install -y coinor-libipopt-dev coinor-libipopt1v5

对于ubuntu22.04系统,这样可以下到ipopt,但速度会比python版本慢。这个ipopt的版本是3.11.9,而python版本下到的ipopt的版本是3.14.17,对应还有mumps的版本是5.7.3。

查看mumps版本方法:
dpkg -l | grep libmumps
conda list | grep mumps

源码编译:

在下载好casadi的C++库后,通过cmake编译时有这些选项要注意:

sudo apt install gcc g++ gfortran git cmake liblapack-dev pkg-config swig --install-recommends
cmake -DWITH_PYTHON=ON -DWITH_IPOPT=ON -DWITH_OPENMP=ON -DWITH_THREAD=ON -DWITH_LAPACK=ON -DWITH_BUILD_IPOPT=ON -DWITH_BUILD_MUMPS=ON -DWITH_BUILD_METIS=ON -DWITH_BUILD_LAPACK=ON ..
  • -DWITH_IPOPT=ON 代表同时编译ipopt的接口
  • -DWITH_BUILD_XX意为下载XX源码进行编译,例如-DWITH_BUILD_IPOPT=ON,-DWITH_BUILD_MUMPS=ON
  • 在casadi的源码最外层CMakelists中,
    set(BUILD_MUMPS_TP_VERSION "releases/3.0.2" CACHE STRING "Tag/branch/hash to be used for BUILD_MUMPS_TP_GIT_REPO")
    这里需要改成3.0.9(即mumps版本为5.7.3) ——这个注意可以后期改成更高的版本,低版本速度会有问题。
  • -DWITH_LAPACK=ON,-DWITH_BUILD_LAPACK:  这两项的作用是和openblas有关。blas是一个数学运算库,而openblas则是升级版。如果不装这两项,运行时会有问题:Cannot call restoration phase at point that is almost feasible for the restoration NLP (violation 0.000000e+00).
    Abort in line search due to no other fall back.
    Step computation in the restoration phase failed.
  • 我们可以通过ldd指令,来查看libipopt.so所链接到的库。如果有一项libopenblas.so.0,则是有问题的。应该是链接到libcasadi-tp-openblas.so.0才对。

http://www.dtcms.com/a/337010.html

相关文章:

  • 从第一性原理理解Embedding:独立模型vs大模型内嵌层的本质区别
  • linux应用软件编程:线程
  • 使用Idea安装JDK
  • 04.IO 重定向和管道
  • 【深度学习】pytorch深度学习框架的环境配置
  • 如何在服务器 clone github 项目
  • axure chrome 浏览器插件的使用
  • goland怎么取消自动删除未使用的包
  • 学习链接。
  • 【秋招笔试】2025.08.17字节跳动秋招机考真题
  • 论文阅读 2025-8-9 [DiC, DropKey]
  • C++中内存池(Memory Pool)详解和完整示例
  • python实现pdfs合并
  • Leetcode 深度优先搜索 (3)
  • WPF中BindingList<T>和List<T>
  • vue3 + antd实现简单的图片点开可以缩小放大查看
  • 浅谈 Python 正则表达式中的 groups()
  • Linux文件相关命令
  • Disbursement on Quarantine Policy(概率、逆元计算期望)
  • 寻北仪如何靠“小”征服地下世界?
  • AI需要防火墙,云计算需要重新构想
  • 20. 云计算-多租户
  • 猫头虎AI分享|一款智能量化交易系统:QuantCell,从数据收集到策略执行全流程自动化
  • C++ 多进程编程深度解析【C++进阶每日一学】
  • 人工智能技术爆发的时代,AI工具和大模型对行业的深刻变革及实际应用!
  • 面向R语言用户的Highcharts
  • DR200差速移动机器人的多功能感知系统与多场景应用
  • 【网络安全实验报告】实验二: 后门木马配置及分析
  • 【网络安全实验报告】实验三:古典加密算法的实现
  • 数字化转型:概念性名词浅谈(第四十一讲)