Gekko PRED_HOR 和 CTRL_HOR 对比 m.time
Gekko PRED_HOR and CTRL_HOR vs m.time
我正在尝试实现在线 MPC 控制器,但我对 m.time 的具体功能有点困惑。
使用m.options.IMODE = 6 #MPC
和m.options.REQCTRLMODE=3
,我尝试定义预测和控制范围:
m.options.CTRL_HOR=10
m.options.CTRL_TIME=0.05
m.options.PRED_HOR=10
m.options.PRED_TIME=0.05
如果我理解正确,ctrl_hor
和 pred_hor
设置我们计算的未来时间步数,pred_time
和 ctrl_time
定义一个时间步长。
但问题是,如果我没有定义 m.time
,控制器会抛出错误,但它到底做了什么,为什么用各自的时间步长设置 ctrl 和 pred 范围还不够?
Gekko 默认使用 m.time
而不是 CTRL_HOR
和 PRED_HOR
。您可以在 Gekko 中定义等效的控制/预测范围:
import numpy as np
from gekko import GEKKO
m = GEKKO()
m.time = np.linspace(0,0.05,11)
CTRL_HOR
和 PRED_HOR
属性在 CSV_READ=0
时是可选的。但是,Gekko 使用 CSV 文件插入有关参数和变量默认值的信息,因此我不建议您将其关闭。使用 m.time
也更灵活,因为您可以有一个 non-uniform 控制/预测范围,例如:
m.time = [0,0.05,0.1,0.2,0.5,1.0]
这有助于在开始时获得精细的解决方案,然后采取更大的步骤来确定 steady-state 移动计划。这是一个 practical TCLab MPC application 和 real-time 数据。
我正在尝试实现在线 MPC 控制器,但我对 m.time 的具体功能有点困惑。
使用m.options.IMODE = 6 #MPC
和m.options.REQCTRLMODE=3
,我尝试定义预测和控制范围:
m.options.CTRL_HOR=10
m.options.CTRL_TIME=0.05
m.options.PRED_HOR=10
m.options.PRED_TIME=0.05
如果我理解正确,ctrl_hor
和 pred_hor
设置我们计算的未来时间步数,pred_time
和 ctrl_time
定义一个时间步长。
但问题是,如果我没有定义 m.time
,控制器会抛出错误,但它到底做了什么,为什么用各自的时间步长设置 ctrl 和 pred 范围还不够?
Gekko 默认使用 m.time
而不是 CTRL_HOR
和 PRED_HOR
。您可以在 Gekko 中定义等效的控制/预测范围:
import numpy as np
from gekko import GEKKO
m = GEKKO()
m.time = np.linspace(0,0.05,11)
CTRL_HOR
和 PRED_HOR
属性在 CSV_READ=0
时是可选的。但是,Gekko 使用 CSV 文件插入有关参数和变量默认值的信息,因此我不建议您将其关闭。使用 m.time
也更灵活,因为您可以有一个 non-uniform 控制/预测范围,例如:
m.time = [0,0.05,0.1,0.2,0.5,1.0]
这有助于在开始时获得精细的解决方案,然后采取更大的步骤来确定 steady-state 移动计划。这是一个 practical TCLab MPC application 和 real-time 数据。