我正在使用ipopt solver来解决Python中的一个非线性优化问题。ipopt文档说明了一个函数CheckConvergence(),通过该函数可以获得解的收敛状态。
https://coin-or.github.io/Ipopt/classIpopt
我尝试通过以下步骤访问该函数:
solver = SolverFactory('ipopt')
solver.solve(model)
solver.CheckConvergence()
但是我得到了一个错误,AttributeError:'IPOPT‘对象没有’object收敛‘属性。
因此,我尝试从定义此函数的文件IpConvCheck.hpp中导入脚本。
https://coin-or.github.io/Ipopt/IpConvCheck
如果有人能帮我解决这个问题,我将不胜感激。
非常提前感谢您。
发布于 2021-05-18 01:39:45
前面提到的CheckConvergence()
函数是Ipopt的Ipopt::ConvergenceCheck
类中的一个方法。也许可以通过Ipopts Python访问它,但是您似乎使用了某种C++接口来访问Ipopt。我建议与Python接口的创建者确认一下。
但首先,您可能希望重新考虑通过调用此函数来尝试实现的目标。在Ipopt完成解算后,它会返回一个状态代码,指示Ipopt停止的原因,并且有可用的统计数据来获取原始和双重违规(如果返回了解决方案)。您可能希望检查这些函数(假设它们在Python接口中可用),而不调用用于检查Ipopt是否在当前迭代处终止的Ipopt内部函数。
https://stackoverflow.com/questions/64760607
复制相似问题