MATLAB - 模型预测控制器(MPC)的稳定性和鲁棒性问题

系列文章目录

目录

系列文章目录

前言

一、被控对象模型

二、初始控制器设计

三、改进初始设计

五、查看软约束

七、参考


前言

        您可以检查模型预测控制器设计是否存在潜在的稳定性和鲁棒性问题。具体操作如下

  •         在命令行中,使用审查功能。
  • 在 MPC Designer 中,在 “调整 ”选项卡的 “分析 ”部分,单击 “审查设计”。

在这两种情况下,软件都会生成一份报告,显示以下测试结果:

  • MPC 对象创建 - 测试控制器规格是否生成有效的 MPC 控制器。如果控制器无效,则不执行其他测试。
  • QP 海森矩阵有效性 - 测试控制器的 MPC 二次规划 (QP) 问题是否有唯一解。您必须选择成本函数参数(惩罚权重)和水平线,使 QP 海森矩阵为正有限矩阵。
  • 闭环内部稳定性 - 从无约束控制器的状态空间实现中提取 A 矩阵,然后计算其特征值。如果每个特征值的绝对值小于或等于 1 且被控对象稳定,则反馈系统内部稳定。
  • 闭环标称稳定性 - 从闭环系统的离散时间状态空间实现中提取 A 矩阵,即以反馈配置连接的被控对象和控制器。如果每个特征值的绝对值小于或等于 1,则标称(无约束)系统是稳定的。
  • 闭环稳态增益 - 在无约束条件下,测试控制器是否迫使所有受控输出变量达到稳态目标。
  • 硬 MV 约束 - 测试控制器是否对可控输入变量及其变化率都有硬约束,如果有,这些约束在运行时是否会发生冲突。
  • 其他硬约束 - 测试控制器是否有硬输出约束或硬输入/输出混合约束,如果有,这些约束在运行时是否可能无法满足。
  • 软约束 - 通过评估约束 ECR 参数,测试控制器是否适当平衡了硬约束和软约束。
  • MPC 数据的内存大小 - 评估运行时控制器所需的内存大小。

         您还可以使用审查功能对控制器设计进行编程评估。在这种情况下,通过/未通过的测试结果将以结构形式返回,测试报告将被抑制。

        下面的示例展示了如何通过命令行审查控制器设计并解决潜在的设计问题。


一、被控对象模型

        本例中的应用是燃料气体混合过程。其目的是混合六种气体以获得一种燃料气体,然后将其燃烧以提供工艺加热。燃料气必须满足三项质量标准,才能可靠燃烧并达到预期的热量输出。此外,还必须控制燃料气体顶管的压力。因此,有四个受控输出变量。六个可控输入变量是给气流速。

        被控对象为

  1. 天然气 (NG)
  2. 转化气 (RG)
  3. 氢气 (H2)
  4. 氮气 (N2)
  5. 尾气 1 (T1)
  6. 尾气 2 (T2)

        被控对象的输出为

  1. 高热值 (HHV)
  2. 沃贝指数 (WI)
  3. 火焰速度指数 (FSI)
  4. 顶管压力 (P)

        有关燃料气混合问题的更多信息,请参见 [1]。

        使用以下线性被控对象模型作为控制器的预测模型。该状态空间模型适用于典型的稳态运行点,使用时间单位小时。

A = diag([-28.6120 -28.6822 -28.5134  -0.0281 -23.2191 -23.4266 ...-22.9377  -0.0101 -26.4877 -26.7950 -27.2210  -0.0083 ...-23.0890 -23.0062 -22.9349  -0.0115 -25.8581 -25.6939 ...-27.0793  -0.0117 -22.8975 -22.8233 -21.1142  -0.0065]);
B = zeros(24,6);
B( 1: 4,1) = [4 4 8 32]';
B( 5: 8,2) = [2 2 4 32]';
B( 9:12,3) = [2 2 4 32]';
B(13:16,4) = [4 4 8 32]';
B(17:20,5) = [2 2 4 32]';
B(21:24,6) = [1 2 1 32]';
C = [diag([ 6.1510  7.6785 -5.9312 34.2689]) ...diag([-2.2158 -3.1204  2.6220 35.3561]) ...diag([-2.5223  1.1480  7.8136 35.0376]) ...diag([-3.3187 -7.6067 -6.2755 34.8720]) ...diag([-1.6583 -2.0249  2.5584 34.7881]) ...diag([-1.6807 -1.2217  1.0492 35.0297])];
D = zeros(4,6);
Plant = ss(A,B,C,D);

        默认情况下,所有被控对象的输入都是可控变量。

Plant.InputName = {'NG','RG','H2','N2','T1','T2'};

        默认情况下,所有被控对象的输出均为可观测输出。

Plant.OutputName = {'HHV','WI','FSI','P'};

        为反映传感器延迟,请在被控对象输出中添加传输延迟。

Plant.OutputDelay = [0.00556  0.0167  0.00556  0];

二、初始控制器设计

        根据设计要求构建初始模型预测控制器。首先,为清晰起见,禁用 MPC 命令窗口消息。

MPC_verbosity = mpcverbosity('off');

        创建一个控制器:

  • 采样时间 Ts 为 20 秒(以小时为单位),与传感器的采样时间一致。
  • 预测范围 p,39 个控制间隔,约等于被控对象的沉降时间。
  • 控制范围 m,使用长度分别为 2、6、12 和 19 个控制间隔的四个阻塞动作。
Ts = 20/3600;
p = 39;
m = [2 6 12 19];
Obj = mpc(Plant,Ts,p,m);

        指定控制器的输出测量噪声和非零标称工作点。

Obj.Model.Noise = ss(0.001*eye(4));
Obj.Model.Nominal.Y = [16.5 25 43.8 2100];
Obj.Model.Nominal.U = [1.4170 0 2 0 0 26.5829];

        为每个可控输入变量(MV)指定下限和上限。由于所有可控输入变量都是气流的流速,因此其下限均为零。默认情况下,所有 MV 约束都是硬约束(MinECR = 0 和 MaxECR = 0)。

MVmin = zeros(1,6);
MVmax = [15 20 5 5 30 30];
for i = 1:6Obj.MV(i).Min = MVmin(i);Obj.MV(i).Max = MVmax(i);
end

        为可控输入变量的增量指定下限和上限。设置的界限要足够大,以便在一个区间内实现全方位运动。默认情况下,所有 MV 速率约束都是硬约束(RateMinECR = 0 和 RateMaxECR = 0)。

for i = 1:6Obj.MV(i).RateMin = -MVmax(i);Obj.MV(i).RateMax =  MVmax(i);
end

        为每个被控对象的输出变量 (OV) 指定下限和上限。默认情况下,所有 OV 约束都是软约束(MinECR = 1 和 MaxECR = 1)。

OVmin = [16.5 25 39 2000];
OVmax = [18.0 27 46 2200];
for i = 1:4Obj.OV(i).Min = OVmin(i);Obj.OV(i).Max = OVmax(i);
end

        为可控输入变量指定调整权重。MV 权重是根据每种原料流的已知成本指定的。这样做可以告诉 MPC 控制器如何移动六个可控输入变量,以最小化混合燃料气的成本。权重经过归一化处理,最大权重约为 1.0。

Obj.Weights.MV = [54.9 20.5 0 5.73 0 0]/55;

        为可控输入变量增量指定调整权重。这些权重相对于最大 MV 权重较小,以便 MV 自由变化。

Obj.Weights.MVrate = 0.1*ones(1,6);

        指定被控对象输出变量的调整权重。OV 权重用于惩罚偏离指定设定点的情况,通常相对于其他权重较大。在本例中,首先考虑默认值,它等于最大 MV 权重。

Obj.Weights.OV = [1,1,1,1];

三、改进初始设计

审查初始控制器设计。审查功能会在 Web 浏览器窗口中生成并打开一份报告。

review(Obj)

        审核摘要列出了三个警告和一个错误。按顺序查看警告和错误。单击 QP 海森矩阵有效性并向下滚动到警告,警告显示被控对象信号大小差异很大。具体来说,压力响应远大于其他信号。

        指定的 OV 边界指示的 OV 跨度差别很大,压力跨度比其他跨度大两个数量级。好的做法是通过指定 MPC 比例因子来考虑信号幅度的预期差异。由于 MV 已根据相对成本加权,因此只需为 OV 指定比例系数。

        计算 OV 跨度。

OVspan = OVmax - OVmin;

        使用这些跨度作为比例因子。

for i = 1:4Obj.OV(i).ScaleFactor = OVspan(i);
end

        要验证输出比例因子的设置是否修复了警告,请查看更新后的控制器设计。

review(Obj)

        下一个警告表示控制器在稳态时未将 OV 推至目标值。要查看非零增益列表,请单击闭环稳态增益。

        列表中的第一个条目显示,假定没有任何约束,在 HHV 输出中加入一个单位量级的持续扰动将导致 HHV 输出偏离其稳态目标约 0.0860 个单位。第二项显示,WI 的单位扰动将导致 HHV 的稳态偏差或偏移约为 -0.0345,依此类推。

        由于有 6 个 MV,而只有 4 个 OV,因此自由度过大。因此,您可能希望控制器没有稳态偏移。然而,为使被控对象的设备处于最经济的运行状态而指定的非零中压权重却导致了非零稳态偏移。

        非零稳态偏移通常是不可取的,但在本应用中是可以接受的,因为:

  1. 主要目标是将混合成本降至最低。气体质量(HHV 等)可以在指定的 OV 限制范围内自由变化。
  2. 偏移增益幅度小,说明干扰影响小。
  3. OV 限制是软约束。短期的小幅违规是可以接受的。

        单击 “硬 MV 约束 ”查看第二个警告。该警告表示硬约束存在潜在冲突。

        如果外部事件导致 NG 远远低于其指定的最小值,对其增长率的约束可能会使 NG 无法在一个控制区间内恢复到界限内。换句话说,如果您同时指定了 MV.Min 和 MV.RateMax 值,如果最近的 MV 值小于(MV.Min - MV.RateMax),控制器将无法找到最佳解决方案。同样,当您同时指定 MV.Max 和 MV.RateMin 时,也会出现潜在冲突。

        在气体混合应用中,不太可能出现 MV 约束冲突。不过,好的做法是通过软化两个约束中的一个来消除这种可能性。由于 MV 最小值和最大值是物理限制,而增量限制不是物理限制,因此应软化增量限制。

for i = 1:6Obj.MV(i).RateMinECR = 0.1;Obj.MV(i).RateMaxECR = 0.1;
end

        审查更新后的控制器设计。

review(Obj)

        MV 约束冲突警告已修复。

        要查看错误信息,请单击软约束。

        WI 输出的延迟使得在前三个控制区间内无法满足对该变量的约束。WI 约束是软约束,但在设计中加入无法实现的约束是很糟糕的做法。因此,应修改 WI 边界规范,使其在第四个预测水平步之前不受约束。

Obj.OV(2).Min = [-Inf(1,3) OVmin(2)];
Obj.OV(2).Max = [ Inf(1,3) OVmax(2)];

        如下一步所示,重新运行审核命令可验证这一更改消除了错误信息。

四、评估零输出权重的影响

        鉴于设计要求允许 OV 在其限制范围内自由变化,可考虑取消其惩罚权重。

Obj.Weights.OV = zeros(1,4);

        审查这一设计变更的影响。

review(Obj)

        有一个关于 QP 海森矩阵有效性的新警告。要查看警告详情,请单击 QP 海森矩阵有效性。

        审查结果显示所有四个输出变量的权重均为零。由于零权重符合设计要求,且其他海森测试表明二次编程问题有唯一解,因此可以忽略此警告。要查看第二个新警告,请单击闭环稳态增益。该警告显示了将四个 OV 权重设为零的另一个结果。当 OV 不受权重影响时,控制器会忽略添加到 OV 的任何输出扰动,并以不衰减的方式通过扰动。

        既然是设计要求,只要控制器能将所有 OV 控制在指定范围内,非零稳态偏移是可以接受的。因此,最好检查一下当干扰存在时,软 OV 约束是否容易被违反。

五、查看软约束

        要查看软约束列表,请单击软约束。在本例中,软约束是每个 OV 的上下限。

        影响因子一栏显示,使用默认的 MinECR 和 MaxECR 值,压力 (P) 的优先级远高于其他 OV。要使优先级更具可比性,可增加压力约束 ECR 值,同时调整其他值。例如

Obj.OV(1).MinECR = 0.5;
Obj.OV(1).MaxECR = 0.5;
Obj.OV(3).MinECR = 3;
Obj.OV(3).MaxECR = 3;
Obj.OV(4).MinECR = 80;
Obj.OV(4).MaxECR = 80;

        审查这一设计变更的影响。

review(Obj)

        在灵敏度比一栏中,现在所有的灵敏度比都小于统一,这意味着软约束受到的关注要小于 MPC 目标函数中的其他项,如 MV 与目标值的偏差。因此,很可能会出现违反输出约束的情况。

        要使输出约束比其他 MPC 目标具有更高的优先级,可将 Weights.ECR 参数从默认值 1e5 增加到更高的值,从而硬化所有软 OV 约束。

Obj.Weights.ECR = 1e8;

        审查这一设计变更的影响。

review(Obj)

        现在,控制器对违反输出约束的敏感度比对目标跟踪误差的敏感度高出 100 倍。

六、查看数据内存大小

        要查看存储硬件上使用的 MPC 数据矩阵估计所需的内存大小,请单击 MPC 数据的内存大小。

        在本例中,如果控制器使用单精度运行,则需要 250 KB 内存来存储矩阵。如果控制器内存大小超过了目标系统的可用内存,则应重新设计控制器以降低内存需求。或者,增加目标系统的可用内存。

        恢复 MPC 冗余级别。

mpcverbosity(MPC_verbosity);

七、参考

[1] Muller C. J., I. K. Craig, and N. L. Ricker. "Modeling, validation, and control of an industrial fuel gas blending system." Journal of Process Control. Vol. 21, Number 6, 2011, pp. 852-860.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/77417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《GPT-4.1深度解析:AI进化新标杆,如何重塑行业未来?》

一、GPT-4.1:AI 领域的 “全能战士” 降临 1.1 发布背景与战略意义 在 OpenAI 的技术迭代版图中,GPT-4.1 被赋予了 “承前启后” 的关键角色。它不仅是 GPT-4o 的全面升级版,更被视为向 GPT-5 过渡的重要桥梁。2025 年 4 月 15 日的发布会上,OpenAI 宣布 GPT-4.1 系列模型…

MySQL+Redis实战教程:从Docker安装部署到自动化备份与数据恢复20250418

MySQLRedis实战教程:从Docker安装部署到自动化备份与数据恢复 一、前言 在企业应用中,对MySQL和Redis运维的要求越来越高: 不能仅是启动就算部署运行稳定、隔离、访问控制、备份恢复、安全可靠,才是 企业级的基本功能 本文将手…

Linux系统编程之守护进程与调试技术

在Linux系统编程中,守护进程(Daemon)是非常重要的一种概念。它允许程序在后台运行,不受用户交互的影响,并且可以持续长时间地运行。通过了解如何创建和管理守护进程,我们能够开发出更加稳定、高效的系统应用…

Linux中的管道

管道的概念 管道是一种进程间通信的方式。 管道是一种半双工通信机制,数据只能读或写,如果要读写同时进行就要创建两个管道 管道的类型 1、匿名管道PIPE:通常在亲缘进程中使用(兄弟、父子) 函数参考:匿名管…

深度学习2.4 微积分

2.4.1 导数和微分 2.4.2 偏导数 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/17227e00adb14472902baba4da675aed.png 2.4.3 梯度 具体证明,矩阵-向量积

《软件设计师》复习笔记(11.3)——需求获取、分析、定义、验证、管理

目录 一、软件需求概述 真题示例: 二、质量功能部署(QFD) 三、需求开发流程 需求获取 需求分析 需求定义(SRS) 需求验证 真题示例: 四、需求管理 真题示例: 一、软件需求概述 软件…

Spring Boot 依赖注入与Bean管理:JavaConfig如何取代XML?

大家好呀!今天我们来聊一个超级实用的技术话题 —— Spring Boot 中的依赖注入和Bean管理,特别是JavaConfig是如何一步步取代XML配置的。我知道很多小伙伴一听到"依赖注入"、"Bean管理"这些词就头大,别担心!我…

全志H5,NanopiKP1lus移植QT5.12记录

移植步骤 机器环境下载QT5.12.0源码安装交叉编译器修改qmake.conf文件配置编译选项qt5的configure选项说明基本配置选项编译器和链接器选项功能模块配置第三方库集成注意事项 配置过程报错解决配置完成编译过程报错解决编译完成将arm-qt文件夹传送到开发板配置板子环境变量运行…

STM32单片机C语言

1、stdint.h简介 stdint.h 是从 C99 中引进的一个标准 C 库的文件 路径:D:\MDK5.34\ARM\ARMCC\include 大家都统一使用一样的标准,这样方便移植 配置MDK支持C99 位操作 如何给寄存器某个值赋值 举个例子:uint32_t temp 0; 宏定义 带参…

【专题刷题】双指针(四):最接近的三数之和,接雨水

📝前言说明: 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码;&#xff…

chili3d调试笔记3 加入c++ 大模型对话方法 cmakelists精读

加入 #include <emscripten/bind.h> #include <emscripten/val.h> #include <nlohmann/json.hpp> 怎么加包 函数直接用emscripten::function&#xff0c;如&#xff1a; emscripten::function("send_to_llm", &send_to_llm); set (CMAKE_C…

[Redis]1-高效的数据结构P2-Set

按照惯例&#xff0c;先丢一个官网文档链接。 上篇我们已经了解了高效的数据结构P1-String与Hash。 这篇&#xff0c;我们继续来了解Redis的 Set 与 Sorted set。 目录 有序集合 Sorted set底层实现 集合 Set总结资料引用 有序集合 Sorted set Redis 有序集合是一组唯一的字符…

Python + Playwright:使用正则表达式增强自动化测试

Python + Playwright:使用正则表达式增强自动化测试 前言一、 为什么选择正则表达式?二、 Playwright 中集成正则表达式:途径与方法三、 实战应用:正则表达式解决典型测试难题场景 1:定位 ID 或 Class 包含动态部分的元素场景 2:验证包含可变数字或文本的提示信息场景 3:…

VASP 6.4.1 Ubuntu系统编译安装手册

VASP 6.4.1 Ubuntu系统编译安装手册 &#xff08;基于Ubuntu 22.04 LTS&#xff0c;适用x86_64架构&#xff09; 文章目录 VASP 6.4.1 Ubuntu系统编译安装手册第一章 系统环境深度配置1.1 硬件兼容性验证1.2 操作系统环境准备1.3 数学库深度优化配置 第二章 编译环境深度调优2…

uniapp h5接入地图选点组件

uniapp h5接入地图选点组件 1、申请腾讯地图key2、代码接入2.1入口页面 &#xff08;pages/map/map&#xff09;templatescript 2.2选点页面&#xff08;pages/map/mapselect/mapselect&#xff09;templatescript 该内容只针对uniapp 打包h5接入地图选点组件做详细说明&#x…

java输出、输入语句

先创建一个用于测试的java 编写程序 #java.util使java标准库的一个包&#xff0c;这里拉取Scanner类 import java.util.Scanner;public class VariableTest {public static void main(String[] args) {#创建一个 Scanner 对象Scanner scanner new Scanner(System.in);System.…

AI Agents系列之构建多智能体系统

&#x1f9e0; 向所有学习者致敬&#xff01; “学习不是装满一桶水&#xff0c;而是点燃一把火。” —— 叶芝 我的博客主页&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 欢迎点击加入AI人工智能社区&#xff01; &#x1f680; 让我们一起努力&#xff0c;共创…

04.Spring 框架注解体系详解

Spring 框架注解体系详解 本文详细介绍 Spring、Spring Boot 及 Spring Cloud 中常用注解的用途、生命周期及使用方式&#xff0c;帮助开发者更深入理解 Spring 注解驱动编程模式。 参考来源&#xff1a;Spring、SpringMVC、SpringBoot、SpringCloud 框架常用注解说明 目录 注…

手撕STL——vector

目录 引言 1&#xff0c;了解 STL 中的 vector 2&#xff0c;先来一个简易版跑起来 2_1&#xff0c;构造函数 2_2&#xff0c;扩容reserve&#xff08;&#xff09; 2_3&#xff0c;push_back&#xff08;&#xff09; 2_4&#xff0c;pop_back&#xff08;&#xff09; …

优恩-具备浪涌保护功能的固态继电器UNRD0610-无触点开关器件‌

MOSFET固态继电器 : 最高负载电压&#xff1a;60V 最大负载电流&#xff1a;10A 快速响应时间&#xff1a;≤1ms 低驱动电流&#xff1a;≤10mA 高绝缘性&#xff0c;输入输出间隔离电压&#xff1a;AC3000V 耐脉冲浪涌冲击能力强 符合IEC 61000-4-2 ESD标准&#xff1a…