gekko中最大迭代极限后决策变量的取值

2024-04-29 03:17:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经用python3编写了我的代码,并使用Gekko解算器解决了它

在10000次迭代之后,我得到了错误的最大迭代次数,并且没有找到解决方案。 那么,在第10000次迭代之后,我可以得到决策变量的值吗? 我的意思是,即使达到最大迭代次数,解算器在最后一次迭代中也必须有一个决策变量值。所以我想访问这些值。我该怎么做


Tags: 代码错误解决方案次数python3算器决策gekko
2条回答

问题: 1) 我正在用APOPT Solver解决一个MINLP问题。我的决策变量定义为整数。我已按照您的建议检索到第10000次迭代的结果。但是决策变量的值是非整数的。那么为什么APOPT Solver要计算非整数解呢

答复: 有一个选项可以选择什么是整数。默认公差为整数值0.05范围内的任何数字。 您可以通过以下方式进行更改: m、 解算器\u选项=['minlp\u整数\u tol 1']

2)我正在运行“m.options.MAX_ITER=100”的代码,并使用m=GEKKO()即使用远程服务器。但我的代码仍在运行10000次迭代

答:您可以通过以下方式进行选择: m、 解算器_选项=['minlp_最大迭代次数100']

非常感谢John Hedengren教授的及时回复

盖柯

调用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]

如果您需要有关初始化问题的建议以帮助您找到成功的解决方案,我建议您阅读本文:

  • Safdarnejad,S.M.,Hedengren,J.D.,Lewis,N.R.,Haseltine,E.,{a1},计算机与化学工程,2015年,第78卷,第39-50页,DOI:10.1016/J.compchemeng.2015.04.016

相关问题 更多 >