GEKKO Python中的线性规划

3

使用Python中的GEKKO库解决一个LP问题。该问题有大约8000个变量。如果增加变量数量,即使其中有462个变量,也可以正常运行。程序显示错误消息:“Exception: @error:模型表达式***函数字符串语法错误:无效元素:,>= 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)

2
这个错误在你的程序哪一行找到了?请提供堆栈跟踪。 - Nikos M.
1个回答

2

问题在于较大的问题中,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 中有线性规划模型构建函数,可帮助构建具有稀疏矩阵或大型密集矩阵的大规模 LP 问题:

linear programming

更有效的方法是使用内置的模型构建函数。请参见:内置模型构建函数

1
谢谢约翰博士。Gekko 让世界变得更美好。恭喜! - Luis Vizcaya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接