使用CheckConvergence()函数检查优化求解器“ ipopt”的收敛性

时间:2020-11-09 23:15:34

标签: python optimization ipopt

我正在使用ipopt求解器解决Python中的非线性优化问题。 ipopt文档声明了一个CheckConvergence()函数,通过该函数可以获取解决方案的收敛状态。

https://coin-or.github.io/Ipopt/classIpopt_1_1ConvergenceCheck.html

我尝试通过以下步骤访问该功能:

solver = SolverFactory('ipopt')
solver.solve(model)
solver.CheckConvergence()

但是我得到一个错误,AttributeError:'IPOPT'对象没有属性'CheckConvergence'。

因此,我正尝试从文件IpConvCheck.hpp中导入脚本,该文件已定义此功能。

https://coin-or.github.io/Ipopt/IpConvCheck_8hpp_source.html

如果有人可以帮助我解决这个问题,我将不胜感激。

非常感谢您。

1 个答案:

答案 0 :(得分:0)

上面提到的CheckConvergence()函数是Ipopt的Ipopt::ConvergenceCheck类中的一个方法。也许它可以通过 Ipopts C++ API 访问,但您似乎使用某种 Python 接口来连接 Ipopt。 我建议与该 Python 界面的创建者核对一下。

但首先,您可能需要重新考虑通过调用此函数尝试实现的目标。 Ipopt 完成求解后,它返回一个状态代码,指示 Ipopt 停止的原因,并且有可用的统计数据来获取原始和双重违规(如果返回了解决方案)。您可能想要检查这些(假设它们可用于 Python 接口),而不是调用一些用于检查 Ipopt 是否在当前迭代终止的 Ipopt 内部函数。