模型预测控制(Model Predictive Control, MPC)是现代控制理论中最成功的先进控制策略之一,广泛应用于化工、石油炼制、航空航天、汽车工业等领域。MPC的核心思想是利用系统的数学模型,在每个采样时刻求解一个有限时域优化问题,得到最优控制序列,但只实施第一个控制动作,然后在下一时刻重复这个过程。这种”滚动时域”策略使MPC能够自然地处理多变量系统、约束条件和优化目标,成为工业界最受欢迎的先进控制技术。
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$ 的状态预测。 |
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}\]其中:
MPC的关键特征是滚动时域(Receding Horizon)策略:
| 求解优化问题,得到最优控制序列 $u^*_{k | k}, u^*_{k+1 | k}, \ldots, u^*_{k+N-1 | k}$ |
| 只应用第一个控制动作 $u_k = u^*_{k | k}$ |
时刻 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(向前滚动)
这种策略的优势在于:
为了高效求解,我们通常将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求解器高效求解。
MPC能够系统地处理各种约束,这是其相对于传统控制方法的主要优势之一:
1. 输入约束
2. 状态/输出约束
3. 终端约束
| 终端状态约束:$x_{k+N | k} \in \mathcal{X}_f$(保证稳定性) |
| 终端等式约束:$x_{k+N | k} = x_{ref}$(用于轨迹跟踪) |
硬约束可能导致优化问题无可行解,特别是在存在扰动或模型误差时。软约束通过引入松弛变量来解决这个问题:
\[\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$ 是惩罚权重。这种方法在保证问题始终有解的同时,尽可能减少约束违反。
1. 内点法(Interior Point Methods)
适用于中大规模问题,具有多项式时间复杂度:
2. 活动集方法(Active Set Methods)
适用于小规模问题,能够热启动:
3. 快速梯度方法(Fast Gradient Methods)
适用于嵌入式实现:
1. 结构利用
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)$。
2. 热启动
利用前一时刻的解构造当前时刻的初始猜测:
\[\mathbf{U}^{init}_k = \begin{bmatrix} u^*_{k+1|k-1} \\ \vdots \\ u^*_{k+N-1|k-1} \\ u_{steady} \end{bmatrix}\]这种方法显著减少迭代次数,特别是在系统变化缓慢时。
3. 移动时域估计(Move Blocking)
减少优化变量数量,假设控制输入在某些时段内保持不变:
\[u_{k+i|k} = u_{k+j|k}, \quad i,j \in \text{同一时段}\]这种方法在长预测时域情况下特别有效。
对于无约束线性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\)
有限时域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问题的解,这保证了上述条件成立。
另一种保证稳定性的方法是引入终端约束集 $\mathcal{X}_f$:
\[x_{k+N|k} \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$。
递归可行性是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问题始终有解,从而保证了闭环稳定性。
实际系统总是存在模型不确定性和外部扰动,鲁棒MPC旨在保证在这些不确定性存在的情况下仍能维持稳定性和性能。
考虑存在不确定性的系统:
\[x_{k+1} = A(\theta)x_k + B(\theta)u_k + w_k\]其中:
常见的不确定性描述方式:
1. 多胞体不确定性 \([A(\theta), B(\theta)] \in \text{Co}\{[A_1, B_1], \ldots, [A_L, B_L]\}\)
2. 范数有界不确定性 \(A(\theta) = A_0 + \Delta A, \quad \|\Delta A\| \leq \delta_A\)
最保守但最安全的方法是考虑最坏情况:
\[\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}\]这个问题通常很难求解,需要采用近似方法。
管道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差。
基于场景的方法通过采样多个不确定性实现来近似鲁棒性:
\[\min_{\mathbf{U}} \sum_{s=1}^{S} p_s J_s(x_k, \mathbf{U}, \theta_s)\]其中 $S$ 是场景数量,$p_s$ 是场景概率。
这种方法的优势是可以处理非凸不确定性集,且优化问题仍是凸的(如果原问题是凸的)。
结合参数估计的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
显式MPC通过离线求解多参数规划问题,将MPC控制律表示为状态的分段仿射函数。
将状态 $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}\]定理: 上述多参数QP的解是状态空间的分段仿射函数:
\[u^*(x) = K_i x + g_i, \quad \text{if } x \in \mathcal{R}_i\]其中 $\mathcal{R}_i$ 是多面体区域,状态空间被划分为有限个这样的区域。
显式MPC的计算分为两步:
1. 离线阶段:
2. 在线阶段:
状态空间划分示例(2维):
x₂ ↑
| R₃: u = K₃x + g₃
|╱╲╱╲╱╲╱╲╱
|╲╱╲╱╲╱╲╱ R₂: u = K₂x + g₂
|────────
| R₁: u = K₁x + g₁
────┼────────→ x₁
|
优势:
局限:
1. 近似显式MPC
通过合并相近的区域来减少分区数量: \(\|K_i - K_j\| < \epsilon \Rightarrow \text{合并区域} \, \mathcal{R}_i \, \text{和} \, \mathcal{R}_j\)
2. 部分显式MPC
只对状态空间的关键区域进行显式化,其他区域在线求解。
3. 分层结构
使用二叉搜索树或哈希表加速区域定位:
根节点: H₁ᵀx ≤ b₁?
├─ 是 → 节点2: H₂ᵀx ≤ b₂?
│ ├─ 是 → 区域R₁
│ └─ 否 → 区域R₂
└─ 否 → 节点3: H₃ᵀx ≤ b₃?
├─ 是 → 区域R₃
└─ 否 → 区域R₄
流化催化裂化(FCC)是炼油工业的核心装置,将重质原油转化为汽油和其他轻质产品。一个典型的FCC装置价值数亿美元,每天处理数万桶原油,其运行效率直接影响炼厂的经济效益。
FCC装置的控制挑战包括:
FCC装置的简化动态模型包含以下主要变量:
状态变量(6个):
控制变量(4个):
输出变量(5个):
线性化模型(采样时间 T = 1分钟): \(\begin{aligned} x_{k+1} &= Ax_k + Bu_k + B_d d_k \\ y_k &= Cx_k \end{aligned}\)
其中 $d_k$ 是可测扰动(原料性质)。
优化目标:
经济目标函数考虑产品价值和操作成本: \(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)\)
约束条件:
| 压力差:$ | x_3 - p_{atm} | \leq 50$ kPa |
1. 分层控制结构
┌─────────────────────────┐
│ 实时优化器 (RTO) │ ← 每小时更新
│ (稳态优化目标) │
└───────────┬─────────────┘
↓ 目标值
┌─────────────────────────┐
│ MPC控制器 │ ← 每分钟执行
│ (动态优化+约束) │
└───────────┬─────────────┘
↓ 设定值
┌─────────────────────────┐
│ 基础控制层 (PID) │ ← 每秒执行
│ (阀门、泵控制) │
└─────────────────────────┘
2. 扰动前馈
利用原料性质在线分析仪的测量值进行前馈补偿: \(u_k = u_{MPC,k} + K_{ff} (d_k - d_{nom})\)
3. 软约束处理
将产品质量约束设为软约束,安全约束保持为硬约束: \(\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}\)
某炼厂实施MPC后的改进效果:
1. 经济效益
2. 运行稳定性
3. 环保指标
挑战1:模型失配
挑战2:计算时间
挑战3:操作员接受度
挑战4:非线性行为
1. 经济MPC(EMPC)
直接优化经济目标,而非跟踪稳态最优点: \(\min_{u} \sum_{k=0}^{N-1} L_{econ}(x_k, u_k)\)
需要额外的稳定性约束或终端成分来保证闭环稳定性。
2. 随机MPC处理价格波动
考虑产品价格的随机性: \(\min_{u} \mathbb{E}\left[ \sum_{k=0}^{N-1} L(x_k, u_k, p_k) \right] + \beta \cdot \text{CVaR}\)
其中CVaR(条件风险价值)用于风险管理。
3. 与机器学习结合
处理随机不确定性的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}\)
求解方法:
大规模系统分解为多个子系统,每个子系统有自己的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$ 的邻居集合。
协调策略:
应用示例:
Jacques Richalet(1936-)是工业模型预测控制的先驱。1978年,他和同事在法国开发了第一个商业化的MPC算法——IDCOM(Identification and Command),并成功应用于炼油厂的催化裂化装置控制。
Richalet的主要贡献:
他的名言:”在工业控制中,一个能工作的简单算法胜过一个完美但复杂的理论。”这一理念深刻影响了MPC的发展方向。
同期,Shell公司的Cutler和Ramaker开发了动态矩阵控制(DMC),这两个算法共同奠定了工业MPC的基础。今天,MPC已成为过程工业的标准控制技术,每年创造数十亿美元的经济价值。
模型预测控制是现代控制理论中最成功的高级控制策略,其核心优势在于:
关键概念:
核心公式:
实施要点:
发展趋势:
习题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: 首先构建预测方程,然后写出代价函数的矩阵形式。
习题10.2 解释为什么MPC中的预测时域N不能太小也不能太大?典型的选择原则是什么?
Hint: 考虑稳定性和计算复杂度。
习题10.3 某化工反应器的温度控制采用MPC,输入约束为0 ≤ u ≤ 100(冷却水流量),状态约束为20 ≤ x ≤ 80(反应温度)。如何将这些约束转化为QP问题的标准形式?
Hint: 构建约束矩阵G和向量h。
习题10.4 推导管道MPC中鲁棒正不变集的计算方法。假设误差动态为 $e_{k+1} = Ae_k + w_k$,其中 $|w_k|\infty \leq w{max}$,A是稳定矩阵。
Hint: 使用Minkowski和的性质。
习题10.5 设计一个经济MPC控制器,最大化生产效益同时保证闭环稳定性。系统动态:$x_{k+1} = 0.9x_k + u_k$,经济目标:$l_e(x,u) = px - cu^2$(p是产品价格,c是能源成本)。
Hint: 使用旋转代价函数方法或添加稳定性约束。
习题10.6 分析显式MPC的复杂度。对于n维状态、m维输入、c个约束的系统,估计:(a) 区域数量的上界;(b) 在线计算复杂度;(c) 存储需求。
Hint: 使用组合数学分析最坏情况。
习题10.7(开放思考题)比较MPC与强化学习在控制问题中的优劣。什么情况下应该选择MPC?什么情况下RL更合适?能否有效结合两者的优势?
错误: 为了减少计算量,选择很短的预测时域(如N=2) 后果: 控制器短视,可能导致振荡或不稳定 正确做法: N应至少覆盖系统的主导动态,通常N×Ts ≥ 0.7×上升时间
错误: 设计MPC时只关注标称性能,不考虑扰动下的可行性 后果: 实际运行时频繁出现无可行解,控制器失效 正确做法: 使用终端约束集或软约束确保递归可行性
错误: 随机调整Q和R矩阵,希望获得好的性能 后果: 调试时间长,性能不理想 正确做法:
错误: 使用固定的线性模型,不考虑工作点变化 后果: 在偏离设计工作点时性能严重下降 正确做法: 实施增益调度或自适应MPC,定期更新模型
错误: 在MPC外层添加积分器消除稳态误差 后果: 可能导致积分饱和,约束处理复杂化 正确做法: 使用增量式MPC或扰动模型,在MPC内部处理偏差
错误: 假设优化求解是瞬时的 后果: 实际系统存在一个采样周期的延迟,影响稳定性 正确做法: 在模型中包含计算延迟,或使用预测补偿