我正在使用“IMODE=4”进行动态仿真。我想知道 GEKKO 中是否有一个选项可以将“IMODE=1”的稳态仿真结果设置为动态仿真的初始值。
或者,我是否需要运行稳态模拟并在单独运行动态模拟之前设置值?
最佳答案
Gekko 自动使用 IMODE
= 1 (SS) 或 3 (RTO) 的稳态模拟值来给出初始值,例如其他模式的初始条件。它以这种方式设计,以便在开始动态模式(例如模拟、移动地平线估计或模型预测控制(see IMODE summary))之前,可以使用稳态解决方案对模型进行初始化。
这是一个演示初始化的最小示例脚本。
from gekko import GEKKO
m = GEKKO()
p = m.Param(5)
x = m.Var(3)
m.Equation(p==x.dt()+x)
# steady-state (SS) simulation
m.options.IMODE=1
m.solve(disp=False)
print(x.value)
# dynamic simulation initialized with SS solution
m.time = [0,1,2,3,4]
p.value = 4
m.options.IMODE=4
m.solve(disp=False)
print(x.value)
有一个默认值 x=3
。稳态模拟用 p=5
求解,从稳态方程 5=0+x
得到 x=5
。然后,动态仿真使用方程 4=dx/dt+x
求解 ODE,在请求的时间点给出一个解 [5.0, 4.5, 4.25, 4.125, 4.0625]
[0,1,2,3,4]
。请注意,初始条件是5
,而不是3
,因为动态模拟是从稳态解初始化的。
关于python - 在 GEKKO 中设置动态模拟的初始值和稳态结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58808013/