这个例子展示了如何在实时应用中使用优化求解器返回的次优解来保证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 (“关闭”);暂时禁用命令行消息。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;
将默认活动集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(模型)