多级非线性MPC控制器
库:
模型预测控制工具箱
描述
的多级非线性MPC控制器块模拟多级非线性模型预测控制器。在每个控制区间,块计算最优控制举措解决非线性规划问题的不同的成本函数和约束定义为不同的预测步骤(阶段)。有关非线性MPC的更多信息,请参阅非线性MPC。
使用这一块,您必须首先创建一个nlmpcMultistage
MATLAB的对象®工作区。
例子
限制
没有一个多级非线性MPC控制器块参数可调。
港口
输入
x- - - - - -输入
向量
目前的预测模型,指定为一个向量长度的信号Nx,在那里Nx预测模型的状态数。由于非线性MPC控制器不执行状态估计,您必须测量或估计当前状态预测模型在每个时间间隔的控制。
last_mv- - - - - -控制信号用于工厂前面的控制区间
向量
控制信号用于控制区间,以前工厂指定为一个向量长度的信号Nmv,在那里Nmv是操纵变量的数量。
请注意
连接last_mvMV信号实际应用于植物在前面的控制区间。通常,这些MV控制器产生的信号值,尽管有时他们可以来自不同的源。例如,如果您的控制器脱机和运行跟踪模式,(也就是说,控制器输出不是推动工厂),然后喂输入实际的工厂last_mv可以帮助实现无扰转移时,控制器将重新上线。
医学博士- - - - - -输入
矩阵行向量|
如果你的控制器预测模型测量干扰你必须启用该端口,连接到一个行向量或矩阵信号。
使用相同的测量干扰值预测地平线,连接医学博士一个行向量的信号N医学博士元素,N医学博士是操纵变量的数量。每个元素指定的值测量的干扰。
不同的干扰预测地平线(预览)k时间k+p,连接医学博士一个矩阵信号N医学博士列和p+ 1行。在这里,k当前时间和吗p是预测地平线。每行包含预测地平线一步的干扰。如果你指定不到p+ 1行,最终干扰用于预测地平线的其余步骤。
依赖关系
要启用这个端口,选择测量的干扰参数。
state.param- - - - - -可选参数
向量
如果您的控制器使用可选参数的预测模型,使这个输入端口,并连接一个矢量信号N点元素,N点状态参数的数量(等于Model.ParameterLength
财产的nlmpcMultistage
控制器对象)。控制器将这些参数传递给它的模型状态转换和州雅可比矩阵函数。
如果你的控制器不使用可选参数,必须禁用state.param端口。
依赖关系
要启用这个端口,选择StateFcn参数参数。
stage.param- - - - - -可选参数
向量
如果您的控制器使用可选参数在任何阶段成本或约束函数,使这个输入端口,并连接一个矢量信号N光伏元素,N光伏是所有阶段的参数函数,总数等于总和(Stages.ParameterLength)
。所有阶段的参数是堆放在参数向量如下。
阶段1(参数向量;参数向量为第二阶段;…参数向量阶段p + 1;]
在每个阶段,控制器通过相关参数向量阶段成本和约束功能活跃。
如果你的控制器不使用可选参数,必须禁用stage.param端口。有关更多信息,请参见nlmpcMultistage
和nlmpcmove
。
依赖关系
要启用这个端口,选择堆叠阶段参数参数。
mv.min- - - - - -最小操纵变量约束
向量|矩阵
指定运行时最小操纵变量约束,使这个输入端口。如果该端口被禁用,块使用中指定的下界ManipulatedVariables.Min
它的控制器对象的属性。
使用相同的边界预测地平线,连接mv.min一个行向量的信号Nmv元素,Nmv是输出的数量。每个元素指定一个操纵变量的下限。
不同范围的预测地平线k时间k+p1,连接mv.min一个矩阵信号Ny列和p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后一行的界限申请的其余部分预测地平线。
依赖关系
要启用这个端口,选择较低的MV限制参数。
mv.max- - - - - -最大操纵变量约束
向量|矩阵
指定运行时最大操纵变量约束,使这个输入端口。如果该端口被禁用,块使用中指定的上界ManipulatedVariables.Max
它的控制器对象的属性。
使用相同的边界预测地平线,连接mv.max一个行向量的信号Nmv元素,Nmv是输出的数量。每个元素指定一个操纵变量的上界。
不同范围的预测地平线k时间k+p1,连接mv.max一个矩阵信号Ny列和p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后一行的界限申请的其余部分预测地平线。
依赖关系
要启用这个端口,选择上层MV限制参数。
dmv.min- - - - - -最小操纵变量率约束
向量|矩阵
指定运行时最小操纵可变利率限制,使这个输入端口。如果该端口被禁用,块使用中指定的下界ManipulatedVariable.RateMin
它的控制器对象的属性。dmv.min范围必须是负的。
使用相同的边界预测地平线,连接dmv.min一个行向量的信号Nmv元素,Nmv是输出的数量。每个元素指定一个操纵变量变化率的下界。
不同范围的预测地平线k时间k+p1,连接dmv.min一个矩阵信号Ny列和p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后一行的界限申请的其余部分预测地平线。
依赖关系
要启用这个端口,选择低MVRate限制参数。
dmv.max- - - - - -最大操纵变量率约束
向量|矩阵
指定运行时最大操纵变量率限制,使这个输入端口。如果该端口被禁用,块使用中指定的上界ManipulatedVariables.RateMax
它的控制器对象的属性。dmv.max范围必须是负的。
使用相同的边界预测地平线,连接dmv.max一个行向量的信号Nmv元素,Nmv是输出的数量。每个元素指定为被控变量变化率上界。
不同范围的预测地平线k时间k+p1,连接dmv.max一个矩阵信号Ny列和p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后一行的界限申请的其余部分预测地平线。
依赖关系
要启用这个端口,选择上层MVRate限制参数。
x.min- - - - - -最低状态约束
向量|矩阵
指定运行时最低状态约束,使这个输入端口。如果该端口被禁用,块使用中指定的下界States.Min
它的控制器对象的属性。
使用相同的边界预测地平线,连接x.min一个行向量的信号Nx元素,Nx是输出的数量。每个元素指定状态的下界。
不同范围的预测地平线k+ 1,k+p,连接x.min一个矩阵信号Ny列和p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后一行的界限申请的其余部分预测地平线。
依赖关系
要启用这个端口,选择较低的国家限制参数。
x.max- - - - - -最大状态约束
向量|矩阵
指定运行时最大状态约束,使这个输入端口。如果该端口被禁用,块使用中指定的上界States.Max
它的控制器对象的属性。
使用相同的边界预测地平线,连接x.max一个行向量的信号Nx元素,Nx是输出的数量。每个元素指定状态的上界。
不同范围的预测地平线k+ 1,k+p,连接x.max一个矩阵信号Ny列和p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后一行的界限申请的其余部分预测地平线。
依赖关系
要启用这个端口,选择上游国家限制参数。
x.terminal- - - - - -终端状态
向量
终端状态,指定为一个向量长度的信号Nx。指定所需的终端状态约束,使这个输入端口。在运行时指定所需的终端状态通过这个输入端口,您必须指定的有限值TerminalState
场的模型
财产的nlmpcMultistage
对象作为参数传递给。指定正
你不需要的国家限制终端价值。在运行时,块忽略任何值对应的输入信号正
值的对象。如果你不指定任何终值条件nlmpcMultistage
对象,信号输入端口在运行时被忽略。
如果没有启用这个港口终端状态约束(如果存在)在运行时不会改变。
依赖关系
要启用这个端口,选择终端状态参数。
z0- - - - - -初始猜测决策变量向量
向量
指定初始猜测决策变量向量,使这个输入端口。如果该端口被禁用,块使用决策变量序列计算在前面的控制区间作为初始猜测。良好的初始猜测是重要的,因为他们帮助解决者更快地收敛到一个解决方案。
z0是一个列向量的长度等于所有决策变量向量的长度之和为每个阶段。最初的猜测必须堆放如下。
阶段1(状态向量的估计;被控变量向量猜第一阶段;被控变量向量率猜第一阶段;%如果使用松弛变量向量猜第一阶段;%如果状态向量估计用于第二阶段;被控变量向量猜第二阶段;被控变量向量率猜第二阶段;%如果猜松弛变量向量用于第二阶段;%如果使用…阶段p状态向量的估计; manipulated variable vector guess for stage p; manipulated variable vector rate guess for stage p; % if used slack variable vector guess for stage p; % if used state vector guess for stage p+1; slack variable vector guess for stage p+1; % if used ]
nlmpcMultistage
和nlmpcmove
。
依赖关系
要启用这个端口,选择最初的猜测参数。
输出
mv- - - - - -最优操纵变量控制行动
列向量
最优操纵变量控制动作,输出为一个列向量长度的信号Nmv,在那里Nmv是操纵变量的数量。
如果解决收敛于局部最优的解决方案(nlp.status是积极的),然后呢mv包含最优解。
如果解算器达到最大迭代次数没有找到一个最佳的解决方案(nlp.status是零)和Optimization.UseSuboptimalSolution
控制器的属性真正的
,然后mv包含了次优的解决方案,否则,mv是一样的last_mv。
如果解决失败(nlp.status是负的),然后呢mv是一样的last_mv。
成本- - - - - -成本目标函数
负的标量
成本目标函数,输出为负的标量信号。成本量化程度控制器实现其目标。
成本价值时,才有意义nlp.status输出是负的。
依赖关系
要启用这个端口,选择最优成本参数。
松弛- - - - - -堆叠松弛变量向量
负的向量
堆叠松弛变量向量,用于约束软化。如果所有元素为零,那么所有软约束满足整个预测地平线。如果任何元素大于零,那么至少有一个软约束违反。
所有阶段堆积的松弛变量向量如下。
第一阶段(松弛变量向量;%如果松弛变量向量用于第二阶段;%如果使用…松弛变量向量阶段p + 1;%如果使用)
nlp.status- - - - - -优化状态
标量
优化状态,输出是下列之一:
正整数——解决者聚集到一个最优解
0
——最大迭代次数达到不收敛于最优解负整数,解算器失败
依赖关系
要启用这个端口,选择优化状态参数。
mv.seq- - - - - -最优操纵变量序列
矩阵
最优操纵变量序列,作为一个矩阵信号返回p+ 1行和Nmv列,p预测地平线和吗Nmv是操纵变量的数量。
第一个p行mv.seq包含从当前时间计算最优操纵变量值k时间k+p1。第一行的mv.seq包含当前的操纵变量值(输出mv)。由于控制器不计算最优控制移动k+p的最后两行mv.seq都是相同的。
依赖关系
要启用这个端口,选择最优控制序列参数。
x.seq- - - - - -最优预测模型的状态序列
矩阵
最优预测模型状态序列,作为一个矩阵信号返回p+ 1行和Nx列,p预测地平线和吗Nx的状态数。
第一行的x.seq包含当前估计状态值,要么从内置的状态估计量或输入自定义状态估计的块x (k | k)。下一个p行x.seq包含计算最优状态值k+ 1,k+p。
依赖关系
要启用这个端口,选择最优状态序列参数。
参数
多级非线性MPC控制器- - - - - -控制器对象
nlmpcMultistage
对象名称
你必须提供一个nlmpcMultistage
对象,定义了一个非线性MPC控制器。这样,输入的名称nlmpc
MATLAB的工作区中对象。
编程使用
块参数:nlmpcobj |
类型:字符串,特征向量 |
默认值:”“ |
使用预测模型示例- - - - - -国旗使用预测模型的样本
(默认)|关闭
选择该参数运行控制器使用相同的样品时间预测模型。使用不同的控制器样品时间,明确该参数,并指定样品时间使用使块运行在不同样品的时间参数。
限制决策变量的数量,提高计算效率,您可以运行控制器的样品时间不同于预测地平线。例如,考虑非线性MPC控制器的情况下运行在10赫兹。如果工厂和控制器样品时间匹配,预测植物的行为十秒钟需要预测地平线的长度为100,并产生大量的决策变量。减少决策变量的数量,你可以使用一个植物样本1秒的时间和长度的预测地平线10。
编程使用
块参数:UseObjectTs |
类型:字符串,特征向量 |
价值观:“关闭” ,“上” |
默认值:“上” |
使块运行在不同样品的时间- - - - - -控制器样品时间
积极有限标量|1
指定该参数运行控制器使用不同的采样时间预测模型。设置这个参数1
允许阻止继承采样时间其母子系统。
请注意
MV速度向量的第一个元素(这是当前的最后一个值之间的差别的操纵变量)通常是加权和约束假设MV的最后一个值在样本时间发生在过去的货币政策委员会中指定对象。在执行块时使用不同的采样率,这种假设不再成立,因此,在这种情况下,您必须确保重量和约束定义在控制器正确处理MV速度向量的第一个元素。
依赖关系
要启用该参数,清除使用预测模型示例参数。
编程使用
块参数:TsControl |
类型:字符串,特征向量 |
默认值:”“ |
使用墨西哥人加快仿真速度- - - - - -为模拟控制器使用墨西哥人功能
(默认)|
选择这个参数来模拟控制器使用墨西哥人函数生成的使用buildMEX
。这样做可以减少控制器的仿真时间。指定名称的墨西哥人功能,使用墨西哥人指定函数名参数。
编程使用
块参数:UseMEX |
类型:字符串,特征向量 |
价值观:“关闭” ,“上” |
默认值:“关闭” |
墨西哥人指定函数名- - - - - -控制器墨西哥人函数名
字符串
使用这个参数指定墨西哥人函数来模拟中使用的名称。创建墨西哥人功能,使用buildMEX
函数。
依赖关系
要启用该参数,选择使用墨西哥人加快仿真速度参数。
编程使用
块参数:mexname |
类型:字符串,特征向量 |
默认值:”“ |
General选项卡
测量的干扰- - - - - -添加测量扰动输入端口
(默认)|
如果你的控制器测量干扰,必须选择添加这个参数医学博士输出端口的块。
编程使用
块参数:md_enabled |
类型:字符串,特征向量 |
价值观:“关闭” ,“上” |
默认值:“关闭” |
StateFcn参数- - - - - -添加状态函数参数的输入端口
(默认)|
如果您的预测模型使用可选参数,您必须选择添加这个参数state.param输入端口。
编程使用
块参数:stateparam_enabled |
类型:字符串,特征向量 |
价值观:“关闭” ,“上” |
默认值:“关闭” |
堆叠阶段参数- - - - - -添加阶段功能参数输入端口
(默认)|
如果你的成本或约束函数使用的参数在任何阶段,你必须选择添加这个参数stage.param输入端口。
编程使用
块参数:stageparam_enabled |
类型:字符串,特征向量 |
价值观:“关闭” ,“上” |
默认值:“关闭” |
最优成本- - - - - -添加成本最优输出端口
(默认)|
选择要添加这个参数成本输出端口的块。
编程使用
块参数:cost_enabled |
类型:字符串,特征向量 |
价值观:“关闭” ,“上” |
默认值:“关闭” |
最优控制序列- - - - - -添加最优控制序列输出端口
(默认)|
选择要添加这个参数mv.seq输出端口的块。
编程使用
块参数:mvseq_enabled |
类型:字符串,特征向量 |
价值观:“关闭” ,“上” |
默认值:“关闭” |
最优状态序列- - - - - -添加最优状态序列输出端口
(默认)|
选择要添加这个参数x.seq输出端口的块。
编程使用
块参数:stateseq_enabled |
类型:字符串,特征向量 |
价值观:“关闭” ,“上” |
默认值:“关闭” |
松弛变量- - - - - -添加松弛变量输出端口
(默认)|
选择要添加这个参数松弛输出端口的块。
编程使用
块参数:slack_enabled |
类型:字符串,特征向量 |
价值观:“关闭” ,“上” |
默认值:“关闭” |
优化状态- - - - - -添加优化状态输出端口
(默认)|
选择要添加这个参数nlp.status输出端口的块。
编程使用
块参数:status_enabled |
类型:字符串,特征向量 |
价值观:“关闭” ,“上” |
默认值:“关闭” |
在线功能选项卡
较低的MV限制- - - - - -添加最低MV约束输入端口
(默认)|
选择要添加这个参数mv.min输入端口。
编程使用
块参数:mv_min |
类型:字符串,特征向量 |
价值观:“关闭” ,“上” |
默认值:“关闭” |
上层MV限制- - - - - -添加最大MV约束输入端口
(默认)|
选择要添加这个参数mv.max输入端口。
编程使用
块参数:mv_max |
类型:字符串,特征向量 |
价值观:“关闭” ,“上” |
默认值:“关闭” |
低MVRate限制- - - - - -添加最低MV率约束输入端口
(默认)|
选择要添加这个参数dmv.min输入端口。
编程使用
块参数:mvrate_min |
类型:字符串,特征向量 |
价值观:“关闭” ,“上” |
默认值:“关闭” |
上层MVRate限制- - - - - -添加最大MV速率约束的输入端口
(默认)|
选择要添加这个参数dmv.max输入端口。
编程使用
块参数:mvrate_max |
类型:字符串,特征向量 |
价值观:“关闭” ,“上” |
默认值:“关闭” |
较低的国家限制- - - - - -添加最小状态约束的输入端口
(默认)|
选择要添加这个参数x.min输入端口。
编程使用
块参数:state_min |
类型:字符串,特征向量 |
价值观:“关闭” ,“上” |
默认值:“关闭” |
上游国家限制- - - - - -添加最大状态约束的输入端口
(默认)|
选择要添加这个参数x.max输入端口。
编程使用
块参数:state_max |
类型:字符串,特征向量 |
价值观:“关闭” ,“上” |
默认值:“关闭” |
终端状态- - - - - -终端状态
(默认)|
选择要添加这个参数x.terminal输入端口。
编程使用
块参数:terminal_state |
类型:字符串,特征向量 |
价值观:“关闭” ,“上” |
默认值:“关闭” |
最初的猜测- - - - - -添加初始猜输入端口
(默认)|
选择要添加这个参数z0输入端口。
请注意
默认情况下,Nonlinar MPC控制器块使用计算最优状态、操纵变量和松弛变量从一个控制区间作为初始猜测下一个控制间隔。
使初始猜测端口只有如果你需要为您的应用程序。
编程使用
块参数:nlp_initialize |
类型:字符串,特征向量 |
价值观:“关闭” ,“上” |
默认值:“关闭” |
扩展功能
C / c++代码生成
使用仿真软件生成C和c++代码®编码器™。金宝app
使用笔记和限制:
的多级非线性MPC控制器支持生成代码金宝app块只使用默认的多级非线性MPC控制器
fmincon
用SQP算法求解。代码生成单精确或不支持定点计算。金宝app
用于代码生成时,非线性MPC控制器表达预测模型功能,不支持阶段成本函数,或约束函数是匿名函数。金宝app
在配置参数对话框,代码生成>界面窗格中,您必须选择以下参数。
金宝app支持非谓语形式的数字——这个参数在默认情况下是选中的。
金宝app支持适应信号当使用嵌入式编码器®——这个参数没有默认选中。
版本历史
介绍了R2021a
第一de MATLAB
Ha事实clic en联合国围绕此时一个埃斯特第一de MATLAB:
Ejecute el第一introduciendolo en la ventana de第一de MATLAB。洛杉矶navegadores网络没有admiten第一de MATLAB。
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。