§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[j]$,自然不会冲过头。
不直接追踪 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
★ 核心
$\beta=0.7$:控制增量指数衰减,第二步为第一步的 70%
$\beta=1$:所有步控制增量相等(斜坡控制)
引入阶梯约束 $\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. 控制量限幅
○ 工程细节
两级限幅(归一化空间):
- 增量限幅:$|\Delta u| \leq 0.1$(对应 ±1.6 mA/步),防止控制冲击
- 绝对值限幅:$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.7 | 0.305 | 271 | 14.6 | 1.6 |
| PID (Kp=1.5, Ki=0.02) | 0.346 | 345 | 14.4 | 1.6 |
GPC 的 RMSE 比 PID 低约 12%,IAE 低约 21%。优势来源:GPC 将 $k=24$ 步时延显式纳入预测,PID 只能被动等待反馈。
PID 的优势
参数少(Kp/Ki/Kd),现场容易微调。如果 GPC 调参困难,PID 是可靠的备选方案。