如何在gekko中的最大迭代限制后获取决策变量的值

how to get value of decision variable after maximum iteration limit in gekko

我已经在 python3 中编写了我的代码并使用 Gekko 求解器解决了它。

经过 10000 次迭代后,我收到错误消息:已达到最大迭代次数,但未找到解决方案。 那我能不能得到第10000次迭代后决策变量的值呢? 我的意思是,即使达到最大迭代次数,求解器在最后一次迭代中也必须具有决策变量值。所以我想访问这些值。我该怎么做?

调用solve时设置debug=0即可访问解决方案:

m.solve(debug=0)

默认为debug=1即在出现达到最大迭代次数等错误时抛出异常。这是一个通常在 5 次迭代中求解的示例。使用 m.options.max_iter=4,它在达到成功解决方案之前达到最大迭代次数。

from gekko import GEKKO
m = GEKKO(remote=False) # create GEKKO model
x = m.Var(value=0)      # define new variable, initial value=0
y = m.Var(value=1)      # define new variable, initial value=1
m.Equations([x + 2*y==0, x**2+y**2==1]) # equations

m.options.MAX_ITER=4
m.solve(debug=0)        # solve

print([x.value[0],y.value[0]]) # print solution

使用 debug=0,迭代 4 的错误答案在求解器几乎完成求解的位置返回。

[-0.89473125735, 0.44736562868]

如果您需要有关初始化问题的建议以帮助您找到成功的解决方案,我推荐这篇文章:

问题: 1) 我正在使用 APOPT Solver 解决 MINLP 问题。我的决策变量被定义为整数。我已经按照您的建议检索了第 10,000 次迭代的结果。但决策变量值是非整数。那么为什么 APOPT Solver 计算的是非整数解呢?

回答: 关于什么被归类为整数有一个选项。默认公差是整数值 0.05 以内的任何数字。 您可以通过以下方式更改此设置: m.solver_options = ['minlp_integer_tol 1']

2) 我是 运行 "m.options.MAX_ITER=100" 的代码并使用 m = GEKKO() 即使用远程服务器。但是我的代码在第 10000 次迭代后仍然是 运行。

答案:可以通过以下方式交替进行: m.solver_options = ['minlp_maximum_iterations 100']

非常感谢 Prof. John Hedengren 及时回复

壁虎