QP解决者

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

n x ( 1 2 x H x + f x )

受线性不等式约束

一个 x b

在哪里

  • x为解向量。

  • H是黑森矩阵。当您的预测模型和调优权重在运行时没有变化时,这个矩阵是恒定的。

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

  • bf是向量。

在每个控制间隔的开始,控制器进行计算H,f,一个,b。如果H一个为常量时,控制器检索它们的预计算值。

内置QP解决者

模型预测控制工具箱™软件支持两个内置算法来解决QP问题。万博1manbetx两个求解器都要求黑森函数是正的。

  • 主动集求解器-这种求解器可以在单精度和双精度两种情况下为中小型优化问题提供快速和鲁棒的性能。活动集求解器使用来自的KWIK算法[1]。要使用活动集求解器,请设置Optimizer.Algorithm属性设置为“激活集”。属性配置算法设置Optimizer.ActiveSetOptions属性。

  • 内部点求解器-这个求解器可以为大规模的优化问题提供优越的性能,如MPC应用,在大的预测和控制范围内加强约束。这个内点求解器使用原对偶算法和梅罗特拉预测-校正器。若要使用内点求解器,请设置Optimizer.Algorithm属性设置为“内点”。属性配置算法设置Optimizer.InteriorPointOptions属性。

解算器配置

当为您的应用程序选择和配置QP求解器时,请考虑以下问题:

  • MPC问题的大小和配置影响内置QP求解器的相对性能。要确定哪个求解器最适合您的应用程序,请考虑使用两个QP求解器跨多个仿真场景模拟控制器。

  • 内点求解器比活动集求解器对求解器参数更敏感。因此,它可能需要更多的调整,以找到性能和健壮性之间的最佳平衡。

  • 在测试最佳解决方案时,活动集求解器还使用不可调容差。您可以为内部点求解器调整最优公差。

  • 一个或多个线性约束可能会由于数值舍入误差而轻微违反。这种违规是正常的,不会产生警告消息。要调整可接受约束违反的容忍度,请使用ConstraintTolerance设置为活动集或内部点求解器。

  • 寻找QP解决方案是一个迭代过程。对于任何一个求解器,您都可以使用对应的指定最大迭代次数MaxIterations设置。当迭代次数达到最大值时,算法终止。

  • 活动集求解器的默认最大迭代次数为 4 ( n c + n v ) ,在那里ncnv分别为预测范围内约束和优化变量的个数。对于某些控制器配置,这个值可能非常大,这可能会使QP求解器看起来停止响应。这个值的下界为120

  • 内部点求解器的默认最大迭代次数为50

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

当求解器检测到一个不可行的问题或在没有找到最优解的情况下达到最大迭代次数时,控制器保留最后成功的控制输出。有关更多信息,请参见mpcmove。您可以检测异常结果,并根据需要重写默认行为。

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

  • 活动集求解器使用温暖的开始其中,在前一个控制步骤中确定的主动约束集成为初始猜测。

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

次优的QP解决方案

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

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

MPCobj.Optimizer.ActiveSetOptions。MaxIterations = 10;

默认情况下,MPC控制器对象的下界为120关于活动集求解器的最大迭代次数。

默认情况下,当求解器在没有最优解的情况下达到求解器迭代次数的最大值时,控制器保持被操纵变量的原值。若要使用最终迭代后得到的次优解,则设置UseSuboptimalSolution选项真正的

MPCobj.Optimizer。UseSuboptimalSolution = true;

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

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

例如,请参阅在快速MPC应用中使用次优解决方案

自定义QP应用程序

若要访问需要解决在线QP问题的应用程序的QP解决程序,请使用mpcActiveSetSolvermpcInteriorPointSolver功能,用于:

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

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

自定义QP解算器

模型预测控制工具箱软件让您指定一个自定义QP解决方案为您的MPC控制器。在每个控制间隔调用这个求解器来代替内置的求解器。此选项适用于:

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

  • 内置解决程序不能为特定问题提供令人满意的性能的应用程序。

您可以为模拟或代码生成定义自定义求解器。在这两个实例中,都使用自定义函数定义自定义求解器,并配置控制器使用此自定义函数。

自定义求解函数 MATLAB的影响®功能 受影响的仿真软件万博1manbetx®

模拟

Optimizer.CustomSolver真正的

Optimizer.CustomSolverCodeGen将被忽略。

mpcCustomSolver.m

万博1manbetx支持:

  • MATLAB代码

  • 墨西哥人的文件

  • sim卡

  • mpcmove

  • mpcmoveAdaptive

  • mpcmoveMultiple

  • mpcmoveCodeGeneration

  • MPC控制器

  • 自适应MPC控制器

  • 多个MPC控制器

代码生成

Optimizer.CustomSolverCodeGen真正的

Optimizer.CustomSolver将被忽略。

mpcCustomSolverCodeGen.m

万博1manbetx支持:

  • 适合MATLAB代码生成的代码

  • C / c++代码

  • mpcMoveCodeGeneration

自定义求解模拟

模拟MPC控制器与自定义QP求解器:

  1. 将求解器模板文件复制到您的工作文件夹或MATLAB路径中的任何位置,并对其进行重命名mpcCustomSolver.m。要将求解器模板复制到当前工作文件夹,请在MATLAB命令行中键入以下命令。

    src = (“mpcCustomSolver.txt”);dest = fullfile (pwd,“mpcCustomSolver.m”);拷贝文件(src,桌子,“f”);
  2. 修改mpcCustomSolver.m通过添加您自己的自定义求解器。你的求解器必须能够在MATLAB中运行,并在MATLAB脚本或mex文件中实现。

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

    MPCobj.Optimizer。CustomSolver = true;

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

  4. 模拟控制器。有关更多信息,请参见模拟

例如,请参阅模拟MPC控制器与自定义QP求解器

用于代码生成的自定义求解器

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

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

  • 在仿真万博1manbetx软件需要万博1manbetx仿真软件编码器万博1manbetx仿真软件PLC编码器™软件

生成代码MPC控制器使用自定义QP求解器:

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

    src = (“mpcCustomSolverCodeGen_TemplateEML.txt”);dest = fullfile (pwd,“mpcCustomSolverCodeGen.m”);拷贝文件(src,桌子,“f”);

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

    src = (“mpcCustomSolverCodeGen_TemplateC.txt”);dest = fullfile (pwd,“mpcCustomSolverCodeGen.m”);拷贝文件(src,桌子,“f”);
  2. 修改mpcCustomSolverCodeGen.m通过添加您自己的自定义求解器。

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

    MPCobj.Optimizer。CustomSolverCodeGen = true;

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

  4. 为控制器生成代码。有关更多信息,请参见生成代码并将控制器部署到实时目标

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

用于模拟和代码生成的自定义求解器

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

  • 设置两个Optimizer.CustomSolverOptimizer.CustomSolverCodeGen真正的

  • 创建两个mpcCustomSolver.mmpcCustomSolverCodeGen.m

在模拟期间,您的控制器使用mpcCustomSolver.m自定义函数。对于代码生成,控制器使用mpcCustomSolverCodeGen.m自定义函数。

您可以在这两个自定义求解器函数中指定相同的MATLAB代码,只要这些代码适合于代码生成。

如果你实现mpcCustomSolverCodeGen.m使用C/ c++代码,使用代码创建一个MEX文件。然后,您可以从mpcCustomSolver.m。有关创建和使用MEX文件的更多信息,请参见C MEX文件应用程序(MATLAB)。

自定义求解器函数实现

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

  • 自定义求解仿真:

    函数[x,状态]= mpcCustomSolver (H, f, A, b, x0)
  • 自定义解决程式码生成:

    函数[x,状态]= mpcCustomSolverCodeGen (H, f, A, b, x0)

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

  • H一个黑森矩阵,指定为n——- - - - - -n对称正定矩阵,其中n为优化变量的数量。

  • f目标函数的乘数是线性项,指定为长度的列向量吗n

  • 一个一个线性不等式约束系数矩阵,指定为——- - - - - -n矩阵,为约束的数量。

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

  • x0解的初始猜测,是否以列向量的长度表示n

  • x最优解是否作为长度的列向量返回n

  • 状态是一个解决方案有效性指示器,以整数形式返回,如下表所示。

    价值 描述
    > 0 x是最优的。状态表示优化期间执行的迭代次数。
    0

    在未找到最优解的情况下达到最大迭代次数。解决方案,x,可能是次优或不可行的。

    如果Optimizer.UseSuboptimalSolution控制器的属性为真正的时,控制器采用次优解x状态0

    1 这个问题似乎不可行,即不能满足约束条件。
    2 发生了一个不可恢复的数字错误。

请注意

MPC控制器期望自定义求解函数来求解线性不等式约束下的QP问题 一个 x b 。如果您的自定义解决程序使用 一个 x b ,则必须更改两者的符号一个b在将它们传递给您的自定义求解程序代码之前。

整合与力量PRO解决方案

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

有关部队PRO解决方案的信息,请访问Embotech网站。有关使用FORCES PRO求解器和模型预测控制工具箱软件的信息,请参阅力量支持文档

参考文献

[1] Schmid和L.T. Biegler。'减少Hessian SQP的二次规划方法'。计算机与化学工程18日,没有。9(1994年9月):817-32。E0001-4 https://doi.org/10.1016/0098 - 1354 (94)

另请参阅

|||

相关的话题