簡體   English   中英

GEKKO Python 中的線性規划

[英]Linear Programming in GEKKO Python

目前正在通過 python 中的 GEKKO 庫解決 LP 問題。 這個問題有大約 8,000 個變量。 如果我增加變量的數量,它在 462 個變量上運行良好。 程序顯示錯誤“異常:@error:Model 表達式 *** function 字符串的語法錯誤:無效元素:,>=0”

任何評論都會有所幫助。

#Initialize Model
m = GEKKO() 
#Set global options
m.options.solver = 3
m.options.IMODE = 3 #steady state optimization

#define parameter
Num_Cell= 463
H2 = m.Array(m.Var,Num_Cell,value = 0)
Demand = m.Const(value=20000000) 
D = np.zeros(Num_Cell)
F = Hardwood_Sawlog.SumOfTotal

for i in range(Num_Cell):
    H2[i].lower = 0
    H2[i].upper = F[i]
    D[i] = i

m.Equation(m.sum(H2[0:Num_Cell])==Demand)
m.Obj(np.dot(D,H2))
m.solve(disp=False,debug=True)

print('') 
print(H2)

問題是m.Obj(np.dot(D,H2))的符號形式超過了 15,000 個字符的最大長度,問題較大。 這是您的問題的一個版本,它會產生錯誤:

from gekko import GEKKO
import numpy as np
m = GEKKO() 
m.options.solver = 3
m.options.IMODE = 3
Num_Cell= 1000
H2 = m.Array(m.Var,Num_Cell,value = 0)
Demand = m.Const(value=20000000) 
D = np.zeros(Num_Cell)
for i in range(Num_Cell):
    H2[i].lower = 0
    H2[i].upper = 100
    D[i] = i
m.Equation(m.sum(H2[0:Num_Cell])==Demand)
m.Obj(np.dot(D,H2))
m.solve(disp=False,debug=True)
print('') 
print(H2)

這是一個替代版本,它克服了np.dot()構造長(> 15,000 個字符)符號表達式的問題。

from gekko import GEKKO
import numpy as np
m = GEKKO() 
m.options.solver = 1
m.options.IMODE = 3
Num_Cell= 1000
H2 = m.Array(m.Var,Num_Cell,value = 0)
Demand = m.Const(value=20000000) 
D = np.zeros(Num_Cell)
for i in range(Num_Cell):
    H2[i].lower = 0
    H2[i].upper = 1e10
    D[i] = i
m.Equation(m.sum(H2[0:Num_Cell])==Demand)
m.Minimize(m.sum([D[i]*H2[i] for i in range(Num_Cell)]))
m.solve(disp=True)
print('') 
print(H2)

Gekko 中有線性規划gekko構建函數,可幫助構建具有稀疏矩陣或大型密集矩陣的大規模 LP 問題:

線性規划

更有效的方法是使用內置的 model 構建函數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM