在快速MPC应用中使用次优解决方案
这个例子展示了如何使用优化求解器返回的次优解来保证实时应用中MPC控制器的最坏执行时间。
什么是次优解决方案?
模型预测控制(MPC)在每个控制区间解决一个二次规划(QP)问题。内置的QP求解器使用迭代活动集算法,对MPC应用非常有效。然而,当存在约束时,没有办法预测需要多少求解器迭代才能找到最优解。此外,在实时应用程序中,从一个控制间隔到下一个控制间隔的迭代次数可能发生巨大变化。在这种情况下,最坏情况下的执行时间可能超过硬件平台允许的、由控制器采样时间决定的极限。
通过在优化迭代次数超过指定最大值后应用次优解决方案,可以保证MPC控制器的最坏情况执行时间。要设置最坏情况的执行时间,首先通过在标称条件下对控制器进行实验来确定单个优化迭代所需的时间。然后,对每个控制间隔的迭代次数设置一个小的上限。
默认情况下,当达到最大迭代次数时,MPC控制器不使用次优解。相反,控制器设置了一个错误标志(状态= 0
)并冻结输出。通常,早期迭代中可用的解决方案已经足够好了,但是需要改进以找到最优解决方案,这将导致许多额外的迭代。
这个例子展示了如何配置MPC控制器以使用次优解决方案。次优解决方案是在最终迭代中可用的可行解决方案(如果需要,可以修改,以满足对操作变量的任何硬约束)。要确定次优解决方案是否为应用程序提供了可接受的控制性能,请在整个操作范围内运行模拟。
定义植物模型
植物模型是一个稳定的随机生成的状态空间系统。它有10
州,3.
操纵变量(MV),和3.
输出(OV)。
rng (1234);nX = 10;nOV = 3;nMV = 3;Plant = rss(nX,nOV,nMV);工厂。D = 0;Ts = 0.1;
具有mv和ov约束的MPC控制器设计
创建一个MPC控制器,除约束条件外,所有控制器参数均为默认值。在操作变量和输出变量上指定约束。
详细程度= mpcverbosity(“关闭”);暂时禁用命令行消息。mpcobj = mpc(植物,Ts);为i = 1:nMV mpcobj.MV(i)。Min = -1.0;mpcobj.MV(我)。Max = 1.0;结束为i = 1:nOV mpcobo . ov (i)。Min = -1.0;mpcobj.OV(我)。Max = 1.0;结束
同时约束被操作变量和输出变量需要相对大量的QP迭代来确定最优控制序列。
在MATLAB中模拟随机输出干扰
首先,在每个控制区间内采用最优解对MPC控制器进行仿真。若要只关注输出干扰抑制性能,请将输出参考值设置为零。
T = 5;N = T/Ts + 1;r = 0 (1,nOV);SimOptions = mpcsimopt();SimOptions。OutputNoise = 3*randn(N,nOV);[y, t, u, ~, ~, ~,状态]= sim (mpcobj N r, [], SimOptions);
绘制每个控制间隔中使用的迭代次数。
图楼梯(状态)hold住在标题(“迭代次数”)
最大迭代次数为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中模拟万博1manbetx随机输出扰动
打开包含两个控制器万博1manbetx的Simulink模型并对其进行模拟。
模型=“mpc_SuboptimalSolution”;open_system(模型)sim(模型)
与在命令行模拟中一样,每个控制间隔的QP迭代的平均次数减少,而不会显著影响控制性能。
mpcverbosity(详细);启用命令行消息。bdclose(模型)