【发布时间】:2022-01-18 14:00:33
【问题描述】:
如果我想用V1_0表示V1的起始值,V2_0表示V2的起始值,并且有起始方程V2_0-V1_0=5,我应该如何用gekko来表示这个关系?
【问题讨论】:
标签: gekko
如果我想用V1_0表示V1的起始值,V2_0表示V2的起始值,并且有起始方程V2_0-V1_0=5,我应该如何用gekko来表示这个关系?
【问题讨论】:
标签: gekko
对于这种级别的控制,我建议将动态问题写成数组。如果您有微分方程,则需要包含您自己的 collocation equations。
from gekko import GEKKO
m = GEKKO()
n = 5
V1 = m.Array(m.Var,n)
V2 = m.Array(m.Var,n)
# rename initial conditions
V1_0 = V1[0]; V2_0 = V2[0]
m.Equation(V1_0==3)
m.Equation(V2_0-V1_0==5)
for i in range(1,n):
m.Equation(V1[i]==V1[i-1]+1)
m.Equation(V2[i]==V2[i-1]+0.5)
m.solve(disp=False)
print(V1)
print(V2)
这会产生V1 和V2 的解决方案:
[[3.0] [4.0] [5.0] [6.0] [7.0]]
[[8.0] [8.5] [9.0] [9.5] [10.0]]
如果您使用的是动态模式(IMODE=5 或IMODE=6),您还可以尝试使用m.Connection() 函数将初始条件与V1_0=m.FV() 和V2_0=m.FV() 与V2_0.STATUS=1 连接起来。然后你可以写公式m.Equation(V2_0-V1_0==5)。
【讨论】: