MATLAB 模型预测控制(MPC)控制入门 —— 设计并仿真 MPC 控制器

系列文章目录

MATLAB 模型预测控制(MPC)


文章目录

  • 系列文章目录
  • 前言
  • 一、使用 MPC Designer 设计控制器
    • 1.1 CSTR 模型
    • 1.2 导入被控对象并定义 MPC 结构
    • 1.3 定义输入和输出通道属性
    • 1.4 配置仿真场景
    • 1.5 配置控制器水平线
    • 1.6 定义输入约束条件
    • 1.7 指定控制器调整权重
    • 1.8 消除输出超调
    • 1.9 测试控制器抗干扰能力
    • 1.10 指定浓度输出约束条件
    • 1.11 删除被控对象、控制器和场景
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结


前言

模型预测控制工具箱™ 提供了用于开发模型预测控制 (MPC) 的函数、应用程序、Simulink® 模块和参考示例。对于线性问题,该工具箱支持设计隐式、显式、自适应和增益调度 MPC。对于非线性问题,您可以实现单级和多级非线性 MPC。该工具箱提供可部署的优化求解器,还能让您使用自定义求解器。

您可以在 MATLAB® 和 Simulink 中通过运行闭环仿真来评估控制器性能。对于自动驾驶,您还可以使用提供的符合 MISRA C™ 和 ISO 26262 标准的模块和示例,快速开始车道保持辅助、路径规划、路径跟踪和自适应巡航控制应用。

工具箱支持 C 和 CUDA® 代码以及 IEC 61131-3 结构化文本生成。


一、使用 MPC Designer 设计控制器

本例说明如何使用 MPC Designer 为连续搅拌槽反应器 (CSTR) 设计模型预测控制器。

1.1 CSTR 模型

连续搅拌罐反应器(CSTR)的线性化模型见 CSTR 模型。在该模型中,前两个状态变量分别是试剂浓度(此处称为 CA,单位为 kmol/m3)和反应器温度(此处称为 T,单位为 K),而前两个输入量分别是冷却剂温度(Tc,单位为 K,用于控制被控对象)和流入的进料试剂浓度 CAf,单位为 kmol/m3,(通常被视为未测量的干扰)。

在本例中,冷却剂温度与标称值的变化范围为 ±10 度,变化速率为每秒 ±2 度。

创建 CSTR 系统的状态空间模型。

A = [   -5  -0.3427;47.68    2.785];
B = [    0   10.3   0];
C = flipud(eye(2));
D = zeros(2);
CSTR = ss(A,B,C,D);

1.2 导入被控对象并定义 MPC 结构

mpcDesigner

在这里插入图片描述

在 "MPC 设计器 "选项卡的 "结构 "部分,单击 “MPC 结构”。

在 "通过导入定义 MPC 结构 "对话框中,在 "从 MATLAB 工作区选择一个被控对象模型或一个 MPC 控制器 "表中,选择 CSTR 模型。

由于 CSTR 是一个稳定的连续时间 LTI 系统,因此 MPC Designer 将控制器采样时间设置为 0.1 Tr,其中 Tr 是 CSTR 的平均上升时间。在本例中,在指定 MPC 控制器采样时间字段中,输入 0.5 秒的采样时间。

默认情况下,所有被控对象输入均定义为操纵变量,所有被控对象输出均定义为测量输出。在 "分配被控对象 i/o 通道 "部分,分配输入和输出通道索引,以便

  • 第一个输入,即冷却液温度,为操纵变量。

  • 第二个输入,进料浓度,是一个未测量的干扰。

  • 第一个输出,反应器温度,是一个测量输出。

  • 第二个输出,反应物浓度,是一个未测量的输出。

在这里插入图片描述

单击导入。

应用程序会将 CSTR 被控对象导入数据浏览器。以下内容也会添加到数据浏览器中:

  • mpc1 - 使用 CSTR 作为内部模型创建的默认 MPC 控制器。

  • scenario1 - 默认模拟场景。

该程序运行默认模拟场景,并更新输入响应和输出响应图。闭环系统能够成功跟踪所需的测量输出,而未测量输出则不然。由于被控对象只有一个操纵变量,因此这种行为是意料之中的。

在这里插入图片描述

一旦定义了 MPC 结构,就不能在当前的 MPC Designer 会话中进行更改。要使用不同的通道配置,请启动新的应用程序会话。

1.3 定义输入和输出通道属性

在 MPC Designer 选项卡上,选择 I/O Attributes。

在 "输入和输出通道规格 "对话框的 "名称 "栏中,为每个输入和输出通道指定一个有意义的名称。

在 "单位 "栏中,可选择指定每个通道的单位。

由于状态空间模型是使用与标称工作点的偏差来定义的,因此请将每个输入和输出通道的标称值保持为 0。

各通道的比例因子保持默认值 1。

在这里插入图片描述

单击 “确定”。

输入响应和输出响应绘图标签会更新,以反映新的信号名称和单位。

1.4 配置仿真场景

在 "MPC 设计器 "选项卡的 "场景 "部分,单击 “编辑场景”>“场景 1”。

在 "模拟场景 "对话框中,将模拟持续时间设置为 20 秒。

在参考信号表的第一行,指定步长为 2,时间为 5。

在信号列第二行,选择常量参考,将浓度设定点保持在输入和输出通道规格对话框中定 义的标称值上(本例中标称值为零)。

在这里插入图片描述

默认设置为模拟参考反应器温度 T 在 5 秒钟内发生 2 开尔文的阶跃变化。

单击确定。

响应图更新以反映新的模拟方案配置。CA 的参考值不再是阶跃值,而是等于零的常数。

在 MPC Designer 左下方的 "情景 "部分,单击情景 1。第二次单击情景 1,并将情景重命名为 stepT。

1.5 配置控制器水平线

在 "调整 "选项卡的 "水平线 "部分,指定预测水平线为 15,控制水平线为 3。

在这里插入图片描述

响应图更新以反映新的范围。输入响应图显示,控制操作违反了对冷却剂温度变化率的限制要求。

1.6 定义输入约束条件

在 "设计 "部分,单击 “约束”。

在 "约束 "对话框的 "输入和输出约束 "部分的 "输入 "行中,分别在 "最小值 "和 "最大值 "列中输入冷却剂温度的上下限。

在 RateMin 和 RateMax 栏中指定变化率限制。

在这里插入图片描述

单击 “确定”。

在这里插入图片描述
输入响应图显示了受控变量的控制行动。输入响应图显示了受控变量的控制行动。

1.7 指定控制器调整权重

在 "调整 "选项卡的 "设计 "部分,单击 “权重”。

在输入权重表中,将操纵变量 (MV) 比率权重增加到 0.3。在控制器优化成本函数中,增加 MV 率权重可抑制 MV 的大幅变化。

在输出权重表中,保留默认权重值。默认情况下,所有未测量的输出权重为零。

由于只有一个受控变量,如果控制器试图将两个输出都保持在特定的设定点上,则一个或两个输出的响应都会出现稳态误差。由于控制器会忽略权重为零的输出设定点,因此将浓度输出权重设置为零可实现反应釜温度设定点跟踪,且稳态误差为零。

在这里插入图片描述

单击 “确定”。

在这里插入图片描述

输入响应图显示了较为保守的控制操作,这导致输出响应速度较慢。

1.8 消除输出超调

假设应用要求输出响应零过冲。在 "性能调整 "选项卡上,向左拖动 "闭环性能 "滑块,直到输出响应没有过冲。向左移动该滑块可同时增加控制器的操纵速率权重和减少输出变量权重,使控制器更加稳健。假设应用要求输出响应零过冲。在 "性能调整 "选项卡上,向左拖动 "闭环性能 "滑块,直到输出响应没有过冲。向左移动该滑块可同时增加控制器的操纵速率权重和减少输出变量权重,使控制器更加稳健。

在这里插入图片描述

使用 "闭环性能 "滑块调整控制器调整权重时,MPC Designer 不会更改您在 "权重 "对话框中指定的权重。相反,滑块控制一个调整系数,该系数与用户指定的权重一起用于定义实际控制器权重。

当滑块居中时,该系数为 1;当滑块向左移动时,其值减小;当滑块向右移动时,其值增大。权重系数乘以操纵变量和输出变量权重,再除以权重对话框中的操纵变量速率权重。因此,移动滑块增加鲁棒性会降低 OV 和 MV 权重,增加 MV 率权重,从而放宽对输出的控制,使控制动作更加保守。

要查看实际控制器权重,请将控制器导出到 MATLAB® 工作区,然后查看导出控制器对象的权重属性。

1.9 测试控制器抗干扰能力

在过程控制应用中,干扰抑制往往比设定点跟踪更重要。模拟控制器对进料浓度阶跃变化(未测量干扰)的响应。

在 "MPC 设计器 "选项卡的 "情景 "部分,单击 “绘制情景”>“新建情景”。

在模拟场景对话框中,将模拟持续时间设为 20 秒。

在参考信号表的第一行信号下拉列表中,选择步长,然后指定步长为 2,时间为 5。在第二行的信号列中,保持恒定参考以将浓度设定点保持在标称值上。

在 "未测量的干扰 "行的信号下拉列表中,选择 “步长”,然后指定步长为 0.2,时间为 5。

在这里插入图片描述

单击确定。

应用程序会将新方案添加到数据浏览器中,并创建新的相应输入响应图和输出响应图。

在数据浏览器的 "方案 "部分,将 NewScenario 重命名为 distReject。

在这里插入图片描述

从输出响应图中可以看出,闭环系统仍能达到预期的反应器温度。在这种情况下,所需的控制动作加上输入干扰会导致输出浓度 CA 稳态下降 0.1 kmol/m3。

1.10 指定浓度输出约束条件

之前,您定义了控制器调整权重,以实现跟踪反应釜温度设定点且稳态误差为零的主要控制目标。这样做可以使未测量的反应器浓度自由变化。假设反应器浓度相对于其标称值降至 0.05 kmol/m3 以下时,会发生不必要的反应。要限制反应釜浓度,请指定输出限制。

在 "设计 "部分的 "调谐 "选项卡上,单击 “约束”。

在 "约束 "对话框的 "输入 "和 "输出约束 "部分的 "输出 "表第二行中,指定最小未测量输出 (UO) 值为 -0.05。

默认情况下,所有输出约束都是软约束,即最小ECR 值和最大ECR 值都大于零。要进一步软化未测量输出 (UO) 约束,请增加其最大ECR 值。

在这里插入图片描述
单击 “确定”。

在这里插入图片描述
在输出响应图中,反应器浓度 CA 在 10 秒后稳定在-0.05 kmol/m3 的水平。由于只有一个控制变量,控制器在两个相互竞争的控制目标之间进行了折中: 温度跟踪和满足约束条件。较软的输出约束使控制器可以牺牲更多的约束要求来改善温度跟踪。

由于输出约束条件较软,控制器可通过允许少量违反浓度约束条件来保持一定的温度控制水平。一般来说,根据您的应用要求,您可以尝试使用不同的约束设置来实现可接受的控制目标折衷。

输出控制器
在 "调谐 "选项卡的 "分析 "部分,单击 "导出控制器 "将调谐控制器 mpc1 保存到 MATLAB 工作区。

1.11 删除被控对象、控制器和场景

要删除被控对象、控制器或场景,请在 "数据浏览器 "中右键单击要删除的项目,然后选择 “删除”。

不能删除当前控制器。此外,如果被控对象是唯一列出的工厂或方案,则无法删除。

如果某个工厂被任何控制器或场景使用,则无法删除该工厂。

要删除多个被控对象、控制器或场景,请按住 Shift 键并单击要删除的每个项目。

二、使用步骤

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

data = pd.read_csv('https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

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

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

相关文章

SpringBoot-Docker容器化部署发布

在生产环境都是怎么部署 Spring Boot? 打成 jar 直接一键运行打成 war 扔到 Tomcat 容器中运行容器化部署 一、准备Docker 在 CentOS7 上安装好 Docker 修改 Docker 配置,开启允许远程访问 Docker 的功能,开启方式很简单,修改 /usr/lib/s…

第四代可燃气体监测仪:可燃气体监测仪在燃气管网中的作用有哪些

燃气管网如同城市的血脉,纵横交错着覆盖在每一寸土地。然而如此复杂的管网,仅靠人工巡查难免有些力不从心。毕竟人工监测的范围有其局限性,难以做到全方位、全天候的紧密监测,难免会有疏忽和遗漏。如何将安全隐患消灭于萌芽状态&a…

Linux CentOS 8(DNS的配置与管理)

Linux CentOS 8(DNS的配置与管理) 目录 一、DNS相关知识1.1 DNS简介1.2 DNS的解析原理1.3 DNS解析 二、DNS服务器部署2.1 不使用chroot模式启动DNS2.2 使用chroot模式DNS 三、DNS配置文件详解3.1 主配文件详解3.2 区域数据库文件详解 四、项目实施4.1 主…

【每日OJ —— 225.用队列实现栈(队列)】

每日OJ —— 225.用队列实现栈(队列) 1.题目:225.用队列实现栈(队列)2.解法2.1.解法讲解:2.1.1.算法讲解2.1.2.代码实现2.1.3.提交通过展示 1.题目:225.用队列实现栈(队列&#xff0…

php伪随机数

利用工具 php_mt_seed <?php // php 7.2function white_list() {return mt_rand();}echo white_list(), "\n";echo white_list(), "\n";echo white_list(), "\n"; 输入命令&#xff1a; ./php_mt_seed 1035656029 <?phpmt_srand(181095…

关于校园网使用罗技flow功能

目录 情况概述问题及解决方案 情况概述 我目前设备是一台Macbook air m1处理器&#xff0c;学校给配了一台windows台式&#xff0c;台式机不能连蓝牙&#xff0c;不能连wifi&#xff0c;只能用网线&#xff0c;我的需求是想让mac和windows共用一套键鼠&#xff0c;在了解到罗技…

echarts 实现3D立体柱状图示例

该示例有如下几个特点&#xff1a; ①实现tooltip自定义样式&#xff08;echarts 实现tooltip提示框样式自定义-CSDN博客&#xff09; ②数据为0时&#xff0c;顶部四边形不展示 ③legend图标设置为自定义图片 【第②也是一个难点&#xff0c;我没有找到其他解决办法&#xff…

从小米14安装不上应用说起【适配64位】

一、原因 某天早上&#xff0c;同事突然对我说我换了小米14pro手机但是安装不了公司的打卡软件&#xff0c;怎么办呀。一时间&#xff0c;我也不知道原因&#xff0c;看到给我发的安装不上的截图陷入了沉思。随即打开在git仓库里找到这个项目&#xff0c;到本地编译打开&#…

对比学习15篇顶会论文及代码合集,2023最新

对比学习&#xff08;contrastive learning&#xff09;是现在无监督学习中一种常用的学习机制&#xff0c;它可以在没有标签的数据上进行学习&#xff0c;避免依赖大量标签数据&#xff0c;从而帮助我们更好地理解和利用数据集中的信息&#xff0c;提高模型的性能和表现。 作…

【前端学java】java中的字符串操作(10)

往期回顾&#xff1a; 【前端学java】JAVA开发的依赖安装与环境配置 &#xff08;0&#xff09;【前端学 java】java的基础语法&#xff08;1&#xff09;【前端学java】JAVA中的packge与import&#xff08;2&#xff09;【前端学java】面向对象编程基础-类的使用 &#xff08…

springcloud学生选课系统源码

开发技术&#xff1a; jdk1.8&#xff0c;mysql5.7&#xff0c;idea&#xff0c;nodejs&#xff0c;vscode springcloud springboot mybatis vue elementui 功能介绍&#xff1a; 学生&#xff1a; 登录&#xff0c;统计分析&#xff0c;选课&#xff08;查看课程及选择&a…

API网关那些事【架构新知系列】

目前随着云原生ServiceMesh和微服务架构的不断演进&#xff0c;网关领域新产品不断出现&#xff0c;各种网关使用的技术&#xff0c;功能和应用领域也不断扩展&#xff0c;在各有所长的前提下也有很多功能重合&#xff0c;网上各种技术PR文章&#xff0c;评测资料和网关落地实践…

新能源充电桩工业4G路由器应用,推动绿色出行,响应环保理念

在智慧城市环保事业发展领域&#xff0c;新能源技术应用成熟&#xff0c;物联网技术越来越广泛&#xff0c;充电桩物联网成为了智慧城市建设的热门应用。充电桩作为新能源汽车的重要配套设施&#xff0c;对于节能减排和推动环保理念可持续发展具有重要意义。而工业4G路由器作为…

福州大学《嵌入式系统综合设计》实验四:边缘检测

一、实验目的 BMCV 提供了一套基于 Sophon AI 芯片优化的机器视觉库&#xff0c;通过利用芯片的 TPU 和 VPP模块&#xff0c;可以完成色彩空间转换、尺度变换、仿射变换、透射变换、线性变换、画框、JPEG 编解码、BASE64 编解码、NMS、排序、特征匹配等操作。 本实验的目的是…

C++中的内存管理

✨前言✨ &#x1f4d8; 博客主页&#xff1a;to Keep博客主页 &#x1f646;欢迎关注&#xff0c;&#x1f44d;点赞&#xff0c;&#x1f4dd;留言评论 ⏳首发时间&#xff1a;2023年11月21日 &#x1f4e8; 博主码云地址&#xff1a;博主码云地址 &#x1f4d5;参考书籍&…

基于C#实现KMP算法

一、BF 算法 如果让你写字符串的模式匹配&#xff0c;你可能会很快的写出朴素的 bf 算法&#xff0c;至少问题是解决了&#xff0c;我想大家很清楚的知道它的时间复杂度为 O&#xff08;MN&#xff09;&#xff0c;原因很简单&#xff0c;主串和模式串失配的时候&#xff0c;我…

电脑便签工具推荐哪个?电脑上好用的便签软件使用哪一款

对于职场办公人士来讲&#xff0c;一款好用的电脑便签工具可以给日常工作带来极大的便利&#xff0c;如果您的日常工作离不开电脑工具&#xff0c;您就会知晓电脑便签工具在日常工作中的重要&#xff0c;电脑便签通常以一个小的窗口呈现在电脑桌面上&#xff0c;记录一些工作中…

KVM网络环境下vlan和trunk的理解

vmware exsi 平台&#xff0c;虚拟交换机管理界面的上行链路是什么意思 VMware ESXi中的虚拟交换机管理界面中的“上行链路”&#xff08;uplinks&#xff09;是指虚拟交换机连接到物理网络的物理网络适配器。在ESXi中&#xff0c;虚拟交换机&#xff08;vSwitch&#xff09;用…

JAXB:根据Java文件生成XML schema文件

说明 JAXB有个schemagen脚本&#xff0c;可以根据Java文件生成XML schema。这个工具在JAXB独立发布包中有&#xff0c;可以从官网下载JAXB的独立发布包&#xff1a; https://eclipse-ee4j.github.io/jaxb-ri/ 示例 使用schemagen -d <path> <java files>格式 …

安装rabbitMQ

安装rabbitMQ linux安装rabbitMQ centos7下 需要先安装JDK 安装Erlang 需对应版本 安装对应版本的rabbitMQ 参考&#xff1a;CentOS7安装RabbitMQ简单实用教程_普通网友的博客-CSDN博客 启动 systemctl start rabbitmq-server出现的问题 启动失败 Job for rabbitmq-ser…