2 回答

TA贡献1843条经验 获得超7个赞
您可以通过设置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]
如果您需要有关初始化问题的建议以帮助您找到成功的解决方案,我推荐这篇文章:
Safdarnejad, SM, Hedengren, JD, Lewis, NR, Haseltine, E.,动态系统优化的初始化策略,计算机和化学工程,2015 年,卷。78,第 39-50 页,DOI:10.1016/j.compchemeng.2015.04.016。

TA贡献1790条经验 获得超9个赞
问题:1) 我正在用 APPT Solver 解决一个 MINLP 问题。我的决策变量被定义为整数。我已经按照您的建议检索了第 10,000 次迭代的结果。但决策变量值是非整数。那么为什么 APPT 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']
非常感谢John Hedengren 教授的及时回复。
壁虎
添加回答
举报