【问题标题】:Gekko PRED_HOR and CTRL_HOR vs m.timeGekko PRED_HOR 和 CTRL_HOR 与 m.time
【发布时间】:2021-01-07 11:49:15
【问题描述】:

我正在尝试实现一个在线 MPC 控制器,但我对 m.time 究竟做了什么有点困惑。

使用m.options.IMODE = 6 #MPCm.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_horpred_hor 设置了我们计算的未来时间步长,pred_timectrl_time 定义了一个时间步长的长度。 但问题是,如果我没有定义m.time,控制器会抛出错误,但它到底做了什么,为什么用各自的时间步设置 ctrl 和 pred 水平线还不够?

【问题讨论】:

  • 嗨,欢迎来到 SO。请强烈考虑发布一个 MRE(stackoverflow.com/help/minimal-reproducible-example),其中包含 HTML 和 CSS(以及 JS,如果适用或其他语言)的 sn-ps,以便我们可以更好地帮助您,谢谢。另外,请专注于一个特定的问题。
  • 这是另一篇关于控制和预测视野的最新帖子:stackoverflow.com/questions/64040582/…

标签: gekko


【解决方案1】:

Gekko 默认使用m.time,而不是CTRL_HORPRED_HOR。您可以在 Gekko 中定义等效的控制/预测范围:

import numpy as np
from gekko import GEKKO

m = GEKKO()
m.time = np.linspace(0,0.05,11)

CTRL_HORPRED_HOR 属性在 CSV_READ=0 时是可选的。但是,Gekko 使用 CSV 文件来插入有关参数和变量的默认值的信息,因此我不建议您将其关闭。使用m.time 也更灵活,因为您可以有一个不统一的控制/预测范围,例如:

m.time = [0,0.05,0.1,0.2,0.5,1.0]

这有助于在开始时获得精细的分辨率,然后通过更大的步骤来确定稳态移动计划。这是带有实时数据的practical TCLab MPC application

【讨论】:

  • 感谢您的回复。我怀疑这就是 m.time 所做的,但如果我需要预测和控制视野彼此不同,我该怎么办?
  • 您可以设置类似m.time = [0.0,0.05,0.1,0.15,0.2,0.4,0.6.0.8,1.0] 的内容,相当于CTRL_TIME=0.05CTRL_HOR=4PRED_TIME=0.2PRED_HOR=8。如果您真的不想调整 MV 预测范围的最后 4 次移动,那么您可以使用 m.Connection() 将它们连接成一个值。
猜你喜欢
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
  • 2023-03-10
  • 2022-01-12
  • 2020-07-12
相关资源
最近更新 更多