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

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

此示例使用一个在线监视应用程序,首先使用Model Predictive Control Toolbox™内置求解器求解,然后使用自定义求解器使用quadprog从优化工具箱™求解器。

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

在联机监视示例中qp.status当控制器获得当前运行时QP问题的有效解决方案并设置时,MPC控制器块的输出将返回一个正整数mv输出。的qp.status值对应于用于解决此QP的迭代次数。

如果QP在给定的控制区间内不可行时,控制器无法找到解决方案。在这种情况下,mvoutport保持其最近的值,并且qp.status外港的回报1.类似地,如果在优化期间达到最大迭代次数(很少),则mv外埠也冻结了qp.status外港的回报0.

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

MPC应用与在线监测

本例中使用的工厂是一个单输入单输出系统,对操作变量(MV)和控制输出(OV)都有严格的限制。控制目标是保持OV在的一个设定值0.一个不可测的负载扰动被添加到OV中。这个扰动最初是一个斜坡增加。控制器响应最终饱和的MV在其硬限制。一旦饱和,控制器就无能为力了,干扰最终会使机汇超过指定的硬上限。当控制器预测不可能强制OV低于这个上限时,运行时QP就变得不可行的。

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

= tf(1,[2 1]);

定义不可测的负载扰动。信号从。上升02之间的13.几秒钟后,斜坡下降20之间的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”对象的属性为空。假设默认的0.00000。- - >“权重。“mpc”对象的“操作可变率”属性为空。假设默认的0.10000。 -->The "Weights.OutputVariables" property of "mpc" object is empty. Assuming default 1.00000.

定义工厂输入(MV)和输出(OV)的硬约束。默认情况下,所有MV约束都是硬约束,OV约束是软约束。

Obj.MV。最小值= -0.5;Obj.MV。Max = 1;Obj.OV。最小值= 1;Obj.OV。Max = 1;Obj.OV。MinECR = 0;%改变OV下限从软到硬Obj.OV。MaxECR = 0;%改变OV上限从软到硬

一般情况下,不建议使用硬OV约束,这里仅用于说明如何检测不可行的QP。硬OV约束使不可行的可能性,在这种情况下,备份控制计划是必不可少的。此示例不包括备份计划。但是,正如仿真所示,在这个简单的情况下,冻结单个MV的默认动作是最佳响应。

使用内置QP求解器的Simul金宝appink进行模拟

要运行这个示例,需要Simulink和优化金宝app工具箱。

如果~ mpcchecktoolboxinstalled (“金宝app模型”)disp (运金宝app行这个例子需要Simulink。)返回结束如果~ mpcchecktoolboxinstalled (“optim”)disp (运行这个示例需要优化工具箱。)返回结束

在Simulink模型中构建控制系统,并启用金宝appqp.status通过选择优化状态MPC控制器块的参数。显示运行时qp.status控制器状态范围中的值。

mdl =“mpc_onlinemonitoring”;open_system (mdl)

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

open_system ([mdl“/控制器状态”(mdl) open_system (“/响应”])sim (mdl)
- - >转换”模型。将“mpc”对象的“属性”设置为状态空间。——>转换模型离散时间。——>假设被测输出通道1的输出干扰为集成白噪声。- - >”模型。“mpc”对象的“噪音”属性为空。假设每个测量的输出通道上都有白噪声。

闭环响应的解释

如响应范围所示,在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求解器进行模拟

若要检查自定义求解程序在相同条件下的行为,请通过设置Optimizer.CustomSolverMPC控制器的属性。

Obj.Optimizer。CustomSolver = true;

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

  • 函数名必须为mpcCustomSolver.

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

  • 函数必须在MATLAB路径上。

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

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

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

检查保存的mpcCustomSolver.m文件。

函数[x, status] = mpcCustomSolver(H, f, A, b, x0)% mpcCustomSolver允许用户指定自定义二次规划% (QP)求解器,解决由MPC控制器提出的QP问题。当%的“mpcobj.Optimizer。属性设置为true,而不是使用内置的QP求解器,MPC控制器现在将使用客户QP%求解器在此函数中定义,用于MATLAB和Simulink中的仿真。金宝app%% MPC QP问题定义如下:找到一个使二次目标最小化的最优解x%函数,J = 0.5*x'*H*x + f'*x,满足线性不等式%约束条件,A*x >= b。%%输入(由MPC控制器在运行时提供):% H: n×n海森矩阵,对称正定。% f:一个n×1的列向量。% A:一个m×n的不等式约束系数矩阵。% b:不等式约束右边的m×1向量。% x0:最优解的初始猜测的n×1向量。%%输出(运行时反馈给MPC控制器):% x:必须是一个n乘1的最优解向量。状态:必须是一个有限的整数:正值:用于计算的迭代次数% 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的最优解。请注意使用的默认算法%由“quadprog”(“内点凸”)忽略x0。这里使用“x0”作为输入参数仅供演示使用。H = (H + H) / 2;确保Hessian是对称的[x, ~,国旗,输出]= quadprog (H f A_custom b_custom, [], [], [], [], x0,选项);%将MPC控制器所需的“标记”输出转换为“状态”。开关国旗情况下1 status = output .iteration;情况下0状态= 0;情况下-2状态= -1;否则状态= 2;结束始终返回正确大小的非空x。当解算器失败时,一个方便的解决办法是把x设为初始值。如果状态<= 0 x = x0;结束

重复模拟。

set_param ([mdl“/控制器状态”),“ymax”,“十”);sim (mdl)
- - >转换”模型。将“mpc”对象的“属性”设置为状态空间。——>转换模型离散时间。——>假设被测输出通道1的输出干扰为集成白噪声。- - >”模型。“mpc”对象的“噪音”属性为空。假设每个测量的输出通道上都有白噪声。

所得到的输入和输出信号与使用内建模型预测控制工具箱求解器得到的输入和输出信号是一致的qp.status显示,quadprog不需要相同次数的迭代来找到解决方案。然而,它确实检测到同样的不可行性时间段。

bdclose (mdl);

相关的话题