如何解决GEKKO 中间结构中的无效元素错误
我正在尝试解决 Python GEKKO 中的 MINLP 优化问题。有两件事我想问你。
首先;我仔细检查了下面的链接,并试图了解赫登仁先生所做的更改。
Python GEKKO MINLP optimization of energy system: How to build intermediates that are 2D arrays
在这个例子的 .apm 模型文件中,带有文本编辑器;有“连接”。我了解那里的操作,但是我不知道代码中的哪一部分带来了这些连接。我试图遵循这个例子;我使用了类似的中间结构,但在我自己的模型中从未得到过类似的连接。
另一件事;在我的带有中间体的代码中,我有求和函数。再次在模型的文本文件版本中,我看到求和总是以 0 开头,然后将变量相互添加。例如:
.....[(((((((((((0+((((((((((1+i5))^(-9))) (2711)))(v230)))*(int_v340)))+
在模型中; T=10 G=11 上面的等式是这样的:
INV=m.Intermediate ([[sum (pow((1+r),-t)*IC[g]*Z[g,t]*Y[g,t] for g in range(G) )]对于范围内的 t(T) ] )
操作看起来正确,但我不明白为什么每个括号中都有 0(零)? 它给出了无效元素错误,并指向具有最后一个 t 值的变量...
这个变量 (v230) 代表 Z[11,10]。我发现它总是给出最后一年的错误,这意味着最高的 t 值。
另外,如果我使用 m.sum 而不是 sum;它给出了这个错误:“x 必须是 GEKKO 参数、变量或表达式的 Python 列表”
如果您能给我一个提示,我将不胜感激。这可能不是什么大问题,但我自己找不到任何解决方案。
感谢您的时间和理解。
最好的问候
解决方法
中间体总是在开头放一个零,以防表达式中没有参数。这是一个简单的 Gekko 脚本,显示了中间体和 m.sum()
的使用。
from gekko import GEKKO
m = GEKKO()
x = m.Array(m.Var,3)
m.Equation(m.sum(x)==3)
y = m.Intermediate(sum(x))
m.Minimize(y)
for i,xi in enumerate(x):
m.Minimize((xi-i)**2)
m.solve()
m.open_folder()
print(x)
这是由 Gekko 生成并由 APMonitor 编译成字节码的 gk_model0.apm
模型文件。
Model
Variables
v1 = 0
v2 = 0
v3 = 0
End Variables
Intermediates
i0=(((0+v1)+v2)+v3)
End Intermediates
Equations
((v1+v2)+v3)=3
minimize i0
minimize (((v1-0))^(2))
minimize (((v2-1))^(2))
minimize (((v3-2))^(2))
End Equations
End Model
如果将 x
numpy 数组转换为带有 x=list(x)
的列表,那么它会创建一个对象,并将 connections 以 shown in the documentation 的形式用于这些对象。这是 APMonitor 模型。
Model
Variables
v1 = 0
v2 = 0
v3 = 0
v4 = 0
End Variables
Intermediates
i0=(((0+v1)+v2)+v3)
End Intermediates
Equations
v4=3
minimize i0
minimize (((v1-0))^(2))
minimize (((v2-1))^(2))
minimize (((v3-2))^(2))
End Equations
Connections
v1 = sum_1.x[1]
v2 = sum_1.x[2]
v3 = sum_1.x[3]
v4 = sum_1.y
End Connections
Objects
sum_1 = sum(3)
End Objects
End Model
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。