主要内容

明确的MPC控制Single-Input-Single-Output植物

这个例子展示了如何控制双积分器植物在仿真软件输入饱和®使用显式的MPC。金宝app

例如控制与传统的双积分器(隐性)MPC控制器,明白了模型预测控制的Single-Input-Single-Output植物

定义植物模型

线性开环动态模型是一个双积分器。

工厂=特遣部队(1,(1 0 0));

MPC控制器设计

创建控制器对象样本时间为0.1秒,和预测和控制视野分别为10和3步骤。

t = 0.1;mpcobj = mpc(3)植物,Ts, 10日;
- - >“权重。ManipulatedVariables”是空的。假设默认的0.00000。- - >“权重。ManipulatedVariablesRate”是空的。假设默认的0.10000。- - >“权重。OutputVariables”是空的。假设默认的1.00000。

指定执行机构饱和限制作为操纵变量约束。

mpcobj。MV =结构(“最小值”,1“马克斯”1);

明确的政策委员会

约束MPC控制器的状态空间分割成许多多面区域,在每个区域MPC控制律是一个特定的affine-in-the-state-and-reference函数,用系数取决于该地区。明确的MPC计算所有这些地区,和它们的相对控制法律,离线。在线,控制器只是选择并应用预先计算的解决方案相对于当前的地区,所以它没有解决约束的二次优化问题在每个控制步骤。明确MPC的更多信息,请参阅明确的政策委员会

产生明确的MPC控制器

明确MPC相当于执行显式的分段仿射版本的MPC控制律由传统的MPC控制器。生成一个显式的MPC控制器从传统MPC控制器,您必须为每个控制器状态指定范围,参考信号,操纵变量和测量的干扰。这样做确保了二次规划问题是解决这些定义的空间范围。如果在运行时其中一个独立变量超出它的范围,控制器返回一个错误状态和操纵变量设置为他们最后的值。因此,重要的是,你不要低估这些范围。

生成合适的范围,获得一些信息在控制器状态。显示控制器初始状态,使用mpcstate

mpcstate (mpcobj)
- - >转换”模型。植物状态”属性。- - >将模型转换为离散时间。假设没有干扰# 1添加到测量输出。- - >”模型。噪音”是空的。假设白噪声在每个测量输出。MPCSTATE对象和字段植物:[0 0]干扰:(x0 1双)噪声:[1 x0双]LastMove: 0协方差:[2 x2双]

正如所料,使用的植物模型卡尔曼估计有2个,还有一个额外的状态需要最后一个操纵变量的值。

MPC控制器状态包括从植物模型,扰动模型噪声模型,最后的操纵变量值,顺序。创建一系列结构,您可以为每个州指定范围,参考,和操纵变量,使用generateExplicitRange

范围= generateExplicitRange (mpcobj);

设置一个状态变量的范围有时是困难的时候不对应一个物理参数。在这种情况下,多个运行的开环仿真植物典型的参考和干扰信号,以及模型不匹配建议为了收集数据,反映国家的范围。对于这个示例,高估了范围如下。

range.State.Min (:) = (-10; -10);range.State.Max (:) = (10; 10);

通常你知道所使用的参考信号的实际范围的名义操作点。范围用于生成一个显式的MPC控制器必须至少一样大的实际范围。

range.Reference。Min = 2;range.Reference。Max = 2;

指定被控变量范围。如果操纵变量约束,用于生成范围明确的MPC控制器必须至少一样大这些限制。

range.ManipulatedVariable。最小值= -1.1;range.ManipulatedVariable。Max = 1.1;

使用generateExplicitMPC命令来获得一个显式的MPC控制器与指定的参数范围。

mpcobjExplicit = generateExplicitMPC (mpcobj、范围)
发现/未开拓的地区:19/0明确MPC控制器- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -控制器样品时间:0.1(秒)多面区域:19的参数数量:4解决方案简化:没有状态估计:默认卡尔曼增益- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -“mpcobjExplicit类型。MPC的原始隐MPC的设计。“mpcobjExplicit类型。范围的参数的有效范围。“mpcobjExplicit类型。OptimizationOptions”选项用于不确定型QP计算。“mpcobjExplicit类型。PiecewiseAffineSolution”区域,并获得在每个解决方案。

使用简化函数与“准确”加入方法对相应地区的收益是相同的,其联盟是一个凸集。这样做可以减少内存占用的显式MPC控制器不牺牲性能。

mpcobjExplicitSimplified =简化(mpcobjExplicit,“准确”)
区域分析:15/15明确MPC控制器- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -控制器样品时间:0.1(秒)多面区域:15参数的数量:4解决方案简化:是的状态估计:默认卡尔曼增益- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -“mpcobjExplicitSimplified类型。MPC的原始隐MPC的设计。“mpcobjExplicitSimplified类型。范围的参数的有效范围。“mpcobjExplicitSimplified类型。OptimizationOptions”选项用于不确定型QP计算。“mpcobjExplicitSimplified类型。PiecewiseAffineSolution”区域,并获得在每个解决方案。

分段仿射区域的数量已经减少了。

沿着给定的部分情节分段仿射分区

你可以画一个2 d部分的控制器状态空间,看看这一部分地区。对于这个示例,图的2 d部分由第一和第二状态变量定义的状态空间(负载角和角速度)。所以你必须首先创建一个情节结构修复所有的其他州(和参考信号)在各自特定的值范围。

创建一个参数结构,您可以指定2 d部分情节之后,使用generatePlotParameters函数。

plotpars = generatePlotParameters (mpcobjExplicitSimplified)
plotpars =结构体字段:状态:[1 x1 struct]参考:[1 x1 struct] MeasuredDisturbance: [1 x1 struct] ManipulatedVariable: [1 x1 struct]

在本例中,您的阴谋第一个状态变量对第二个状态变量。所有其他参数都必须固定在各自范围内值。

离开状态变量可以改变,不指定索引。

plotpars.State。指数= [];plotpars.State。值= [];

指定参考信号的指数和修复它的值0

plotpars.Reference。指数= 1;plotpars.Reference。值= 0;

被控变量的指定索引并修复它的值0

plotpars.ManipulatedVariable。指数= 1;plotpars.ManipulatedVariable。值= 0;

使用plotSection命令绘制二维部分定义的两个自由参数。有关更多信息,请参见plotSection

plotSection (mpcobjExplicitSimplified plotpars);轴([4 4 4 4]);网格包含(“国家# 1”);ylabel (“国家# 2”);

模拟使用mpcmove函数

比较传统的闭环模拟隐式MPC和明确的MPC使用mpcmovempcmoveExplicit函数分别。

初始化变量来存储闭环MPC的反应。

N =圆(5 / Ts);YY = 0 (N, 1);YYExplicit = 0 (N, 1);UU = 0 (N, 1);UUExplicit = 0 (N, 1);

准备使用的植物模型模拟

sys =汇集(ss(植物),Ts);xsys = (0, 0);xsysExplicit = xsys;

获取一个指向内部状态的控制器,使用mpcstate

xmpc = mpcstate (mpcobj);xmpcExplicit = mpcstate (mpcobjExplicitSimplified);

迭代模拟闭环控制器的响应。

k = 1: n - 1%更新工厂测量ysys = sys.C * xsys;ysysExplicit = sys.C * xsysExplicit;%计算传统货币政策委员会行动u = mpcmove (mpcobj, xmpc ysys 1);%计算显式MPC行动uExplicit = mpcmoveExplicit (mpcobjExplicit, xmpcExplicit ysysExplicit 1);%存储信号YY (k) = ysys;YYExplicit (k) = ysysExplicit;UU (k) = u;UUExplicit (k) = uExplicit;%更新植物状态xsys =系统。* xsys + sys.B * u;xsysExplicit =系统。* xsysExplicit + sys.B * uExplicit;结束%显示标准之间的区别传统和显式控制器的信号。流(“\ nDifference传统和显式使用MPCMOVE命令MPC反应之间% g \ n ',规范(UU-UUExplicit) +规范(YY-YYExplicit));
区别传统和显式使用MPCMOVE命令1.27751 e-13 MPC响应

模拟使用sim卡函数

比较传统和明确的政策委员会之间的闭环仿真使用sim卡命令。

N = 5 / Ts;%仿真迭代次数(y1, t1, u1) = sim (mpcobj N 1);与传统MPC %模拟(y2, t2, u2) = sim (mpcobjExplicitSimplified N 1);%模拟与明确的政策委员会
- - >转换”模型。植物状态”属性。- - >将模型转换为离散时间。假设没有干扰# 1添加到测量输出。- - >”模型。噪音”是空的。假设白噪声在每个测量输出。

仿真结果是相同的。

流(“\ nDifference传统和显式使用SIM命令MPC反应之间% g \ n ',规范(u2-u1) +规范(y2-y1));
区别传统和显式使用SIM命令1.28188 e-13 MPC响应

使用仿真软件模拟金宝app

在仿真软件模拟传统的MPC控制器。金宝appMPC控制器配置为使用mpcobj作为控制器。

mdl =“mpc_doubleint”;open_system (mdl) sim (mdl)

在仿真软件模拟明确MPC控制器。金宝app块被配置为使用显式MPC控制器mpcobjExplicitSimplified作为控制器。

mdlExplicit =“empc_doubleint”;open_system (mdlExplicit) sim (mdlExplicit)

闭环反应是相同的。

流(‘\ nDifference之间的传统和明确的MPC反应模型是% g \ n '金宝app,规范(uExplicit-u) +规范(yExplicit-y));
区别传统和明确的MPC响应仿真软件是1.39164 e-13金宝app

两种仿真软件模型。金宝app

bdclose (mdl) bdclose (mdlExplicit)

另请参阅

功能

对象

相关的例子

更多关于