【发布时间】:2019-09-09 05:34:03
【问题描述】:
主要问题
在 Pyomo 中求解 NLP 时,使用 IPOPT 作为求解器,我如何告诉 IPOPT 目标函数和/或约束的梯度是多少?我必须传递一个返回目标值的可调用函数——我也可以传递一个评估梯度的可调用函数吗?
次要问题
Pyomo+IPOPT 默认如何处理这个问题?当我用 Pyomo+IPOPT 解决一个简单的 NLP 时,IPOPT 输出的一部分包括“客观梯度评估的数量”......但是它是如何评估梯度的?数值上的有限差分,还是什么?
我将 Pyomo 5.6 与 Python 3.6 和 IPOPT 3.7 一起使用。
【问题讨论】:
-
这个问题对我来说的相关性来自于在 Pyomo/IPOPT 之外训练的模型(例如,tensorflow),其中函数是可微的,但没有封闭形式的表达式。在这种情况下,如果能够轻松地将梯度信息插入 IPOPT 并且不依赖于 autodiff,那就太好了。您可以在 scipy 中执行此操作,但我不知道那里的求解器与 IPOPT 相比如何。
标签: python-3.x pyomo ipopt