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

目录

  • 一、说明
  • 二、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://xiahunao.cn/news/2776926.html

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

相关文章

4.5 特效规范与拆分实现及程序的调用原理

一、特效基础流程 落地方案 连入游戏 需求 策划需求,美术需求 需要的SHADER,功能 测试/反馈/修改 效果迭代 满足功能的特效 概念设计 参考图,设计图 二、规范的设计原理与目的 节约沟通成本 保持项目的一致性 工作交接可以更加便捷 降低出错的概率 提升工作效率…

【数据结构】前缀树的模拟实现

目录 1、什么是前缀树? 2、模拟实现 2.1、前缀树节点结构 2.2、字符串的添加 2.3、字符串的查寻 2.3.1、查询树中有多少个以字符串"pre"作为前缀的字符串 2.3.2、查询某个字符串被添加过多少次 2.4、字符串的删除 3、完整代码 1、什么是前缀树&…

Vue-Vue3 集成编辑器功能

1、安装依赖 编辑器插件需要安装 wangeditor/editor 和 wangeditor/editor-for-vue 两个插件 npm install wangeditor/editor --savevue3运行如下命令安装 npm install wangeditor/editor-for-vuenext --savevue2运行如下命令安装 npm install wangeditor/editor-for-vue -…

设计模式3-责任链模式

责任链模式是一种行为设计模式,它允许你创建一个对象链。请求沿着这条链传递,直到有一个对象处理它为止。这种模式通常用于需要以某种方式动态地决定处理请求的顺序或方式的情况。 类图: 从图中可见最大的特点是AbstractHandler它自己聚合了自…

华清作业day56

SQLite特性: 零配置一无需安装和管理配置;储存在单一磁盘文件中的一个完整的数据库;数据库文件可以在不同字节顺序的机器间自由共享;支持数据库大小至2TB;足够小,全部源码大致3万行c代码,250KB…

Redis——集群环境部署

一般情况下的Redis,我们都是在一台服务器上进行操作的,也就是说读、写以及备份操作都是在一台Redis服务器上进行的。随着项目访问量的增加,对Redis服务器的操作也更加频繁,虽然Redis读写速度都很快,但是一定程度上也会…

书生·浦语大模型全链路开源体系

参考:https://www.bilibili.com/video/BV1Rc411b7ns/?spm_id_from333.788&vd_source3bbd0d74033e31cbca9ee35e111ed3d1 背景: 人工智能的发展从针对特定任务,用一个模型解决一个问题过渡到一个模型来应对多模态、多任务,大模…

程序设计基础实验破解(5)

一.前言 我上大一时接触到程序设计基础这门课,这门课有时会有实验,我便常常摸鱼,利用CSDN来做, 虽然有时搜不到,但每次搜到时我想:爽!!! 于是我也开始写,写…

【FFmpeg】ffplay 命令行参数 ⑤ ( 设置音频滤镜 -af 参数 | 设置统计信息 -stats 参数 | 设置同步时钟类型 -sync 参数 )

文章目录 一、ffplay 命令行参数 - 音频滤镜1、设置音频滤镜 -af 参数2、常用的 音频滤镜 参数3、音频滤镜链 示例 二、ffplay 命令行参数 - 统计信息1、设置统计信息 -stats 参数2、关闭统计信息 -nostats 参数 三、ffplay 命令行参数 - 同步时钟类型1、设置同步时钟类型 -syn…

盘点2024年1月Sui生态发展,了解Sui近期成长历程!

2024年1月是Sui生态开门大吉的一个月,在2023交出优异的成绩单后,2024年的首月也圆满结尾。在BTC现货ETF通过的大背景之下,Web3行业多项指标持续展现增长趋势。Sui也紧随行业脚步,开展了一系列活动助力Web3行业和生态持续发展。 其…

改变终端安全的革命性新兴技术:自动移动目标防御技术AMTD

自动移动目标防御技术通过启用终端配置的自适应防御来改变终端检测和响应能力。产品领导者可以实施AMTD来确保实时威胁响应,并减少检测和响应安全威胁所需的时间。 主要发现 通过动态修改系统配置、软件堆栈或网络特征,自动移动目标防御(AMTD…

肯尼斯·里科《C和指针》第13章 高级指针话题(1)进一步探讨指向指针的指针变量的高级声明

13.1 进一步探讨指向指针的指针 上一章使用了指向指针的指针,用于简化向单链表插入新值的函数。另外还存在许多领域,指向指针的指针可以在其中发挥重要的作用。这里有一个通用的例子: 这些声明在内存中创建了下列变量。如果它们是自动变量&am…

第四篇:数据库安装(命令行)

数据库命令行界面安装 mysql官网,下载解压 https://dev.mysql.com/downloads/mysql/ 在安装之前先去检查一下,本地计算机的用户合组 winr(输入lusrmgr.msc) -点击组-双击administrator 如果只有这两个,那么就添加一下,提高网络服务的权限(避免出现mysql启动失败) …

Blazor SSR/WASM IDS/OIDC 单点登录授权实例2-登录信息组件wasm

目录: OpenID 与 OAuth2 基础知识Blazor wasm Google 登录Blazor wasm Gitee 码云登录Blazor SSR/WASM IDS/OIDC 单点登录授权实例1-建立和配置IDS身份验证服务Blazor SSR/WASM IDS/OIDC 单点登录授权实例2-登录信息组件wasmBlazor SSR/WASM IDS/OIDC 单点登录授权实例3-服务端…

FPGA实现ISP用于无人车、无人机配送的方案调研

查到一个always 奥唯思公司做的用FPGA实现ISP的方案,采用易灵思钛金16nm的FPGA Ti60F225,通过MIPI CSI RX采集图像传感器的数据,在FPGA内部经过一系列复杂的ISP运算后,再通过MIPI CSI TX将图像数据发送给后端。 一套完整的ISP&a…

(2024,仅高频分量的蓝噪声与高斯噪声线性插值,时变噪声)扩散模型的蓝噪声

Blue noise for diffusion models 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 3.1 相关噪声 3.2 具有时变噪声的扩散模型 3.3 利用矫正…

Hexo更换Matery主题

引言 在数字化时代,拥有一个个人博客已经成为许多人展示自己技能、分享知识和与世界互动的重要方式。而在众多博客平台中,Hexo因其简洁、高效和易于定制的特点而备受青睐。本文将详细介绍如何为你的Hexo博客更换主题,让你的个人博客在互联网…

【前端高频面试题--Vue基础篇】

🚀 作者 :“码上有前” 🚀 文章简介 :前端高频面试题 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬前端高频面试题--Vue基础篇 Vue基本原理双向绑定与MVVM模型Vue的优点计算属性与监听属性计算属性监…

MySQL篇之回表查询

一、聚集索引 将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据。特点:必须有,而且只有一个。 聚集索引选取规则: 1. 如果存在主键,主键索引就是聚集索引。 2. 如果不存在主键,将使用第一个唯一(UNIQUE&am…

【集合系列】TreeMap 集合

TreeMap 集合 1. 概述2. 方法3. 遍历方式4. 排序方式5. 代码示例16. 代码示例27. 代码示例38. 注意事项9. 源码分析 其他集合类 父类 Map 集合类的遍历方式 TreeSet 集合 具体信息请查看 API 帮助文档 1. 概述 TreeMap 是 Java 中的一个集合类,它实现了 SortedMap…