我正在使用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
如果有人可以帮助我解决这个问题,我将不胜感激。
非常感谢您。
答案 0 :(得分:0)
上面提到的CheckConvergence()
函数是Ipopt的Ipopt::ConvergenceCheck
类中的一个方法。也许它可以通过 Ipopts C++ API 访问,但您似乎使用某种 Python 接口来连接 Ipopt。
我建议与该 Python 界面的创建者核对一下。
但首先,您可能需要重新考虑通过调用此函数尝试实现的目标。 Ipopt 完成求解后,它返回一个状态代码,指示 Ipopt 停止的原因,并且有可用的统计数据来获取原始和双重违规(如果返回了解决方案)。您可能想要检查这些(假设它们可用于 Python 接口),而不是调用一些用于检查 Ipopt 是否在当前迭代终止的 Ipopt 内部函数。