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

X是解向量。
H是Hessian矩阵。当预测模型和调优权重在运行时不发生变化时,这个矩阵是常数。
A是一个线性约束系数矩阵。当您的预测模型在运行时不改变时,这个矩阵是常数。
B和f是向量。

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

Built-In QP Solvers

模型预测控制工具箱™软件支持解决QP问题的两种内置算法。两个求解器都要求海森矩阵是正定的

﹡Active-set Solver——该求解器可以在单精度和双精度方面为小规模和中等规模的优化问题提供快速和健壮的性能。活动集求解器使用来自[1]的KWIK算法。要使用活动集求解器,请为你的MPC控制器设置Optimizer.Algorithm属性为active-set。要配置算法设置,请使用Optimizer.ActiveSetOptions属性。

﹡Interior-point Solver——该求解器可以为大规模优化问题提供卓越的性能,例如MPC应用,在大的预测和控制范围上强制约束。这种内点求解器使用了一种带有Mehrotra预测校正器的原对偶算法。要使用内点求解器,请把MPC控制器设置Optimizer.Algorithm属性为“interior-point”。要配置算法设置,请使用控制器的Optimizer.InteriorPointOptions属性。

Solver Configuration

在为您的应用程序选择和配置QP求解器时,请考虑以下事项:
﹡MPC问题的大小和配置影响内置QP求解器的性能。要确定哪个求解器最适合您的应用程序,请考虑使用这两个QP求解器跨多个模拟场景模拟控制器。

﹡内点求解器比活动集求解器对求解器参数更敏感。因此,它需要更多的调整来找到性能和鲁棒性之间的最佳平衡。
﹡在测试最优解时,活动集求解器也使用不可调公差。您可以调整内点求解器的最优公差。

﹡由于数值舍入误差,可能会轻微违反一个或多个线性约束。这种违反是正常的,不会产生警告消息。要调整可接受约束违反的容忍度,请为活动集或内点求解器使用ConstrainTolerance设置。
﹡QP解的寻找是一个迭代过程。对于任意一个求解器,您都可以使用相应的MaxIterations设置来指定最大迭代次数。当迭代次数达到最大值时,算法终止。

﹡活动集求解器的默认最大迭代次数为4(nc+ nv),其中nc和nv分别为跨越预测层的约束和优化变量的个数。对于某些控制器配置,此值可能非常大,这可能使QP求解器似乎停止响应。这个值的下界是120。

﹡内点求解器的默认最大迭代次数是50。
﹡如果你的MPC问题在转化为QP问题后包含硬约束,QP不等式约束可能是不可行的(不可能满足)。如果QP求解器检测到不可行性,它立即终止。

当求解器检测到一个不可行的问题或达到最大迭代次数而没有找到最优解时,控制器保留最后成功的控制输出。您可以检测异常结果,并根据需要覆盖默认行为。

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

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

Suboptimal QP Solution

对于一个有约束的给定MPC应用,没有办法预测需要多少QP求解器迭代才能找到最优解。此外,在实时应用程序中,迭代的数量可以从一个控制间隔到下一个控制间隔发生显著变化。在这种情况下,最坏情况下的执行时间可能超过硬件平台允许的由控制器样本时间确定的限制。

通过在优化迭代次数超过指定的最大值后应用次优解,您可以为MPC控制器设置一个保证的最坏情况执行时间。要设置最坏情况执行时间,首先通过在标称条件下试验控制器来确定单个优化迭代所需的时间。然后,在每个控制区间上设置迭代次数的上界。例如,如果计算硬件上的每个迭代需要大约1毫秒,而控制器采样时间为10毫秒,则将最大迭代次数设置为不大于10。

MPCobj.Optimizer.ActiveSetOptions.MaxIterations = 10;

缺省情况下,MPC控制器对象对活动集求解器的最大迭代次数的下界为120。
默认情况下,当求解器达到没有最优解的求解器迭代的最大数量时,控制器保持其以前的值操纵变量。要使用最终迭代后达到的次优解决方案,请将UseSuboptimalSolution选项设置为true。

MPCobj.Optimizer.UseSuboptimalSolution = true;

当解决方案不是最优的,MPC控制器调整解决方案,使其满足所有指定的约束。
并不能保证次优解比保持控制器输出恒定时表现得更好。您可以使用这两种方法模拟您的系统,并选择提供更好的控制器性能的配置。

For an example, see Use Suboptimal Solution in Fast MPC Applications.

Custom QP Applications自定义QP应用程序

要访问需要在线解决QP问题的应用程序的QP求解器,use the mpcActiveSetSolver and mpcInteriorPointSolver functions, 适用于:

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

Custom QP Solver

模型预测控制工具箱软件允许您指定自定义的QP求解器为您的MPC控制器。这个求解器在每个控制间隔被调用来代替内置求解器。这个选项对以下情况很有用:

﹡验证您的模拟结果或使用您信任的内部第三方解决方案生成代码。
﹡内置解决程序不能为您的特定问题提供令人满意的性能的应用程序。

您可以为模拟或代码生成定义自定义求解器。在任何一种情况下,您都可以使用自定义函数定义自定义求解器,并配置控制器以使用该自定义函数。

Custom Solver for Simulation

要使用自定义QP求解器模拟MPC控制器,请执行以下步骤。
1.复制求解器模板文件到您的工作文件夹或MATLAB路径上的任何地方,并将其重命名为mpcCustomSolver.m。要将求解器模板复制到当前工作文件夹中,请在MATLAB命令行中键入以下内容。

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;

该软件现在使用您的自定义求解器进行模拟,取代内置的QP KWIK求解器。

4.模拟控制器。

Custom Solver for Code Generation

您可以为MPC控制器生成代码,使用自定义QP求解器编写的C/ c++代码或适合代码生成的MATLAB代码。
﹡要在命令行中做到这一点,您必须拥有MATLAB Coder™软件。
﹡要在Simulink中做到这一点,你必须有Simulink Coder或Simulink PLC Coder™软件。

要为使用自定义QP求解器的MPC控制器生成代码,执行以下步骤。
1.将求解器模板文件复制到您的工作文件夹或MATLAB路径的任何地方,并将其重命名为mpcCustomSolverCodeGen.m。要将MATLAB代码模板复制到当前工作文件夹中,请在MATLAB命令行中键入以下内容。

src = which('mpcCustomSolverCodeGen_TemplateEML.txt');

dest = fullfile(pwd,'mpcCustomSolverCodeGen.m');

copyfile(src,dest,'f');

或者,您可以使用C模板。

src = which('mpcCustomSolverCodeGen_TemplateC.txt');

dest = fullfile(pwd,'mpcCustomSolverCodeGen.m');

copyfile(src,dest,'f');

2.修改mpcCustomSolverCodeGen.m通过添加自己的自定义求解器。
3.配置您的MPC控制器MPCobj以使用自定义求解器。

MPCobj.Optimizer.CustomSolverCodeGen = true;

该软件现在使用您的自定义求解器来生成代码,而不是内置的QP KWIK求解器。

4.为控制器生成代码,For more information, see Generate Code and Deploy Controller to Real-Time Targets.

For an example, see Simulate and Generate Code for MPC Controller with Custom QP Solver.

Custom Solver for both Simulation and Code Generation

您可以为模拟和代码生成实现相同的定制QP求解器。这样做:

﹡Set both Optimizer.CustomSolver and Optimizer.CustomSolverCodeGen to true.

﹡Create both mpcCustomSolver.m and mpcCustomSolverCodeGen.m.

在模拟过程中,你的控制器使用mpcCustomSolver.m自定义函数。对于代码生成,控制器使用mpcCustomSolverCodeGen.m自定义函数。
您可以在两个自定义求解器函数中指定相同的MATLAB代码,提供适合代码生成的代码。

如果你实现mpcCustomSolverCodeGen.m使用C/ C++代码,创建一个MEX文件使用的代码。然后可以从mpcCustomSolver.m调用这个MEX文件。有关创建和使用MEX文件的更多信息,see C MEX File Applications.

Custom Solver Function Implementation

当你实现一个自定义QP求解器时,你的自定义函数必须有以下签名之一:
自定义求解仿真:

function [x,status] = mpcCustomSolver(H,f,A,b,x0)

代码生成的自定义求解器:

function [x,status] = mpcCustomSolverCodeGen(H,f,A,b,x0)

对于模拟和代码生成,您的自定义求解器具有以下输入和输出参数。

H是一个Hessian矩阵,指定为n × n对称正定矩阵,其中n为优化变量的个数。
F是目标函数线性项的乘子,指定为长度为n的列向量。
A是一个线性不等式约束系数矩阵,指定为m × n矩阵,其中m为约束的个数。
B是不等式约束方程的右边,指定为长度为m的列向量。

X0是解的初始猜想,指定为长度为n的列向量。
X是最优解,作为长度为n的列向量返回。
Status是解决方案有效性指示器,以整数形式返回,如下表所示。

MPC控制器期望自定义求解函数来求解受线性不等式约束Ax≥b的QP问题。如果您的自定义求解器使用Ax≤b,您必须在将它们传递到您的自定义求解器代码之前改变A和b的符号。

Integration with FORCES PRO Solver(集成与FORCES PRO求解器)

您可以使用FORCES PRO,一个由Embotech AG开发的实时嵌入式优化软件工具,来模拟和生成使用Model Predictive Control Toolbox软件设计的MPC控制器的代码。从FORCES PRO 2.0开始,Embotech提供了一个插件,利用模型预测控制工具箱软件的设计能力和FORCES PRO的计算性能。使用插件,您可以生成一个定制的QP求解器,允许部署在实时硬件上,并根据您的特定MPC问题高度优化,以实现满意的实时性能,特别是长期MPC问题可以非常有效地解决。

有关使用FORCES PRO解算器和模型预测控制工具箱软件的信息,see Implement MPC Controllers using Embotech FORCES PRO Solvers.

****************************************转自MathWorks官网********************************************

模型预测控制 MPC QP Solver相关推荐

  1. 无人车系统(十一):轨迹跟踪模型预测控制(MPC)原理与python实现【40行代码】

    前面介绍的PID,pure pursuit方法,Stanley方法都只是利用当前的系统误差来设计控制器.人们对这些控制器的设计过程中都利用了构建模型对无人车未来状态的估计(或者说利用模型估计未来的运动 ...

  2. 【控制control】机器人运动控制器----基于模型预测控制MPC方法

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 一.模型预测控制(MPC)的介绍及构成 1.介绍 2.构成 二.模型 ...

  3. Apollo代码学习(六)—模型预测控制(MPC)_follow轻尘的博客-CSDN博客_mpc代码

    Apollo代码学习(六)-模型预测控制(MPC)_follow轻尘的博客-CSDN博客_mpc代码

  4. 模型预测控制_模型预测控制(MPC)算法之一MAC算法

    引言 随着自动驾驶技术以及机器人控制技术的不断发展及逐渐火热,模型预测控制(MPC)算法作为一种先进的控制算法,其应用范围与领域得到了进一步拓展与延伸.目前提出的模型预测控制算法主要有基于非参数模型的 ...

  5. 基于模型预测控制(MPC)的悬架系统仿真分析

    目录 前言 1.悬架系统 2.基于MPC的悬架系统仿真分析 2.1 simulink模型 2.2仿真结果 2.2.1 随机C级路面 2.2.2 正弦路面 2.3 结论 3 总结 前言 模型预测控制是无 ...

  6. 基于扩展卡尔曼滤波EKF和模型预测控制MPC,自动泊车场景建模开发

    基于扩展卡尔曼滤波EKF和模型预测控制MPC,自动泊车场景建模开发,文复现. MATLAB 基于扩展卡尔曼滤波EKF和模型预测控制MPC,自动泊车场景建模开发,文复现. MATLAB(工程项目线上支持 ...

  7. 【附C++源代码】模型预测控制(MPC)公式推导以及算法实现,Model Predictive control介绍

    2022年的第一篇博客,首先祝大家新年快乐! 提示:本篇博客主要集中在对MPC的理解以及应用.这篇博客可以作为你对MPC控制器深入研究的一个开始,起到抛砖引玉,带你快速了解其原理的作用. 这篇博客将介 ...

  8. Apollo代码学习(六)—模型预测控制(MPC)

    Apollo代码学习-模型预测控制 前言 模型预测控制 预测模型 线性化 单车模型 滚动优化 反馈矫正 总结 前言 非专业选手,此篇博文内容基于书本和网络资源整理,可能理解的较为狭隘,起点较低,就事论 ...

  9. 基于模型预测控制MPC的光伏并网系统设计|太阳能发电|模型预测控制

    本课题提出一种基于最大功率点跟踪与有限集模型预测控制结合的光伏并网逆变策略,首先,针对模型预测控制算法在电网模型预测与控制时域中实时性不足等问题,引用快速求解MATMPC工具箱,降低MPC算法的单轮运 ...

  10. 差分轮移动机器人模型预测控制MPC

    模型预测控制(MPC)与PID.纯追踪法相比有更好的路径跟踪效果,在自动驾驶领域有广泛应用.本文将以运动学为基础详细推导差分轮移动机器人模型预测控制(MPC) 运动学模型 根据移动机器人的运动学结构可 ...

最新文章

  1. 设计一个名为complex的类来表示复数_天线波束设计
  2. [20180818]校内模拟赛
  3. SSH框架之Spring4专题4:Spring与DAO
  4. 狼的十大“处世哲学”~~(有关狼的图片)
  5. fetch 与引用规格(refspec)—— Git 学习笔记 23
  6. java mllib 算法_朴素贝叶斯算法原理及Spark MLlib实例(Scala/Java/Python)
  7. Clean Code 笔记
  8. HTML5的革新:结构之美
  9. docker下载地址及 设置自己的阿里云镜像加速器,Kubernetes(K8S) 安装
  10. linux wps 数学符号,2016版WPS数学符号如何输入
  11. 零基础怎么学习单片机?
  12. 【电子设计】AD15快捷键整理
  13. FPGA-09FPGA-RGB TFT-LCD显示
  14. 程序员如何通过努力出书做到名利双收的!
  15. “Microsoft C++ 异常: cv::Exception,位于内存位置 0x0000005C8ECFFA80 处。”
  16. Piranha web 界面LVS DR 模式配置图文详解
  17. 美国之行---领略真正的美国文化--牛排
  18. 计算机两个硬盘如何区分,双硬盘电脑怎么设置主从盘?
  19. 一文通俗入门·脉冲神经网络(SNN)·第三代神经网络
  20. mysql2005编辑器用法,文本编辑器 - Visual Studio的隐藏功能(2005-2010)?

热门文章

  1. axure8.0注册码
  2. 制作一款游戏这么简单
  3. 抓包工具charles青花瓷的基本使用(android)
  4. 基于STM32简易计算器
  5. java基于springboot小区水电量电费管理系统
  6. alize blue_逆战歌曲大全_2016逆战大厅背景音乐汇总一览_快吧游戏
  7. 在正常系统如windows/MacOS/Linux等体验假勒索病毒WamaCry(永恒之蓝)
  8. 关于word与wps可共用的的快捷键
  9. 关于编译ns3的myfirst.cc问题
  10. 计算机是如何执行代码的?