正如官网介绍,CasADi提供了一种高效的开源优化问题解决方案,非常适用于解决非线性优化问题(nonlinear optimization)和实现自动微分(algorithmic differentiation)。相较于其他的优化库,例如ACADO和GRAMPC,在提供了标准的C/C++和MATLAB支持外,其还提供了目前较为热门的Python API,使得Python用户也能够方便快捷地解决非线性优化问题。这几期学习将通过Mohamed W. Mehrez公开的MATLAB为基础,以我自己完成的Python版本为内容,于大家一起交流CasADi的学习心得。Mohamed的MATLAB代码可以在其Github下载。我的Python实现版本可以在我的Github中进行下载。能看Youtube的同学可以详见其的讲解,也可以参考B站上他人上传的视频,链接如下B站。
所有Mohamed的资料的版权由他个人所有,后续有用到,我也会在文中声明。我的Github资料为公开共享,目前的版本可能还存在错误,敬请大家斧正。
Python版本的代码基于Python 3.8和CasADi 3.5.1实现,具体的安装办法详见CasADi的安装介绍。理论上python 2.7和其他CasADi支持的Python版本也可以运行。CasADi低于3.5.1的版本不能保证运行,因为我发现目前网上能搜到的资源中,有部分使用较为远久的API,用新版本已经无法实现,所用尽量使用最新的CasADi版本。
在我的Github中同一个问题或是数学方法我会使用不同的CasADi API来实现。CasADi提供了不同的符号表达和建模办法,我个人暂时不是很理解这样设计的目的,因为不同的API和不同的实现逻辑会让用户产生一定的困惑。虽然在2019年后CasADi一直没有进行更新,但是个人觉得还没有达到所谓的稳定版本。因此我提供不同的Python版本也是为了应对之后某种方法被官方抛弃后没有其他的后备方案的情况。以个人经验,基于SX的建模方法比兼容性更强的MX有更高的运行效率。
CasADi还提供了更为直观的基于MX的Opti API,通过代码的比较,Opti能更为直觉地建立问题,特别是对于编程基础较为薄弱的人来说。当然,相对地,Opti的计算时间较于直接MX或是SX都较长。
最新的API请参看官网文件。
在本人同一台电脑下,Python各版本速度均要快于Mohamed的MATLAB版本,C++版本则更为迅速,大概为Python版本的百分之20左右,实现版本详见我的实现(github)。
这里预留余下文章的链接,方便大家直通车。
CasADi学习(2)
CasADi学习(3)