§3  GPC 控制律

预测分解 · 柔化轨迹 · 阶梯式 GPC · 三个旋钮 · GPC vs PID
水箱液位控制实验 · 参数:p=40, pu=5, β=0.7, λ=2, α=0.9
1. 预测分解
★ 核心

$p$ 步预测写成向量形式:

$$ \mathbf{Y} = \mathbf{Y}^1 + \mathbf{G}\,\Delta\mathbf{U} \tag{3.1}$$
  • $\mathbf{Y}^1 \in \mathbb{R}^p$:自由响应,由过去 $y$ 历史计算(已知)
  • $\mathbf{G} \in \mathbb{R}^{p \times p}$:下三角阶跃响应矩阵,$(i,j)$ 元素 $= G_{i+1}[i-j]$($i \geq j$,否则 0)
  • $\Delta\mathbf{U} = [\Delta u_t, \ldots, \Delta u_{t+p-1}]^T$:未来控制增量序列(待求)
2. 柔化设定值轨迹
★ 核心

不直接追踪 SP 阶跃,而是用一阶滤波生成缓坡轨迹:

$$ W[0] = \alpha\, y(t) + (1-\alpha)\, SP \tag{3.2}$$ $$ W[j] = \alpha\, W[j-1] + (1-\alpha)\, SP,\quad j=1,\ldots,p-1 \tag{3.3}$$

$\alpha$ 越大,轨迹爬升越慢,超调越小,但响应速度也越慢。

为什么柔化能压超调
超调的根本原因:控制器看到大误差猛推控制量,经过 $k=24$ 步时延后输出才到,此时已冲过目标。
柔化后,控制器追的是一个比 SP 低的中间值 $W[j]$,自然不会冲过头。
3. 目标函数与最优解
★ 核心 $$ J = (\mathbf{Y} - \mathbf{W})^T(\mathbf{Y} - \mathbf{W}) + \lambda\,\Delta\mathbf{U}^T\Delta\mathbf{U} \tag{3.4}$$

代入预测分解,对 $\Delta\mathbf{U}$ 求导令其为零:

$$ \Delta\mathbf{U}^* = (\mathbf{G}_1^T\mathbf{G}_1 + \lambda\mathbf{I})^{-1}\mathbf{G}_1^T(\mathbf{W} - \mathbf{Y}^1) \tag{3.5}$$

其中 $\mathbf{G}_1 \in \mathbb{R}^{p \times p_u}$ 是 $\mathbf{G}$ 的前 $p_u$ 列(控制前景截断)。滚动优化只取第一个元素实施。

4. 阶梯式 GPC
★ 核心

引入阶梯约束 $\Delta u_{t+i} = \beta^i \delta$,将 $p_u$ 维优化压缩为标量 $\delta$:

$$ \mathbf{G}_2 = \mathbf{G}_1 \cdot [1, \beta, \ldots, \beta^{p_u-1}]^T \in \mathbb{R}^p \tag{3.6}$$ $$ \delta = \frac{\mathbf{G}_2^T(\mathbf{W} - \mathbf{Y}^1)}{\mathbf{G}_2^T\mathbf{G}_2 + \lambda\sum_{i=0}^{p_u-1}\beta^{2i}} \tag{3.7}$$

无矩阵求逆,每步只需一次向量内积,适合 C++ 实时实现。

β 的物理含义
$\beta=0$:只有第一步有控制增量(退化为 DMC 单步)
$\beta=0.7$:控制增量指数衰减,第二步为第一步的 70%
$\beta=1$:所有步控制增量相等(斜坡控制)
5. 控制量限幅
○ 工程细节

两级限幅(归一化空间):

  1. 增量限幅:$|\Delta u| \leq 0.1$(对应 ±1.6 mA/步),防止控制冲击
  2. 绝对值限幅:$u \in [0, 1]$(对应 4~20 mA),防止超出执行器范围

绝对值限幅后需要回算实际执行的增量:

du_t = clip(du_t, -DU_MAX, DU_MAX)
u_t  = clip(u_prev + du_t, 0.0, 1.0)
du_t = u_t - u_prev   # 实际执行增量(可能被截断)
    
6. 三个旋钮的作用维度
★ 核心(常见误解)

$\alpha$、$\beta$、$p$ 作用在不同维度,可以同时使用,互不冲突

参数作用对象主要效果代价
$\alpha$(柔化因子)参考轨迹 $\mathbf{W}$压超调、平滑跟踪响应变慢
$\beta$(阶梯因子)控制序列 $\Delta\mathbf{U}$平滑控制动作、无矩阵求逆控制灵活性降低
$\lambda$(控制权重)目标函数惩罚项限制控制幅度响应变慢
$p$(预测时域)预测窗口长度提升稳态精度、抗扰计算量增加
常见误解
"增大 $p$ 可以压超调"——错误。超调应该用 $\alpha$ 控制,$p$ 控制的是预测覆盖范围。增大 $p$ 反而可能因预测过于保守导致响应变慢。
7. GPC vs PID 对比
○ 实验结果

相同 ARX 模型(na=1)、相同 SP 序列、相同扰动,仿真对比结果:

控制器RMSE (V)IAE (V)u_max (mA)Δu_max (mA/步)
GPC β=0.70.30527114.61.6
PID (Kp=1.5, Ki=0.02)0.34634514.41.6

GPC 的 RMSE 比 PID 低约 12%,IAE 低约 21%。优势来源:GPC 将 $k=24$ 步时延显式纳入预测,PID 只能被动等待反馈。

PID 的优势
参数少(Kp/Ki/Kd),现场容易微调。如果 GPC 调参困难,PID 是可靠的备选方案。