如何解决Matlab中IPOPT的必要梯度和雅可比
我有一个带有非线性目标函数和非线性约束的凸优化问题。目标函数和约束是在我的算法过程中通过凸松弛生成的,一开始并不知道。 我的第一次尝试是使用 Matlab 求解器“fmincon”来计算优化问题。它有效,但求解器的计算时间非常长。 所以我的第二次尝试是用 C++ 求解器 IPOPT 解决优化问题。 我已经在 linux 下从 https://github.com/ebertolazzi/mexIPOPT 为 IPOPT 安装了预编译的 MATLAB 接口。此安装使用“MUMPS”作为线性求解器。
求解器需要
- 初始起点,
- 变量的下限和上限,
- 约束的下限和上限,
- 计算当前点的目标函数的函数,
- 计算目标在当前点的梯度的函数,
- 一个评估当前点约束的函数,
- 评估当前点约束的雅可比矩阵的函数,
- 返回一个显示雅可比矩阵稀疏结构的稀疏矩阵的函数,
- 计算当前点拉格朗日的 Hessian 的函数,
- 返回稀疏矩阵的函数,该矩阵显示 Hessian 的稀疏结构。
在我的算法中给出了起点、变量和约束的界限、目标函数和约束的函数。 IPOPT 有一个选项来计算 Hessian 和它的稀疏结构,它具有有限内存的准牛顿近似。 所以未知输入是目标函数的梯度和约束的雅可比矩阵。
我的第一次尝试是在 Matlab 工具箱 INTLAB 中使用梯度近似导数,该工具箱在正向模式下使用自动微分,参见 http://www.ti3.tuhh.de/intlab/demos/html/dgradient.html。
通过我的安装、设置和输入,IPOPT 比“fmincon”慢三到六倍。
是否有可能更有效地计算导数?
为什么求解器的计算时间比使用“fmincon”要长这么多?
如何减少求解器的计算时间?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。