【MPC-Simulink】EX04 信号归一化简化权重调节过程与提高数值计算质量

【MPC-Simulink】EX04 信号归一化简化权重调节过程与提高数值计算质量

参考 Matlab 官网提供的 Model Predictive Control Toolbox - Getting Started Guide,在 MPC 控制器中指定缩放因子,可以简化权重调节过程,提高数值计算质量。

当被控对象输入与输出信号具有不同数量级时,默认的 MPC 控制器权重设置往往导致较差的性能

1. 定义被控对象模型

  1. 使用 Matlab 被控对象示例

    [plant,Ts] = mpcscalefactor_model; 
    [ny,nu] = size(plant.D); % 5个输入 3个输出 10个状态MVindex = [1, 3, 5]; % 可控输入
    MDindex = 4;  % 可测量扰动
    UDindex = 2;  % 不可测量扰动
    MOindex = [1 3]; % 可测量输出
    UOindex = 2;  % 不可测量输出
    plant = setmpcsignals(plant, ... 
    'MV',MVindex, ... 
    'MD',MDindex, ... 
    'UD',UDindex, ... 
    'MO',MOindex, ... 
    'UO',UOindex);
    

    The nominal values and operating ranges of plant model are as follows:

    • Input 1: manipulated variable, nominal value is 100, range is [50 150]

    • Input 2: unmeasured disturbance, nominal value is 10, range is [5 15]

    • Input 3: manipulated variable, nominal value is 0.01, range is [0.005 0.015]

    • Input 4: measured disturbance, nominal value is 0.1, range is [0.05 0.15]

    • Input 5: manipulated variable, nominal value is 1, range is [0.5 1.5]

    • Output 1: measured output, nominal value is 0.01, range is [0.005 0.015]

    • Output 2: unmeasured output, nominal value is 1, range is [0.5 1.5]

    • Output 3: measured output, nominal value is 100, range is [50 150]

  2. 使用 lsim 命令运行开环线性仿真。

    验证当输入信号在其标称值周围随机变化时,被控对象输出是否在范围内且其平均值是否接近标称值。

    % 设置输入和输出范围
    Urange = [100; 10; 0.01; 0.1; 1]; % 比如第一个输入在50-150之间变化,这里范围就是100
    Yrange = [0.01; 1; 100];% 设置输入和输出标称值
    % 对于此示例,标称值等同于范围
    Unominal = [100; 10; 0.01; 0.1; 1];
    Ynominal = [0.01; 1; 100];% 定义时间间隔
    t = (0:1000)' * Ts;
    nt = length(t);% 定义输入和输出信号
    Uol = (rand(nt, nu) - 0.5) .* (ones(nt, 1) * Urange'); % 设计输入信号
    Yol = lsim(plant, Uol, t); % 计算被控对象输出% 输出平均输出值与标称值之间的差异
    fprintf(['The differences between average output values ' ...'\n and the nominal values are: ' ...' %.2f%%, %.2f%%, %.2f%% respectively.\n'], ...abs(mean(Yol(:, 1))) / Ynominal(1) * 100, ...abs(mean(Yol(:, 2))) / Ynominal(2) * 100, ...abs(mean(Yol(:, 3))) / Ynominal(3) * 100);
    
    The differences between average output values and the nominal values are:  2.25%, 3.53%, 2.47% respectively.
    
    % 输入信号均值
    mean(Uol)% 输入信号标准差
    std(Uol)% 输出信号均值
    mean(Yol)% 输出信号标准差
    std(Yol)
    

    请添加图片描述

    这里,均值反映实际的标称值,标准差捕捉了信号的范围。

    标称值/名义值(Nominal Value)指的是在理想情况下、没有任何干扰或误差时,系统或组件所期望的标准值或预设值。它通常用于描述一个系统的正常工作状态,作为参考值。在工程和控制系统中,标称值常常作为计算和设计的基础,以便评估系统在不同条件下的表现。

    例如:

    • 标称输入值:指的是在没有干扰或偏差的情况下,给定系统输入的理想值。
    • 标称输出值:指的是在没有外部扰动的情况下,期望系统输出的标准值。
    • 标称状态值:指的是在理想条件下,系统状态的参考值。

    标称值通常用来简化模型的计算,帮助设计和评估控制系统的性能。在实际运行中,系统的实际值可能会有所偏差,通常需要通过反馈控制来修正这些偏差。

2. 不使用缩放因子(默认 MPC 控制器权重)

  1. 控制器创建

    Weight.MV = 0
    Weight.MVRate = 0.1
    Weight.OV = 1% 创建MPC对象
    mpcobjUnscaled = mpc(plant);
    
    -->The "PredictionHorizon" property is empty. Assuming default 10.
    -->The "ControlHorizon" property is empty. Assuming default 2.
    -->The "Weights.ManipulatedVariables" property is empty. Assuming default 0.00000.
    -->The "Weights.ManipulatedVariablesRate" property is empty. Assuming default 0.10000.
    -->The "Weights.OutputVariables" property is empty. Assuming default 1.00000.
    
  2. 控制对象状态的标称值

    Xnominal = zeros(10,1);
    
  3. 不可测量干扰的标称值

    Unominal(UDindex) = 0;
    
  4. 设置标称值

    mpcobjUnscaled.Model.Nominal = struct( ...'X', Xnominal, ...'DX', Xnominal, ...'Y', Ynominal, ...'U', Unominal);
    

    为了计算被控对象输出,仿真将从输入信号中减去标称被控对象输入,从当前状态中减去被控对象标称状态,然后应用线性被控对象模型,最后将标称输出值加到计算的输出上。

    为了计算可控输入,将从被控对象输出信号中移除标称输出,计算 MPC 控制序列,并将可控输入的标称值添加到计算的序列中。

  5. 测试三个参考信号设定点变化序列

    % 预期的阶跃响应持续时间
    nStepLen = 15;% 计算仿真时间以适应ny个步骤
    Ns1 = nStepLen * ny;% 参考信号
    r1 = ones(Ns1,1) * Ynominal(:)';% 通过每个输出并定义在StepLen间隔处的参考
    StepTime = 1;
    for i = 1:nyr1(StepTime:end,i) = r1(StepTime:end,i) + Yrange(i);StepTime = StepTime + nStepLen;
    end
    
  6. 仿真

    sim(mpcobjUnscaled, Ns1, r1);
    

    输入

    请添加图片描述

    蓝色线是实际输出,灰色线是期望输出

    请添加图片描述

    第一个输出的跟踪响应较差。原因是它的范围相对于其他输出较小。如果使用默认的控制器调节权重,MPC 控制器对调节此输出的关注较少,因为与目标函数中其他输出相关的惩罚项相比较小。

  7. 再测试不可测量干扰的抑制效果。

    % 创建仿真选项对象并设置未测量干扰
    SimOpt = mpcsimopt;
    SimOpt.UnmeasuredDisturbance = Urange(UDindex)';% 设置仿真步骤数和参考信号
    % 参考信号等于范围值
    Ns2 = 100;
    r2 = ones(Ns2,1)*Yrange(:)';% 模拟闭环,参考信号为 r2
    sim(mpcobjUnscaled, Ns2, r2, [], SimOpt)
    

    请添加图片描述

    请添加图片描述

    第一个通道的扰动抑制效果同样很差,没有一个输出回到其设定值。

3. 使用缩放因子(默认 MPC 控制器权重)

改善优化和状态估计计算的数值质量,增加默认调节权重实现良好控制器性能的可能性,可以指定MPC控制器的输入和输出缩放因子。

  1. 复制带有默认权重的MPC控制器

    mpcobjScaled = mpcobjUnscaled;
    
  2. 使用每个输入和输出的预期工作范围指定缩放因子

    % 缩放可控输入
    for i = 1:length(MVindex)mpcobjScaled.ManipulatedVariables(i).ScaleFactor = Urange(MVindex(i));
    end% 缩放可测量干扰
    nmd = length(MDindex);
    for i = 1:nmdmpcobjScaled.DisturbanceVariables(i).ScaleFactor = Urange(MDindex(i));
    end% 缩放不可测量干扰
    for i = 1:length(UDindex)mpcobjScaled.DisturbanceVariables(i+nmd).ScaleFactor = Urange(UDindex(i));
    end% 缩放输出
    for i = 1:nympcobjScaled.OV(i).ScaleFactor = Yrange(i);
    end
    
  3. 仿真

    sim(mpcobjScaled, Ns1, r1)
    

    请添加图片描述

    请添加图片描述

  4. 测试不可测量干扰的抑制效果。

    sim(mpcobjScaled,Ns2,r2,[],SimOpt)
    

    请添加图片描述

    请添加图片描述

    即使没有调整 MPC 权重,设定点跟踪和干扰抑制都表现良好。这是因为现在原始权重应用于缩放后的信号,因此加权效果没有失真。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Dubbo分布式日志跟踪实现

前言 随着越来越多的应用逐渐微服务化后,分布式服务之间的RPC调用使得异常排查的难度骤增,最明显的一个问题,就是整个调用链路的日志不在一台机器上,往往定位问题就要花费大量时间。如何在一个分布式网络中把单次请求的整个调用日…

企业网络转型:优势与挑战

◎ 网络研究观 事实上,现代企业网络是一个由相互连接的数据、应用程序和基础设施组成的复杂网络。然而,企业不应让这种复杂性成为服务不可靠、安全漏洞或网络停机的借口。 由于组织和公司面临着从并购到云扩展的诸多挑战,以及网络技术日益复…

【算法一周目】双指针(1)

目录 1.双指针介绍 2.移动零 解题思路 C代码实现 3.复写零 解题思路 C代码实现 4.快乐数 解题思路 C代码实现 5.盛水最多的容器 解题思路 C代码实现 1.双指针介绍 常见的双指针有两种形式,一种是对撞指针,一种是快慢指针。 对撞指针&#x…

6547网:青少年软件编程Python等级考试(六级)真题试卷

2024年9月青少年软件编程Python等级考试(六级)真题试卷 题目总数:38 总分数:100 选择题 第 1 题 单选题 下面Python代码运行后出现的图像是?( ) import matplotlib.pyplot as plt im…

【5种灵活有效方式】如何从死机手机中恢复内部数据?

本文介绍了5种方法来从死机的Android设备中恢复数据,包括使用U1tData安卓数据恢复软件、SD卡、OTG、Google云端硬盘和SamsungCloud。这些方法覆盖了不同情况下的数据恢复需求。 摘要由CSDN通过智能技术生成 我的手机掉在地上,现在无法开机。我丢失了所…

【安全测试】sqlmap工具(sql注入)学习

前言:sqimap是一个开源的渗透测试工具,它可以自动化检测和利用SQL注入缺陷以及接管数据库服务器的过程。它有一个强大的检测引擎,许多适合于终极渗透测试的小众特性和广泛的开关,从数据库指纹、从数据库获 取数据到访问底层文件系…

行业类别-智慧城市-子类别智能交通-细分类别自动驾驶技术-应用场景城市公共交通优化

1.大纲分析 针对题目“8.0 行业类别-智慧城市-子类别智能交通-细分类别自动驾驶技术-应用场景城市公共交通优化”的大纲分析,可以从以下几个方面进行展开: 一、引言 简述智慧城市的概念及其重要性。强调智能交通在智慧城市中的核心地位。引出自动驾驶…

24.11.11 JavaScript1

JavaScript(简称js)是⼀种描述语⾔,基于对象和事件驱动的脚本语⾔ JavaScript特点:脚本语⾔(⼀种轻量级的编程语⾔) ⼀种解释性语⾔(⽆需预编译) 被设计为向HTML⻚⾯添加交互⾏为 运⾏于客户端&…

PDF24:多功能 PDF 工具使用指南

PDF24:多功能 PDF 工具使用指南 在日常工作和学习中,PDF 是一种常见且重要的文档格式。无论是查看、编辑、合并,还是转换 PDF 文件,能够快速高效地处理 PDF 文档对于提高工作效率至关重要。PDF24 是一款免费、功能全面的 PDF 工具…

计算机的错误计算(一百五十一)

摘要 探讨 MATLAB 中反正弦 asin 与反余弦 acos 函数的计算精度问题。 例1. 已知 计算 及 直接贴图吧: 另外,16位的正确值分别为 0.1570785896071048e1、0.1043072384837152e-4、-0.1570785896071048e1 与 0.3141582222865945e1(I…

Lua进阶用法之Lua和C的接口设计

一:lua/c的接口编程 首先skynet、openresty 都是深度使用 lua 语言的典范;学习 lua 不仅仅要学习基本用法,还要学会使用 c 与 lua 交互,这样才学会了 lua 作为胶水语言的精髓,下面看一下他们两个的调用过程。 虚拟栈&a…

macOS 下的 ARM 裸机嵌入式开发入门- 第二部分:实现第一个裸机应用并且调试

1、准备二进制运行程序镜像 利用 QEMU 仿真一个完整的系统,并创建最简单的“Hello world!”示例。 QEMU 模拟器支持 VersatilePB 平台,该平台包含一个 ARM926EJ-S 核心,以及其他外设,四个 UART 串行端口;特别是第一个…

【网络面试篇】其他面试题——Cookie、Session、DNS、CDN、SSL/TLS、加密概念

目录 一、HTTP 相关问题 1. Cookie 和 Session 是什么? (1)Cookie (2)Session 2. Cookie 的工作原理? 3. Session 的工作原理? 4. Cookie 和 Session 有什么区别? 二、其他问…

【数值分析】复习1---牛顿迭代法

首先,我们先来回顾一下牛顿迭代法的概念。 这里注意的是,牛顿迭代法是一种线性方法,它在点 x k x_k xk​处进行线性展开,而且展开成一阶泰勒公式!注意是一阶,不是二阶,不是更高阶,所…

文本语义分块、RAG 系统的分块难题:小型语言模型如何找到最佳断点

文本语义分块、RAG 系统的分块难题:小型语言模型如何找到最佳断点? 转自jina最新的关于文本语义分块的分享和模型 之前我们聊过RAG 里文档分块 (Chunking) 的挑战,也介绍了 迟分 (Late Chunking) 的概念,它可以在向量化的时候减…

PostgreSQL中如果有Left Join的时候索引怎么加

在PostgreSQL中,当你的查询包含多个LEFT JOIN和WHERE条件时,合理地添加索引可以显著提高查询性能。以下是一些具体的优化步骤和建议: 1. 分析查询 使用 EXPLAIN ANALYZE 命令分析你的查询,了解查询的执行计划,识别出连…

温度虽寒,其道犹变:OpenAI接口之温度参数设置为0,为何每次回复仍有不确定性?

问题描述 调用openai API,使用templature 0,每次返回的内容仍有一些不同 >>> client OpenAI( ... api_keyapi_key, ... base_urlapi_base) #第一次尝试 >>> response client.chat.completions.create(mo…

vue-h5:在h5中实现相机拍照加上身份证人相框和国徽框

参考: https://blog.csdn.net/weixin_45148022/article/details/135696629 https://juejin.cn/post/7327353533618978842?searchId20241101133433B2BB37A081FD6A02DA60 https://www.freesion.com/article/67641324321/ https://github.com/AlexKratky/vue-camer…

国标GB28181视频平台EasyCVR私有化部署视频平台对接监控录像机NVR时,录像机“资源不足”是什么原因?

EasyCVR视频融合云平台,是TSINGSEE青犀视频“云边端”架构体系中的“云平台”系列之一,是一款针对大中型项目设计的跨区域、网络化、视频监控综合管理系统平台,通过接入视频监控设备及视频平台,实现视频数据的集中汇聚、融合管理、…

【Android、IOS、Flutter、鸿蒙、ReactNative 】标题栏

Android 标题栏 参考 Android Studio版本 配置gradle镜像 阿里云 Android使用 android:theme 显示标题栏 添加依赖 dependencies {implementation("androidx.appcompat:appcompat:1.6.1")implementation("com.google.android.material:material:1.9.0")…