主要内容

使用自定义QP解算器模拟MPC控制器

您可以在Simulink®中使用自定义二次规划(QP)求解器来模拟MPC控制器的闭环响应。万博1manbetx

这个例子使用了一个在线监测应用程序,首先使用Model Predictive Control Toolbox™内建求解器来解决它,然后使用使用quadprog(优化工具箱)优化工具箱中的解算器™.

以这种方式实现自定义QP求解器不支持代码生成。万博1manbetx有关为自定义QP求解器生成代码的更多信息,请参见用自定义QP求解器模拟和生成MPC控制器代码.有关QP求解器的更多信息,请参见QP解决者

以在线监控为例qp.status当控制器获得当前运行时QP问题的有效解并设置时,MPC控制器块的输出返回一个正整数mv输出。的qp.status值对应于用于求解该QP的迭代次数。

如果QP在给定的控制间隔内不可行,则控制器无法找到解决方案mvoutport保持其最新值,并且qp.status外港的回报-1.类似地,如果在优化期间达到了最大的迭代次数(很少),则mv出口也冻结和qp.status外港的回报0

实时MPC应用程序可以检测控制器是否处于“故障”模式(0-1),以监察qp.status外港。如果发生故障,应激活备份控制计划。如果QP有可能变得不可行的时候,这是必要的,因为默认操作(冻结mv)可能会导致不可接受的系统行为,比如不稳定性。这样的备份计划必须是特定于应用程序的。

MPC在在线监测中的应用

在这个例子中使用的设备是一个单输入单输出系统,对操纵变量(MV)和控制输出(OV)都有硬限制。控制目标是将OV保持在一个设定点0。向OV添加未测量的负载干扰。该干扰最初为斜坡增加。控制器响应最终使MV在其硬极限处饱和。一旦饱和发生,控制器将无能为力,干扰最终驱动OV超过其指定的硬上限。当控制器预测如果不可能强制OV低于此上限,则运行时QP变得不可行。

将电厂定义为具有单位增益的一阶SISO系统。

Plant = tf(1,[2 1]);

定义未测量的负载扰动。信号从地面逐渐升高02.之间的1.3.秒,然后从2.0之间的3.5.秒。

LoadDist = [0 0;1 0;3 - 2;5 0;7 0];

MPC控制器设计

使用测试工厂的模型创建一个MPC对象。所选择的控制间隔约为主要装置时间常数的十分之一。

t = 0.2;Obj = mpc(Plant, Ts);
-->“mpc”对象的“PredictionHorizon”属性为空。正在尝试PredictionHorizon=10。-->“mpc”对象的“ControlHorizon”属性为空。假设2。-->“mpc”对象的“Weights.ManufacturedVariables”属性为空。假设默认值为0.00000。-->“mpc”的“Weights.ManufacturedVariablesRate”属性对象为空。假设默认值为0.10000。-->“mpc”对象的“Weights.OutputVariables”属性为空。假设默认值为1.00000。

定义设备输入(MV)和输出(OV)的硬约束。默认情况下,所有MV约束为硬约束,OV约束为软约束。

Obj.MV.Min = -0.5;Obj.MV.Max = 1;Obj.OV.Min = 1;Obj.OV.Max = 1;Obj.OV.MinECR = 0;%将OV下限从软变硬Obj.OV.MaxECR=0;将OV上限由软更改为硬

通常,不鼓励使用硬OV约束,此处仅用于说明如何检测不可行的QP。硬OV约束使得不可行成为可能,在这种情况下,备份控制计划至关重要。此示例不包括备份计划。然而,如模拟所示,在这种简单的情况下,冻结单个MV的默认动作是最佳响应。

使用内置QP求解器的Simul万博1manbetxink进行模拟

要运行此示例,需要Simulink和最优化万博1manbetx工具箱。

如果~mpcchecktoolbox已安装(“万博1manbetxsimulink”) disp (“万博1manbetx运行这个示例需要Simulink。”)返回结束如果~mpcchecktoolbox已安装(“optim”) disp ('运行此示例需要优化工具箱。')返回结束

在Simulink模型中构建控制系统,并启用万博1manbetxqp.status通过选择优化状态MPC控制器块的参数。显示运行时间qp.status值。

mdl =“mpc_在线监测”;open_system (mdl)

使用默认的模型预测控制工具箱QP求解器模拟闭环响应。

open_system ([mdl“/控制器状态”])开放式系统([mdl“/响应”])sim卡(mdl)
- - - >转换”模型。将“mpc”对象的“属性”放入状态空间。——>模型转换为离散时间。——>假设添加到测量输出通道#1的输出扰动为集成白噪声。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。

闭环响应的解释

如图响应范围所示,在1.4秒时,不断增加的扰动导致MV在其下界-0.5处饱和,这是这些条件下的QP解(因为控制器试图将OV保持在其设定值为。0).

由于斜坡扰动,OV继续增加,在2.2秒时,超过指定的硬上限1.0.由于QP是用预测输出来表示的,控制器仍然预测它可以在下一次移动中将OV带回1.0以下,因此QP问题仍然是可行的。

最后,在t=3.2秒时,控制器预测在下一个控制间隔内,它不能再将OV移动到1.0以下,并且QP问题变得不可行,并且qp.status此时更改为-1。

三秒后,干扰逐渐减小。在3.8秒时,QP再次变得可行。然而,OV仍然远高于其设定值,MV保持饱和直到5.4秒,当QP解决方案是增加MV时,如图所示。从那时起,MV不饱和,控制器能够驱动OV回到其设定值。

当QP可行时,内置求解器在三次或更少的迭代中找到解决方案。

用自定义QP求解器模拟

要检查自定义解算器在相同条件下的行为,请通过设置优化器。CustomSolverMPC控制器的属性。

Obj.Optimizer.CustomSolver = true;

您还必须提供一个MATLAB®函数,满足以下所有要求:

  • 函数名必须为mpcCustomSolver

  • 函数的输入和输出参数必须匹配mpcCustomSolver.txt模板文件。

  • 函数必须在MATLAB路径上。

对于本例,使用中定义的自定义求解器mpcCustomSolver.txt,它使用quadprog命令作为自定义QP求解器。要实现您自己的自定义QP求解器,请修改此文件。

将函数保存在您的工作文件夹中.m文件。

src = (“mpcCustomSolver.txt”);dest=完整文件(pwd,“mpcCustomSolver.m”);拷贝文件(src,桌子,“f”);

查看已保存的mpcCustomSolver.m文件。

函数[x, status] = mpcCustomSolver(H, f, A, b, x0)% mpcCustomSolver允许用户指定一个自定义二次编程%(QP)解算器,用于解决MPC控制器制定的QP问题。当%“mpcobj.Optimizer.CustomSolver”属性设置为true,而不是%使用内置的QP求解器,MPC控制器现在将使用客户的QP在MATLAB和Simulink中进行仿真。万博1manbetx%% MPC QP问题定义如下:找出最优解,使二次目标最小化%函数,J = 0.5*x'*H*x + f'*x,服从线性不等式%约束,A*x >= b。%%输入(由MPC控制器在运行时提供):%H:一个n乘n的Hessian矩阵,它是对称的,正定的。% f: n × 1列向量。% A:一个m × n的不等式约束系数矩阵。%b:不等式约束右侧的m×1向量。% x0:最优解的初始猜想的n × 1向量。%%输出(在运行时反馈到MPC控制器):% x:必须是最优解的n × 1向量。% status:必须是一个有限的整数:%正值:计算中使用的迭代次数%0:达到的最大迭代次数% -1: QP不可行%-2:由于其他原因,未能找到解决方案%请注意,即使解算器未能找到最优解,“x”也必须为%作为n×1向量返回(即将其设置为初始猜测值x0)%%不改变上面的行下面的代码是如何实现自定义QP求解器的示例%在这个函数中。它需要优化工具箱才能运行。%定义QUADPROG选项并关闭优化结果显示%命令窗口。选择= optimoptions (“quadprog”); 选项。显示=“没有”%根据定义,“quadprog”解算器所需的约束定义为%A*x<=b。然而,在我们的MPC QP问题中,约束定义为%A*x>=b。因此,我们需要在这里实现一些转换:A_custom = -;b_custom = - b;%计算QP的最优解。请注意,使用的是默认算法% by "quadprog" ('interior-point-凸')忽略x0。“x0”在这里被用作%仅用于说明的输入参数。H=(H+H')/2;%确保Hessian对称[x, ~,国旗,输出]= quadprog (H f A_custom b_custom , [], [], [], [], x0,选项);%将MPC控制器要求的“flag”输出转换为“status”。开关国旗情况下1 status = Output.iterations;情况下0状态=0;情况下-2状态=-1;否则状态= 2;结束%总是返回一个大小正确的非空x。当求解器失败时,一个方便的解是设x为最初的猜测值。如果状态<= 0 x = x0;结束

重复模拟。

设置参数([mdl“/控制器状态”],“ymax”,'10');sim (mdl)
- - - >转换”模型。将“mpc”对象的“属性”放入状态空间。——>模型转换为离散时间。——>假设添加到测量输出通道#1的输出扰动为集成白噪声。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。

植物的输入和输出信号是相同的,使用内置的模型预测控制工具箱求解器,但qp.status显示,quadprog不需要相同的迭代次数来找到解决方案。但是,它确实检测到相同的不可行时间段。

bdclose (mdl);

相关的话题