QP解算器

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

中号 一世 ñ X 1 2 X H X + F X

受线性不等式约束

一个 X b

哪里

  • X是解向量。

  • H是海森矩阵。当预测模型和调整权重在运行时不变时,此矩阵为常数。

  • 一个是线性约束系数的矩阵。当预测模型在运行时没有改变时,这个矩阵是常数。

  • bF是向量。

在每个控制间隔开始时,控制器计算HF一个,和b. 如果H一个如果为常量,则控制器将检索它们的预计算值。

内置QP解算器

模型預測控制工具箱™ 软件支持两个内置的算法来解决QP问题。两个解算器都要求Hessi万博1manbetxan为正definite.

  • 主动集解算器-该解算器可为单精度和双精度的中小型优化问题提供快速和稳健的性能。活动集解算器使用来自[1]。要使用有效集求解器,设置优化器算法MPC控制器的属性“有源集”. 要配置算法设置,请使用Optimizer.ActiveSetOptions控制器的性能。

  • 内部点解算器-该解算器可以为大规模优化问题提供优越的性能,例如在大型预测和控制范围内实施约束的MPC应用程序。该内点解算器使用带Mehrotra预测校正的原始-对偶算法。若要使用内部点解算器,请设置优化器算法MPC控制器的属性'内部点'. 要配置算法设置,请使用优化器.内部点选项控制器的性能。

求解配置

为应用程序选择和配置QP解算器时,请考虑以下事项:

  • 在MPC问题的大小和配置将影响内置QP解算器的相对性能。要确定哪个求解器是最适合你的应用程序,可以考虑模拟跨同时使用QP求解多个模拟场景控制器。

  • 内部点解算器比活动集解算器对解算器参数更敏感。因此,需要更多的调整才能在性能和鲁棒性之间找到最佳平衡。

  • 有源集求解器用于最佳的解决方案进行测试时,还使用了一个不可调整的容限。您可以调整内部点求解最优的公差。

  • 一个或多个线性约束可以稍微由于数值舍入误差被侵犯。这些违规行为的正常现象,不会产生警告消息。要调整接受约束违规的宽容,用约束容忍度设置可以是有效集或内点解算器。

  • 对于QP溶液中的搜索是一个迭代过程。对于任何一个解算器,您可以使用相应的指定迭代的最大数量MaxIterations设置。如果迭代次数达到最大值时,算法终止。

  • 为活跃集迭代求解器的默认最大数量为 4 ñ C + ñ v ,其中ñCñv分别是预测范围内约束和优化变量的数量。对于某些控制器配置,此值可能非常大,这会使QP解算器看起来停止响应。此值的下限为120个

  • 对于内点迭代求解器的默认最大数量为50个

  • 如果MPC问题在转换为QP问题后包含硬约束,那么QP不等式约束可以是不可行(不可能满足)。如果QP解算器检测的不可行性,它会立即终止。

当解算器检测到不可行问题或达到迭代的最大数目没有找到的最佳解决方案中,控制器保留的最后一次成功控制输出。欲了解更多信息,请参阅mpcmove. 您可以检测异常结果并根据需要覆盖默认行为。

在第一控制步骤中,所述QP求解器使用一个冷启动,其中初始猜测是无约束模型预测控制. 如果X满足约束条件,它是最佳QP溶液和算法终止。否则,的线性不等式约束的至少一个必须满足作为平等,解算器来计算最优解。对于随后的控制步骤:

  • 有源组求解器使用一个热启动其中在前面的控制步骤中确定的活性约束集变为初始猜测。

  • 内部点解算器继续使用冷启动。

次优QP解

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

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

MPCobj.Optimizer.ActiveSetOptions.MaxIterations=10;

缺省情况下,MPC控制器对象具有下界120个关于迭代有源集求解器的最大数目。

默认情况下,当解算器在没有最优解的情况下达到解算器迭代的最大次数时,控制器将操纵变量保持在其先前的值。若要使用最终迭代后达到的次优解,请设置UseSuboptimalSolution选项真的

MPCobj.Optimizer.UseSuboptimalSolution=正确;

虽然解决方案不是最优的,但MPC控制器会调整解决方案,使其满足所有指定的约束。

不能保证次优解的性能优于保持控制器输出恒定。您可以使用这两种方法模拟系统,并选择提供更好控制器性能的配置。

例如,请参见在快速MPC应用中使用次优解

自定义QP应用程序

若要访问需要解决联机QP问题的应用程序的QP解决程序,请使用mpcActiveSetSolver公司MPcinteriopPointSolver求解器函数,用于:

  • 超出模型预测控制工具箱软件范围的高级MPC应用程序。

  • 自定义QP应用,包括需要的代码生成应用程序。

自定义QP解算器

模型预测控制工具箱软件允许您为MPC控制器指定自定义QP解算器。在每个控制间隔调用此解算器以代替内置解算器。此选项可用于:

  • 使用您信任的内部第三方解算器验证模拟结果或生成代码。

  • 应用中内置的求解器不提供您的具体问题表现令人满意。

可以为模拟或代码生成定义自定义解算器。在这两种情况下,都可以使用自定义函数定义自定义解算器,并将控制器配置为使用此自定义函数。

自定义解算器函数 一个FFected MATLAB®功能 受影响的Simul万博1manbetxink®阻碍

模拟

Optimizer.CustomSolver真的

Optimizer.CustomSolverCodeGen是一世gnored.

mpcCustomSolver.m公司

万博1manbetx支持:

  • MATLAB代码

  • MEX文件

  • SIM卡

  • mpcmove

  • mpcmoveAdaptive

  • 多移动

  • 移动代码生成

  • MPC控制器

  • 自适应MPC控制器

  • 多MPC控制器

代码生成

Optimizer.CustomSolverCodeGen真的

Optimizer.CustomSolver是一世gnored.

mpcCustomSolverCodeGen.m

万博1manbetx支持:

  • 适于代码生成的MATLAB代码

  • C/C++代码

  • mpcMoveCodeGeneration

自定义求解仿真

要使用自定义QP解算器模拟MPC控制器,请执行以下操作:

  1. 求解器模板文件复制到你的工作文件夹或任何地方的MATLAB的路径,并将其重命名mpcCustomSolver.m公司. 若要将解算器模板复制到当前工作文件夹,请在MATLAB命令行中键入以下命令。

    src=哪个('mpcCustomSolver.txt文件');DEST =完整文件(PWD,'mpcCustomSolver.m');的CopyFile(SRC,DEST,“f”);
  2. 修改mpcCustomSolver.m公司通过添加自己的自定义解算器。你的解算器必须能够在MATLAB中运行并在MATLAB中实现script or MEX-file.

  3. 配置MPC控制器MPCobj公司使用自定义的求解。

    MPCobj.Optimizer.CustomSolver=正确;

    软件现在使用自定义解算器代替内置的QP-KWIK解算器进行模拟。

  4. 模拟你的控制器。有关详细信息,请参见模拟

例如,请参见使用自定义QP解算器模拟MPC控制器

定制求解器代码生成

您可以生成MPC控制器的代码,这些代码使用C++代码编写的自定义QP求解器或适合代码生成的MATLAB代码。这样做:

  • 在命令行要求MATLAB编码器™软件。

  • 在Si万博1manbetxmulink中需要万博1manbetxSimulink编码器万博1manbetxSimulink的PLC编码器™软件。

要为使用自定义QP解算器的MPC控制器生成代码,请执行以下操作:

  1. 求解器模板文件复制到你的工作文件夹或任何地方的MATLAB的路径,并将其重命名mpcCustomSolverCodeGen.m. 要将MATLAB代码模板复制到当前工作文件夹,请在MATLAB命令行中键入以下命令。

    src=哪个('mpcCustomSolverCodeGen公司_模板eml.txt');DEST =完整文件(PWD,'mpcCustomSolverCodeGen.m');的CopyFile(SRC,DEST,“f”);

    或者,你可以使用C ++模板。

    src=哪个('mpcCustomSolverCodeGen公司_模板c.txt');DEST =完整文件(PWD,'mpcCustomSolverCodeGen.m');的CopyFile(SRC,DEST,“f”);
  2. 修改mpcCustomSolverCodeGen.m通过添加自己的自定义解算器。

  3. 配置MPC控制器MPCobj公司使用自定义的求解。

    MPCobj.Optimizer.CustomSolverCodeGen=正确;

    该软件现在使用代码生成自定义的求解器代替内置QP KWIK求解的。

  4. 生成的控制器代码。欲了解更多信息,请参阅生成代码和部署控制器,以实时终端

例如,请参见用自定义QP求解器模拟生成MPC控制器的代码

自定义为求解仿真和代码生成两个

您可以实现两个仿真和代码生成相同的自定义QP解算器。要做到这一点:

  • 同时设置Optimizer.CustomSolverOptimizer.CustomSolverCodeGen真的

  • 同时创建mpcCustomSolver.m公司mpcCustomSolverCodeGen.m

在模拟过程中,您的控制器使用mpcCustomSolver.m公司自定义函数。对于代码生成,你的控制器使用mpcCustomSolverCodeGen.m自定义函数。

您可以在这两个自定义求解函数指定相同的MATLAB代码,提供的代码是适合代码生成。

如果你实施mpcCustomSolverCodeGen.m使用C/C++代码,使用代码创建MEX文件。然后可以从调用此MEX文件mpcCustomSolver.m公司. 有关创建和使用MEX文件的详细信息,请参见C MEX文件的应用程序(MATLAB)。

自定义求解函数实现

实现自定义QP解算器时,自定义函数必须具有以下签名之一:

  • 模拟的自定义解算器:

    功能[x,状态]=mpcCustomSolver(H、f、A、b、x0)
  • 代码生成的自定义解算器:

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

对于这两种仿真和代码生成,您的自定义解算器具有以下输入和输出参数。

  • H是Hessian矩阵,指定为ñ-由-ñ对称正定矩阵,其中ñ是优化变量的数目。

  • F是目标函数线性项的乘法器,指定为长度的列向量ñ

  • 一个是线性不等式约束系数的矩阵,指定为-由-ñ矩阵,其中是约束的数目。

  • b是不等式约束方程的右侧,指定为长度的列向量

  • x0个是解的初始猜测,指定为长度的列向量ñ

  • X是最优解,返回为长度的列向量ñ

  • 状态是溶液有效性指示符,如图所示,下表中返回一个整数。

    价值 说明
    > 0 X是最理想的。状态代表优化过程中执行的迭代次数。
    0

    没有找到最佳的解决方案是达到迭代的最大数量。解决方案,X,可能不是最优的或不可行的。

    如果优化器.UseSuboptimalSolution控制器的属性是真的,控制器在X什么时候状态0

    -1个 这个问题似乎是不可行的,也就是说,约束条件无法得到满足。
    -2个 出现不可恢复的数值误差。

注意

MPC控制器期望定制求解器的功能,解决了受线性不等式约束QP问题 一个 X b . 如果your custom solver uses 一个 X b ,必须更改的符号一个b在将它们传递给自定义解算器代码之前。

与FORCES PRO Solver集成

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

有关FORCES PRO解算器的信息,请访问Embotech网站。有关使用力量PRO求解器与模型预测控制工具箱软件一起信息,请参阅FORCES PRO文档

参考

[1] 施密德,C.和L.T.比格勒。“约化Hessian-SQP的二次规划方法”。计算机与化学工程18,没有。9(1994年9月):817-32。https://doi.org/10.1016/0098-1354(94)E0001-4号

也可以看看

|||

相关主题