QP解决者
模型预测控制器QP解算器转换一个线性MPC优化问题的一般形式QP问题
线性不等式约束
在哪里
x是解向量。
H海赛矩阵。这个矩阵是常数当你的预测模型和调优权重在运行时不改变。
一个是一个矩阵的线性约束系数。这个矩阵是常数当你的预测模型在运行时不会改变。
b和f是向量。
在每个控制区间的开始,控制器计算H,f,一个,b。如果H或一个是常数,控制器检索其预先计算的值。
内置QP解决者
模型预测控制工具箱™软件支持两种内置算法求解QP问题。金宝app解决这两个要求海赛矩阵是正定的。
激活集解算器——这个解算器可以提供快速、强劲的性能为小型和中等规模的优化问题在两个单引号和双精度。激活集解算器使用KWIK算法[1]。使用激活集解算器,设置
Optimizer.Algorithm
您的MPC控制器的属性“激活集”
。配置算法设置,使用Optimizer.ActiveSetOptions
控制器的属性。内点解算器——这对大规模优化问题解算器可以提供更高的性能,如货币政策委员会执行的应用程序限制大的预测和控制的视野。这内点算法解算器使用一个非Mehrotra预估。利用内点解算器,设置
Optimizer.Algorithm
您的MPC控制器的属性“内点”
。配置算法设置,使用Optimizer.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。使用SuboptimalSolution = true;
而解决方案不是最优的,MPC控制器调整方案,使其满足所有指定的约束。
没有保证的次优方案执行比如果你持有控制器输出常数。您可以使用两种方法模拟系统,并选择配置控制器提供了更好的性能。
例如,看到的在快速MPC应用程序使用次优的解决方案。
自定义QP应用程序
访问QP解决需要解决在线QP问题的应用程序,使用mpcActiveSetSolver
和mpcInteriorPointSolver
功能,这是很有用的:
先进的MPC应用程序超出了模型预测控制工具箱软件的范围。
自定义QP应用程序,包括需要代码生成的应用程序。
自定义QP解算器
模型预测控制工具箱软件允许您指定一个自定义的QP MPC控制器解决者。这个解算器叫做代替内置的解决者在每个时间间隔的控制。这个选项是有用的:
验证仿真结果或生成代码的内部你信任的第三方解决。
应用内置的解决者不为您的特定问题提供令人满意的性能。
您可以定义一个自定义解决模拟或者代码生成。在实例中,您定义自定义解决使用自定义功能和配置您的控制器使用这个自定义函数。
任务 | 自定义求解函数 | MATLAB的影响®功能 | 受影响的仿真软件金宝app®块 |
---|---|---|---|
模拟 集
|
金宝app支持:
|
|
|
代码生成 集
|
金宝app支持:
|
|
自定义为仿真解算器
模拟一个MPC控制器与一个定制的QP解算器,执行以下步骤。
解算器模板文件复制到你的工作文件夹或在MATLAB路径,并重新命名
mpcCustomSolver.m
。解算器模板复制到您的当前工作目录,在MATLAB命令行输入以下。src = (“mpcCustomSolver.txt”);dest = fullfile (pwd,“mpcCustomSolver.m”);拷贝文件(src,桌子,“f”);
修改
mpcCustomSolver.m
通过添加自己的自定义解决者。你的解算器必须能够运行在MATLAB和实现MATLAB脚本或墨西哥人文件。配置您的MPC控制器
MPCobj
使用定制的解决者。MPCobj.Optimizer。CustomSolver = true;
软件现在使用定制的模拟解算器的内置QP KWIK解算器。
模拟控制器。有关更多信息,请参见模拟。
例如,看到的模拟MPC控制器与一个定制的QP解算器。
自定义代码生成的解算器
MPC控制器生成代码,可以使用一个定制的QP解决C / c++代码或编写的MATLAB代码适合代码生成。
在命令行上,您必须拥有MATLAB编码器™软件。
在仿真软件必须这样做金宝app金宝app仿真软件编码器或金宝app仿真软件PLC编码器™软件。
为MPC控制器生成代码使用一个定制的QP解算器,执行以下步骤。
解算器模板文件复制到你的工作文件夹或在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”);
修改
mpcCustomSolverCodeGen.m
通过添加自己的自定义解决者。配置您的MPC控制器
MPCobj
使用定制的解决者。MPCobj.Optimizer。CustomSolverCodeGen = true;
软件现在使用定制代码生成的解算器的内置QP KWIK解算器。
生成代码的控制器。有关更多信息,请参见生成代码和部署控制器实时目标。
例如,看到的模拟和生成代码为MPC控制器定制QP解算器。
自定义解决模拟和代码生成
您可以实现相同的自定义QP解算器模拟和代码生成。这样做:
设置两个
Optimizer.CustomSolver
和Optimizer.CustomSolverCodeGen
来真正的
。创建两个
mpcCustomSolver.m
和mpcCustomSolverCodeGen.m
。
在仿真中,控制器使用mpcCustomSolver.m
自定义函数。对于代码生成,控制器使用mpcCustomSolverCodeGen.m
自定义函数。
您可以指定相同的MATLAB代码在两个自定义求解功能,提供适用于代码生成的代码。
如果你实现mpcCustomSolverCodeGen.m
使用C / c++代码,使用代码创建一个墨西哥人文件。然后可以调用这个文件从墨西哥人mpcCustomSolver.m
。创建和使用墨西哥人文件的更多信息,参见从MATLAB编写C函数调用(墨西哥人文件)。
自定义求解函数实现
当你实现一个自定义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问题线性不等式约束
。如果你定制的解决者使用
,你必须改变的迹象一个
和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
来真正的
。
还可以进一步定制这些函数,例如通过调整解决选项,提供使用激活集解算器(因为其他quadprog
连接器不支持MPC问题)。金宝app
回复mpcobj
使用内置的算法中指定mpcobj.Optimizer.Algorithm
仿真和代码生成、电话setCustomSolver
如下。
setCustomSolver (mpcobj quadprog)
mpcobj.Optimizer.CustomSolver
和mpcobj.Optimizer.CustomSolverCodeGen
来假
。
集成FORCESPRO解算器
您可以使用FORCESPRO,实时嵌入式优化Embotech AG)开发的软件工具来模拟和生成代码的MPC控制器使用模型预测控制工具箱软件设计。从FORCESPRO 2.0开始,Embotech提供了一个插件,利用模型预测控制的设计能力FORCESPRO工具箱软件和计算性能。使用插件,您可以生成一个定制的QP解算器,允许部署在实时硬件和高度优化的基于特定的MPC问题达到满意的实时性能。特别是世界MPC可以非常有效地解决问题。
信息使用FORCESPRO解算器和模型预测控制工具箱软件,明白了实现MPC控制器使用Embotech FORCESPRO解决者。
引用
[1]施密德,C。,L.T. Biegler. "Quadratic Programming Methods for Reduced Hessian SQP."计算机与化学工程18日,没有。9(1994年9月):817 - 32。E0001-4 https://doi.org/10.1016/0098 - 1354 (94)。
另请参阅
货币政策委员会
|mpcmove
|mpcActiveSetSolver
|mpcInteriorPointSolver