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 教授的及時回復。
壁虎
添加回答
舉報