MATLAB - MPC - QP Solvers

系列文章目录


前言

        模型预测控制器 QP 求解器将线性 MPC 优化问题转换为一般形式的 QP 问题

${\underset{x}{M i n} } (\frac{1}{2}x^{​{T}}H x+f^{​{T}}x)$

        受到线性不等式约束

$A x\leq b$

        其中

  • x 是解向量。
  • H 是黑森矩阵。当预测模型和调整权重在运行时不发生变化时,该矩阵保持不变。
  • A 是线性约束系数矩阵。当预测模型在运行时不发生变化时,该矩阵保持不变。
  • b 和 f 是向量。

        在每个控制区间开始时,控制器会计算 H、f、A 和 b。 如果 H 或 A 是常数,控制器会检索它们的预计算值。


一、内置的QP求解器

        模型预测控制工具箱 (Model Predictive Control Toolbox™) 软件支持两种解决 QP 问题的内置算法。这两种求解器都要求 Hessian 矩阵为正定(positive definite)矩阵。

  • 主动集求解器(Active-set solver) - 该求解器可以为单精度和双精度的中小型优化问题提供快速、稳健的性能。主动集求解器使用的是 [1] 中的 KWIK 算法。要使用主动集求解器,请将 MPC 控制器的 Optimizer.Algorithm 属性设置为 "主动集"。要配置算法设置,请使用控制器的 Optimizer.ActiveSetOptions 属性。
  • 内部点求解器(Interior-point solver) - 这种求解器可以为大规模优化问题提供卓越的性能,例如在大型预测和控制范围内执行约束的 MPC 应用程序。该内部点求解器使用带有 Mehrotra 预测器-校正器的基元-二元算法。要使用内部点求解器,请将 MPC 控制器的 Optimizer.Algorithm 属性设置为 "内部点"。要配置算法设置,请使用控制器的 Optimizer.InteriorPointOptions 属性。

1.1 求解器配置 

        在为您的应用选择和配置 QP 求解器时,请考虑以下几点:

  • MPC 问题的大小和配置会影响内置 QP 求解器的性能。要确定哪种求解器最适合您的应用,请考虑使用两种 QP 求解器在多个仿真场景中对控制器进行仿真。
  • 与主动集求解器相比,内点求解器对求解器参数更为敏感。因此,可能需要进行更多调整,才能在性能和鲁棒性之间找到最佳平衡。
  • 在测试最优解时,主动集求解器也会使用不可调整的公差。您可以调整内点求解器的优化公差。
  • 由于数值舍入误差,一个或多个线性约束可能会受到轻微违反。这种违规是正常的,不会产生警告信息。要调整可接受的约束条件违反容差,请使用主动集求解器或内部点求解器的约束条件容差设置。
  • 搜索 QP 解法是一个迭代过程。对于任一求解器,都可以使用相应的 MaxIterations 设置来指定最大迭代次数。如果迭代次数达到最大值,算法就会终止。
  • 主动集求解器的默认最大迭代次数为 $4(n_{c}+n_{c})$ 其中 nc 和 nv 分别是整个预测范围内的约束条件和优化变量的数量。对于某些控制器配置,该值可能非常大,从而导致 QP 求解器停止响应。该值的下限为 120。
  • 内点求解器的默认最大迭代次数为 50。
  • 如果您的 MPC 问题在转换为 QP 问题后包含硬约束,则 QP 不等式约束可能不可行(无法满足)。如果 QP 求解器检测到不可行,它会立即终止。

        当求解器检测到问题不可行或迭代次数达到最大值但未找到最优解时,控制器会保留上次成功的控制输出。更多信息,请参阅 mpcmove(mpcmove)。您可以检测异常结果,并根据需要覆盖默认行为。

        在第一个控制步骤中,QP 求解器使用冷启动,初始猜测是无约束模型预测控制中描述的无约束解(Unconstrained Model Predictive Control)。如果 x 满足约束条件,它就是最优 QP 解,算法终止。否则,至少有一个线性不等式约束必须满足相等条件,求解器将计算出最优解。对于后续控制步骤:

  • 主动集求解器使用热启动,上一个控制步骤中确定的主动约束集成为初始猜测。
  • 内点求解器继续使用冷启动。

1.2 自定义 QP 应用程序

        要为需要解决在线 QP 问题的应用访问 QP 求解器,可使用 mpcActiveSetSolver 和 mpcInteriorPointSolver 函数,它们在以下方面非常有用:

  • 超出模型预测控制工具箱软件范围的高级 MPC 应用程序。
  • 自定义 QP 应用程序,包括需要生成代码的应用程序。

二、自定义 QP 解算器

        模型预测控制工具箱软件可让您为 MPC 控制器指定自定义 QP 求解器。在每个控制区间,该求解器都会被调用,以替代内置求解器。该选项可用于

  • 验证仿真结果或使用您信任的内部第三方求解器生成代码。
  • 内置求解器无法为特定问题提供满意性能的应用。

        您可以为仿真或代码生成定义自定义求解器。无论在哪种情况下,您都可以使用自定义函数定义自定义求解器,并将控制器配置为使用该自定义函数。

TaskCustom Solver FunctionAffected MATLAB® FunctionsAffected Simulink® Blocks

Simulation

Set Optimizer.CustomSolver to true.

Optimizer.CustomSolverCodeGen is ignored.

mpcCustomSolver.m

Supports:

  • MATLAB code

  • MEX files

  • sim

  • mpcmove

  • mpcmoveAdaptive

  • mpcmoveMultiple

  • mpcmoveCodeGeneration

  • MPC Controller

  • Adaptive MPC Controller

  • Multiple MPC Controllers

Code Generation

Set Optimizer.CustomSolverCodeGen to true.

Optimizer.CustomSolver is ignored.

mpcCustomSolverCodeGen.m

Supports:

  • MATLAB code suitable for code generation

  • C/C++ code

  • mpcMoveCodeGeneration

自定义仿真求解器
要使用自定义 QP 求

2.1 自定义仿真求解器

        要使用自定义 QP 求解器模拟 MPC 控制器,请执行以下步骤。

  1. 将求解器模板文件复制到工作文件夹或 MATLAB 路径上的任意位置,并将其重命名为 mpcCustomSolver.m。
    src = which('mpcCustomSolver.txt');
    dest = fullfile(pwd,'mpcCustomSolver.m');
    copyfile(src,dest,'f');
  2. 修改 mpcCustomSolver.m,添加自己的自定义求解器。您的求解器必须能在 MATLAB 中运行,并在 MATLAB 脚本或 MEX 文件中实现。
  3. 配置 MPC 控制器 mpcobj 以使用自定义求解器。
    mpcobj.Optimizer.CustomSolver = true;
  4. 模拟控制器。更多信息,请参阅仿真(Simulation)。

        有关示例,请参阅使用自定义 QP 求解器模拟 MPC 控制器(Simulate MPC Controller with a Custom QP Solver)。

三、将 quadprog 用作自定义 QP 求解器

        可以将 MPC 对象配置为使用 quadprog(优化工具箱)函数提供的活动集求解器作为自定义 QP 求解器。

        要自动配置 MPC 对象 mpcobj 在仿真和代码生成中使用 quadprog 作为自定义 QP 求解器,可以使用 setCustomSolver 函数。具体来说,在 MATLAB 命令提示符下输入以下内容。

setCustomSolver(mpcobj,'quadprog')

        该命令将在当前文件夹下生成 mpcCustomSolver.m 和 mpcCustomSolverCodeGen.m 文件,它们在内部调用 quadprog(优化工具箱)。然后将 mpcobj.Optimizer.CustomSolver 和 mpcobj.Optimizer.CustomSolverCodeGen 设置为 true。
您还可以进一步自定义这些功能,例如调整求解器选项,前提是您使用的是 active-set 求解器(因为 MPC 问题不支持其他 quadprog 求解器)。

        要将 mpcobj 恢复为使用 mpcobj.Optimizer.Algorithm 中指定的内置算法进行仿真和代码生成,请调用 setCustomSolver,具体如下。

setCustomSolver(mpcobj,'quadprog')

        此命令将 mpcobj.Optimizer.CustomSolver 和 mpcobj.Optimizer.CustomSolverCodeGen 设置为 false。

四、与 FORCESPRO 仿真器积分器集成

        您可以使用由 Embotech AG 开发的实时嵌入式优化软件工具 FORCESPRO,为使用模型预测控制工具箱软件设计的 MPC 控制器进行仿真并生成代码。从 FORCESPRO 2.0 开始,Embotech 提供了一个插件,利用模型预测控制工具箱软件的设计功能和 FORCESPRO 的计算性能。使用该插件,您可以生成一个自定义 QP 求解器,该求解器允许部署在实时硬件上,并根据您的特定 MPC 问题进行了高度优化,以达到令人满意的实时性能。尤其是长跨度 MPC 问题可以得到非常高效的解决。

        有关将 FORCESPRO 求解器与模型预测控制工具箱软件结合使用的信息,请参阅 "使用 Embotech FORCESPRO 求解器实施 MPC 控制器"。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣200. 岛屿数量(java DFS解法)

Problem: 200. 岛屿数量 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 该问题可以归纳为一类遍历二维矩阵的题目,此类中的一部分题目可以利用DFS来解决,具体到本题目: 1.我们首先要针对于二维数组上的每一个点,尝试展…

PDF如何转换制作成翻页电子书

很多朋友想将PDF转换制作成一本翻页电子书,却不知道如何操作。其实,转换翻页电子书的过程并不难,只需要掌握一些基本的技巧和方法就可以了。 基本该怎么操作呢? 1.首先需要一个工具帮助我们成功转换,推荐使用FLBOOK这…

性能测试之Locust(完整版)

官方文档:Locust说明文档 一、Locust简介 1、定义 Locust是一款易于使用的分布式负载测试工具,完全基于事件,即一个locust节点也可以在一个进程中支持数千并发用户,不使用回调,通过gevent使用轻量级过程&#xff08…

创投课程第五期 | 超越比特币:探索BTC生态的无限可能

协会邀请了来自水滴资本(Waterdrip Capital)的投资总监——Elaine,作为VC创投课程第5期的嘉宾,在北京时间12月17日(周日)晚上21:00 PM-22:00 PM,届时将与所有对Web3投资、创业心怀热忱的朋友们共同探讨《超越比特币&am…

设计模式-命令模式

设计模式专栏 模式介绍模式特点应用场景命令模式和代理模式的区别代码示例Java实现命令模式python实现命令模式 命令模式在spring中的应用 模式介绍 命令模式是一种行为设计模式,它将一个请求封装为一个对象,从而让你使用不同的请求把客户端与服务端操作…

Textual Inversion: 一种精调Stable Diffusion模型的方法

引言 最近的文本到图像Stable Diffusion (SD)模型已经证明了使用文本提示合成新颖场景的前所未有的能力。这些文本到图像的模型提供了通过自然语言指导创作的自由。然而,它们的使用受到用户描述特定或独特场景、艺术创作或新物理产品的能力的…

设计模式——中介者模式

引言 中介者模式是一种行为设计模式, 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互, 迫使它们通过一个中介者对象进行合作。 问题 假如你有一个创建和修改客户资料的对话框, 它由各种控件组成, 例如…

音频I2S

前言 基于网上资料对相关概念做整理汇总,部分内容引用自文后文章。 学习目标:简单了解相关概念、相关协议。 1 概述 数字音频接口DAI,即Digital Audio Interfaces,顾名思义,DAI表示在板级或板间传输数字音频信…

结构型设计模式(二)装饰器模式 适配器模式

装饰器模式 Decorator 1、什么是装饰器模式 装饰器模式允许通过将对象放入特殊的包装对象中来为原始对象添加新的行为。这种模式是一种结构型模式,因为它通过改变结构来改变被装饰对象的行为。它涉及到一组装饰器类,这些类用来包装具体组件。 2、为什…

带PWM 调光的线性降压 LED 恒流驱动器

一、基本概述 TX6410B是一种带 PWM 调光功能的线性降压 LED 恒流驱动器,仅需外接一个电阻就可以构成一个完整的 LED 恒流驱动电路,调节该外接电阻可调节输出电流,输出电流范围为 10~2000mA。TX6410B内置 30V 50 毫欧 MOS。TX6410B内置过热保…

机器学习 | 决策树 Decision Tree

—— 分而治之,逐个击破 把特征空间划分区域 每个区域拟合简单模型 分级分类决策 1、核心思想和原理 举例: 特征选择、节点分类、阈值确定 2、信息嫡 熵本身代表不确定性,是不确定性的一种度量。 熵越大,不确定性越高,…

IDEA2023 + spring cloud 工程热部署设置方法

基于spring cloud 工程进行热部署 &#xff0c;实现每次修改工程源文件&#xff0c;后台自动启动&#xff0c;方便开发测试工作。具体分为5步骤即可&#xff1a; 1、修改工程的pom文件&#xff0c;增加adding devtools 工具包。 <dependency> <groupId>org.s…

olap/clickhouse-编译器优化与向量化

本文主要结合15721和clickhouse源码来聊聊向量化&#xff0c;正好我最近也在用Eigen做算子加速&#xff0c;了解下还是有好处的。 提示编译器 提示编译器而不是复杂化简单的代码 什么时候使用汇编&#xff0c;什么时候使用SIMD&#xff1f;下面有几个基本原则&#xff1a; …

用23种设计模式打造一个cocos creator的游戏框架----(十九)备忘录模式

1、模式标准 模式名称&#xff1a;备忘录模式 模式分类&#xff1a;行为型 模式意图&#xff1a;在不破坏封装性的前提下捕获一个对象的内部状态&#xff0c;并在对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态 结构图&#xff1a; 适用于&#xff1a; …

DMA传输中的中断处理在STM32中的应用

DMA&#xff08;Direct Memory Access&#xff09;是一种在数字系统中进行数据传输的技术&#xff0c;它可以在不依赖CPU的情况下直接从内存中读取或写入数据。在STM32微控制器中&#xff0c;DMA控制器可以与外设进行数据传输&#xff0c;减轻了CPU的负担&#xff0c;提高了数据…

DFT音频还原及降噪实战

傅里叶变换与信息隐写术(二) 声音数据 ​ 声音可以用连续的波形来表示 ​ 声音在计算机中的存储是离散的 ​ 计算机中存储的是声音的几个采样点的数据&#xff0c;1 秒钟采样 5 个点就表示采样频率是 5 Hz&#xff08;每隔 0.25 秒取一个点&#xff0c;注意第 0 秒也取&#…

python:import自定义包或py文件时,pyCharm正常但终端运行提示ModuleNotFoundError: No module named错误

问题 示例项目引用items.py&#xff0c;项目在pycharm开发工具中可以正常运行&#xff0c;但使用终端直接运行会报错ModuleNotFoundError: No module named。如下图。 原因 pycharm开发工具运行正常&#xff0c;说明目录和引用模块是没问题的。问题在于终端的运行环境只搜索文…

链表基础知识(二、双向链表头插、尾插、头删、尾删、查找、删除、插入)

目录 一、双向链表的概念 二、 双向链表的优缺点分析​与对比 2.1双向链表特点&#xff1a; 2.2双链表的优劣&#xff1a; 2.3循环链表的优劣 2.4 顺序表和双向链表的优缺点分析​ 三、带头双向循环链表增删改查实现 3.1SList.c 3.2创建一个新节点、头节点 3.3头插 3.…

手拉手EasyExcel极简实现web上传下载(全栈)

环境介绍 技术栈 springbootmybatis-plusmysqleasyexcel 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。 他能让你在不用考虑性…

华为鸿蒙应用--欢迎页SplashPage+倒计时跳过(自适应手机和平板)-ArkTs

鸿蒙ArkTS 开发欢迎页SplashPage倒计时跳过&#xff0c;可自适应平板和手机&#xff1a; 一、SplashPage.ts import { BreakpointSystem, BreakPointType, Logger, PageConstants, StyleConstants } from ohos/common; import router from ohos.router;Entry Component struct…