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

2024-04-28 20:47:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python GEKKO解决一个MINLP优化问题。有两件事我想问你

首先;我仔细检查了下面的链接,并试图理解何登仁先生所做的更改

Python GEKKO MINLP optimization of energy system: How to build intermediates that are 2D arrays

在本例中,是带有文本编辑器的.apm模型文件;存在“连接”。我理解那里的操作,但是我不知道代码中的哪个部分带来了这些连接。我试着效仿这个例子;我使用了类似的中间结构,但在我自己的模型中从未得到过类似的连接

另一件事;在我的中间代码中,我有求和函数。在模型的文本文件版本中,我再次看到求和总是以0开头,然后将变量添加到彼此。例如:

在模型中,T=10 G=11,上述方程为:

INV=m.Intermediate([[sum(pow((1+r),-t)*IC[g]*Z[g,t]*Y[g,t]表示范围(g)中的g]表示范围(t)])

操作看起来是正确的,但我不明白为什么每个括号中都有0(零)? 它给出无效元素错误,并用最后一个t值指向变量

***函数字符串语法错误:无效元素:v230

这个变量(v230)代表Z[11,10]。我发现它总是给出去年的一个错误,这意味着t值最高

另外,如果我使用m.sum而不是sum,它会给出这样一个错误:“x必须是GEKKO参数、变量或表达式的python列表”

如果你能给我一个提示,我将非常感激。这可能不是一个大问题,但是我自己找不到任何解决办法

感谢您的时间和理解

致意


Tags: of函数模型元素链接错误两件事energy
1条回答
网友
1楼 · 发布于 2024-04-28 20:47:26

中间体总是在开头加一个零,以防表达式中没有参数。下面是一个简单的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

如果将xnumpy数组转换为带有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

相关问题 更多 >