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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...