主要内容

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

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

此示例使用一个在线监控应用程序,首先使用模型预测控制工具箱™内置求解器求解它,然后使用使用quadprog(优化工具箱)优化工具箱™中的求解器。

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

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

如果QP在给定的控制区间内不可行,则控制器无法找到解。在这种情况下mv出口保持在最近的值和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.几秒钟,然后从20之间的3.而且5秒。

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

MPC控制器设计

使用测试工厂的模型创建一个MPC对象。所选的对照区间约为优势植株时间常数的十分之一。

Ts = 0.2;mpcobj = mpc(Plant, Ts);
——>“PredictionHorizon”属性为空。假设默认为10。“ControlHorizon”属性为空。假设默认值为2。- - - >“权重。“操纵变量”属性为空。假设默认值为0.00000。- - - >“权重。“操纵变量率”属性为空。假设默认为0.10000。 -->The "Weights.OutputVariables" property is empty. Assuming default 1.00000.

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

mpcoj . mv . min = -0.5;mpcoj . mv . max = 1;mpcobj. v . min = -1;mpcobj. v . max = 1;mpcobj. v . minecr = 0;%改变OV下限从软到硬mpcoj.v . maxecr = 0;%改变OV上限从软到硬

一般不鼓励使用硬OV约束,此处仅用于说明如何检测不可行QP。硬OV约束使得不可行性很可能发生,在这种情况下,备份控制计划是必不可少的。本例中不包括备份计划。然而,如模拟所示,在这个简单的情况下,冻结单个MV的默认动作是最佳响应。

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

在Simulink模型中构建控制系统,并启用|qp.status万博1manbetx|% outport通过选择MPC的*优化状态*参数%控制器块。显示运行时|qp。中|的值%控制器状态范围。mdl =“mpc_onlinemonitoring”;open_system (mdl)

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

open_system ([mdl“/控制器状态”(mdl) open_system (“/响应”]) sim (mdl)
——>转换“模型”。植物的“属性”到状态空间。——>转换模型到离散时间。假设在测量的输出通道1中添加的输出干扰是集成白噪声。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。

闭环响应解释

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

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

mpcoj . optimizer . customsolver = true;

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

  • 函数名必须为mpcCustomSolver

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

  • 函数必须在MATLAB路径上。

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

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

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

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

函数[x, status] = mpcCustomSolver(H, f, A, b, x0)mpcCustomSolver允许用户指定自定义二次规划% (QP)求解器来解决由MPC控制器制定的QP问题。当“mpcoj . optimizer .”CustomSolver" property is set true, instead of%使用内置QP求解器,MPC控制器现在将使用客户QP在此函数中定义的%求解器用于MATLAB和Simulink中的仿真。万博1manbetxMPC 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的最优解向量。% status:必须是以下的有限整数:%正值:计算中使用的迭代次数% 0:达到的最大迭代次数% -1: QP是不可行的% -2:由于其他原因无法找到解决方案注意,即使求解器没有找到最优解,“x”也必须是作为n × 1向量返回的%(即将其设置为初始猜测x0)%不要更改上面的行下面的代码是如何实现自定义QP求解器的示例%。它需要最优化工具箱才能运行。定义QUADPROG选项并关闭优化结果的显示%命令窗口。选项= optimoptions(“quadprog”);选项。显示=“没有”根据定义,“quadprog”求解器所需的约束定义为% A*x <= b.然而,在我们的MPC QP问题中,约束被定义为% A*x >= b.因此,我们需要在这里实现一些转换:A_custom = -A;B_custom = -b;计算QP的最优解。注意使用默认算法%由"quadprog" ('interior-point-凸')忽略x0。“x0”在这里用作%输入参数仅供说明。H = (H+H')/2;确保黑森是对称的[x, ~,国旗,输出]= quadprog (H f A_custom b_custom , [], [], [], [], x0,选项);%将“flag”输出转换为MPC控制器所需的“status”。开关国旗情况下1 status = Output.iterations;情况下0 status = 0;情况下-2 status = -1;否则状态= -2;结束总是返回正确大小的非空x。当求解器失败时,一个方便的解决方法是将x设为初始猜测值。。如果状态<= 0 x = x0;结束

重复模拟。

set_param ([mdl“/控制器状态”),“ymax”“十”);sim (mdl)
——>转换“模型”。植物的“属性”到状态空间。——>转换模型到离散时间。假设在测量的输出通道1中添加的输出干扰是集成白噪声。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。

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

bdclose (mdl)

相关的话题