【模型预测控制MPC】使用二次规划来模拟多输入多输出(MIMO)系统的模型预测控制(Matlab代码实现)

简介: 【模型预测控制MPC】使用二次规划来模拟多输入多输出(MIMO)系统的模型预测控制(Matlab代码实现)

       💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

    或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

使用二次规划来模拟多输入多输出(MIMO)系统的模型预测控制。这些脚本建立并模拟了一个通用的多输入多输出(MIMO)控制系统的模型预测控制,当线性化状态空间模型(或传递函数)作为函数的输入时。然而,一般情况下,工厂模型可能是非线性的。

二次规划用于使输入和输出变量在所需的时间范围内达到其设定点。

代码的描述如下:

run_MPC.m:设置并运行模拟的主文件。

MPC_simulation.m:通过时间迭代,并实现在每次迭代中找到的当前时间输入变量。

MPC_calculation:基于工厂的线性化模型,解决了具有向前时间范围的二次问题的MPC控制器。

MPC_plant.m:在工厂中实现当前时间输入向量。一般来说,工厂模型可以是非线性的。

Addnoise.m:一个用于根据信号的数量级和噪声百分比(噪声标准差)向主要信号(工厂的输出)添加噪声的函数。

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

详细文档见第4部分。

模型预测控制(MPC)中使用二次规划模拟多输入多输出(MIMO)系统的研究

摘要

模型预测控制(MPC)作为一种先进的控制策略,在处理复杂的多输入多输出(MIMO)系统时表现出独特的优势。本文聚焦于使用二次规划(QP)来模拟MIMO系统的模型预测控制过程,深入探讨其原理、实现方法及其在实际应用中的意义。通过理论分析和MATLAB仿真实验,验证了基于二次规划的MPC在MIMO系统控制中的有效性和鲁棒性。

1. 引言

随着工业过程控制系统的复杂性不断增加,传统的控制策略已难以满足现代工业对控制精度和鲁棒性的要求。模型预测控制(MPC)作为一种基于模型、优化控制输入的多变量控制策略,因其能够显式处理系统约束、具有前馈控制功能以及对模型不确定性具有一定的鲁棒性等优点,在工业过程控制领域得到了广泛应用。特别是在多输入多输出(MIMO)系统中,MPC能够同时处理多个输入和输出变量,从而优化系统性能。

二次规划(QP)是一种优化技术,用于在满足一系列线性约束的条件下,最小化二次函数的目标值。在MPC中,QP方法被广泛应用于求解最优控制输入序列,以实现系统的最优控制。

2. 模型预测控制基本原理

MPC的基本思想在于利用被控对象的数学模型,在每个采样时刻预测系统在未来一段时间内的动态行为,并通过求解一个优化问题来确定当前时刻的最优控制输入。MPC的核心要素包括:

  • 预测模型:用于预测系统在未来一段时间内的输出响应。常见的预测模型包括状态空间模型、传递函数模型或ARX模型等。
  • 滚动优化:在每个采样时刻,MPC会求解一个基于预测模型的优化问题,旨在最小化一个性能指标(通常是跟踪误差和控制输入能量的加权和),同时满足系统的状态和控制约束。
  • 滚动实现:优化问题求解后,MPC只将优化得到的第一个控制输入作用于被控对象。在下一个采样时刻,系统状态被重新测量,预测时域向前滚动,优化问题再次求解,如此循环往复。

3. MIMO系统的MPC问题描述

MIMO系统具有多个输入和多个输出,其动态行为比单输入单输出(SISO)系统复杂得多。对MIMO系统进行准确建模是实现有效MPC的关键。常见的线性MIMO系统模型可以表示为状态空间形式:

image.gif 编辑

3.1 系统约束的处理

MIMO系统的MPC通常需要处理多种约束,包括:

  • 控制输入约束:如输入幅值限制、输入变化率限制等。
  • 状态约束:如系统状态变量的上下界限制。
  • 输出约束:如系统输出变量的上下界限制。

这些约束可以表示为线性不等式形式,并在优化问题中显式考虑。

3.2 二次规划求解

将性能指标和约束结合起来,MIMO系统的MPC问题最终被建模为一个标准的二次规划问题:

image.gif 编辑

4. MATLAB仿真实现

为了验证基于二次规划的MPC在MIMO系统控制中的有效性,本文使用MATLAB进行了仿真实验。仿真过程中,主要包含以下步骤:

4.1 系统建模

选择一个典型的MIMO系统作为研究对象,建立其状态空间模型。例如,考虑一个双输入双输出(DIMO)系统,其状态空间方程为:

image.gif 编辑

4.2 MPC控制器设计

设计MPC控制器时,需要确定以下参数:

  • 预测时域(P):预测系统未来行为的步数。
  • 控制时域(M):优化控制输入的步数。
  • 权重矩阵(Q, R):分别用于平衡输出跟踪误差和控制输入能量的重要性。

4.3 二次规划问题求解

在每个采样时刻,根据当前系统状态和预测模型,构建二次规划问题,并使用MATLAB中的quadprog函数求解最优控制输入序列。

4.4 仿真结果分析

通过仿真实验,记录系统的输入、输出和状态变化,分析控制器的性能,如跟踪性能、对扰动的抑制能力、约束满足情况等。仿真结果表明,基于二次规划的MPC控制器能够有效地跟踪期望轨迹,同时满足各种约束条件,表现出良好的鲁棒性。

5. 挑战与讨论

尽管基于二次规划的MPC在MIMO系统控制中取得了显著成功,但在实际应用中仍面临一些挑战:

  • 模型准确性:MPC的性能高度依赖于预测模型的准确性。对于复杂的MIMO系统,建立精确模型可能非常困难。模型失配会导致预测误差,影响控制性能甚至导致系统不稳定。
  • 计算复杂度:对于高维度的MIMO系统和较长的预测时域,二次规划问题的规模会很大,求解所需的计算时间可能超过采样周期,导致无法实时实现。
  • 约束可行性:在某些情况下,系统约束可能无法同时满足,导致二次规划问题无解。需要设计合适的软约束或者松弛变量来处理约束的可行性问题。
  • 参数整定:MPC控制器中的参数较多,如预测时域、控制时域以及权重矩阵等,它们的整定是一个复杂且耗时的过程,需要经验和反复试验。

针对这些挑战,研究人员提出了许多改进方法,例如:

  • 模型辨识与自适应控制:利用在线辨识或自适应控制技术来提高模型精度。
  • 高效求解算法:开发更高效的二次规划求解算法,或者利用结构特性来简化问题。
  • 显式MPC:对于某些类型的系统,可以在离线阶段将MPC律表示为一个分段仿射函数,从而在线计算量极小。
  • 鲁棒MPC:考虑模型不确定性或外部扰动的影响,设计具有鲁棒性的MPC控制器。

6. 结论与展望

基于二次规划的模型预测控制为MIMO系统提供了一种强大的控制策略。通过将复杂的MIMO控制问题转化为带有约束的二次规划问题,MPC能够有效地处理系统约束,实现良好的跟踪性能和鲁棒性。随着计算能力的不断提升和优化算法的进步,基于二次规划的MPC将在MIMO系统的先进控制领域发挥越来越重要的作用。

未来的研究将继续致力于提高MPC的计算效率、鲁棒性以及处理非线性系统的能力,以满足更广泛和更复杂的工业控制需求。例如,可以探索将深度学习等先进人工智能技术与MPC相结合,以进一步提高模型的准确性和控制性能。

📚2 运行结果

image.gif 编辑

image.gif 编辑

image.gif 编辑

部分代码:

% Weightings:

MPC_case.Qy = eye(MPC_case.ny);  % Output weight -> state weight for 1<i<Np-1;

MPC_case.Sy = 10*eye(MPC_case.ny);  % Terminal weight at i=Np

MPC_case.Qu = 1*eye(MPC_case.nu); % Input weight for 0<i<Np-1

% Constraints (implemented as hard here):

MPC_case.umin = -40*ones(MPC_case.nu,1);

MPC_case.umax = 40*ones(MPC_case.nu,1);

MPC_case.ymin = -50*ones(MPC_case.ny,1);

MPC_case.ymax = [50; 50];

MPC_case.delta_u_min = -5*ones(MPC_case.nu,1);

MPC_case.delta_u_max = 20*ones(MPC_case.nu,1);

MPC_case.xmin = [-1e6*ones(MPC_case.nx,1); MPC_case.umin];

MPC_case.xmax = [1e6*ones(MPC_case.nx,1); MPC_case.umax];

% References for outputs, states and inputs:

MPC_case.yref_all = @(t)[(t<20)*40+(t>=20)*10; (t<25)*10+(t>=25)*49];     % Reference for 0<i<Np-1

% Horizon is Np (both for objective function and for constraints);

MPC_case.Np = 15;

% assign x0 and t_end

MPC_case.x0 = zeros(MPC_case.nx+MPC_case.nu,1); % First state value is zero

MPC_case.t_end = 40;

% Noise

MPC_case.noise_order = 100;

MPC_case.noise_percent = 0;

%% Run MPC

[U,X,Y,Y_measured] = MPC_simulation_delta_u(MPC_case);

%% plot results

t = 0:MPC_case.Ts:MPC_case.t_end;

t = [-1 t];

y1 = [0 0 Y(1,:)];

y2 = [0 0 Y(2,:)];

yref = MPC_case.yref_all(t);

yref(:,1) = [0; 0];

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

image.gif

相关文章
|
4月前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
356 0
|
4月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
251 8
|
4月前
|
机器学习/深度学习 编解码 算法
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
259 8
|
4月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
489 0
|
4月前
|
算法 机器人 计算机视觉
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
173 0
|
4月前
|
新能源 Java Go
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
184 0
|
4月前
|
机器学习/深度学习 数据采集 测试技术
基于CEEMDAN-VMD-BiLSTM的多变量输入单步时序预测研究(Matlab代码实现)
基于CEEMDAN-VMD-BiLSTM的多变量输入单步时序预测研究(Matlab代码实现)
192 8
|
4月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
288 8
|
4月前
|
编解码 运维 算法
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
320 12
|
4月前
|
人工智能 数据可视化 网络性能优化
【顶级SCI复现】虚拟电厂的多时间尺度调度:在考虑储能系统容量衰减的同时,整合发电与多用户负荷的灵活性研究(Matlab代码实现)
【顶级SCI复现】虚拟电厂的多时间尺度调度:在考虑储能系统容量衰减的同时,整合发电与多用户负荷的灵活性研究(Matlab代码实现)
184 9

热门文章

最新文章