第10章:模型预测控制(MPC)
模型预测控制(Model Predictive Control, MPC)是现代控制理论中最成功的先进控制策略之一,广泛应用于化工、石油炼制、航空航天、汽车工业等领域。MPC的核心思想是利用系统的数学模型,在每个采样时刻求解一个有限时域优化问题,得到最优控制序列,但只实施第一个控制动作,然后在下一时刻重复这个过程。这种"滚动时域"策略使MPC能够自然地处理多变量系统、约束条件和优化目标,成为工业界最受欢迎的先进控制技术。
10.1 MPC基本原理与公式化
10.1.1 预测模型
MPC的核心是一个能够预测系统未来行为的数学模型。考虑离散时间线性系统:
$$ \begin{aligned} x_{k+1} &= Ax_k + Bu_k \\ y_k &= Cx_k + Du_k \end{aligned} $$
其中 $x_k \in \mathbb{R}^n$ 是状态向量,$u_k \in \mathbb{R}^m$ 是控制输入,$y_k \in \mathbb{R}^p$ 是输出向量。
给定当前状态 $x_k$,我们可以预测未来 $N$ 步的系统轨迹:
$$ \begin{aligned} x_{k+1|k} &= Ax_k + Bu_{k|k} \\ x_{k+2|k} &= A^2x_k + ABu_{k|k} + Bu_{k+1|k} \\ &\vdots \\ x_{k+N|k} &= A^Nx_k + \sum_{i=0}^{N-1} A^{N-1-i}Bu_{k+i|k} \end{aligned} $$
其中 $x_{k+i|k}$ 表示在时刻 $k$ 对时刻 $k+i$ 的状态预测。
10.1.2 优化问题公式化
MPC在每个采样时刻求解如下优化问题:
$$ \begin{aligned} \min_{u_{k|k}, \ldots, u_{k+N-1|k}} \quad & J = \sum_{i=0}^{N-1} \left( |x_{k+i|k} - x_{ref}|_Q^2 + |u_{k+i|k}|_R^2 \right) + |x_{k+N|k} - x_{ref}|_P^2 \\ \text{s.t.} \quad & x_{k+i+1|k} = Ax_{k+i|k} + Bu_{k+i|k}, \quad i = 0, \ldots, N-1 \\ & x_{k|k} = x_k \\ & x_{min} \leq x_{k+i|k} \leq x_{max}, \quad i = 1, \ldots, N \\ & u_{min} \leq u_{k+i|k} \leq u_{max}, \quad i = 0, \ldots, N-1 \end{aligned} $$
其中:
- $N$ 是预测时域
- $Q \succeq 0, R \succ 0$ 是权重矩阵
- $P \succeq 0$ 是终端代价权重
- $x_{ref}$ 是参考状态
- 约束条件包括状态约束和输入约束
10.1.3 滚动时域策略
MPC的关键特征是滚动时域(Receding Horizon)策略:
- 在时刻 $k$,测量或估计当前状态 $x_k$
- 求解优化问题,得到最优控制序列 $u^*_{k|k}, u^*_{k+1|k}, \ldots, u^*_{k+N-1|k}$
- 只应用第一个控制动作 $u_k = u^*_{k|k}$
- 在下一时刻 $k+1$,重复整个过程
时刻 k: [u*_k, u*_{k+1}, ..., u*_{k+N-1}] → 应用 u*_k
↑___________________|
预测时域 N
时刻 k+1: [u*_{k+1}, u*_{k+2}, ..., u*_{k+N}] → 应用 u*_{k+1}
↑_____________________|
预测时域 N(向前滚动)
这种策略的优势在于:
- 能够利用最新的状态信息进行反馈控制
- 可以补偿模型误差和外部扰动
- 自然地实现了优化与反馈的结合
10.1.4 将优化问题转化为二次规划
为了高效求解,我们通常将MPC优化问题转化为标准的二次规划(QP)形式。定义增广向量:
$$ \mathbf{U} = \begin{bmatrix} u_{k|k} \\ u_{k+1|k} \\ \vdots \\ u_{k+N-1|k} \end{bmatrix}, \quad \mathbf{X} = \begin{bmatrix} x_{k+1|k} \\ x_{k+2|k} \\ \vdots \\ x_{k+N|k} \end{bmatrix} $$
预测方程可以写成紧凑形式:
$$ \mathbf{X} = \mathbf{F}x_k + \mathbf{G}\mathbf{U} $$
其中:
$$ \mathbf{F} = \begin{bmatrix} A \\ A^2 \\ \vdots \\ A^N \end{bmatrix}, \quad \mathbf{G} = \begin{bmatrix} B & 0 & \cdots & 0 \\ AB & B & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ A^{N-1}B & A^{N-2}B & \cdots & B \end{bmatrix} $$
代价函数可以写成:
$$ J = \mathbf{U}^T\mathbf{H}\mathbf{U} + 2\mathbf{f}^T\mathbf{U} + c $$
其中 $\mathbf{H}$、$\mathbf{f}$ 和 $c$ 由权重矩阵和参考轨迹决定。这就是一个标准的QP问题,可以用专门的QP求解器高效求解。
10.2 约束处理与优化求解
10.2.1 约束类型
MPC能够系统地处理各种约束,这是其相对于传统控制方法的主要优势之一:
-
输入约束 - 幅值约束:$u_{min} \leq u_k \leq u_{max}$(如阀门开度0-100%) - 变化率约束:$\Delta u_{min} \leq u_k - u_{k-1} \leq \Delta u_{max}$(防止执行器磨损)
-
状态/输出约束 - 安全约束:$x_{min} \leq x_k \leq x_{max}$(如温度、压力限制) - 软约束:允许短暂违反但会受到惩罚
-
终端约束 - 终端状态约束:$x_{k+N|k} \in \mathcal{X}_f$(保证稳定性) - 终端等式约束:$x_{k+N|k} = x_{ref}$(用于轨迹跟踪)
10.2.2 软约束处理
硬约束可能导致优化问题无可行解,特别是在存在扰动或模型误差时。软约束通过引入松弛变量来解决这个问题:
$$ \begin{aligned} \min \quad & J + \rho \sum_{i=1}^{N} |\epsilon_i|_1 \\ \text{s.t.} \quad & x_{min} - \epsilon_i \leq x_{k+i|k} \leq x_{max} + \epsilon_i \\ & \epsilon_i \geq 0 \end{aligned} $$
其中 $\epsilon_i$ 是松弛变量,$\rho$ 是惩罚权重。这种方法在保证问题始终有解的同时,尽可能减少约束违反。
10.2.3 优化求解方法
- 内点法(Interior Point Methods)
适用于中大规模问题,具有多项式时间复杂度:
- 通过障碍函数将约束问题转化为无约束问题
- 迭代次数对问题规模不敏感
- 每次迭代需要求解大规模线性系统
- 活动集方法(Active Set Methods)
适用于小规模问题,能够热启动:
- 维护活动约束集合
- 在可行域的边界上搜索
- 利用前一时刻的解作为初始猜测
- 快速梯度方法(Fast Gradient Methods)
适用于嵌入式实现:
- 基于梯度投影的一阶方法
- 内存需求小,适合实时系统
- 收敛速度依赖于问题的条件数
10.2.4 计算效率优化
- 结构利用
MPC问题具有特殊的稀疏结构,可以利用这种结构加速求解:
$$ \mathbf{H} = \begin{bmatrix} H_{11} & H_{12} & & \\ H_{21} & H_{22} & H_{23} & \\ & H_{32} & \ddots & \ddots \\ & & \ddots & H_{N,N} \end{bmatrix} $$
使用块三对角矩阵分解算法,计算复杂度从 $O(N^3m^3)$ 降低到 $O(Nm^3)$。
- 热启动
利用前一时刻的解构造当前时刻的初始猜测:
$$ \mathbf{U}^{init}_k = \begin{bmatrix} u^*_{k+1|k-1} \\ \vdots \\ u^*_{k+N-1|k-1} \\ u_{steady} \end{bmatrix} $$
这种方法显著减少迭代次数,特别是在系统变化缓慢时。
- 移动时域估计(Move Blocking)
减少优化变量数量,假设控制输入在某些时段内保持不变:
$$ u_{k+i|k} = u_{k+j|k}, \quad i,j \in \text{同一时段} $$
这种方法在长预测时域情况下特别有效。
10.3 稳定性保证
10.3.1 无约束MPC的稳定性
对于无约束线性MPC,如果选择无限时域代价函数:
$$ J_\infty = \sum_{i=0}^{\infty} \left( |x_{k+i|k}|_Q^2 + |u_{k+i|k}|_R^2 \right) $$
则闭环系统是渐近稳定的。无限时域问题的解可以通过求解代数Riccati方程得到:
$$ P = Q + A^TPA - A^TPB(R + B^TPB)^{-1}B^TPA $$
最优控制律为: $$ u_k = -Kx_k, \quad K = (R + B^TPB)^{-1}B^TPA $$
10.3.2 终端代价方法
有限时域MPC通过添加适当的终端代价来保证稳定性。终端代价 $V_f(x) = x^TPx$ 应满足:
Lyapunov递减条件: $$ V_f(Ax + Bu^*) - V_f(x) \leq -|x|_Q^2 - |u^*|_R^2 $$
其中 $u^* = -Kx$ 是局部控制器。
通常选择 $P$ 为对应无限时域LQR问题的解,这保证了上述条件成立。
10.3.3 终端约束集方法
另一种保证稳定性的方法是引入终端约束集 $\mathcal{X}_f$:
$$ x_{k+N|k} \in \mathcal{X}_f $$
终端集应满足:
- 正不变性: 如果 $x \in \mathcal{X}_f$,则 $Ax + Bu^*(x) \in \mathcal{X}_f$
- 约束可行性: 对所有 $x \in \mathcal{X}_f$,控制 $u^*(x)$ 满足输入约束
- 包含原点: $0 \in \mathcal{X}_f$
最大正不变集可以通过迭代计算:
$$ \mathcal{X}_f = \{x : |Kx| \leq u_{max}, |C_ix| \leq y_{max}^{(i)}, i = 0,1,2,\ldots\} $$
其中 $C_i = C(A-BK)^i$。
10.3.4 递归可行性
递归可行性是MPC稳定性的关键。如果时刻 $k$ 的问题有可行解,则时刻 $k+1$ 的问题也应有可行解。
定理(递归可行性): 如果MPC问题在时刻 $k$ 有可行解 $\mathbf{U}^*_k$,且终端约束集 $\mathcal{X}_f$ 是正不变的,则在时刻 $k+1$ 存在可行解:
$$ \mathbf{U}_{k+1}^{feas} = \begin{bmatrix} u^*_{k+1|k} \\ \vdots \\ u^*_{k+N-1|k} \\ K x^*_{k+N|k} \end{bmatrix} $$
这个构造的可行解保证了MPC问题始终有解,从而保证了闭环稳定性。
10.4 鲁棒MPC
实际系统总是存在模型不确定性和外部扰动,鲁棒MPC旨在保证在这些不确定性存在的情况下仍能维持稳定性和性能。
10.4.1 不确定性建模
考虑存在不确定性的系统:
$$ x_{k+1} = A(\theta)x_k + B(\theta)u_k + w_k $$
其中:
- $\theta \in \Theta$ 是参数不确定性
- $w_k \in \mathcal{W}$ 是有界扰动
- $\mathcal{W} = \{w : |w|_\infty \leq w_{max}\}$
常见的不确定性描述方式:
-
多胞体不确定性 $$ [A(\theta), B(\theta)] \in \text{Co}\{[A_1, B_1], \ldots, [A_L, B_L]\} $$
-
范数有界不确定性 $$ A(\theta) = A_0 + \Delta A, \quad |\Delta A| \leq \delta_A $$
10.4.2 最小-最大MPC
最保守但最安全的方法是考虑最坏情况:
$$ \begin{aligned} \min_{u_{k|k}, \ldots} \max_{w, \theta} \quad & J(x_k, \mathbf{U}, w, \theta) \\ \text{s.t.} \quad & \text{约束对所有} \, w \in \mathcal{W}, \theta \in \Theta \, \text{都满足} \end{aligned} $$
这个问题通常很难求解,需要采用近似方法。
10.4.3 管道MPC(Tube MPC)
管道MPC通过分离名义轨迹和误差动态来处理不确定性:
-
名义系统: 无扰动的确定性系统 $$ \bar{x}_{k+1} = A\bar{x}_k + B\bar{u}_k $$
-
误差系统: 实际状态与名义状态的偏差 $$ e_k = x_k - \bar{x}_k $$
-
鲁棒控制律: $$ u_k = \bar{u}_k + K(x_k - \bar{x}_k) $$
误差动态满足: $$ e_{k+1} = (A + BK)e_k + w_k $$
通过选择合适的反馈增益 $K$,可以保证误差始终在一个鲁棒正不变集 $\mathcal{E}$ 内:
$$ \mathcal{E} = \{e : e = \sum_{i=0}^{\infty} (A+BK)^i w_i, w_i \in \mathcal{W}\} $$
约束需要收紧以考虑误差: $$ \bar{x}_k \in \mathcal{X} \ominus \mathcal{E}, \quad \bar{u}_k \in \mathcal{U} \ominus K\mathcal{E} $$
其中 $\ominus$ 表示Minkowski差。
10.4.4 场景MPC
基于场景的方法通过采样多个不确定性实现来近似鲁棒性:
$$ \min_{\mathbf{U}} \sum_{s=1}^{S} p_s J_s(x_k, \mathbf{U}, \theta_s) $$
其中 $S$ 是场景数量,$p_s$ 是场景概率。
这种方法的优势是可以处理非凸不确定性集,且优化问题仍是凸的(如果原问题是凸的)。
10.4.5 自适应MPC
结合参数估计的MPC方法:
-
在线参数估计: 使用递归最小二乘或卡尔曼滤波 $$ \hat{\theta}_{k+1} = \hat{\theta}_k + L_k(y_k - \hat{y}_k) $$
-
不确定性集更新: 基于估计误差协方差 $$ \Theta_k = \{\theta : (\theta - \hat{\theta}_k)^T P_k^{-1} (\theta - \hat{\theta}_k) \leq \chi^2_\alpha\} $$
-
双模MPC: 在参数收敛后切换到确定性MPC
10.5 显式MPC
显式MPC通过离线求解多参数规划问题,将MPC控制律表示为状态的分段仿射函数。
10.5.1 多参数二次规划
将状态 $x_k$ 视为参数,MPC问题变为多参数QP:
$$ \begin{aligned} u^*(x) = \arg\min_{\mathbf{U}} \quad & \frac{1}{2}\mathbf{U}^T H \mathbf{U} + x^T F \mathbf{U} \\ \text{s.t.} \quad & G\mathbf{U} \leq W + Ex \end{aligned} $$
10.5.2 解的结构
定理: 上述多参数QP的解是状态空间的分段仿射函数:
$$ u^*(x) = K_i x + g_i, \quad \text{if } x \in \mathcal{R}_i $$
其中 $\mathcal{R}_i$ 是多面体区域,状态空间被划分为有限个这样的区域。
10.5.3 离线计算
显式MPC的计算分为两步:
-
离线阶段: - 枚举所有可能的活动约束集 - 计算每个活动集对应的控制律和可行域 - 构建查找表或搜索树
-
在线阶段: - 确定当前状态所在的区域 - 应用对应的仿射控制律
状态空间划分示例(2维):
x₂ ↑
| R₃: u = K₃x + g₃
|╱╲╱╲╱╲╱╲╱
|╲╱╲╱╲╱╲╱ R₂: u = K₂x + g₂
|────────
| R₁: u = K₁x + g₁
────┼────────→ x₁
|
10.5.4 优势与局限
优势:
- 在线计算量极小(只需查表和矩阵乘法)
- 适合嵌入式系统和高频控制
- 控制律透明,便于验证
局限:
- 离线计算复杂度随问题维数指数增长
- 存储需求大(区域数量多)
- 仅适用于线性系统和二次代价
- 难以处理时变参考和约束
10.5.5 复杂度降低技术
- 近似显式MPC
通过合并相近的区域来减少分区数量: $$ |K_i - K_j| < \epsilon \Rightarrow \text{合并区域} \, \mathcal{R}_i \, \text{和} \, \mathcal{R}_j $$
- 部分显式MPC
只对状态空间的关键区域进行显式化,其他区域在线求解。
- 分层结构
使用二叉搜索树或哈希表加速区域定位:
根节点: H₁ᵀx ≤ b₁?
├─ 是 → 节点2: H₂ᵀx ≤ b₂?
│ ├─ 是 → 区域R₁
│ └─ 否 → 区域R₂
└─ 否 → 节点3: H₃ᵀx ≤ b₃?
├─ 是 → 区域R₃
└─ 否 → 区域R₄
10.6 案例研究:炼油厂催化裂化装置优化控制
10.6.1 背景介绍
流化催化裂化(FCC)是炼油工业的核心装置,将重质原油转化为汽油和其他轻质产品。一个典型的FCC装置价值数亿美元,每天处理数万桶原油,其运行效率直接影响炼厂的经济效益。
FCC装置的控制挑战包括:
- 多变量强耦合: 反应器温度影响产品分布,再生器温度影响催化剂活性
- 严格约束: 设备物理限制、安全约束、环保排放要求
- 经济优化: 在满足产品质量的前提下最大化高价值产品产率
- 扰动频繁: 原料性质变化、催化剂失活、设备结垢
10.6.2 过程建模
FCC装置的简化动态模型包含以下主要变量:
状态变量(6个):
- $x_1$: 反应器温度 (°C)
- $x_2$: 再生器温度 (°C)
- $x_3$: 反应器压力 (kPa)
- $x_4$: 再生器氧含量 (%)
- $x_5$: 催化剂藏量 (ton)
- $x_6$: 产品质量指标
控制变量(4个):
- $u_1$: 进料流率 (m³/h)
- $u_2$: 催化剂循环速率 (ton/h)
- $u_3$: 空气流率 (Nm³/h)
- $u_4$: 反应温度设定值 (°C)
输出变量(5个):
- $y_1$: 汽油产率 (%)
- $y_2$: 柴油产率 (%)
- $y_3$: 焦炭产率 (%)
- $y_4$: CO排放 (ppm)
- $y_5$: 反应苛刻度
线性化模型(采样时间 T = 1分钟): $$ \begin{aligned} x_{k+1} &= Ax_k + Bu_k + B_d d_k \\ y_k &= Cx_k \end{aligned} $$
其中 $d_k$ 是可测扰动(原料性质)。
10.6.3 MPC公式化
优化目标:
经济目标函数考虑产品价值和操作成本: $$ J_{econ} = -\sum_{i=0}^{N-1} \left( p_{gas} y_{1,k+i} + p_{diesel} y_{2,k+i} - p_{feed} u_{1,k+i} - p_{util} u_{3,k+i} \right) $$
其中 $p_{gas}, p_{diesel}, p_{feed}, p_{util}$ 是价格系数。
加入稳定性和平滑性要求: $$ J = J_{econ} + \sum_{i=0}^{N-1} \left( |y_{k+i} - y_{ref}|_Q^2 + |\Delta u_{k+i}|_R^2 \right) $$
约束条件:
-
操作约束: - 进料流率:$100 \leq u_1 \leq 150$ m³/h - 催化剂循环:$200 \leq u_2 \leq 400$ ton/h - 空气流率:$5000 \leq u_3 \leq 8000$ Nm³/h
-
安全约束: - 反应器温度:$480 \leq x_1 \leq 530$ °C - 再生器温度:$650 \leq x_2 \leq 720$ °C(防止催化剂烧结) - 压力差:$|x_3 - p_{atm}| \leq 50$ kPa
-
环保约束: - CO排放:$y_4 \leq 200$ ppm - SOx排放:满足环保标准
-
质量约束: - 汽油辛烷值:$y_6 \geq 92$ - 硫含量:$y_7 \leq 10$ ppm
10.6.4 实施策略
- 分层控制结构
┌─────────────────────────┐
│ 实时优化器 (RTO) │ ← 每小时更新
│ (稳态优化目标) │
└───────────┬─────────────┘
↓ 目标值
┌─────────────────────────┐
│ MPC控制器 │ ← 每分钟执行
│ (动态优化+约束) │
└───────────┬─────────────┘
↓ 设定值
┌─────────────────────────┐
│ 基础控制层 (PID) │ ← 每秒执行
│ (阀门、泵控制) │
└─────────────────────────┘
- 扰动前馈
利用原料性质在线分析仪的测量值进行前馈补偿: $$ u_k = u_{MPC,k} + K_{ff} (d_k - d_{nom}) $$
- 软约束处理
将产品质量约束设为软约束,安全约束保持为硬约束: $$ \begin{aligned} \min \quad & J + \rho_1 \epsilon_{quality} + \rho_2 \epsilon_{emission} \\ \text{s.t.} \quad & y_{quality} \geq y_{min} - \epsilon_{quality} \\ & y_{emission} \leq y_{max} + \epsilon_{emission} \\ & \epsilon_{quality}, \epsilon_{emission} \geq 0 \end{aligned} $$
10.6.5 实际效果
某炼厂实施MPC后的改进效果:
-
经济效益 - 汽油产率提高 2.3% - 能耗降低 5.1% - 年经济效益增加 800万美元
-
运行稳定性 - 主要变量标准差降低 40% - 约束违反次数减少 75% - 非计划停车减少 60%
-
环保指标 - CO排放降低 30% - SOx排放降低 25% - 满足日益严格的环保法规
10.6.6 实施挑战与解决方案
挑战1:模型失配
- 问题:催化剂活性衰减导致模型偏差
- 解决:实施自适应MPC,在线更新模型参数
挑战2:计算时间
- 问题:大规模优化问题求解时间超过采样周期
- 解决:采用热启动和结构化求解器,计算时间从45秒降至8秒
挑战3:操作员接受度
- 问题:操作员不信任"黑箱"算法
- 解决:开发可视化界面,显示预测轨迹和约束状态
挑战4:非线性行为
- 问题:在大范围操作时线性模型不准确
- 解决:采用多模型MPC,根据操作点切换模型
10.6.7 先进特性
- 经济MPC(EMPC)
直接优化经济目标,而非跟踪稳态最优点: $$ \min_{u} \sum_{k=0}^{N-1} L_{econ}(x_k, u_k) $$
需要额外的稳定性约束或终端成分来保证闭环稳定性。
- 随机MPC处理价格波动
考虑产品价格的随机性: $$ \min_{u} \mathbb{E}\left[ \sum_{k=0}^{N-1} L(x_k, u_k, p_k) \right] + \beta \cdot \text{CVaR} $$
其中CVaR(条件风险价值)用于风险管理。
- 与机器学习结合
- 使用深度学习预测原料性质变化
- 强化学习优化MPC参数调整策略
- 异常检测预警潜在故障
10.7 前沿专题:随机MPC与分布式MPC
10.7.1 随机MPC
处理随机不确定性的MPC方法,适用于需求不确定、价格波动等场景。
基本公式: $$ \begin{aligned} \min_{u} \quad & \mathbb{E}\left[ \sum_{k=0}^{N-1} l(x_k, u_k) + V_f(x_N) \right] \\ \text{s.t.} \quad & x_{k+1} = f(x_k, u_k, w_k) \\ & \mathbb{P}(g(x_k, u_k) \leq 0) \geq 1 - \epsilon \end{aligned} $$
求解方法:
- 场景树方法: 构建随机过程的场景树
- 多项式混沌展开: 用正交多项式近似随机变量
- 采样平均近似: Monte Carlo采样
10.7.2 分布式MPC
大规模系统分解为多个子系统,每个子系统有自己的MPC控制器。
系统分解: $$ x_i^+ = A_{ii}x_i + B_{ii}u_i + \sum_{j \in \mathcal{N}_i} (A_{ij}x_j + B_{ij}u_j) $$
其中 $\mathcal{N}_i$ 是子系统 $i$ 的邻居集合。
协调策略:
- 非迭代方案: 每个子系统独立求解,考虑邻居的预测轨迹
- 迭代方案: 子系统间交换信息,迭代至收敛
- 基于ADMM的方案: 使用交替方向乘子法实现分布式优化
应用示例:
- 智能电网的分布式能量管理
- 交通网络的协调控制
- 多机器人系统的编队控制
10.8 历史人物:Jacques Richalet
Jacques Richalet(1936-)是工业模型预测控制的先驱。1978年,他和同事在法国开发了第一个商业化的MPC算法——IDCOM(Identification and Command),并成功应用于炼油厂的催化裂化装置控制。
Richalet的主要贡献:
- 工业化MPC: 将理论转化为实用技术,证明了MPC在工业过程控制中的可行性
- 脉冲响应模型: 使用有限脉冲响应(FIR)模型,避免了状态空间模型的复杂性
- 启发式方法: 开发了许多实用的调参规则和经验公式
他的名言:"在工业控制中,一个能工作的简单算法胜过一个完美但复杂的理论。"这一理念深刻影响了MPC的发展方向。
同期,Shell公司的Cutler和Ramaker开发了动态矩阵控制(DMC),这两个算法共同奠定了工业MPC的基础。今天,MPC已成为过程工业的标准控制技术,每年创造数十亿美元的经济价值。
10.9 本章小结
模型预测控制是现代控制理论中最成功的高级控制策略,其核心优势在于:
关键概念:
- 滚动时域优化: 在每个采样时刻求解有限时域优化问题
- 约束处理能力: 系统地处理输入、状态和输出约束
- 多目标优化: 平衡经济效益、控制性能和约束满足
核心公式:
-
MPC优化问题: $$\min_{\mathbf{U}} \sum_{i=0}^{N-1} l(x_{k+i|k}, u_{k+i|k}) + V_f(x_{k+N|k})$$
-
预测模型: $$x_{k+i+1|k} = Ax_{k+i|k} + Bu_{k+i|k}$$
-
稳定性条件: $$V(x_{k+1}) - V(x_k) \leq -l(x_k, u_k)$$ 实施要点:
-
选择合适的预测时域和控制时域
- 权重矩阵调整:Q影响跟踪性能,R影响控制平滑性
- 约束软化策略:区分硬约束和软约束
- 计算效率优化:利用问题结构和热启动
发展趋势:
- 经济MPC:直接优化经济目标
- 学习型MPC:结合机器学习改进模型和性能
- 分布式MPC:大规模系统的协调控制
- 鲁棒自适应MPC:处理不确定性和时变系统
10.10 练习题
基础题
习题10.1 考虑二阶系统: $$ x_{k+1} = \begin{bmatrix} 1.2 & 0.1 \\ -0.2 & 0.9 \end{bmatrix} x_k + \begin{bmatrix} 0.5 \\ 1 \end{bmatrix} u_k $$ 设计MPC控制器,预测时域N=3,权重Q=I, R=1。写出完整的优化问题公式。
Hint: 首先构建预测方程,然后写出代价函数的矩阵形式。
答案
构建预测矩阵: $$\mathbf{F} = \begin{bmatrix} A \\ A^2 \\ A^3 \end{bmatrix}, \quad \mathbf{G} = \begin{bmatrix} B & 0 & 0 \\ AB & B & 0 \\ A^2B & AB & B \end{bmatrix}$$ 优化问题: $$\min_{\mathbf{U}} \mathbf{U}^T(\mathbf{G}^T\bar{Q}\mathbf{G} + \bar{R})\mathbf{U} + 2(\mathbf{F}x_k)^T\bar{Q}\mathbf{G}\mathbf{U}$$ 其中 $\bar{Q} = \text{diag}(Q, Q, Q)$, $\bar{R} = \text{diag}(R, R, R)$。
习题10.2 解释为什么MPC中的预测时域N不能太小也不能太大?典型的选择原则是什么?
Hint: 考虑稳定性和计算复杂度。
答案
预测时域N的影响:
- N太小:无法捕捉系统的完整动态响应,可能导致短视行为和稳定性问题
- N太大:计算负担增加(O(N³)),模型误差累积,远期预测不准确
典型选择原则:
- N应覆盖系统的主要动态(约为上升时间的1.5-2倍)
- 对于稳定系统:N = 10-30个采样周期
- 对于不稳定系统:需要更长的预测时域或终端约束
- 工业经验法则:N × Ts ≈ 系统建立时间
习题10.3 某化工反应器的温度控制采用MPC,输入约束为0 ≤ u ≤ 100(冷却水流量),状态约束为20 ≤ x ≤ 80(反应温度)。如何将这些约束转化为QP问题的标准形式?
Hint: 构建约束矩阵G和向量h。
答案
标准形式:$G\mathbf{U} \leq h$
对于输入约束: $$\begin{bmatrix} I \\ -I \end{bmatrix} \mathbf{U} \leq \begin{bmatrix} 100 \cdot \mathbf{1} \\ 0 \cdot \mathbf{1} \end{bmatrix}$$ 对于状态约束(利用预测方程 $\mathbf{X} = \mathbf{F}x_k + \mathbf{G}\mathbf{U}$): $$\begin{bmatrix} \mathbf{G} \\ -\mathbf{G} \end{bmatrix} \mathbf{U} \leq \begin{bmatrix} 80 \cdot \mathbf{1} - \mathbf{F}x_k \\ -20 \cdot \mathbf{1} + \mathbf{F}x_k \end{bmatrix}$$ 合并得到完整约束矩阵。
挑战题
习题10.4 推导管道MPC中鲁棒正不变集的计算方法。假设误差动态为 $e_{k+1} = Ae_k + w_k$,其中 $|w_k|_\infty \leq w_{max}$,A是稳定矩阵。
Hint: 使用Minkowski和的性质。
答案
鲁棒正不变集定义为: $$\mathcal{E} = \{e : e = \sum_{i=0}^{\infty} A^i w_i, |w_i|_\infty \leq w_{max}\}$$ 由于A稳定,可以近似为有限和: $$\mathcal{E}_N = \bigoplus_{i=0}^{N} A^i \mathcal{W}$$ 其中 $\mathcal{W} = \{w : |w|_\infty \leq w_{max}\}$,$\bigoplus$ 表示Minkowski和。
迭代计算:
- $\mathcal{E}_0 = \mathcal{W}$
- $\mathcal{E}_{k+1} = A\mathcal{E}_k \oplus \mathcal{W}$
- 当 $\mathcal{E}_{k+1} \subseteq \mathcal{E}_k$ 时停止
最终 $\mathcal{E} = \mathcal{E}_k$ 是最小鲁棒正不变集。
习题10.5 设计一个经济MPC控制器,最大化生产效益同时保证闭环稳定性。系统动态:$x_{k+1} = 0.9x_k + u_k$,经济目标:$l_e(x,u) = px - cu^2$(p是产品价格,c是能源成本)。
Hint: 使用旋转代价函数方法或添加稳定性约束。
答案
方法1:旋转代价函数 $$l(x,u) = l_e(x,u) - l_e(x_s, u_s) + \lambda|x-x_s|^2$$ 其中 $(x_s, u_s)$ 是经济最优稳态点: $$x_s = \frac{p}{2c(1-0.9)^2}, \quad u_s = 0.1x_s$$ 方法2:添加平均约束 $$\frac{1}{N}\sum_{i=0}^{N-1} x_{k+i|k} = x_s$$ 方法3:终端约束 $$x_{k+N|k} \in \mathcal{X}_f$$ 其中 $\mathcal{X}_f$ 是包含 $x_s$ 的正不变集。
这些方法都能保证经济最优性和闭环稳定性的平衡。
习题10.6 分析显式MPC的复杂度。对于n维状态、m维输入、c个约束的系统,估计:(a) 区域数量的上界;(b) 在线计算复杂度;(c) 存储需求。
Hint: 使用组合数学分析最坏情况。
答案
(a) 区域数量上界:
- 每个区域对应一个活动约束集
- 最多有 $\binom{c}{n}$ 个可能的活动集
- 实际区域数通常远小于此上界
(b) 在线计算复杂度:
- 点定位:O(log(N_r) × n)(使用二叉搜索树)
- 控制计算:O(nm)(矩阵向量乘法)
- 总复杂度:O(n log(N_r) + nm)
(c) 存储需求:
- 每个区域需存储:
- 控制律:(m × n + m)个数
- 区域描述:最多c个不等式,每个需(n+1)个数
- 总存储:O(N_r × (mn + c(n+1)))
典型值:n=4, m=2, c=20时,可能有数百到数千个区域,需要MB级存储。
习题10.7(开放思考题)比较MPC与强化学习在控制问题中的优劣。什么情况下应该选择MPC?什么情况下RL更合适?能否有效结合两者的优势?
参考思路
MPC的优势:
- 显式处理约束
- 基于模型,样本效率高
- 可解释性强,稳定性可证明
- 在线优化,适应性好
RL的优势:
- 无需精确模型
- 可处理高维、非线性系统
- 长期优化能力强
- 可从经验中学习改进
选择原则:
- 有准确模型+安全要求高 → MPC
- 模型未知+可以试错学习 → RL
- 实时性要求高+约束多 → MPC
- 复杂环境+难以建模 → RL
结合方法:
- RL学习MPC的参数(权重、时域)
- MPC作为RL的安全层
- RL学习残差补偿MPC模型误差
- 可微分MPC嵌入RL策略网络
10.11 常见陷阱与错误
陷阱1:预测时域选择不当
错误: 为了减少计算量,选择很短的预测时域(如N=2) 后果: 控制器短视,可能导致振荡或不稳定 正确做法: N应至少覆盖系统的主导动态,通常N×Ts ≥ 0.7×上升时间
陷阱2:忽略递归可行性
错误: 设计MPC时只关注标称性能,不考虑扰动下的可行性 后果: 实际运行时频繁出现无可行解,控制器失效 正确做法: 使用终端约束集或软约束确保递归可行性
陷阱3:权重调试无章法
错误: 随机调整Q和R矩阵,希望获得好的性能 后果: 调试时间长,性能不理想 正确做法:
- 先归一化变量(使其数量级相当)
- Q的对角元素反比于容许误差的平方
- R的对角元素反比于控制范围的平方
陷阱4:模型更新不及时
错误: 使用固定的线性模型,不考虑工作点变化 后果: 在偏离设计工作点时性能严重下降 正确做法: 实施增益调度或自适应MPC,定期更新模型
陷阱5:过度依赖积分作用
错误: 在MPC外层添加积分器消除稳态误差 后果: 可能导致积分饱和,约束处理复杂化 正确做法: 使用增量式MPC或扰动模型,在MPC内部处理偏差
陷阱6:忽略计算延迟
错误: 假设优化求解是瞬时的 后果: 实际系统存在一个采样周期的延迟,影响稳定性 正确做法: 在模型中包含计算延迟,或使用预测补偿
10.12 最佳实践检查清单
设计阶段
- [ ] 模型验证: 通过开环测试验证预测模型精度
- [ ] 采样时间: 选择合适的采样时间(过程时间常数的1/10到1/20)
- [ ] 预测时域: 确保N覆盖主要动态(闭环上升时间的1.5-2倍)
- [ ] 控制时域: 通常选择Nu = N/3到N/2
- [ ] 约束设置: 区分硬约束(安全)和软约束(性能)
- [ ] 稳定性保证: 添加终端代价或终端约束
- [ ] 可行性分析: 验证初始可行域足够大
实施阶段
- [ ] 求解器选择: 根据问题规模选择合适的QP求解器
- [ ] 热启动策略: 利用前一时刻的解加速求解
- [ ] 故障处理: 设计无可行解时的备份策略
- [ ] 扰动处理: 实施扰动观测器或前馈补偿
- [ ] 抗饱和措施: 处理执行器饱和情况
- [ ] 模型自适应: 实施在线参数估计或多模型切换
调试阶段
- [ ] 离线仿真: 在各种场景下测试控制器
- [ ] 性能指标: 监控计算时间、约束违反、经济效益
- [ ] 鲁棒性测试: 测试模型失配和扰动下的性能
- [ ] 权重调整: 系统地调整权重矩阵
- [ ] 约束软化: 必要时放松非关键约束
- [ ] 备份方案: 准备MPC失效时的降级控制策略
运行维护
- [ ] 性能监控: 跟踪KPI和控制质量指标
- [ ] 模型维护: 定期重新辨识和更新模型
- [ ] 约束审查: 根据运行经验调整约束限值
- [ ] 优化器健康: 监控求解时间和迭代次数
- [ ] 经济优化: 更新价格和成本系数
- [ ] 知识积累: 记录异常情况和解决方案