初级问题
当在Pyomo中求解NLP时,使用IPOPT作为求解器,如何告诉IPOPT目标函数和/或约束的梯度是多少?我必须传递一个可调用函数,它返回目标值--我同样可以传递一个可调用函数来计算梯度值吗?
二级问题
默认情况下,Pyomo+IPOPT是如何处理这个问题的?当我用Pyomo+IPOPT解决一个简单的非线性方程组时,它的部分输出包括“目标梯度评估的数目”...but,它是如何计算梯度的?有限差分的数值,还是别的什么?
我在Python3.6和IPOPT3.7中使用Pyomo5.6。
发布于 2019-04-22 13:42:12
Pyomo使用Ampl解决程序库(ASL)中的自动区分特性提供一阶和二阶导数信息。当调用IPOPT时,Pyomo使用'.nl‘文件格式输出模型,该文件格式由ASL读取并链接到IPOPT。所以你不需要做任何事情来提供梯度信息,这是自动完成的。
发布于 2019-04-22 13:47:10
后面的算法称为欧迪夫。基本上,它使用原子函数图(加法、减法、乘法、除法,或者exp和log)来计算任何函数的梯度。然后利用微积分中的链规则计算任意输入的整体梯度。
https://stackoverflow.com/questions/55753497
复制相似问题