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

问题描述 投票:2回答:2

我已经用python3编写了代码,并使用Gekko求解器对其进行了求解。

经过10000次迭代后,我得到最大迭代次数且找不到解决方案的错误。那么我可以在第10000次迭代后获得决策变量的值吗?我的意思是,即使达到最大迭代次数,求解器在最后一次迭代中也必须具有决策变量的值。所以我想访问这些值。我该怎么办?

python python-3.x nonlinear-optimization gekko
2个回答
2
投票

您可以在调用debug=0时通过设置solve来访问解决方案:

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]

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


0
投票

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

答案:关于分类为整数的选项。默认容差是整数值的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']

非常感谢教授。 John Hedengren迅速答复。

Gekko

© www.soinside.com 2019 - 2024. All rights reserved.