主要内容

非线性MPC控制器

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

自从R2018b

  • 非线性MPC控制器块

库:
模型预测控制工具箱

描述

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

使用这一块,您必须首先创建一个nlmpcMATLAB的对象®工作区。

限制

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

港口

输入

全部展开

需要输入

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

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

使用相同的参考价值在预测地平线,连接裁判一个行向量的信号NY元素,Ny输出变量的数量。每个元素指定一个输出变量的引用。

不同的引用在预测地平线(预览)k+ 1,k+p,连接裁判一个矩阵信号Ny列和p行。在这里,k当前时间和吗p是预测地平线。每一行包含的引用一个预测地平线的一步。如果你指定不到p行,最后引用用于预测地平线的其余步骤。

控制信号用于控制区间,以前工厂指定为一个向量长度的信号Nmv,在那里Nmv是操纵变量的数量。

请注意

连接last_mvMV信号实际应用于植物在前面的控制区间。通常,这些MV信号控制器所产生的价值,尽管这并非总是如此。例如,如果您的控制器是离线和跟踪模式下运行;即控制器输出不是开工厂,然后给实际控制信号last_mv可以帮助实现无扰转移时,控制器将重新上线。

额外的输入

如果你的控制器预测模型测量干扰你必须启用该端口,连接到一个行向量或矩阵信号。

使用相同的测量干扰值预测地平线,连接医学博士一个行向量的信号N医学博士元素,N医学博士是操纵变量的数量。每个元素指定的值测量的干扰。

不同的干扰预测地平线(预览)k时间k+p,连接医学博士一个矩阵信号N医学博士列和p+ 1行。在这里,k当前时间和吗p是预测地平线。每行包含预测地平线一步的干扰。如果你指定不到p+ 1行,最终干扰用于预测地平线的其余步骤。

依赖关系

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

如果您的控制器使用可选参数的预测模型,定义代价函数,或自定义约束功能,使这个输入端口和连接参数总线信号Np元素,Np参数的数量。总线上创建一个参数信号的更多信息,参见createParameterBus。控制器将这些参数传递给它的模型函数、成本函数,约束函数,被动函数和雅可比矩阵函数。

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

依赖关系

要启用这个端口,选择模型参数参数。

指定被控变量的目标,使这个输入端口和连接一个矢量信号。让一个给定的被控变量跟踪其指定的目标价值,您还必须指定一个非零调整体重,操纵变量。

提供的mv.target值在运行时应用于预测地平线。

依赖关系

要启用这个端口,选择目标被操纵的变量参数。

网络限制

指定运行时最小输出变量约束,使这个输入端口。如果该端口被禁用,块使用中指定的下界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.Min它的控制器对象的属性。

使用相同的边界预测地平线,连接mv.min一个行向量的信号Nmv元素,Nmv是输出的数量。每个元素指定一个操纵变量的下限。

不同范围的预测地平线k时间k+p1,连接mv.min一个矩阵信号Ny列和p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后一行的界限申请的其余部分预测地平线。

依赖关系

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

指定运行时最大操纵变量约束,使这个输入端口。如果该端口被禁用,块使用中指定的上界ManipulatedVariables.Max它的控制器对象的属性。

使用相同的边界预测地平线,连接mv.max一个行向量的信号Nmv元素,Nmv是输出的数量。每个元素指定一个操纵变量的上界。

不同范围的预测地平线k时间k+p1,连接mv.max一个矩阵信号Ny列和p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后一行的界限申请的其余部分预测地平线。

依赖关系

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

指定运行时最小操纵可变利率限制,使这个输入端口。如果该端口被禁用,块使用中指定的下界ManipulatedVariable.RateMin它的控制器对象的属性。dmv.min范围必须是负的。

使用相同的边界预测地平线,连接dmv.min一个行向量的信号Nmv元素,Nmv是输出的数量。每个元素指定一个操纵变量变化率的下界。

不同范围的预测地平线k时间k+p1,连接dmv.min一个矩阵信号Ny列和p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后一行的界限申请的其余部分预测地平线。

依赖关系

要启用这个端口,选择低MVRate限制参数。

指定运行时最大操纵变量率限制,使这个输入端口。如果该端口被禁用,块使用中指定的上界ManipulatedVariables.RateMax它的控制器对象的属性。dmv.max范围必须是负的。

使用相同的边界预测地平线,连接dmv.max一个行向量的信号Nmv元素,Nmv是输出的数量。每个元素指定为被控变量变化率上界。

不同范围的预测地平线k时间k+p1,连接dmv.max一个矩阵信号Ny列和p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后一行的界限申请的其余部分预测地平线。

依赖关系

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

指定运行时最低状态约束,使这个输入端口。如果该端口被禁用,块使用中指定的下界States.Min它的控制器对象的属性。

使用相同的边界预测地平线,连接x.min一个行向量的信号Nx元素,Nx是输出的数量。每个元素指定状态的下界。

不同范围的预测地平线k+ 1,k+p,连接x.min一个矩阵信号Ny列和p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后一行的界限申请的其余部分预测地平线。

依赖关系

要启用这个端口,选择较低的国家限制参数。

指定运行时最大状态约束,使这个输入端口。如果该端口被禁用,块使用中指定的上界States.Max它的控制器对象的属性。

使用相同的边界预测地平线,连接x.max一个行向量的信号Nx元素,Nx是输出的数量。每个元素指定状态的上界。

不同范围的预测地平线k+ 1,k+p,连接x.max一个矩阵信号Ny列和p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后一行的界限申请的其余部分预测地平线。

依赖关系

要启用这个端口,选择上游国家限制参数。

在线调整权重

指定运行时输出变量优化权重,使这个输入端口。如果该端口被禁用,块使用优化权重中指定Weights.OutputVariables它的控制器对象的属性。这些调优权重惩罚偏离参考输出。

如果MPC控制器对象使用恒定的输出调优权重预测地平线,你可以在运行时指定只有恒定输出调整权重。类似地,如果MPC控制器对象使用不同的输出调优权重预测地平线,你可以在运行时指定只有时变输出调整权重

使用常数优化权重预测地平线,连接y.wt一个行向量的信号Ny元素,Ny是输出的数量。每个元素指定一个输出变量非负调优的体重。指定优化权值的更多信息,请参阅调整权重

不同的调优权重预测地平线k+ 1,k+p,连接y.wt一个矩阵信号Ny列和p行。在这里,k当前时间和吗p是预测地平线。每行包含一个预测地平线步骤的优化权重。如果你指定不到p行,优化权重,最后行申请剩下的预测地平线。更多信息在不同权重预测地平线,明白了时变权重设置和约束与MPC设计师

依赖关系

要启用这个端口,选择OV权重参数。

指定运行时被控变量优化权重,使这个输入端口。如果该端口被禁用,块使用优化权重中指定Weights.ManipulatedVariables它的控制器对象的属性。这些调优权重惩罚偏离MV的目标。

使用相同的调优权重预测地平线,连接mv.wt一个行向量的信号Nmv元素,Nmv是操纵变量的数量。每个元素指定为被控变量非负调优的体重。指定优化权值的更多信息,请参阅调整权重

不同的调优权重预测地平线k时间k+p1,连接mv.wt一个矩阵信号Nmv列和p行。在这里,k当前时间和吗p是预测地平线。每行包含一个预测地平线步骤的优化权重。如果你指定不到p行,优化权重,最后行申请剩下的预测地平线。更多信息在不同权重预测地平线,明白了时变权重设置和约束与MPC设计师

依赖关系

要启用这个端口,选择MV权重参数。

指定运行时被控变量率优化权重,使这个输入端口。如果该端口被禁用,块使用优化权重中指定Weights.ManipulatedVariablesRate它的控制器对象的属性。这些调优权重惩罚大变化的控制动作。

使用相同的调优权重预测地平线,连接dmv.wt一个行向量的信号Nmv元素,Nmv是操纵变量的数量。每个元素指定为被控变量非负调优的体重率。指定优化权值的更多信息,请参阅调整权重

不同的调优权重预测地平线k时间k+p1,连接dmv.wt一个矩阵信号Nmv列和p行。在这里,k当前时间和吗p是预测地平线。每行包含一个预测地平线步骤的优化权重。如果你指定不到p行,优化权重,最后行申请剩下的预测地平线。更多信息在不同权重预测地平线,明白了时变权重设置和约束与MPC设计师

依赖关系

要启用这个端口,选择MVRate权重参数。

指定运行时松弛变量优化重量,使这个输入端口和连接一个标量信号。如果该端口被禁用,块使用调优中指定的重量Weights.ECR它的控制器对象的属性。

松弛变量优化重量没有影响,除非你的控制器对象定义的软约束关联ECR值非零。如果有软约束,增加了ecr.wt价值使得这些约束相对困难。控制器然后地方优先减少预测最坏的大小约束违反。

依赖关系

要启用这个端口,选择ECR重量参数。

最初的猜测

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

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

不同的初始猜测预测地平线k时间k+p1,连接mv.init一个矩阵信号Nmv列和p行。在这里,k当前时间和吗p是预测地平线。每一行包含的初始猜测一个预测地平线的一步。如果你指定不到p行,最后一行的猜测申请的其余部分预测地平线。

依赖关系

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

指定初始猜测最优状态的解决方案,使这个输入端口。金宝搏官方网站如果该端口被禁用,块使用最优状态序列计算在前面的控制区间作为初始猜测。

使用相同的初始猜测预测地平线,连接x.init一个矢量信号Nx元素,Nx的状态数。每个元素指定的初始猜测状态。

不同的初始猜测预测地平线k时间k+p1,连接x.init一个矩阵信号Nx列和p行。在这里,k当前时间和吗p是预测地平线。每一行包含的初始猜测一个预测地平线的一步。如果你指定不到p行,最后一行的猜测申请的其余部分预测地平线。

依赖关系

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

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

依赖关系

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

输出

全部展开

要求输出

最优操纵变量控制动作,输出为一个列向量长度的信号Nmv,在那里Nmv是操纵变量的数量。

如果解决收敛于局部最优的解决方案(nlp.status是积极的),然后呢mv包含最优解。

如果解算器达到最大迭代次数没有找到一个最佳的解决方案(nlp.status是零)和Optimization.UseSuboptimalSolution控制器的属性是:

  • 真正的,然后mv包含了次优的解决方案

  • ,然后mv是一样的last_mv

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

额外的输出

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

成本值时才有意义nlp.status输出是负的。

依赖关系

要启用这个端口,选择最优成本参数。

松弛变量,ε,用于约束软化、输出0或积极的标量值。

  • ε= 0,所有软约束满足整个预测地平线。

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

依赖关系

要启用这个端口,选择松弛变量参数。

优化状态,输出是下列之一:

  • 正整数——解决者聚集到一个最优解

  • 0——最大迭代次数达到不收敛于最优解

  • 负整数,解算器失败

依赖关系

要启用这个端口,选择优化状态参数。

最优序列

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

第一个pmv.seq包含从当前时间计算最优操纵变量值k时间k+p1。第一行的mv.seq包含当前的操纵变量值(输出mv)。由于控制器不计算最优控制移动k+p的最后两行mv.seq都是相同的。

依赖关系

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

最优预测模型状态序列,作为一个矩阵信号返回p+ 1行和Nx列,p预测地平线和吗Nx的状态数。

第一行的x.seq包含当前估计状态值,要么从内置的状态估计量或输入自定义状态估计的块x (k | k)。下一个px.seq包含计算最优状态值k+ 1,k+p

依赖关系

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

最优输出变量序列,作为一个矩阵信号返回p+ 1行和Ny列,p预测地平线和吗Ny输出变量的数量。

第一个py.seq从当前时间包含计算最优的输出值k时间k+p1。第一行的y.seq计算基于当前估计状态和当前测量干扰(第一行输入医学博士)。由于控制器不计算最优输出值k+p的最后两行y.seq都是相同的。

依赖关系

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

参数

全部展开

你必须提供一个nlmpc对象,定义了一个非线性MPC控制器。这样,输入的名称nlmpcMATLAB的工作区中对象。

编程使用

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

选择该参数运行控制器使用相同的样品时间预测模型。使用不同的控制器样品时间,明确该参数,并指定样品时间使用使块运行在不同样品的时间参数。

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

编程使用

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

指定该参数运行控制器使用不同的采样时间预测模型。设置这个参数1允许阻止继承采样时间其母子系统。

请注意

MV速度向量的第一个元素(这是当前的最后一个值之间的差别的操纵变量)通常是加权和约束假设MV的最后一个值在样本时间发生在过去的货币政策委员会中指定对象。在执行块时使用不同的采样率,这种假设不再成立,因此,在这种情况下,您必须确保重量和约束定义在控制器正确处理MV速度向量的第一个元素。

依赖关系

要启用该参数,清除使用预测模型示例参数。

编程使用

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

选择这个参数来模拟控制器使用墨西哥人函数生成的使用buildMEX。这样做可以减少控制器的仿真时间。指定名称的墨西哥人功能,使用墨西哥人指定函数名参数。

编程使用

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

使用这个参数指定墨西哥人函数来模拟中使用的名称。创建墨西哥人功能,使用buildMEX函数。

依赖关系

要启用该参数,选择使用墨西哥人加快仿真速度参数。

编程使用

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

General选项卡

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

编程使用

块参数: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