数値最適化用の自動微分&各種ソルバーへのインターフェースツールです. MPCなどでの活用が便利です.
- 定式化が非常に直感的で使いやすい.
- かなり変わった定式化にも対応可能(一般的な数値最適化ソルバーであるため)
- バックエンドソルバーが豊富
- AutoGenU,ACADO Toolkitといったシンボリック計算MPCツールと比べてトータルの実装時間が圧倒的に高速
- 解きたいMPCの問題に対して,まずは CasADi で解いてみて,収束性能や計算時間が気になったら他のツールに移るのが効率的
https://gist.github.com/mayataka/a75e6cdfd0e37499d892f0a4ea7af15c
https://gist.github.com/mayataka/bc08faa63a94d8b48ceba77cc79c7ccc
- 基本はIpoptを使っておけばOK
- 計算速度を向上させたい場合以下のオプションを設定
linear_solver
: 線型方程式のソルバーでデフォルトはmumps
(遅い).ma27
などにすれば早くなるらしい(ただしHSLライブラリが必要)max_iter
: 最大反復回数であり,これを小さくすることで suboptimal な解が得られるmu_min
: バリアパラメータの下限値であり,大きくすることで保守的な解になるが収束が早くなるhessian_approximation
:limited-memory
にするとヘッシアン近似(準ニュートン法)を行い反復一回あたりの計算は早くなる
- SCPGenを使えばGauss-Newtonも使える.Cコード生成もできるらしいが筆者は使い方がわからない.
- さらなる高速化に向けて,現在CasADiはhpipmへのインターフェースを開発中である(casadi/casadi#2807 ) hpipmが使用可能になり次第そちらを使うべきである.
- 現時点でCasADiで問題を記述しつつ計算を早めたい場合は,少し記述が複雑になるがacadosを使うべきである.