微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

GEKKO 中间结构中的无效元素错误

如何解决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

这个变量 (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) 的列表,那么它会创建一个对象,并将 connectionsshown 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 举报,一经查实,本站将立刻删除。