这个例子展示了如何使用优化解算器返回的次最优解来保证MPC控制器在实时应用中的最坏情况执行时间。
模型预测控制(MPC)在每个控制区间解决一个二次规划(QP)问题。内置的QP求解器使用迭代主动集算法,对MPC应用是有效的。然而,当存在约束时,无法预测需要多少次求解器迭代才能找到最优解。此外,在实时应用程序中,从一个控制间隔到下一个控制间隔的迭代次数可能会发生显著变化。在这种情况下,最坏情况下的执行时间可能超过硬件平台上允许的、由控制器采样时间决定的限制。
通过在优化迭代次数超过指定的最大值后应用次优解决方案,可以保证MPC控制器的最坏情况执行时间。要设置最坏情况的执行时间,首先通过在标称条件下使用控制器进行试验,确定单个优化迭代所需的时间。然后,为每个控制间隔设置一个小的迭代次数上限。
默认情况下,当达到最大迭代次数时,MPC控制器不使用次优解决方案。相反,控制器设置一个错误标志(状态= 0
)并冻结其输出。通常,早期迭代中可用的解决方案已经足够好了,但是需要改进以找到最优的解决方案,这将导致许多额外的迭代。
这个例子展示了如何配置MPC控制器以使用次优解决方案。次最优解是在最终迭代时可用的可行解(如有必要,可修改以满足对操纵变量的任何硬约束)。要确定次优解决方案是否为您的应用程序提供可接受的控制性能,请在整个操作范围内运行模拟。
对象模型是一个稳定的随机生成状态空间系统。它有10
州,3.
操纵变量(MV)3.
输出(OV)。
rng (1234);nX = 10;11月= 3;nMV = 3;工厂= rss (nX 11月,nMV);工厂。d = 0;t = 0.1;
创建一个MPC控制器,为除约束外的所有控制器参数设置默认值。指定操作变量和输出变量的约束。
冗长= mpcverbosity (“关闭”);%暂时禁用命令行消息。mpcobj = mpc(Plant, Ts);为i = 1:nMV mpcobj.MV(i)。最小值= -1.0;mpcobj.MV(我)。Max = 1.0;结束为i = 1:nOV mpcobj.OV(i)。最小值= -1.0;mpcobj.OV(我)。Max = 1.0;结束
同时对操纵变量和输出变量的约束需要相对大量的QP迭代来确定最优控制序列。
首先,使用每个控制区间的最优解来模拟MPC控制器。为了只关注输出抗干扰性能,将输出参考值设为零。
T = 5;N = T/Ts + 1;r = 0(11月1日);SimOptions = mpcsimopt ();SimOptions。OutputNoise = 3 * randn (N, 11月);[y, t, u, ~, ~, ~,状态]= sim (mpcobj N r, [], SimOptions);
绘制每个控制区间中使用的迭代次数。
图楼梯(状态)在标题(的迭代次数)
最大的迭代次数为21次,平均为5.8次。
创建具有相同设置的MPC控制器,但将其配置为使用次优解决方案。
mpcobjSub = mpcobj;mpcobjSub.Optimizer.UseSuboptimalSolution = true;
将默认active-set QP求解器的最大迭代次数减少到一个较小的数字。
mpcobjSub.Optimizer.ActiveSetOptions.MaxIterations = 3;
对输出扰动序列相同的第二控制器进行仿真。
[ySub tSub uSub, ~, ~, ~, statusSub] = sim (mpcobjSub N r, [], SimOptions);
在同一图上绘制每个控制间隔中使用的迭代次数。对于达到最大迭代次数的任意控制区间,statusSub
是零。在绘制结果之前,将这些间隔的迭代次数设置为3.
.
statusSub(statusSub == 0) = 3;楼梯(statusSub)传说(“最优”,“次优”)
最大的迭代次数现在是3次,平均是2.8次。
比较两个控制器的性能。当使用次最优解决方案时,与最优解决方案相比,控制性能没有显著恶化。
数字为ct = 1:3次要情节(3、1,ct)情节(t、y (ct):,, t, ySub (ct):,)结束次要情节(1,1)标题(“输出”)传说(“最优”,“次优”)
对于实时应用程序,只要每次求解器迭代在硬件上花费的时间小于30毫秒,最坏情况下的执行时间不会超过控制器的采样时间(0.1
秒)。一般来说,可以放心地假设每个迭代使用的执行时间多多少少是一个常量。
在Simulink®中模拟控制器。金宝app
如果~ mpcchecktoolboxinstalled (“金宝app模型”) disp (运金宝app行这个示例需要Simulink(R)。)返回结束模型=“mpc_SuboptimalSolution”;open_system(模型)sim(模型)
与命令行模拟一样,每个控制间隔的平均QP迭代次数减少了,但没有显著影响控制性能。
mpcverbosity(详细);%启用命令行消息。bdclose(模型)