Gekko MPC 控制器 - 在每个时间步更新参数

问题描述

我正在研究一个 MPC 问题,单个线性模型在预测范围内的每个时间步预测控制变量(见下文,其中 u 是操纵变量,y 是控制变量)。每次窗口移动时,预测范围内每个线性模型的系数都会根据当前状态变量而变化。

y[i+1] = A[i]@u[i]+B[i]
y[i+2] = A[i+1]@u[i:i+2]+B[i+1]
...
y[i+n] = A[i+n-1]@u[i:i+n]+B[i+n-1]

A 和 B 是根据当前状态的函数确定的矩阵列表。我基本上想在每个时间步长(优化之前)开始时暂停控制器,并根据系统的反馈重新计算这些系数矩阵。是否可以使用 MPC 模式 (IMODE=6) 在 Gekko 中执行此操作,或者我是否需要在 Gekko 之外管理时间?

解决方法

您可以通过同时运行 MHE and MPC in a row 来实现。您想在每个时间步运行 MHE(imode=5) 以估计模型参数 A 和 B。然后,在执行 MPC(mode=6) 计算之前,使用新的 A 和 B 更新 MPC 模型。

以下是使用 MHE 和 MPC 组合进行 TCLab 温度控制的示例。 https://apmonitor.com/do/index.php/Main/TCLabH

您可能需要使用可在此页面上找到的 ARX 类型模型来更改此示例中的模型。 https://apmonitor.com/do/index.php/Main/NonlinearControl

,

这是您在评论中的后续问题。

只是澄清一下,用于 MPC 预测的 ARX 模型结构是否会在所有仿真时间步长中发生变化?或者,它是否只发生在模拟开始时您没有足够的过去数据?

如果是后者,GEKKO会自动为您处理。

这是ARX模型的结构。

enter image description here

na:CV系数的#
nb: # MV
的系数 nk:CV 和 MV 之间的时间延迟长度

t < na or t < nb 时,Gekko 会自动调整模拟开始时的 na 和 nb,结果与上述原始问题中的公式相同。