第4章:模型预测控制(MPC)原理

各位同行,今天我们来聊聊MPC。说实话,我在DCS上做MPC落地也有十来年了,从最开始觉得这东西太玄乎,到现在天天离不开它。模型预测控制,说白了就是让控制器学会「未雨绸缪」。

4.1 MPC的核心思想

传统的PID控制器,你想想看,它只看当前偏差。好比开车时只看眼前一米的路,拐弯全靠临时反应。MPC不一样,它像老司机一样,会提前看前方几百米的路况,提前打方向盘。

MPC的核心思想就三句话:

  • 基于模型预测未来——用数学模型推算系统未来一段时间的走向
  • 滚动优化——每走一步,重新算一遍最优路径
  • 反馈校正——实际值和预测值有偏差?赶紧修正模型

我记得刚入行时,师傅跟我说:「MPC不是神仙,它只是比PID多看了几步棋。」嗯,这句话我一直记着。

核心比喻:PID是近视眼开车,MPC是戴了望远镜开车。但望远镜也可能看错,所以需要不断擦镜片——这就是反馈校正。

4.2 预测模型

预测模型是MPC的「眼睛」。没有模型,你拿什么预测?

常见的预测模型有几种:

  • 阶跃响应模型——工业现场最常用,测一次阶跃响应就能建出来
  • 状态空间模型——理论性强,适合多变量耦合系统
  • ARX模型——用历史数据拟合,适合数据驱动场景

我在一个炼油项目上遇到过这种情况:装置有强非线性,用阶跃响应模型怎么调都不准。后来我改用分段线性化,把操作区间分成三段,每段建一个模型,效果立竿见影。说白了,模型不怕简单,就怕不准。

实战建议:现场建模型,别追求复杂。能用一阶加纯滞后解决的,就别上二阶。模型越简单,鲁棒性越好。我曾经见过一个工程师,非要用十阶模型,结果现场一跑就发散。

4.3 滚动优化

滚动优化是MPC的「大脑」。它每时每刻都在做一件事:算未来几步的最优控制量。

具体流程是这样的:

  1. 当前时刻k,用模型预测未来P步的输出
  2. 设定一个目标函数(比如让输出尽量靠近设定值,同时控制量变化尽量小)
  3. 求解这个优化问题,得到未来M步的控制量序列
  4. 只执行第一步的控制量
  5. 到下一时刻k+1,重复以上步骤

你可能会问:为什么只执行第一步?这不是浪费吗?

嗯,这里有个关键点。模型不可能100%准确,外部干扰也随时存在。如果一股脑把未来M步的控制量全执行了,一旦模型偏差,后面几步全错。只执行第一步,到了下一时刻重新算,这就是「滚动」的含义——永远只看眼前一步,但每一步都重新规划全局。

注意:优化问题的求解速度很关键。DCS的扫描周期通常是1秒,如果优化算法跑3秒,那就没法用了。我建议用二次规划(QP)求解器,效率高。实在不行,可以离线算好查表。

4.4 反馈校正

反馈校正是MPC的「纠错机制」。模型预测得再准,也架不住现场有干扰。

反馈校正的做法很简单:

  • 在k时刻,用模型预测k+1时刻的输出
  • 到了k+1时刻,测量实际输出
  • 计算预测误差:e = 实际值 - 预测值
  • 把这个误差加到后续的预测中,作为补偿

说白了,就是「错了就改,改了再算」。我见过一些新手,把MPC的模型调得特别准,但一投用就崩。为什么?因为模型太准了,反而对干扰敏感。反馈校正的作用就是给模型加一个「安全垫」。

避坑指南:我曾经在一个项目上,反馈校正系数设得太大,结果系统出现振荡。后来我把校正系数从0.8降到0.3,系统才稳定下来。记住:反馈校正不是越大越好,过犹不及。

4.5 一个简单的MPC示例

下面我用一个单变量系统的例子,展示MPC的基本计算过程。假设被控对象是一阶惯性加纯滞后:

% 模型参数
K = 2;      % 增益
T = 5;      % 时间常数(秒)
tau = 2;    % 纯滞后(秒)

% MPC参数
P = 10;     % 预测时域
M = 3;      % 控制时域
Q = 1;      % 输出权重
R = 0.1;    % 控制量权重

% 设定值
sp = 1;

% 当前时刻k
y_k = 0;    % 当前输出
u_k = 0;    % 当前控制量

% 预测未来P步的输出
for i = 1:P
    y_pred(i) = K * (1 - exp(-i/T)) * u_k;
end

% 优化目标:min (sp - y_pred)^2 + R * delta_u^2
% 这里用简单枚举法求解(实际工程用QP)
best_u = 0;
best_cost = inf;
for u_candidate = -1:0.1:1
    cost = (sp - y_pred(1))^2 + R * (u_candidate - u_k)^2;
    if cost < best_cost
        best_cost = cost;
        best_u = u_candidate;
    end
end

% 执行第一步控制量
u_k = best_u;

% 下一时刻,测量实际输出,计算反馈校正
y_actual = 0.5;  % 假设测量值
e = y_actual - y_pred(1);  % 预测误差
% 将误差补偿到后续预测中
y_pred = y_pred + e;

这个例子虽然简单,但把MPC的四个要素都体现出来了:预测模型、滚动优化、反馈校正、只执行第一步。实际工程中,多变量MPC的优化问题要复杂得多,但核心思想是一样的。

4.6 MPC在DCS中的实现要点

要点 说明 我的经验
扫描周期 通常1-5秒 太快了优化算不完,太慢了控制效果差
模型更新 建议每周重新辨识一次 装置老化后模型会漂移,不更新就废了
约束处理 控制量、控制量变化率、输出都要加约束 软约束比硬约束更实用,避免无解
故障切换 MPC失效时自动切回PID 这是保命设计,必须做

最后说一句:MPC不是万能药。如果PID能解决的问题,别上MPC。我见过太多项目,明明一个串级就能搞定,非要上MPC,结果运维成本翻倍。选型要务实,别为了用技术而用技术。

好了,这一章就到这里。下一章我们聊聊MPC在精馏塔上的实战案例,到时候我会分享一个我踩过的坑——模型失配导致塔压差失控,差点把塔冲翻。敬请期待。