[英]How can I simplify a large scale NLP model in Gekko Python?
我還是 Python 中的 Gekko 優化的新手,我在擴展我的 NLP 問題時遇到了問題。 在嘗試多次(並以不同的方式)調用函數 m.Sum、使用 m.Intermediate 並使用列表推導來減小表示我的模型的字符串的大小后,我在嘗試優化僅有 200 個變量。 當我僅針對 80 個變量進行優化時,該模型有效。
這是我得到的錯誤:
APM model error: string > 15000 characters
Consider breaking up the line into multiple equations
The may also be due to only using newline character CR
instead of CR LF (for Windows) or LF (for MacOS/Linux)
To fix this problem, save APM file with appropriate newline characters
STOPPING...
這是讓我遇到麻煩的代碼片段:
def function_to_minimize(variables0,m):
somme = [ m.Intermediate(
variables0[0+(4*i)] * df['value1'][i] + \
variables0[1+(4*i)] * df['value2'][i] + \
variables0[2+(4*i)] * df['value3'][i] + \
variables0[3+(4*i)] * df['value4'][i]
) for i in range(0,hours)]
somme = reduce(lambda a, b: a+b, somme)
m.Obj(m.Intermediate(somme))
嘗試多次調用m.Obj()
而不是創建總和。 下面是一個演示該問題的最小完整問題。 如果v = m.Array(m.Var,100,lb=0,ub=10)
是一個包含更多變量的數組,則可以達到 15,000 個方程長度限制。
from gekko import GEKKO
m = GEKKO()
v = m.Array(m.Var,100,lb=0,ub=10)
hours = 24
def function_to_minimize(variables0,m):
somme = [ m.Intermediate(
variables0[0+(4*i)] * 1 + \
variables0[1+(4*i)] * 2 + \
variables0[2+(4*i)] * 3 + \
variables0[3+(4*i)] * 4
) for i in range(0,hours)]
somme = sum(somme)
m.Minimize(m.Intermediate(somme))
function_to_minimize(v,m)
m.solve()
使用m.sum()
來避免限制。
from gekko import GEKKO
m = GEKKO()
v = m.Array(m.Var,100,lb=0,ub=10)
hours = 24
def function_to_minimize(variables0,m):
somme = [ m.Intermediate(
variables0[0+(4*i)] * 1 + \
variables0[1+(4*i)] * 2 + \
variables0[2+(4*i)] * 3 + \
variables0[3+(4*i)] * 4
) for i in range(0,hours)]
m.Minimize(m.sum(somme))
function_to_minimize(v,m)
m.solve()
或使用[m.Minimize(s) for s in somme]
分別為每個元素調用m.Obj()
或m.Minimize()
。
from gekko import GEKKO
m = GEKKO()
v = m.Array(m.Var,100,lb=0,ub=10)
hours = 24
def function_to_minimize(variables0,m):
somme = [ m.Intermediate(
variables0[0+(4*i)] * 1 + \
variables0[1+(4*i)] * 2 + \
variables0[2+(4*i)] * 3 + \
variables0[3+(4*i)] * 4
) for i in range(0,hours)]
[m.Minimize(s) for s in somme]
function_to_minimize(v,m)
m.solve()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.