主要内容

在快速MPC应用中使用次优解

此示例显示如何通过使用优化求解器返回的子优化解决方案来保证MPC控制器在实时应用中的最坏情况执行时间。

什么是次优解决方案?

模型预测控制(MPC)解决了每个控制间隔的二次编程(QP)问题。内置QP求解器使用迭代主动集算法,该算法对于MPC应用是有效的。然而,当存在约束时,没有办法预测需要多少求解器迭代来找到最佳解决方案。此外,在实时应用程序中,迭代的数量可以从一个控制间隔到下一个控制间隔大幅变化。在这种情况下,最坏情况的执行时间可以超过硬件平台上允许的限制,并由控制器采样时间确定。

通过在优化迭代的数量超过指定的最大值后,可以保证MPC控制器的最坏情况执行时间通过应用SubOltimal解决方案。要设置最坏情况的执行时间,首先通过在标称条件下尝试控制器来确定单个优化迭代所需的时间。然后,在每个控制间隔设置迭代次数的小上限。

默认情况下,当达到最大迭代次数时,MPC控制器不使用次优溶液。相反,控制器设置错误标志(status = 0.)并冻结其输出。通常,早期迭代中可用的解决方案足够好,但需要改进以找到最佳解决方案,这导致许多额外的迭代。

此示例显示如何配置MPC控制器以使用次优解决方案。次优解决方案是最终迭代可用的可行解决方案(如果需要,修改,以满足操作变量上的任何硬约束)。要确定次优解决方案是否为您的应用程序提供可接受的控制性能,请在操作范围内运行模拟。

定义工厂模型

工厂模型是一种稳定的随机产生的状态空间系统。它有10.状态,3.操纵变量(MV),和3.输出(OV)。

RNG(1234);nx = 10;11月= 3;nmv = 3;植物= RSS(NX,NOV,NMV);Plant.d = 0;ts = 0.1;

设计MPC控制器,具有MVS和OV的约束

为除了约束之外的所有控制器参数的默认值创建MPC控制器。指定对操作和输出变量的约束。

冗长= mpcverbosity('离开');%暂时禁用命令行消息。mpcobj = MPC(植物,TS);为了i = 1:nmv mpcobj.mv(i).min = -1.0;mpcobj.mv(i).max = 1.0;结尾为了i = 1:11月MPCobj.ov(i).min = -1.0;mpcobj.ov(i).max = 1.0;结尾

有关操纵和输出变量的同时约束需要相对大量的QP迭代来确定最佳控制序列。

用随机输出干扰模拟Matlab

首先,使用每个控制间隔中的最佳解决方案模拟MPC控制器。要专注于仅输出干扰抑制性能,请将输出参考值设置为零。

t = 5;n = t / ts + 1;r =零(11月1日);simoptions = mpcsimopt();simoptions.outputnoise = 3 * Randn(n,nov);[y,t,u,〜,〜,〜,状态] = sim(mpcobj,n,r,[],simoptions);

绘制每个控制间隔中使用的迭代次数。

图楼梯(状态)保持标题('迭代数量'

最大数量的迭代是21个,平均值为5.8次迭代。

使用相同的设置创建MPC控制器,但配置它以使用SubOltimal解决方案。

mpcobjsub = mpcobj;mpcobjsub.optimizer.usesuboptimalsolution = true;

减少默认活动集QP求解器的最大迭代次数为少数。

mpcobjsub.optimizer.ActiveSetOptions.maxIterations = 3;

使用相同的输出干扰序列模拟第二控制器。

[YSUB,TSUB,USUB,〜,〜,〜,Statussub] = SIM(MPCobjsub,N,R,[],SimOptions);

绘制同一绘图上的每个控制间隔中使用的迭代次数。对于达到最大迭代次数的任何控制间隔,attussub.是零。在绘制结果之前,将这些间隔设置迭代次数3.

statussub(statussub == 0)= 3;楼梯(Statussub)传奇('最佳''suboptimal'

最大数量的迭代现在是3,平均值为2.8迭代。

比较两个控制器的性能。使用次优溶液时,与最佳解决方案相比,控制性能没有显着恶化。

数字为了CT = 1:3子图(3,1,CT)绘图(T,Y(:,CT),T,YSUB(:,CT))结尾子图(3,1,1)标题('输出') 传奇('最佳''suboptimal'

对于实时应用,只要每个求解器迭代在硬件上少于30毫秒,最坏情况的执行时间就不会超过控制器采样时间(0.1秒)。通常,安全假设每个迭代使用的执行时间是常量的。

用随机输出干扰模拟Sim万博1manbetxulink

模拟Simulink®中的控制器。万博1manbetx

如果〜mpcchecktoolboxinstalled('万博1manbetxsimulink')disp('万博1manbetxSimulink(R)需要运行此示例。'返回结尾模型='mpc_suboptimalsolution';Open_System(型号)SIM(型号)

与在命令行仿真一样,每个控制间隔的平均QP迭代频率的数量减少而不会显着影响控制性能。

mpcverbosity(冗长);%启用命令行消息。bdclose(模型)

也可以看看

职能

相关话题