1

主要问题

在 Pyomo 中求解 NLP 时,使用 IPOPT 作为求解器,我如何告诉 IPOPT 目标函数和/或约束的梯度是多少?我必须传递一个返回目标值的可调用函数——我同样可以传递一个评估梯度的可调用函数吗?

次要问题

Pyomo+IPOPT 默认如何处理这个问题?当我用 Pyomo+IPOPT 解决一个简单的 NLP 时,IPOPT 输出的一部分包括“客观梯度评估的数量”......但是它是如何评估梯度的?数值上具有有限差异,还是什么?

我将 Pyomo 5.6 与 Python 3.6 和 IPOPT 3.7 一起使用。

4

2 回答 2

1

Pyomo 使用 Ampl Solver Library (ASL) 中的自动微分功能提供一阶和二阶导数信息。调用 IPOPT 时,Pyomo 使用 ASL 读取并链接到 IPOPT 的“.nl”文件格式输出您的模型。所以你不需要做任何事情来提供梯度信息,这是自动完成的。

于 2019-04-22T13:42:12.607 回答
1

背后的算法称为Autodiff。基本上,它通过使用表示为原子函数(加法、减法、乘法、除法,可能还有 exp 和 log)的图来计算任何函数的梯度。然后它使用来自微积分的链式法则来计算关于任何输入的整个梯度。

于 2019-04-22T13:47:10.263 回答