QP解决者
模型预测控制器QP求解器将线性MPC优化问题转化为一般形式的QP问题
受线性不等式约束
在哪里
x是解向量。
H是黑森矩阵。当您的预测模型和调优权重在运行时没有改变时,这个矩阵是不变的。
一个是线性约束系数的矩阵。当您的预测模型在运行时没有改变时,这个矩阵是不变的。
b而且f是向量。
在每个控制间隔开始时,控制器进行计算H,f,一个,b.如果H或一个为常数时,控制器检索它们预先计算的值。
内置QP求解器
模型预测控制工具箱™软件支持解决QP问题的两个内置算法。万博1manbetx这两种求解方法都要求黑森矩阵是正定的。
主动集求解器-该求解器可以在单精度和双精度下为小规模和中等规模的优化问题提供快速和稳健的性能。活动集求解器使用KWIK算法[1].要使用活动设置求解程序,请设置
优化器。算法
属性的MPC控制器“激活集”
.要配置算法设置,请使用优化器。一个ctiveSetOptions
属性。内点求解器-这个求解器可以为大规模优化问题提供卓越的性能,例如MPC应用程序,在大的预测和控制范围上强制约束。该内点求解器采用带有Mehrotra预测校正器的原对偶算法。要使用内点求解器,请设置
优化器。算法
属性的MPC控制器“内点”
.要配置算法设置,请使用优化器。InteriorPointOptions
属性。
解算器配置
在为您的应用程序选择和配置QP求解器时,请考虑以下因素:
MPC问题的大小和配置会影响内置QP求解器的性能。要确定哪种求解器最适合您的应用程序,请考虑使用这两种QP求解器跨多个模拟场景模拟您的控制器。
内点求解器比主动集求解器对求解器参数更敏感。因此,可能需要进行更多的调整,以在性能和健壮性之间找到最佳平衡。
活动集求解器在测试最优解时也使用不可调容差。您可以调整内点求解器的最佳公差。
由于数值舍入误差,可能会轻微违反一个或多个线性约束。这种违反是正常的,不会产生警告信息。若要调整可接受的约束违反的容忍度,请使用
ConstraintTolerance
活动集或内点求解器的设置。寻找QP解决方案是一个迭代的过程。对于任一求解器,您都可以使用相应的方法指定最大迭代次数
MaxIterations
设置。如果迭代次数达到最大值,则算法终止。活动集求解器的默认最大迭代次数为 ,在那里nc而且nv分别为整个预测范围内约束和优化变量的数量。对于某些控制器配置,这个值可能非常大,这会使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 = true;
虽然解决方案不是最优的,但MPC控制器会调整解决方案,使其满足您指定的所有约束。
不能保证次优解决方案比保持控制器输出不变的解决方案性能更好。您可以使用这两种方法模拟系统,并选择提供更好控制器性能的配置。
有关示例,请参见在快速MPC应用中使用次优解决方案.
自定义QP应用程序
要访问需要解决在线QP问题的应用程序的QP求解器,请使用mpcActiveSetSolver
而且mpcInteriorPointSolver
函数,用于:
超出模型预测控制工具箱软件范围的高级MPC应用程序。
自定义QP应用程序,包括需要生成代码的应用程序。
自定义QP求解器
模型预测控制工具箱软件允许您为MPC控制器指定自定义QP求解器。在每个控制间隔调用这个求解器来代替内置求解器。此选项适用于:
使用您信任的内部第三方求解器验证模拟结果或生成代码。
内置求解器不能为特定问题提供令人满意的性能的应用程序。
您可以为模拟或代码生成定义自定义求解器。在任何一种情况下,都可以使用自定义函数定义自定义求解器,并配置控制器以使用该自定义函数。
任务 | 自定义求解函数 | MATLAB的影响®功能 | 受影响的仿真软件万博1manbetx®块 |
---|---|---|---|
模拟 集
|
万博1manbetx支持:
|
|
|
代码生成 集
|
万博1manbetx支持:
|
|
自定义求解器模拟
要使用自定义QP求解器模拟MPC控制器,请执行以下步骤。
将解算器模板文件复制到您的工作文件夹或MATLAB路径上的任何位置,并重命名它
mpcCustomSolver.m
.若要将解算器模板复制到当前工作文件夹,请在MATLAB命令行中键入以下命令。SRC = which(“mpcCustomSolver.txt”);Dest = fullfile(pwd,“mpcCustomSolver.m”);拷贝文件(src,桌子,“f”);
修改
mpcCustomSolver.m
通过添加您自己的自定义求解器。您的求解器必须能够在MATLAB中运行,并在MATLAB脚本或MEX文件中实现。配置MPC控制器
MPCobj
使用自定义求解器。MPCobj.Optimizer.CustomSolver = true;
该软件现在使用您的自定义求解器进行模拟,而不是内置的QP KWIK求解器。
模拟你的控制器。有关更多信息,请参见模拟.
有关示例,请参见用自定义QP求解器模拟MPC控制器.
代码生成的自定义求解器
您可以为MPC控制器生成代码,这些控制器使用用C/ c++代码或适合于代码生成的MATLAB代码编写的自定义QP求解器。
要在命令行执行此操作,必须具备MATLAB编码器™软件
要在Simulink中这万博1manbetx样做,必须有万博1manbetx仿真软件编码器或万博1manbetxSimulink PLC Coder™软件
要为使用自定义QP求解器的MPC控制器生成代码,请执行以下步骤。
将解算器模板文件复制到您的工作文件夹或MATLAB路径上的任何位置,并重命名它
mpcCustomSolverCodeGen.m
.若要将MATLAB代码模板复制到当前工作文件夹,请在MATLAB命令行中键入以下命令。SRC = which(“mpcCustomSolverCodeGen_TemplateEML.txt”);Dest = fullfile(pwd,“mpcCustomSolverCodeGen.m”);拷贝文件(src,桌子,“f”);
或者,您也可以使用C模板。
SRC = which(“mpcCustomSolverCodeGen_TemplateC.txt”);Dest = fullfile(pwd,“mpcCustomSolverCodeGen.m”);拷贝文件(src,桌子,“f”);
修改
mpcCustomSolverCodeGen.m
通过添加您自己的自定义求解器。配置MPC控制器
MPCobj
使用自定义求解器。MPCobj.Optimizer.CustomSolverCodeGen = true;
该软件现在使用您的自定义求解器进行代码生成,而不是内置的QP KWIK求解器。
为控制器生成代码。有关更多信息,请参见生成代码并将控制器部署到实时目标.
有关示例,请参见用自定义QP求解器模拟和生成MPC控制器代码.
自定义求解器模拟和代码生成
您可以为模拟和代码生成实现相同的自定义QP求解器。这样做:
设置两个
优化器。CustomSolver
而且优化器。CustomSolverCodeGen
来真正的
.创建两个
mpcCustomSolver.m
而且mpcCustomSolverCodeGen.m
.
在模拟过程中,控制器使用mpcCustomSolver.m
自定义函数。对于代码生成,控制器使用mpcCustomSolverCodeGen.m
自定义函数。
您可以在两个自定义求解器函数中指定相同的MATLAB代码,前提是这些代码适合代码生成。
如果你实现mpcCustomSolverCodeGen.m
使用C/ c++代码,使用代码创建一个MEX文件。然后可以从这里调用这个MEX文件mpcCustomSolver.m
.有关创建和使用MEX文件的详细信息,请参见编写MATLAB可调用C函数(MEX文件).
自定义求解函数实现
当您实现自定义QP求解器时,您的自定义函数必须具有以下签名之一:
自定义求解器模拟:
函数[x,status] = mpcCustomSolver(H,f,A,b,x0)
用于代码生成的自定义求解器:
函数[x,status] = mpcCustomSolverCodeGen(H,f,A,b,x0)
对于模拟和代码生成,自定义求解器具有以下输入和输出参数。
H
是一个黑森矩阵,指定为n——- - - - - -n对称正定矩阵,其中n是优化变量的个数。f
目标函数的乘数是线性项吗,指定为长度列向量n.一个
矩阵的线性不等式约束系数,指定为米——- - - - - -n矩阵,米是约束的数量。b
不等式约束方程的右边,是否指定为长度的列向量米.x0
是解决方案的初始猜测,指定为长度的列向量n.x
最优解是否作为长度的列向量返回n.状态
解决方案有效性指示器,以下表中所示的整数形式返回。价值 描述 > 0
x
是最优的。状态
表示优化期间执行的迭代次数。0
在没有找到最优解的情况下,达到了最大迭代次数。解决方案
x
可能是次优或不可行的。如果
优化器。使用SuboptimalSolution
属性的值真正的
时,控制器采用中的次优解x
当状态
是0
.-1
这个问题似乎是不可行的,也就是说,约束条件不能满足。 -2
发生不可恢复的数值错误。
请注意
MPC控制器期望自定义求解函数在线性不等式约束下求解QP问题
.如果您的自定义求解器使用
,你必须改变两者的符号一个
而且b
在将它们传递给自定义求解器代码之前。
使用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
来真正的
.
您还可以进一步自定义这些函数,例如通过调整求解器选项,前提是您使用active-set求解器(因为其他的quadprog
MPC问题不支持解算器)。万博1manbetx
回复mpcobj
返回使用中指定的内置算法mpcobj.Optimizer.Algorithm
对于模拟和代码生成,调用setCustomSolver
如下。
setCustomSolver (mpcobj quadprog)
mpcobj.Optimizer.CustomSolver
而且mpcobj.Optimizer.CustomSolverCodeGen
来假
.
与FORCESPRO求解器集成
您可以使用Embotech AG开发的实时嵌入式优化软件工具FORCESPRO来模拟和生成使用Model Predictive Control Toolbox软件设计的MPC控制器的代码。从FORCESPRO 2.0开始,Embotech提供了一个插件,利用模型预测控制工具箱软件的设计功能和FORCESPRO的计算性能。使用该插件,您可以生成一个自定义QP求解器,允许部署在实时硬件上,并根据您的特定MPC问题进行高度优化,以实现令人满意的实时性能。特别是长期MPC问题可以非常有效地解决。
有关使用FORCESPRO求解器和模型预测控制工具箱软件的信息,请参见使用Embotech FORCESPRO求解器实现MPC控制器.
参考文献
[1]施密德,C,和比格勒中尉。简化Hessian SQP的二次规划方法计算机与化学工程18日,没有。9(1994年9月):817-32。E0001-4 https://doi.org/10.1016/0098 - 1354 (94).
另请参阅
货币政策委员会
|mpcmove
|mpcActiveSetSolver
|mpcInteriorPointSolver