在 GEKKO 中设置具有稳态结果的动态模拟的初始值
Set the initial value for dynamic simulation w/ steady-state results in GEKKO
我正在用 'IMODE=4' 进行动态模拟。我想知道GEKKO中是否有一个选项可以将稳态模拟结果设置为'IMODE=1'作为动态模拟的初始值。
或者,我是否需要运行稳态模拟并在运行动态模拟之前单独设置值?
Gekko 自动使用来自 IMODE
= 1 (SS) 或 3 (RTO) 的 steady-state 模拟的值来给出初始值,例如其他模式的初始条件。它以这种方式设计,以便在开始动态模式(例如模拟、移动 horizon 估计或模型预测控制(see IMODE summary)之前,可以使用 steady-state 解决方案对模型进行初始化。
这是一个演示初始化的最小示例脚本。
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
求解,从 steady-state 方程 5=0+x
得到 x=5
。然后,动态仿真使用方程 4=dx/dt+x
求解 ODE,在 [0,1,2,3,4]
的请求时间点给出解 [5.0, 4.5, 4.25, 4.125, 4.0625]
。注意初始条件是5
,不是3
,因为动态模拟是从steady-state解初始化的。
我正在用 'IMODE=4' 进行动态模拟。我想知道GEKKO中是否有一个选项可以将稳态模拟结果设置为'IMODE=1'作为动态模拟的初始值。
或者,我是否需要运行稳态模拟并在运行动态模拟之前单独设置值?
Gekko 自动使用来自 IMODE
= 1 (SS) 或 3 (RTO) 的 steady-state 模拟的值来给出初始值,例如其他模式的初始条件。它以这种方式设计,以便在开始动态模式(例如模拟、移动 horizon 估计或模型预测控制(see IMODE summary)之前,可以使用 steady-state 解决方案对模型进行初始化。
这是一个演示初始化的最小示例脚本。
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
求解,从 steady-state 方程 5=0+x
得到 x=5
。然后,动态仿真使用方程 4=dx/dt+x
求解 ODE,在 [0,1,2,3,4]
的请求时间点给出解 [5.0, 4.5, 4.25, 4.125, 4.0625]
。注意初始条件是5
,不是3
,因为动态模拟是从steady-state解初始化的。