C++ 中的模型预测控制(01/2)

news2024/11/20 4:55:03

目录

  • 一、说明
  • 二、MPC原理说明
  • 三、分解算法的来源并显示关键特征,
  • 四、C++ 实现说明
  • 五、平衡 Q 和 R
  • 六、资源下载地址

一、说明

   以下文章介绍了应用模型预测控制器的简单控制系统方法。本文讨论了这种控制的基本机制,该机制适用于各种工程领域。

   MPC 涉及对未来系统行为的预测(由一组方程描述的模型)。在优化过程中实现物理模型的所需位置(成本函数)。

   您可以想象,具有系统动态模型(线性时不变 (LTI) 系统中的矩阵 A)的 MPC 模拟或预测模型在未来的位置或行为。然后,控制器计算一系列控制输入,以最小化预定义的成本函数,同时考虑所需的目标和约束。

   出于本文的目的,我在 C++ 中准备了简单的模拟。其目的是展示可以轻松复制的原理,用于更高级的模型动力学。

二、MPC原理说明

   我在C++中完全应用的标准模型预测控制(MPC)公式可以定义如下:

   考虑一个具有以下状态空间表示的离散时间线性系统:
x k + 1 = A ⋅ x k + B ⋅ u k y k = C ⋅ x k x_{k+1}=A \cdot x_k+B \cdot u_k \\ y_k=C\cdot x_k xk+1=Axk+Bukyk=Cxk

这里

  • x k x_k xk 是时间步长 k 的状态向量,

  • U K UK UK 是时间步长 K 的控制输入向量,

  • y k y_k yk 是时间步长 k 的输出向量,

  • A 是状态转移矩阵(模型动力学),

  • B 是控制输入矩阵,

  • C 是输出矩阵。
       模型预测控制 (MPC) 的目标是在满足系统约束的同时,在有限预测范围 N 上最小化成本函数。成本函数通常包括一个二次项,用于惩罚与参考轨迹和控制输入的偏差: 在这里插入图片描述
    这里

  • N 是预测范围,

  • Q 是输出权重矩阵,

  • R 是控制输入权重矩阵,

  • r k + i r_{k+i} rk+i 是时间步长 k+i 的参考轨迹。

  • MPC问题被表述为优化问题,

在这里插入图片描述

   在这里,控制输入 u 和状态 x 位于下限和上限之下。

   这个公式概述了线性离散时间系统的标准模型预测控制的数学结构,我在 C++ 模拟中应用了它。
   在实践中(检查源代码),我们在每个时间步解决这个优化问题,以计算预测范围内的最优控制输入,然后将第一个控制输入应用于系统。
在这里插入图片描述

MPC 概述(作者)

三、分解算法的来源并显示关键特征,

  1. 海森矩阵 (H):通常,黑森矩阵是一个与二阶导数相关的数学概念,它提供有关多元函数曲率的信息。
       在优化的情况下,我们使用 Hassian 来分析临界点(最小值或最大值)附近的目标函数的行为。在我们的特殊情况下,Hessian 对状态和控制输入偏差的二次惩罚进行编码。
  2. 成本向量 (F):向量是预测状态与所需参考状态的偏差和控制输入偏差的零值的组合。该向量表示成本函数的线性项,并指导优化过程以最小化成本。
  3. 优化过程:优化过程旨在找到控制输入的变化,使成本函数最小化。在二次优化问题的上下文中,这是通过求解由优化问题的最优条件产生的一组线性方程来实现的。
       我们求解由最优条件形成的线性方程。此操作计算应应用于当前控制输入的控制输入的最佳变化,以便使系统状态更接近所需的基准电压源,同时将成本降至最低。

四、C++ 实现说明

   请务必仔细查看我的 C++ 实现并考虑这一行,

Eigen::VectorXd control_input_delta = H.colPivHouseholderQr().solve(-f);

   这行代码正在求解 H x = − f Hx=-f Hx=f 形式的线性方程,其中 H 是矩阵,f 是向量。该操作使用QR分解和列枢轴执行,这是一种求解线性系统的数值方法。以下是分步分解:

  1. 矩阵 H 和向量 f:
    H 是表示线性方程组的方阵。
    f 是一个向量,运算涉及它的否定 (-f),它用作线性方程的右侧。
  2. 列旋转QR分解:
    colPivHouseholderQr()计算矩阵 H 的 QR 分解与列透视。
    在 QR 分解中,矩阵 H 被分解为两个矩阵 Q 和 R,其中 Q 是正交矩阵(意味着 Q T ⋅ Q = I Q^T\cdot Q=I QTQ=I其中 I I I是单位矩阵),R 是上三角矩阵。

   列枢轴是一种用于提高分解的数值稳定性的技术,特别是对于接近奇异或条件不良的矩阵。

  1. 求解线性系统:
       该运算用于使用 H 的 QR 分解求解线性系统 Hx = −f。.solve(-f)
    从数学上讲,解 x 可以通过以下方式找到:
    x = Q − 1 ⋅ R − 1 ( − f ) x=Q^{-1}\cdot R^{-1}(-f) x=Q1R1(f)

   由于 Q 是正交的, Q − 1 = Q T Q^{-1}= Q^{T} Q1=QT

   简化计算。解 x 被赋值给变量control_input_delta ,其类型为Eigen::VectorXd

  1. 数学表示:
       整个运算在数学上可以表示为使用QR分解和列枢轴求解方程 H x = − f Hx = −f Hx=f中的x:

x = H − 1 ( − f ) x=H^{-1} (−f) x=H1(f)

   或者更明确地说:
x = ( Q ⋅ R ) − 1 ( − f ) x = ( R ) − 1 ⋅ Q T ( − f ) x=(Q \cdot R)^{-1}(-f) \\ x=(R )^{-1}\cdot Q^{T}(-f) x=(QR)1(f)x=(R)1QT(f)

  1. Q矩阵
    定义:Q 矩阵是一个方形、对称且通常为正的半定矩阵,用于 MPC 的成本函数,用于权衡跟踪参考状态或设定值的重要性。
    在成本函数中的作用:在 MPC 的目标函数中,Q 矩阵乘以状态误差(预测状态和期望状态之间的差值)。
    成本函数的这一部分通常写为 ( x − x r e f ) T Q ( x − x r e f ) (x−x_{ref})TQ(x−x_{ref}) xxrefTQxxref其中 x 是预测状态, x r e f x_{ref} xref 是期望状态或参考。
       目的:Q 矩阵旨在惩罚偏离期望状态的情况。通过调整 Q 中的权重,您可以指定状态向量的哪些方面更需要调节。例如,某些状态的 Q 权重较高意味着控制器将优先最小化这些状态中的错误。
  2. R矩阵
       定义:R 矩阵和 Q 一样,是一个正方形、对称且通常为正定矩阵。它在 MPC 成本函数中用于权衡控制工作量或控制输入。
       成本函数中的作用:R矩阵是涉及控制输入的目标函数项的一部分。这通常写成 uTRu,其中 u 是控制输入向量。
       目的:R矩阵的作用是惩罚过度的控制行为。R 中的权重越大,意味着对大控制输入的惩罚越大,鼓励控制器使用较小的输入,从而可能导致更平滑的控制操作。这对于防止执行器(电机驱动器)上的过多设置或对于不需要或不安全的大控制输入的系统非常重要。

五、平衡 Q 和 R

   Q 和 R 矩阵中的相对值定义了跟踪参考轨迹(状态精度)的重要性和最小化控制工作量之间的权衡。这种权衡是 MPC 控制器设计的核心:

   高 Q 值、低 R:将状态跟踪准确性置于控制工作之上,从而采取积极的控制措施。
   低 Q 值、高 R:优先考虑最大程度地减少控制工作,可能以牺牲跟踪性能为代价。
   下面,我提供了可以在机器上运行的模拟的输出。
   下面的第一个仿真提供了有关 MPC 如何执行以接近所需恒定位置(值)的信息。
在这里插入图片描述

   MPC 性能。模拟 1
   您可以运行的第二个仿真提供 MPC 性能输出,而所需的轨迹具有正弦函数的形状。成本函数(矩阵值 Q、R)的正确选择会影响状态以及系统如何随时间推移而稳定。在这里插入图片描述
MPC 性能。模拟 2MPC 性能。模拟 2。感谢您的阅读。

六、资源下载地址

本文相关的代码下载地址:
https://download.csdn.net/download/gongdiwudu/88823951
关于matplotlib的相关资源地址:
https://download.csdn.net/download/gongdiwudu/88821722

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

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

相关文章

书生·浦语大模型第三课作业

基础作业: 复现课程知识库助手搭建过程 (截图) 进阶作业: 选择一个垂直领域,收集该领域的专业资料构建专业知识库,并搭建专业问答助手,并在 OpenXLab 上成功部署(截图,并提供应用地址&#x…

【QT+QGIS跨平台编译】之三十一:【FreeXL+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、FreeXL介绍二、文件下载三、文件分析四、pro文件五、编译实践一、FreeXL介绍 【FreeXL跨平台编译】:Windows环境下编译成果(支撑QGIS跨平台编译,以及二次研发) 【FreeXL跨平台编译】:Linux环境下编译成果(支撑QGIS跨平台编译,以及二次研发) 【FreeXL跨平台…

如何在Sprint中管理UI测试?

作为iOS团队,我们编写3种类型的UI测试。如果你问这些是什么;快照、冒烟和回归测试。那么这些测试到底是什么?让我们稍微谈谈这些。 快照测试快照测试是检查UI中的某些内容是否损坏的测试。 首先,它将所需的视图图像保存在某处&am…

如何部署一个高可用的 Linux 集群?

部署一个高可用的 Linux 集群需要经过多个步骤和考虑因素。以下是一个简要的指南,帮助您了解如何部署一个高可用的 Linux 集群: 确定需求和目标:在开始部署之前,您需要明确高可用性的定义和目标。对于一些组织而言,高…

单片机学习笔记---串口向电脑发送数据电脑通过串口控制LED

目录 串口向电脑发送数据 每隔一秒串口就发送一个递增的数给电脑 电脑通过串口控制LED 波特率的具体计算 HEX模式和文本模式 前两节是本节的理论基础,这节开始代码演示! 串口向电脑发送数据 接下来先开始演示一下串口单向发送一个数字给电脑&…

Swift 初见

Swift 初见 学习swift的记录 控制台输出 print("hello world")可以无分号!!!!!!! 变量声明 let 常量声明 如果在常量声明后再次修改他会报错 var 变量声明 一个常量的值&#xf…

Python ABC:应用场景和示例

前言 在Python编程中,抽象基类(Abstract Base Classes,简称ABC)是一种用于定义接口和规范的强大工具。它们提供了一种方式来确保类遵循特定的约定,从而增强了代码的可读性、可维护性和可扩展性。本文将深入探讨Python…

CVE-2018-19518 漏洞复现

CVE-2018-19518 漏洞介绍 IMAP协议(因特网消息访问协议)它的主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。它运行在TCP/IP协议之上,使用的端口是143。在php中调用的是imap_open函数。 PHP 的…

vscode开发FPGA(0)--windows平台搭建

一、从官网下载安装VScode Download Visual Studio Code - Mac, Linux, Windows 二、安装配置插件 1. 安装Chinese(simplified)中文汉化包 2.安装Verilog-HDL/systemVerilog插件(支持verilog语法) 3.配置CTags Support插件(支持代码跳转) 1)在github下…

2024-02-08(Flume)

1.Flume 的架构和MQ消息队列有点类似 2.Flume也可以做数据的持久化操作 在Channel部分选择使用File channel组件 3.Flume进行日志文件监控 场景:企业中应用程序部署后会将日志写入到文件中,我们可以使用Flume从各个日志文件将日志收集到日志中心以便…

Flume安装部署

安装部署 安装包连接:链接:https://pan.baidu.com/s/1m0d5O3Q2eH14BpWsGGfbLw?pwd6666 (1)将apache-flume-1.10.1-bin.tar.gz上传到linux的/opt/software目录下 (2)解压apache-flume-1.10.1-bin.tar.gz…

《小狗钱钱》读书笔记——如何看待金钱

目录 前言 作者 经典摘录 1、 了解致富的规律,一开始,必须明确金钱对你的意义 2、 梦想储蓄罐和梦想相册 3、认真去找机会 4、主人公吉娅的财富路径 5、注意财富积累本质 写在最后 前言 尽管[ 智慧是无法传授的], 但读书可以启发思路&#xff0…

嵌入式学习之Linux入门篇笔记——17,makefile基本语法(上)

配套视频学习链接:http://【【北京迅为】嵌入式学习之Linux入门篇】 https://www.bilibili.com/video/BV1M7411m7wT/?p4&share_sourcecopy_web&vd_sourcea0ef2c4953d33a9260910aaea45eaec8 目录 一.设置 vim 首行缩进 二.Makefile 基本语法…

Transformer的PyTorch实现之若干问题探讨(二)

在《Transformer的PyTorch实现之若干问题探讨(一)》中探讨了Transformer的训练整体流程,本文进一步探讨Transformer训练过程中teacher forcing的实现原理。 1.Transformer中decoder的流程 在论文《Attention is all you need》中&#xff0…

电商小程序06用户审核

目录 1 创建自定义应用2 显示待办数量3 创建审核页面4 开发审核功能5 搭建布局6 最终效果总结 上一篇我们讲解了用户注册的功能,用户注册之后状态是待审核,需要管理员进行审核。通常给管理员提供一套PC端的软件进行相关的操作,在低代码中&…

ChatGPT高效提问—prompt常见用法(续篇五)

ChatGPT高效提问—prompt常见用法(续篇五) 1.1 种子词 ​ 种子词(seed word)通常指的是在对话中使用的初始提示或关键词,用于引导ChatGPT生成相关回复。种子词可以是一个词、短语或句子,通常与对话的主题…

问题:老年人心理健康维护与促进的原则为________、________、发展原则。 #媒体#知识分享

问题:老年人心理健康维护与促进的原则为________、________、发展原则。 参考答案如图所示

肯尼斯·里科《C和指针》第12章 使用结构和指针(1)链表

只恨当时学的时候没有读到这本书,,,,,, 12.1 链表 有些读者可能还不熟悉链表,这里对它作一简单介绍。链表(linked list)就一些包含数据的独立数据结构(通常称为节点)的集…

第5章 数据库操作

学习目标 了解数据库,能够说出数据库的概念、特点和分类 熟悉Flask-SQLAlchemy的安装,能够在Flask程序中独立安装扩展包Flask-SQLAlchemy 掌握数据库的连接方式,能够通过设置配置项SQLALCHEMY_DATABASE_URI的方式连接数据库 掌握模型的定义…

来自谷歌的新年礼物!速来免费领取2个月谷歌Gemini Advanced会员!价值280元!对标ChatGPT Plus!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…