【发布时间】:2020-04-12 13:56:24
【问题描述】:
我正在处理一些小的 MILP 问题,我已针对这些问题确定了最大迭代次数。我想确定我们确信已经达到最佳状态的实例。
调用m.solve(disp=True)时,如果求解器提前停止,会显示警告:
警告:达到最大 MINLP 迭代,返回最佳解决方案
我想以编程方式检查我们是否处于这种情况。我试过了
1) 查看文档,但它说从求解器找到可行解决方案的那一刻起,m.options.SOLVESTATUS 始终为 1,m.options.APPINFO 始终为 0。
2)
optimum = m.options.ITERATIONS < m.options.MAX_ITER
但它不起作用,因为实际上m.options.ITERATIONS 并没有按照我的想法做(它总是比m.options.MAX_ITER 低得多)。
3) 引发然后捕获警告:
import warnings
warnings.filterwarnings("error")
try:
self.model.solve()
optimum = True
except:
optimum = False
但它也不起作用(不会引发错误)。
所以我有两个问题:
1) 如何查看求解器已使用的迭代次数?
2) 如何确定求解器是否检查了每个候选者,从而找到了最佳实例?
【问题讨论】:
标签: python convergence gekko