根据ipopt website,ADOL-C和CppAD可以实现自动区分。我想知道我应该首选哪种工具,主要区别是什么。与ipopt一起使用时,对这两者的速度进行比较也很有趣。
CppAD似乎更加积极地开发,从其github page可以看出。 Udacity还将其用于MPC项目的自动驾驶汽车纳米级。
另一方面,ADOL-C似乎已经有4年没有更新了?
我开始使用ADOL-C是因为我正在处理的项目已经在使用它,并且正在遵循ipopts虚拟功能的结构。但是,对于此项目中未使用的某些变量,似乎有很多不必要的开销。例如上限和下限乘数(zl
zu
)或约束乘数lambda
。
用于ipopt的adol-c的examples也缺少这些变量的文档。
例如:在执行example时,变量sig
,obj_lam
和lam
是什么?
我还尝试使用ADOL-C,因为它已经实现了ipopt的所有必需虚拟方法(get_starting_point
,eval_f
等)。 CppAD似乎有自己的方法来使用ipopt,这将需要从头开始编写整个项目。还是有另一种方法可以将CppAD与ipopt的当前结构一起使用?