![](/img/trans.png)
[英]How to get to know if APOPT Solver from Gekko found the global optimum in MINLP problem?
[英]How to know the maximum number of Equations when using GEKKO with an MINLP solver
我正在研究一個優化問題,我正在使用帶有 APOPT 求解器的 gekko 來解決它,有時當我有很多變量時,我會收到以下錯誤“異常:@error:最大方程長度”。
我怎么知道“最大方程長度”?
變量和方程在編譯成字節碼之前以文本文件的形式寫入臨時文件夾,以便通過自動微分有效計算殘差、目標函數、稀疏一階導數和稀疏二階導數。 在gekko
模型中,每個方程限制為 15,000 個字符,而不僅僅是使用 APPT 求解器。 此限制可以擴展,但它是為了鼓勵提高編譯和求解速度的模型構建方法。 一個簡單的gekko
模型演示了將x = sum(p)
作為 10,000 個值的向量的問題。
from gekko import GEKKO
m = GEKKO(remote=False)
p = m.Array(m.Param,10000,value=1)
x = m.Var(lb=0,integer=True)
m.Equation(x==sum(p))
m.options.SOLVER = 1
m.open_folder()
m.solve()
這給出了超出最大方程長度的錯誤。
Exception: @error: Max Equation Length
Error with line number: 10008
使用m.open_folder()
打開運行文件夾。 gekko
模型位於文件gk_model0.apm
中,該文件使用文本編輯器進行檢查。 有幾種方法可以減少這個問題的方程長度。
p
可以是普通的numpy
數組,而不是gekko
參數。 總和在寫入模型文件之前是預先計算的。from gekko import GEKKO
import numpy as np
m = GEKKO(remote=False)
p = np.ones(10000)
x = m.Var(lb=0,integer=True)
m.Equation(x==sum(p))
m.options.SOLVER = 1
m.open_folder()
m.solve()
這給出了以下gk_model0.apm
模型:
Model
Variables
int_v1 = 0, >= 0
End Variables
Equations
int_v1=10000.0
End Equations
End Model
p
需要是gekko
參數或變量,則使用m.sum()
函數而不是sum()
。 對於gekko
優化問題,使用m.sum()
比sum()
或np.sum()
更有效,並且避免了最大方程長度的問題。 編譯時間比第一個選項長。from gekko import GEKKO
m = GEKKO(remote=False)
p = m.Array(m.Param,10000,value=1)
x = m.Var(lb=0,integer=True)
m.Equation(x==m.sum(p))
m.options.SOLVER = 1
m.solve()
m.Intermediate()
來減小方程大小。 這種特殊類型的中間變量結合了模型簡化原則,其中一個數量被明確計算一次並在模型中的多個位置使用。 問題/答案中有其他建議,例如如何修復 Python Gekko Max Equation Length 錯誤
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.