【问题标题】:Linear Programming in GEKKO PythonGEKKO Python 中的线性规划
【发布时间】:2020-12-25 13:53:43
【问题描述】:

目前由 GEKKO Library 在 python 中解决一个 LP 问题。这个问题有大约 8,000 个变量。如果我增加变量的数量,它在 462 个变量上运行良好。程序显示错误“异常:@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)

【问题讨论】:

  • 在你程序的哪一行发现这个错误?请提供堆栈跟踪..

标签: python gekko


【解决方案1】:

问题是m.Obj(np.dot(D,H2))的符号形式超过了15000个字符的最大长度,问题较大。这是产生错误的问题的一个版本:

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 问题:

更有效的方法是使用built-in model building functions

【讨论】:

  • 感谢约翰博士。 Gekko 让世界变得更美好恭喜。
猜你喜欢
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多