主要内容

非线性MPC控制器

模拟非线性模型预测控制器

  • 图书馆:
  • 模型预测控制工具箱

  • 非线性MPC控制器块

描述

非线性MPC控制器Block模拟了一个非线性模型预测控制器。在每个控制区间,该模块通过求解一个非线性规划问题来计算最优控制动作。有关非线性MPC的更多信息,请参见非线性MPC

要使用此块,必须先创建一个nlmpc对象。®工作区。

限制

  • 没有一个非线性MPC控制器块参数是可调的。

港口

输入

全部展开

所需输入

当前预测模型状态,指定为长度矢量信号NX,在那里NX为预测模型的状态数。由于非线性MPC控制器不执行状态估计,您必须在每个控制区间测量或估计当前的预测模型状态。

植物输出参考值,指定为行向量信号或矩阵信号。

要在整个预测范围内使用相同的参考值,请连接裁判的行向量信号Ny元素,Ny为输出变量的个数。每个元素指定一个输出变量的引用。

改变对预测地平线(预览)的引用K.+ 1,K.+P., 连接裁判与矩阵信号Ny列,直到P.行。这里,K.是当前的时间和P.是预测视界。每行包含一个预测地平线步骤的引用。如果您指定少于P.行,最终参考用于预测地平线的剩余步骤。

在上一个控制间隔内的控制信号,指定为长度矢量信号Nmv,在那里Nmv为被操纵变量的个数。

笔记

连接last_mv在先前的控制间隔中实际应用于工厂的MV信号。通常,这些MV信号是控制器生成的值,但情况并非总是如此。例如,如果您的控制器脱机并以跟踪模式运行;也就是说,控制器输出不是驱动工厂,然后馈送实际控制信号到last_mv当控制器在线切换后,可以帮助实现无闷吸的转移。

额外的投入

如果您的控制器预测模型已经测量扰动,您必须启用这个端口,并将其连接到行向量或矩阵信号。

要在整个预测视界使用相同的测量扰动值,请连接医学博士的行向量信号N医学博士元素,N医学博士为被操纵变量的个数。每个元素都指定了测量扰动的值。

随时间改变在预测视界(预览)上的扰动K.时间K.+P., 连接医学博士与矩阵信号N医学博士列,直到P.+ 1行。这里,K.是当前的时间和P.是预测视界。每一行包含一个预测视界步的扰动。如果您指定少于P.+1行,最后的扰动用于预测视界的其余步骤。

依赖关系

要启用该端口,请选择测量的干扰参数。

如果控制器在其预测模型中使用可选参数、自定义成本函数或自定义约束函数,请启用此输入端口,并连接参数总线信号NP.元素,NP.是参数的数量。有关创建参数总线信号的详细信息,请参阅createParameterBus.控制器将这些参数传递给它的模型函数、代价函数、约束函数和雅可比函数。

如果控制器不使用可选参数,则必须禁用参数个数

依赖关系

要启用该端口,请选择模型参数参数。

要指定操纵变量目标,请启用此输入端口,并连接行向量或矩阵信号。要使定义的可操作可转换其指定的目标值,您还必须指定该变量的非零调整权重。

在整个预测范围内使用相同的操纵变量目标,连接mv.target的行向量信号Nmv元素,Nmv为被操纵变量的个数。每个元素指定被操纵变量的目标。

随着时间的推移,在预测视界(预览)范围内改变目标K.时间K.+P.1,连接mv.target与矩阵信号Nmv列,直到P.行。这里,K.是当前的时间和P.是预测视界。每行包含一个预测地平线步骤的目标。如果您指定少于P.行,最终目标用于预测视界的其余步骤。

依赖关系

要启用该端口,请选择操纵变量的目标参数。

在线限制

要指定运行时最小输出变量约束,请启用此输入端口。如果禁用此端口,则该块使用指定的下限outputvariables.min.属性。

为了在预测范围内使用相同的边界,连接y.min的行向量信号Ny元素,Ny为输出数。每个元素指定输出变量的下界。

根据时间改变预测范围K.+ 1,K.+P., 连接y.min与矩阵信号Ny列,直到P.行。这里,K.是当前的时间和P.是预测视界。每一行包含一个预测视界步骤的边界。如果您指定少于P.行,最后一行中的边界适用于预测视界的其余部分。

依赖关系

要启用该端口,请选择低OV限制参数。

要指定运行时最大输出变量约束,请启用此输入端口。如果该端口被禁用,则块将使用outputvariables.min.属性。

为了在预测范围内使用相同的边界,连接y.max的行向量信号Ny元素,Ny为输出数。每个元素都指定了输出变量的上限。

根据时间改变预测范围K.+ 1,K.+P., 连接y.max与矩阵信号Ny列,直到P.行。这里,K.是当前的时间和P.是预测视界。每一行包含一个预测视界步骤的边界。如果您指定少于P.行,最后一行中的边界适用于预测视界的其余部分。

依赖关系

要启用该端口,请选择上ov限制参数。

要指定运行时最小操纵变量约束,请启用此输入端口。如果禁用此端口,则该块使用指定的下限ManipulatedVariables。最小值属性。

为了在预测范围内使用相同的边界,连接mv.min.的行向量信号Nmv元素,Nmv为输出数。每个元素指定被操纵变量的下限。

根据时间改变预测范围K.时间K.+P.1,连接mv.min.与矩阵信号Ny列,直到P.行。这里,K.是当前的时间和P.是预测视界。每一行包含一个预测视界步骤的边界。如果您指定少于P.行,最后一行中的边界适用于预测视界的其余部分。

依赖关系

要启用该端口,请选择较低的MV限制参数。

要指定运行时最大操纵变量约束,请启用此输入端口。如果该端口被禁用,则块将使用manipuldvariables.max.属性。

为了在预测范围内使用相同的边界,连接mv.max的行向量信号Nmv元素,Nmv为输出数。每个元素都指定了被操纵变量的上限。

根据时间改变预测范围K.时间K.+P.1,连接mv.max与矩阵信号Ny列,直到P.行。这里,K.是当前的时间和P.是预测视界。每一行包含一个预测视界步骤的边界。如果您指定少于P.行,最后一行中的边界适用于预测视界的其余部分。

依赖关系

要启用该端口,请选择上层MV限制参数。

要指定运行时最小操纵可变速率约束,请启用此输入端口。如果禁用此端口,则该块使用指定的下限ManipulatedVariable。杀鼠灵属性。dmv.min边界必须是非正数。

为了在预测范围内使用相同的边界,连接dmv.min的行向量信号Nmv元素,Nmv为输出数。每个元素都指定操纵变量变化率的下限。

根据时间改变预测范围K.时间K.+P.1,连接dmv.min与矩阵信号Ny列,直到P.行。这里,K.是当前的时间和P.是预测视界。每一行包含一个预测视界步骤的边界。如果您指定少于P.行,最后一行中的边界适用于预测视界的其余部分。

依赖关系

要启用该端口,请选择低MVRate限制参数。

要指定运行时最大操纵可变速率约束,请启用此输入端口。如果该端口被禁用,则块将使用ManipulatedVariables。RateMax属性。dmv.max边界必须是非负的。

为了在预测范围内使用相同的边界,连接dmv.max的行向量信号Nmv元素,Nmv为输出数。每个元素指定用于操纵可变变化率的上限。

根据时间改变预测范围K.时间K.+P.1,连接dmv.max与矩阵信号Ny列,直到P.行。这里,K.是当前的时间和P.是预测视界。每一行包含一个预测视界步骤的边界。如果您指定少于P.行,最后一行中的边界适用于预测视界的其余部分。

依赖关系

要启用该端口,请选择上层MVRate限制参数。

要指定运行时最小状态约束,请启用此输入端口。如果禁用此端口,则该块使用指定的下限州。最小值属性。

为了在预测范围内使用相同的边界,连接x.min的行向量信号NX元素,NX为输出数。每个元素指定状态的下界。

根据时间改变预测范围K.+ 1,K.+P., 连接x.min与矩阵信号Ny列,直到P.行。这里,K.是当前的时间和P.是预测视界。每一行包含一个预测视界步骤的边界。如果您指定少于P.行,最后一行中的边界适用于预测视界的其余部分。

依赖关系

要启用该端口,请选择较低的状态限制参数。

要指定运行时最大状态约束,请启用此输入端口。如果该端口被禁用,则块将使用州。马克斯属性。

为了在预测范围内使用相同的边界,连接x.max.的行向量信号NX元素,NX为输出数。每个元素都指定了状态的上限。

根据时间改变预测范围K.+ 1,K.+P., 连接x.max.与矩阵信号Ny列,直到P.行。这里,K.是当前的时间和P.是预测视界。每一行包含一个预测视界步骤的边界。如果您指定少于P.行,最后一行中的边界适用于预测视界的其余部分。

依赖关系

要启用该端口,请选择上州限制参数。

在线调整重量

要指定运行时输出变量调优权重,请启用此输入端口。如果该端口被禁用,则块将使用权重。输出Variables属性。这些调整权重惩罚了输出引用的偏差。

如果MPC控制器对象在预测视界上使用恒定输出调整权重,则只能在运行时指定恒定的输出调谐权重。同样,如果MPC控制器对象使用输出调整权重,则可以在运行时仅在运行时仅指定时变输出调谐权重

要在预测范围内使用恒定的调优权重,请连接y.wt.的行向量信号Ny元素,Ny为输出数。每个元素为输出变量指定一个非负的调优权重。有关指定调谐权重的更多信息,请参阅调整权重

从时间从预测地平线上改变调谐重量K.+ 1,K.+P., 连接y.wt.与矩阵信号Ny列,直到P.行。这里,K.是当前的时间和P.是预测视界。每一行包含一个预测水平步骤的调优权值。如果您指定少于P.行,最终行中的调谐重量适用于预测地平线的其余部分。有关预测地平线上不同权重的更多信息,请参阅时变权和约束

依赖关系

要启用该端口,请选择OV权重参数。

要指定运行时操作变量调整权重,请启用此输入端口。如果该端口被禁用,则块将使用权重。ManipulatedVariables属性。这些调整权重惩罚了MV目标的偏差。

要在预测范围内使用相同的调优权重,请连接mv.wt的行向量信号Nmv元素,Nmv为被操纵变量的个数。每个元素指定被操纵变量的非负调整权重。有关指定调谐权重的更多信息,请参阅调整权重

从时间从预测地平线上改变调谐重量K.时间K.+P.1,连接mv.wt与矩阵信号Nmv列,直到P.行。这里,K.是当前的时间和P.是预测视界。每一行包含一个预测水平步骤的调优权值。如果您指定少于P.行,最终行中的调谐重量适用于预测地平线的其余部分。有关预测地平线上不同权重的更多信息,请参阅时变权和约束

依赖关系

要启用该端口,请选择MV权重参数。

要指定运行时操纵的可变速率调优权重,请启用此输入端口。如果该端口被禁用,则块将使用权重.ManipuldVariablesRate.属性。这些调优权重会对控制移动中的较大更改进行惩罚。

要在预测范围内使用相同的调优权重,请连接dmv.wt的行向量信号Nmv元素,Nmv为被操纵变量的个数。每个元素都为受控的可变速率指定一个非负的调优权重。有关指定调谐权重的更多信息,请参阅调整权重

从时间从预测地平线上改变调谐重量K.时间K.+P.1,连接dmv.wt与矩阵信号Nmv列,直到P.行。这里,K.是当前的时间和P.是预测视界。每一行包含一个预测水平步骤的调优权值。如果您指定少于P.行,最终行中的调谐重量适用于预测地平线的其余部分。有关预测地平线上不同权重的更多信息,请参阅时变权和约束

依赖关系

要启用该端口,请选择MVRate权重参数。

要指定运行时松弛可变调谐重量,请启用此输入端口并连接标量信号。如果禁用此端口,则该块使用指定的调谐重量权重..属性。

松弛变量调优权值没有效果,除非控制器对象定义了软约束,其相关的ECR值是非零。如果存在软约束,则增加ecr.wt价值使得这些约束相对困难。然后,控制器将优先考虑最小化预测的最坏情况约束违背的大小。

依赖关系

要启用该端口,请选择ECR重量参数。

最初的猜测

要指定最优操纵变量解决方案的初始猜测,请启用此输入端口。金宝搏官方网站如果该端口被禁用,块将使用在前一个控制间隔中计算的最优控制序列作为初始猜测。

在预测地平线上使用相同的初始猜测,连接mv.init.到一个矢量信号Nmv元素,Nmv为被操纵变量的个数。每个元素指定用于操纵变量的初始猜测。

在时间内改变预测地平线上的最初猜测K.时间K.+P.1,连接mv.init.与矩阵信号Nmv列,直到P.行。这里,K.是当前的时间和P.是预测视界。每一行包含一个预测水平步骤的初始猜测。如果您指定少于P.行,最后一行中的猜测适用于预测视界的其余部分。

依赖关系

要启用该端口,请选择最初的猜测参数。

要指定最佳状态解决方案的初始猜测,请启用此输入端口。金宝搏官方网站如果该端口被禁用,块将使用在前一个控制间隔中计算的最优状态序列作为初始猜测。

在预测地平线上使用相同的初始猜测,连接X.Init.到一个矢量信号NX元素,NX是州的数量。每个元素指定一个状态的初始猜测。

在时间内改变预测地平线上的最初猜测K.时间K.+P.1,连接X.Init.与矩阵信号NX列,直到P.行。这里,K.是当前的时间和P.是预测视界。每一行包含一个预测水平步骤的初始猜测。如果您指定少于P.行,最后一行中的猜测适用于预测视界的其余部分。

依赖关系

要启用该端口,请选择最初的猜测参数。

为了指定松弛变量在解决方案的初始猜测,启用这个输入端口并连接一个非负标量信号。如果该端口被禁用,则块使用的初始猜测值为0.

依赖关系

要启用该端口,请选择最初的猜测参数。

输出

全部展开

要求输出

最佳操作变量控制动作,输出作为长度的柱矢量信号Nmv,在那里Nmv为被操纵变量的个数。

如果求解器会聚到局部最佳解决方案(nlp.status是积极的),然后呢mv包含最优解。

如果求解器达到最大迭代次数而未找到最优解(nlp.status是零)和优化。UseSuboptimalSolution属性为:

  • 真正的, 然后mv包含次优解

  • , 然后mv是一样的last_mv

如果求解器失败(nlp.status是负的),然后呢mv是一样的last_mv

额外的输出

客观函数成本,输出作为非负标量信号。成本量化了控制器实现了目标的程度。

成本值只有在nlp.status输出是非负的。

依赖关系

要启用该端口,请选择最优成本参数。

松弛变量ε,用于约束软化,输出为0.或正标量值。

  • ε = 0 -在整个预测视界内,所有软约束均得到满足。

  • ε > 0 -至少违反了一个软约束。当违反多个约束时,ε表示最坏情况的软约束违反(按每个约束的ECR值缩放)。

依赖关系

要启用该端口,请选择松弛变量参数。

优化状态,输出为如下之一:

  • 正整数-求解器收敛到一个最优解

  • 0.-不收敛到最优解的最大迭代次数

  • 负整数-求解失败

依赖关系

要启用该端口,请选择优化状态参数。

最优序列

最优操纵变量序列,作为矩阵信号返回P.+1行和Nmv列,其中P.是预测的地平线和Nmv为被操纵变量的个数。

第一个P.mv.seq包含当前时间的计算的最佳操纵变量值K.时间K.+P.1。第一行mv.seq包含当前受操纵的变量值(输出)mv).由于控制器不会在时间计算最佳控制K.+P.,最后两排mv.seq是相同的。

依赖关系

要启用该端口,请选择最优控制序列参数。

最优预测模型状态序列,作为矩阵信号返回P.+1行和NX列,其中P.是预测的地平线和NX是州的数量。

第一个P.x.seq包含从当前时间计算的最佳状态值K.时间K.+P.1。第一行x.seq包含当前估计的状态值。由于控制器不会在时间计算最佳状态K.+P.,最后两排x.seq是相同的。

依赖关系

要启用该端口,请选择最优状态序列参数。

最优输出可变序列,以矩阵信号的形式返回P.+1行和Ny列,其中P.是预测的地平线和Ny为输出变量的个数。

第一个P.Y.Seq.包含从当前时间计算的最佳输出值K.时间K.+P.1。第一行Y.Seq.基于当前估计的状态和当前测量的干扰来计算(第一行输入医学博士).由于控制器不计算最佳输出值时K.+P.,最后两排Y.Seq.是相同的。

依赖关系

要启用该端口,请选择最优输出序列参数。

参数

全部展开

你必须提供一个nlmpc定义非线性MPC控制器的对象。为此,请输入一个名称nlmpcMatlab工作区的对象。

程序使用

块参数:nlmpcobj
类型:字符串,特征向量
默认:

选择此参数以使用与预测模型相同的样本时间运行控制器。若使用不同控制器的采样时间,请清除此参数,并使用使块在不同的示例时间运行参数。

为了限制决策变量的数量并提高计算效率,您可以使用与预测地平线不同的采样时间运行控制器。例如,考虑在10 Hz运行的非线性MPC控制器的情况。如果植物和控制器采样时间匹配,预测植物行为为十秒钟需要长度100的预测地平线,这产生了大量的决策变量。为了减少决策变量的数量,您可以使用1秒的植物采样时间和长度10的预测地平线。

程序使用

块参数:UseObjectTs
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“上”

指定此参数以使用与其预测模型不同的采样时间运行控制器。

依赖关系

要启用此参数,请清除使用预测模型采样时间参数。

程序使用

块参数:TsControl
类型:字符串,特征向量
默认:

使用生成的MEX函数来模拟控制器buildMEX.这样做减少了控制器的仿真时间。要指定MEX函数的名称,请使用指定MEX函数名称参数。

程序使用

块参数:UseMEX
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

使用此参数指定要在模拟期间使用的MEX函数的名称。要创建MEX函数,请使用buildMEX功能。

依赖关系

要启用此参数,请选择使用MEX加速模拟参数。

程序使用

块参数:mexname
类型:字符串,特征向量
默认:

常规选项卡

如果你的控制器已经测量到扰动,你必须选择这个参数来添加医学博士输出端口到块。

程序使用

块参数:md_enabled
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

选择此参数以添加mv.target块的输入端口。

程序使用

块参数:mvtarget_enabled.
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

如果您的控制器使用可选参数,则必须选择此参数以添加参数个数输出端口到块。

有关创建参数总线信号的详细信息,请参阅createParameterBus

程序使用

块参数:param_enabled
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

选择此参数以添加成本输出端口到块。

程序使用

块参数:cost_enabled
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

选择此参数以添加mv.seq输出端口到块。

程序使用

块参数:mvseq_enabled
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

选择此参数以添加x.seq输出端口到块。

程序使用

块参数:stateseq_enabled
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

选择此参数以添加Y.Seq.输出端口到块。

程序使用

块参数:ovseq_enabled
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

选择此参数以添加松弛输出端口到块。

程序使用

块参数:slack_enabled
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

选择此参数以添加nlp.status输出端口到块。

程序使用

块参数:status_enabled
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

在线功能选项卡

选择此参数以添加ov.min块的输入端口。

程序使用

块参数:OV_MIN.
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

选择此参数以添加ov.max块的输入端口。

程序使用

块参数:ov_max
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

选择此参数以添加mv.min.块的输入端口。

程序使用

块参数:mv_min
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

选择此参数以添加mv.max块的输入端口。

程序使用

块参数:mv_max
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

选择此参数以添加dmv.min块的输入端口。

程序使用

块参数:mvrate_min
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

选择此参数以添加dmv.max块的输入端口。

程序使用

块参数:mvrate_max
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

选择此参数以添加x.min块的输入端口。

程序使用

块参数:state_min
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

选择此参数以添加x.max.块的输入端口。

程序使用

块参数:state_max
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

选择此参数以添加y.wt.块的输入端口。

程序使用

块参数:ov_weight
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

选择此参数以添加mv.wt块的输入端口。

程序使用

块参数:mv_weight
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

选择此参数以添加dmv.wt块的输入端口。

程序使用

块参数:mvrate_weight
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

选择此参数以添加ecr.wt块的输入端口。

程序使用

块参数:ecr_weight
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

选择此参数以添加mv.init.X.Init.,E.Init.块的输入端口。

笔记

默认情况下,Nonlinar MPC控制器块使用从一个控制区间计算出的最优操纵变量和状态轨迹作为下一个控制区间的初始猜测。

仅在应用程序需要时启用初始猜测端口。

程序使用

块参数:nlp_initialize.
类型:字符串,特征向量
价值观:“关闭”“上”
默认:“关闭”

扩展功能

在R2018B中介绍