如何在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]
如果您需要有关初始化问题的建议以帮助您找到成功的解决方案,我推荐这篇文章:
- Safdarnejad, S.M., Hedengren, J.D., Lewis, N.R., Haseltine, E., Initialization Strategies for Optimization of Dynamic Systems, 计算机与化学工程, 2015,卷。 78,第 39-50 页,DOI:10.1016/j.compchemeng.2015.04.016.
问题:
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 及时回复
壁虎
我已经在 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]
如果您需要有关初始化问题的建议以帮助您找到成功的解决方案,我推荐这篇文章:
- Safdarnejad, S.M., Hedengren, J.D., Lewis, N.R., Haseltine, E., Initialization Strategies for Optimization of Dynamic Systems, 计算机与化学工程, 2015,卷。 78,第 39-50 页,DOI:10.1016/j.compchemeng.2015.04.016.
问题: 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 及时回复