非线性模型预测控制器
非线性模型预测控制器使用非线性预测模型、非线性代价函数和非线性约束计算最优控制移动通过预测水平。有关非线性MPC的更多信息,请参见非线性MPC.
nx
- - - - - -预测模型状态的数量预测模型状态的数目,指定为正整数。该值存储在维度。Nu米berOfStates
控制器只读属性。在创建控制器对象后,不能更改状态的数量。
纽约
- - - - - -预测模型输出的数量预测模型输出的数量,指定为正整数。该值存储在维度。Nu米berOfOutputs
控制器只读属性。在创建控制器对象后,不能更改输出的数量。
ν
- - - - - -预测模型输入的数量预测模型输入的数量,它们都被设置为被操作的变量,指定为正整数。该值存储在维度。Nu米berOfInputs
控制器只读属性。在创建控制器对象后,不能更改操作变量的数量。
mvIndex
- - - - - -被控变量指数被操纵的变量索引,指定为正整数的向量。该值存储在维度。MVIndex
控制器只读属性。在创建控制器对象后,不能更改这些索引。
的索引的组合集mvIndex
,mdIndex
,udIndex
必须包含来自的所有整数1
通过Nu,在那里Nu是预测模型输入的数量。
mdIndex
- - - - - -测量扰动指数测量的扰动指数,指定为正整数的向量。该值存储在维度。MDIndex
控制器只读属性。在创建控制器对象后,不能更改这些索引。
的索引的组合集mvIndex
,mdIndex
,udIndex
必须包含来自的所有整数1
通过Nu,在那里Nu是预测模型输入的数量。
udIndex
- - - - - -无边无际的扰动指数未测量的扰动指数,指定为正整数的向量。该值存储在维度。UDIndex
控制器只读属性。在创建控制器对象后,不能更改这些索引。
的索引的组合集mvIndex
,mdIndex
,udIndex
必须包含来自的所有整数1
通过Nu,在那里Nu是预测模型输入的数量。
Ts
- - - - - -预测模型采样时间1
(默认)|积极的有限的标量预测模型采样时间,指定为一个正的有限标量。该控制器采用具有采样时间的离散时间模型Ts
为预测。如果指定连续时间预测模型(模型。IsContinuousTime
是真正的
),然后使用内置的隐式梯形规则对模型进行离散化,采样时间为Ts
.
PredictionHorizon
- - - - - -预测地平线10
(默认)|正整数预测水平步长,指定为正整数。的产物PredictionHorizon
而且Ts
为预测时间;也就是说,控制器预测未来的距离。
ControlHorizon
- - - - - -控制层2
(默认)|正整数|正整数向量控制水平,指定为以下之一:
正整数,米之间,1
而且p、包容,p等于PredictionHorizon
.在这种情况下,控制器进行计算米有时会出现自由控制动作k通过k+米-1,并保持控制器输出恒定的剩余预测水平步距k+米通过k+p1。在这里,k是当前控制间隔。
正整数向量[米1,米2,…],指定阻塞间隔的长度。默认情况下,控制器进行计算米方块的自由移动,在哪里米是阻塞间隔的数量。第一个自由动作适用于时间k通过k+米1-1,第二个自由移动适用于时间k+米1通过k+米1+米2-1,等等。使用块移动可以提高控制器的鲁棒性。中的值的和ControlHorizon
必须匹配预测视界p.如果指定一个向量,其和为:
小于预测水平,则控制器增加一个阻塞间隔。这个间隔的长度是这样的,以至于间隔长度的和是p.例如,如果p=10
你指定一个控制视界ControlHorizon
=(1 2 3)
,则控制器使用四个具有长度的间隔[1 2 3 4]
.
大于预测视界,则对区间进行截断,直到区间长度之和等于p.例如,如果p=10
你指定一个控制视界ControlHorizon
=[1 2 3 6 7]
,则控制器使用四个具有长度的间隔[1 2 3 4]
.
分段恒定的阻塞移动对于最优路径规划应用来说往往限制太大。为了产生一个限制较少、条件较好的非线性规划问题,可以指定分段线性操作变量阻塞间隔。为此,设置优化。MVInterpolationOrder
你的属性nlmpc
控制器对象1
.
有关操纵变量块如何与不同插值方法一起工作的更多信息,请参见被控变量阻塞.
维
- - - - - -预测模型尺寸信息此属性是只读的。
预测模型尺寸信息,在创建控制器时指定,并存储为具有以下字段的结构。
NumberOfStates
-州的数量预测模型中的状态数,指定为正整数。此值对应于nx
.
NumberOfOutputs
-输出数量预测模型中的输出数,指定为正整数。此值对应于纽约
.
NumberOfInputs
-州的数量预测模型中输入的数量,指定为正整数。此值对应于任意一个nmv
或者是长度的和mvIndex
,mdIndex
,udIndex
.
MVIndex
-操纵变量指标预测模型的操纵变量指标,指定为正整数的向量。此值对应于mvIndex
.
MDIndex
-测量的扰动指数预测模型的测量扰动指数,指定为正整数向量。此值对应于mdIndex
.
UDIndex
-未经测量的扰动指数预测模型的未测扰动指数,指定为正整数向量。此值对应于udIndex
.
模型
- - - - - -预测模型预测模型,指定为具有以下字段的结构。
StateFcn
——状态函数状态函数,指定为字符串、字符向量或函数句柄。对于连续时间预测模型,StateFcn
是状态导数函数。对于离散时间预测模型,StateFcn
是状态更新功能。
如果您的状态函数是连续时间的,控制器自动离散模型使用隐式梯形规则。该方法可以处理中等刚度的模型,其预测精度取决于控制器采样时间Ts
;也就是说,大样本时间会导致预测不准确。
如果默认的离散化方法不能为您的应用程序提供令人满意的预测,您可以指定自己的离散时间预测模型,该模型使用不同的方法,例如多步前向欧拉规则。
你可以用以下方式之一指定你的状态函数:
当前工作文件夹或MATLAB中函数的名称®路径,指定为字符串或字符向量
模型。StateFcn =“myStateFunction”;
当前工作文件夹或MATLAB路径中函数的句柄
模型。StateFcn = @myStateFunction;
匿名函数
模型。myStateFunction(x,u,params)
有关更多信息,请参见指定非线性MPC预测模型.
OutputFcn
——输出函数[]
(默认)| string |字符向量|函数句柄输出函数,指定为字符串、字符向量或函数句柄。如果预测模型的状态数和输出数相同,则可以省略OutputFcn
,这意味着所有的状态都是可测量的;也就是说,每个输出对应一个状态。
请注意
你的输出函数不能在任何时候从任何被操纵的变量直接传递到任何输出。
您可以通过以下方式之一指定输出函数:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
模型。OutputFcn =“myOutputFunction”;
当前工作文件夹或MATLAB路径中函数的句柄
模型。OutputFcn = @myOutputFunction;
匿名函数
模型。myOutputFunction(x,u,params)
有关更多信息,请参见指定非线性MPC预测模型.
IsContinuousTime
—预测模型时域标志真正的
(默认)|假
指示预测模型时域的标志,指定为以下之一:
真正的
-连续时间预测模型。在这种情况下,控制器在使用预测时自动离散模型Ts
.
假
-离散时间预测模型。在这种情况下,Ts
为模型的采样时间。
请注意
IsContinuousTime
必须与模型。StateFcn
而且模型。OutputFcn
.
如果IsContinuousTime
是真正的
,StateFcn
必须返回状态在当前时刻对时间的导数。否则StateFcn
必须在下一个控制间隔返回状态。
NumberOfParameters
—可选的型号参数个数0
(默认)|非负整数预测模型、自定义代价函数和自定义约束函数使用的可选模型参数的个数,指定为非负整数。参数的数量包括这些函数使用的所有参数。例如,如果状态函数只使用参数p1
,约束函数只使用形参p2
,代价函数只使用参数p3
,然后NumberOfParameters
是3.
.
州
- - - - - -状态信息、边界和比例因子的结构数组指定的状态信息、边界和比例因子Nx元素,Nx是状态数。每个结构元素都有以下字段。
最小值
-状态下限负
(默认)|标量|向量状态下界,指定为标量或向量。缺省情况下,下限不受约束。
若要在整个预测范围内使用相同的界限,请指定一个标量值。
随时间改变预测视界的范围k+ 1,k+p,指定一个向量为p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的界限用于预测范围的其余步骤。
状态边界总是硬约束。
马克斯
-状态上限正
(默认)|标量|向量状态上界,指定为标量或向量。缺省情况下,上限不受约束。
若要在整个预测范围内使用相同的界限,请指定一个标量值。
随时间改变预测视界的范围k+ 1,k+p,指定一个向量为p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的界限用于预测范围的其余步骤。
状态边界总是硬约束。
的名字
——国家名称状态名,指定为字符串或字符向量。默认状态名称为“x”#
,在那里#
是其状态索引。
单位
-国家单位""
(默认)| string |字符向量状态单位,指定为字符串或字符向量。
ScaleFactor
-状态尺度因子1
(默认)|正有限标量状态比例因子,指定为正的有限标量。一般情况下,使用运行范围的状态。指定适当的比例因子可以改善优化的数值条件。
OutputVariables
- - - - - -输出变量信息、边界和比例因子的结构数组指定的输出变量(OV)信息、边界和比例因子Ny元素,Ny是输出变量的个数。要访问此属性,可以使用别名机汇
而不是OutputVariables
.
每个结构元素都有以下字段。
最小值
- OV下界负
(默认)|标量|向量OV下界,指定为标量或向量。默认情况下,这个下界是无约束的。
若要在整个预测范围内使用相同的界限,请指定一个标量值。
随时间改变预测视界的范围k+ 1,k+p,指定一个向量为p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的界限用于预测范围的其余步骤。
马克斯
- OV上限正
(默认)|标量|向量OV上界,指定为标量或向量。缺省情况下,该上限不受约束。
若要在整个预测范围内使用相同的界限,请指定一个标量值。
随时间改变预测视界的范围k+ 1,k+p,指定一个向量为p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的界限用于预测范围的其余步骤。
MinECR
- OV下界柔软度1
(默认)|非负有限标量|向量OV下界柔软度,其中较大的ECR值表示较软的约束,指定为非负的有限标量或向量。默认情况下,OV上界是软约束。
要在整个预测范围内使用相同的ECR值,请指定一个标量值。
在预测范围内随时间变化ECR值k+ 1,k+p,指定一个向量为p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的ECR值用于预测范围的其余步骤。
MaxECR
- OV上界柔软度1
(默认)|非负有限标量|向量OV上限柔软度,其中较大的ECR值表示较软的约束,指定为非负的有限标量或向量。默认情况下,OV下界为软约束。
要在整个预测范围内使用相同的ECR值,请指定一个标量值。
在预测范围内随时间变化ECR值k+ 1,k+p,指定一个向量为p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的ECR值用于预测范围的其余步骤。
的名字
- OV名字OV名称,指定为字符串或字符向量。默认的OV名称为“y”#
,在那里#
是它的输出指标。
单位
- OV单位""
(默认)| string |字符向量OV单位,指定为字符串或字符向量。
ScaleFactor
- OV比例因子1
(默认)|正有限标量OV比例因子,指定为正的有限标量。一般情况下,使用输出变量的操作范围。指定适当的比例因子可以改善优化的数值条件。
ManipulatedVariables
- - - - - -操纵变量信息、边界和比例因子的结构数组指定的可操作变量(MV)信息、边界和比例因子Nmv元素,Nmv是被操纵变量的数量。要访问此属性,可以使用别名MV
而不是ManipulatedVariables
.
每个结构元素都有以下字段。
最小值
- MV下限负
(默认)|标量|向量MV下界,指定为标量或向量。默认情况下,这个下界是无约束的。
若要在整个预测范围内使用相同的界限,请指定一个标量值。
随时间改变预测视界的范围k时间k+p-1,指定一个向量p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的界限用于预测范围的其余步骤。
马克斯
- MV上限正
(默认)|标量|向量MV的上限,指定为标量或向量。缺省情况下,该上限不受约束。
若要在整个预测范围内使用相同的界限,请指定一个标量值。
随时间改变预测视界的范围k时间k+p-1,指定一个向量p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的界限用于预测范围的其余步骤。
MinECR
- MV下界柔软度0
(默认)|非负标量|向量MV下界柔软度,其中较大的ECR值表示较软的约束,指定为非负标量或向量。默认情况下,MV下界是硬约束。
要在整个预测范围内使用相同的ECR值,请指定一个标量值。
在预测范围内随时间变化ECR值k时间k+p-1,指定一个向量p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的ECR值用于预测范围的其余步骤。
MaxECR
- MV上限0
(默认)|非负标量|向量MV上限柔软度,其中较大的ECR值表示较软的约束,指定为非负标量或向量。默认情况下,MV上界是硬约束。
要在整个预测范围内使用相同的ECR值,请指定一个标量值。
在预测范围内随时间变化ECR值k时间k+p-1,指定一个向量p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的ECR值用于预测范围的其余步骤。
杀鼠灵
- MV变化率下限负
(默认)|非正标量|向量变化率的下限,指定为非正标量或向量。MV变化率定义为MV(k) -MV(k1),k是当前时间。默认情况下,这个下界是无约束的。
若要在整个预测范围内使用相同的界限,请指定一个标量值。
随时间改变预测视界的范围k时间k+p-1,指定一个向量p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的界限用于预测范围的其余步骤。
RateMax
- MV变化率上限正
(默认)|非负标量|向量变化率的上限,指定为非负标量或向量。MV变化率定义为MV(k) -MV(k1),k是当前时间。默认情况下,这个下界是无约束的。
若要在整个预测范围内使用相同的界限,请指定一个标量值。
随时间改变预测视界的范围k时间k+p-1,指定一个向量p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的界限用于预测范围的其余步骤。
RateMinECR
- MV变化率下界柔软度0
(默认)|非负有限标量|向量MV变化率下界柔软度,其中较大的ECR值表示较软的约束,指定为非负的有限标量或向量。默认情况下,MV变化率下界为硬约束。
要在整个预测范围内使用相同的ECR值,请指定一个标量值。
在预测范围内随时间变化ECR值k时间k+p-1,指定一个向量p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最终ECR值用于预测范围的其余步骤。
RateMaxECR
- MV变化率上限柔软度0
(默认)|非负有限标量|向量MV变化率上限柔软度,其中较大的ECR值表示较软的约束,指定为非负的有限标量或向量。默认情况下,MV变化率上界为硬约束。
要在整个预测范围内使用相同的ECR值,请指定一个标量值。
在预测范围内随时间变化ECR值k时间k+p-1,指定一个向量p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最终ECR值用于预测范围的其余步骤。
的名字
- - - - - - MV的名字MV名称,指定为字符串或字符向量。默认MV名称为“u”#
,在那里#
是它的输入索引。
单位
- MV单位""
(默认)| string |字符向量MV单位,指定为字符串或字符向量。
ScaleFactor
- MV比例因子1
(默认)|正有限标量MV比例因子,指定为正的有限标量。一般情况下,使用被操纵变量的操作范围。指定适当的比例因子可以改善优化的数值条件。
MeasuredDisturbances
- - - - - -测量的扰动信息和尺度因子测量扰动(MD)信息和尺度因子,指定为结构阵列与N医学博士元素,N医学博士是测量到的扰动数。如果你的模型没有测量到干扰,那么MeasuredDisturbances
是[]
.要访问此属性,可以使用别名医学博士
而不是MeasuredDisturbances
.
每个结构元素都有以下字段。
的名字
——MD的名字MD名称,指定为字符串或字符向量。默认MD名称为“u”#
,在那里#
是它的输入索引。
单位
- MD单位""
(默认)| string |字符向量MD单位,指定为字符串或字符向量。
ScaleFactor
- MD比例因子1
(默认)|正有限标量MD比例因子,指定为正的有限标量。一般情况下,使用扰动的工作范围。指定适当的比例因子可以改善优化的数值条件。
权重
- - - - - -标准成本函数调优权重标准成本函数调优权值,指定为结构。控制器将这些权重应用到缩放变量上。因此,调优权值为无量纲值。
请注意
如果你定义一个自定义成本函数使用优化。CustomCostFcn
并设置优化。ReplaceStandardCost
来真正的
,则控制器忽略调优权重的标准代价函数权重
.
权重
具有以下字段。
ManipulatedVariables
-操纵变量调优权重操纵变量调优权值,用于惩罚偏离MV目标的情况,指定为行向量或非负值的数组。所有被操作变量的默认权重为0
.
若要在整个预测水平面上使用相同的权值,请指定长度的行向量Nmv,在那里Nmv是被操纵变量的数量。
在预测范围内随时间变化调整权重k时间k+p-1,指定一个数组Nmv列及以下p行。在这里,k当前时间是和p为预测视界。每行包含一个预测水平步的操纵变量调优权值。如果指定小于p行,最后一行中的权重用于预测水平的其余步骤。
若要在运行时指定MV目标,请创建一个nlmpcmoveopt
对象,并设置其MVTarget
财产。
ManipulatedVariablesRate
-操纵变量率调整权重操纵的可变率调优权值,它惩罚控制移动中的较大更改,指定为行向量或非负值的数组。所有操纵变量的默认权重为0.1
.
若要在整个预测水平面上使用相同的权值,请指定长度的行向量Nmv,在那里Nmv是被操纵变量的数量。
在预测范围内随时间变化调整权重k时间k+p-1,指定一个数组Nmv列及以下p行。在这里,k当前时间是和p为预测视界。每行包含一个预测水平步的操纵变量率调谐权值。如果指定小于p行,最后一行中的权重用于预测水平的其余步骤。
OutputVariables
-输出可变调优权值输出变量调优权值,它惩罚偏离输出引用的情况,指定为行向量或非负值的数组。所有输出变量的默认权重为1
.
若要在整个预测水平面上使用相同的权值,请指定长度的行向量Ny,在那里Ny是输出变量的个数。
在预测范围内随时间变化调整权重k+ 1,k+p,指定一个数组Ny列及以下p行。在这里,k当前时间是和p为预测视界。每行包含一个预测水平步的输出变量调优权重。如果指定小于p行,最后一行中的权重用于预测水平的其余步骤。
ECR
-松弛变量调整权重1 e5
(默认)|阳性标量松弛变量调优权值,指定为正标量。
优化
- - - - - -自定义优化函数和求解器自定义优化函数和求解器,指定为具有以下字段的结构。
CustomCostFcn
-自定义成本函数[]
| string |字符向量|函数句柄自定义成本函数,指定为以下之一:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
优化。CustomCostFcn=“myCostFunction”;
当前工作文件夹或MATLAB路径中函数的句柄
优化。CustomCostFcn=@myCostFunction;
匿名函数
优化。CustomCostFcn=@(X,U,e,data,params) myCostFunction(X,U,e,data,params);
你的成本函数必须有以下签名:
函数J = myCostFunction (X, U, e,数据,参数)
有关更多信息,请参见指定非线性MPC的代价函数.
ReplaceStandardCost
—是否替换标准cost功能标志真正的
(默认)|假
标志,指示是否将标准代价函数替换为自定义代价函数,指定为以下之一:
真正的
—控制器在优化过程中只使用自定义代价作为目标函数。在这种情况下,权重
属性将被忽略。
假
—控制器在优化过程中使用标准成本和定制成本之和作为目标函数。
如果您不指定自定义成本函数使用CustomCostFcn
,则控制器忽略RepalceStandardCost
.
有关更多信息,请参见指定非线性MPC的代价函数.
CustomEqConFcn
-自定义等式约束函数[]
(默认)| string |字符向量|函数句柄自定义相等约束函数,指定为以下之一:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
优化。CustomEqConFcn =“myEqConFunction”;
当前工作文件夹或MATLAB路径中函数的句柄
优化。CustomEqConFcn = @myEqConFunction;
匿名函数
优化。CustomEqConFcn = @(X,U,data,params) myEqConFunction(X,U,data,params);
等式约束函数必须具有以下签名:
函数测查= myEqConFunction (X, U,数据,p1, p2,...)
有关更多信息,请参见为非线性MPC指定约束条件.
CustomIneqConFcn
-自定义不等式约束函数[]
(默认)| string |字符向量|函数句柄自定义不等式约束函数,指定为以下之一:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
优化。CustomIneqConFcn =“myIneqConFunction”;
当前工作文件夹或MATLAB路径中函数的句柄
优化。CustomIneqConFcn = @myIneqConFunction;
匿名函数
优化。myIneqConFunction(X,U,e,data,params);
等式约束函数必须具有以下签名:
函数cineq = myIneqConFunction (X, U, e,数据,参数)
有关更多信息,请参见为非线性MPC指定约束条件.
CustomSolverFcn
-自定义非线性规划求解器[]
(默认)| string |字符向量|函数句柄自定义非线性编程求解器函数,指定为字符串、字符向量或函数句柄。如果没有最优化工具箱™软件,则必须指定自己的自定义非线性编程求解器。您可以通过以下方式之一指定您的自定义求解器函数:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
优化。CustomSolverFcn =“myNLPSolver”;
当前工作文件夹或MATLAB路径中函数的句柄
优化。CustomSolverFcn = @myNLPSolver;
有关更多信息,请参见非线性MPC优化求解器的配置.
SolverOptions
——解决方案fmincon
|[]
的选项,指定为的选项对象fmincon
或[]
.
如果你有优化工具箱软件,SolverOptions
控件的选项对象fmincon
解算器。
如果没有“优化工具箱”,SolverOptions
是[]
.
有关更多信息,请参见非线性MPC优化求解器的配置.
RunAsLinearMPC
—是否模拟为线性控制器的标志“关闭”
(默认)|“自适应”
|“TimeVarying”
标志,指示是否模拟为线性控制器,指定为以下之一:
使用the或the“自适应”
或“TimeVarying”
选项,您的控制器必须没有自定义约束和自定义代价函数。
有关将非线性MPC控制器模拟为线性控制器的示例,请参见基于非线性MPC的馈料堆优化与控制.
UseSuboptimalSolution
-指示次优解决方案是否可接受的标志假
(默认)|真正的
指示次优解决方案是否可接受的标志,指定为逻辑值。当非线性规划求解器达到迭代的最大次数而没有找到一个解时(退出标志为0
),控制器:
冻结MV值如果UseSuboptimalSolution
是假
应用求解器在最后迭代后发现的次优解UseSuboptimalSolution
是真正的
要指定最大迭代次数,请使用Optimization.SolverOptions.MaxIter
.
MVInterpolationOrder
-用于块移动的线性插值顺序0
(默认)|1
块移动所使用的线性插值顺序,指定为以下之一:
0
-使用分段常数操纵变量间隔。
1
-使用分段线性操纵可变区间。
如果控制水平是一个标量,则控制器将忽略MVInterpolationOrder
.
有关操纵变量阻塞的更多信息,请参见被控变量阻塞.
雅可比矩阵
- - - - - -模型函数的雅可比矩阵,自定义代价函数和约束函数模型函数的雅可比矩阵,自定义代价和约束函数,指定为一个结构。只要雅可比矩阵可用,就使用它是最佳实践,因为它们可以提高优化效率。如果你不指定给定函数的雅可比矩阵,非线性规划求解器必须数值计算雅可比矩阵。
的雅可比矩阵
结构包含以下字段。
StateFcn
-状态函数的雅可比矩阵[]
(默认)| string |字符向量|函数句柄状态函数的雅可比矩阵z
从模型。StateFcn
,指定为以下之一
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
模型。StateFcn =“myStateJacobian”;
当前工作文件夹或MATLAB路径中函数的句柄
模型。StateFcn = @myStateJacobian;
匿名函数
模型。mystate - jacobian (x,u,params)
有关更多信息,请参见指定非线性MPC预测模型.
OutputFcn
-输出函数的雅可比矩阵[]
(默认)| string |字符向量|函数句柄输出函数的雅可比矩阵y
从模型。OutputFcn
,指定为以下其中之一:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
模型。StateFcn =“myOutputJacobian”;
当前工作文件夹或MATLAB路径中函数的句柄
模型。StateFcn = @myOutputJacobian;
匿名函数
模型。myOutputJacobian(x,u,params)
有关更多信息,请参见指定非线性MPC预测模型.
CustomCostFcn
-定制成本函数的雅可比矩阵[]
| string |字符向量|函数句柄定制成本函数的雅可比矩阵J
从优化。CustomCostFcn
,指定为以下其中之一:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
雅可比矩阵。CustomCostFcn =“myCostJacobian”;
当前工作文件夹或MATLAB路径中函数的句柄
雅可比矩阵。CustomCostFcn = @myCostJacobian;
匿名函数
雅可比矩阵。CustomCostFcn = @(X,U,e,data,params)
代价雅可比矩阵函数必须有这样的特征:
函数(G, Gmv,通用电气)= myCostJacobian (X, U, e,数据、参数)
有关更多信息,请参见指定非线性MPC的代价函数.
CustomEqConFcn
-自定义等式约束的雅可比矩阵[]
(默认)| string |字符向量|函数句柄自定义等式约束的雅可比矩阵量表信
从优化。CustomEqConFcn
,指定为以下其中之一:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
雅可比矩阵。CustomEqConFcn =“myEqConJacobian”;
当前工作文件夹或MATLAB路径中函数的句柄
雅可比矩阵。CustomEqConFcn = @myEqConJacobian;
匿名函数
雅可比矩阵。CustomEqConFcn = @(X,U,data,params) myEqConJacobian(X,U,data,params);
等式约束雅可比矩阵函数必须有这样的签名:
函数(G, Gmv) = myEqConJacobian (X, U,数据、参数)
有关更多信息,请参见为非线性MPC指定约束条件.
CustomIneqConFcn
-自定义不等式约束的雅可比矩阵[]
(默认)| string |字符向量|函数句柄自定义不等式约束的雅可比矩阵c
从优化。CustomIneqConFcn
,指定为以下其中之一:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
雅可比矩阵。CustomEqConFcn =“myIneqConJacobian”;
当前工作文件夹或MATLAB路径中函数的句柄
雅可比矩阵。CustomEqConFcn = @myIneqConJacobian;
匿名函数
雅可比矩阵。myIneqConJacobian(X,U,data,params);
不等式约束雅可比矩阵函数必须有如下签名:
函数(G, Gmv,通用电气)= myIneqConJacobian (X, U,数据、参数)
有关更多信息,请参见为非线性MPC指定约束条件.
nlmpcmove |
计算非线性MPC控制器的最优控制动作 |
validateFcns |
检验预测模型和自定义函数nlmpc 或nlmpcMultistage 潜在问题的对象 |
convertToMPC |
转换nlmpc 对象转换为一个或多个货币政策委员会 对象 |
createParameterBus |
创建万博1manbetx总线对象,并配置总线创建者块传递模型参数到非线性MPC控制器块 |
创建一个四状态、两个输出和一个输入的非线性MPC控制器。
nx = 4;纽约= 2;ν= 1;nlobj = nlmpc (nx、纽约、ν);
在标准成本函数中,默认情况下对一个或多个OVs应用零权重,因为mv比OVs少。
指定控制器的采样时间和范围。
t = 0.1;nlobj。Ts=Ts;nlobj。PredictionHorizon = 10;nlobj。ControlHorizon = 5;
指定控制器的状态函数,该函数位于文件中pendulumDT0.m
.该离散时间模型集成了中定义的连续时间模型pendulumCT0.m
使用了多步向前的欧拉方法。
nlobj.Model.StateFcn =“pendulumDT0”;nlobj.Model.IsContinuousTime = false;
离散时间状态函数使用一个可选参数,采样时间Ts
,集成连续时间模型。因此,必须将可选参数的数量指定为1
.
nlobj.Model.NumberOfParameters = 1;
指定控制器的输出函数。在本例中,将第一和第三个状态定义为输出。即使这个输出函数不使用可选的采样时间参数,您也必须将该参数指定为输入参数(Ts
).
nlobj.Model.OutputFcn = @(x,u,Ts) [x(1);x (3)];
验证名义状态的预测模型函数x0
和名义上的投入情况
.由于预测模型使用自定义参数,您必须将该参数传递给validateFcns
.
x0 =[0.1; 0.2; 0.3 -π/ 2,);情况= 0.4;validateFcns(nlobj, x0, u0, [], {Ts});
模型。StateFcn就可以了。模型。OutputFcn就可以了。分析用户提供的模型,成本和约束功能完成。
创建一个具有三种状态、一个输出和四个输入的非线性MPC控制器。前两个输入为测量扰动,第三个输入为操纵变量,第四个输入为未测量扰动。
nlobj = nlmpc(3、1、“MV”3,“医学博士”(1 - 2),“UD”4);
要查看控制器状态、输出和输入维度和索引,请使用维
属性。
nlobj。维
ans =结构体字段:NumberOfStates: 3 NumberOfOutputs: 1 NumberOfInputs: 4 MVIndex: 3 MDIndex: [1 2] UDIndex: 4
指定控制器采样时间和范围。
nlobj。Ts=0.5; nlobj.PredictionHorizon = 6; nlobj.ControlHorizon = 3;
指定预测模型状态函数,该函数位于文件中exocstrStateFcnCT.m
.
nlobj.Model.StateFcn =“exocstrStateFcnCT”;
指定预测模型输出函数,该函数在文件中exocstrOutputFcn.m
.
nlobj.Model.OutputFcn =“exocstrOutputFcn”;
以初始工作点为标称条件,验证预测模型函数,测试和设置未测扰动状态,x0 (3)
,0
.因为模型已经测量了干扰,你必须把它们传递给validateFcns
.
x0 = (311.2639;8.5698;0);情况= [10;298.15;298.15);validateFcns (x0, nlobj情况(3),情况(1:2)');
模型。StateFcn就可以了。模型。OutputFcn就可以了。分析用户提供的模型,成本和约束功能完成。
创建六状态,六输出,四输入的非线性MPC控制器。
nx = 6;纽约= 6;ν= 4;nlobj = nlmpc (nx、纽约、ν);
在标准成本函数中,默认情况下对一个或多个OVs应用零权重,因为mv比OVs少。
指定控制器采样时间和范围。
t = 0.4;p = 30;c = 4;nlobj。Ts=Ts;nlobj。PredictionHorizon = p;nlobj。ControlHorizon = c;
指定预测模型状态函数和状态函数的雅可比矩阵。对于本例,使用飞行机器人的模型。
nlobj.Model.StateFcn =“FlyingRobotStateFcn”;nlobj.Jacobian.StateFcn =“FlyingRobotStateJacobianFcn”;
为控制器指定一个自定义代价函数,以取代标准代价函数。
nlobj.Optimization.CustomCostFcn = @(X,U,e,data) Ts*sum(sum(U(1:p,:)));nlobj.Optimization.ReplaceStandardCost = true;
为控制器指定一个自定义约束函数。
nlobj.Optimization.CustomEqConFcn = @(X,U,data) X(end,:)';
在初始状态验证预测模型和自定义函数(x0
)和初始输入(情况
)。
x0 =(-10; -10;π/ 2,0,0,0);情况= 0(ν,1);validateFcns (nlobj x0,情况);
模型。StateFcn就可以了。雅可比矩阵。StateFcn是OK. No output function specified. Assuming "y = x" in the prediction model. Optimization.CustomCostFcn is OK. Optimization.CustomEqConFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.
创建一个具有四个状态、一个输出变量、一个操纵变量和一个测量扰动的非线性MPC控制器。
nlobj = nlmpc (4 1“MV”, 1“医学博士”2);
指定控制器采样时间和范围。
nlobj。PredictionHorizon = 10;nlobj。ControlHorizon = 3;
指定预测模型的状态函数。
nlobj.Model.StateFcn =“oxidationStateFcn”;
指定预测模型输出函数和输出变量比例因子。
nlobj.Model.OutputFcn = @(x,u) x(3);nlobj.OutputVariables.ScaleFactor = 0.03;
指定被操纵的变量约束和比例因子。
nlobj.ManipulatedVariables.Min = 0.0704;nlobj.ManipulatedVariables.Max = 0.7042;nlobj.ManipulatedVariables.ScaleFactor = 0.6;
指定测量的扰动尺度因子。
nlobj.MeasuredDisturbances.ScaleFactor = 0.5;
计算三个线性MPC控制器的状态和输入工作条件fsolve
函数。
选择= optimoptions (“fsolve”,“显示”,“没有”);uLow = [0.38 0.5];xLow = fsolve(@(x) oxidationStateFcn(x,uLow),[1 0.3 0.03 1],options);uMedium = [0.24 0.5];xMedium = fsolve(@(x) oxidationStateFcn(x,uMedium),[1 0.3 0.03 1],options);uHigh = [0.15 0.5];xHigh = fsolve(@(x) oxidationStateFcn(x,uHigh),[1 0.3 0.03 1],options);
为每个标称条件创建线性MPC控制器。
mpcobjLow = convertToMPC (nlobj xLow uLow);mpcobjMedium = convertToMPC (nlobj xMedium uMedium);mpcobjHigh = convertToMPC (nlobj xHigh uHigh);
还可以使用标称条件数组创建多个控制器。数组中的行数指定要创建的数量控制器。的单元阵列返回线性控制器货币政策委员会
对象。
u = [uLow;uMedium;uHigh];x = [xLow;xMedium;xHigh];mpcobjs = convertToMPC (nlobj, x, u);
的属性mpcobjLow
控制器。
mpcobjLow
MPC对象(创建于2021年2月23日13:19:55):---------------------------------------------采样时间:1(秒)预测范围:10控制范围:3植物模型:-------------- 1操作变量(s)—>| 4状态| | |—> 1测量输出(s) 1测量扰动(s)—>| 2输入| | |—> 0未测量输出(s) 0未测量扰动(s)—>| 1输出| --------------指标:(输入矢量)操作变量:[1]测量扰动:[2](输出矢量)测量输出:[1]扰动和噪声模型:输出扰动模型:default(类型"getoutdist(mpcobjLow)"为详细信息)测量噪声模型:default(缩放后的单位增益)权重:controllatedvariables: 0 controllatedvariablesrate: 0.1000 OutputVariables: 1 ECR: 100000状态估计:default卡尔曼滤波器(类型"getEstimator(mpcobjLow)"为详细信息)约束:0.0704 <= u1 <= 0.7042, u1/rate为无约束,y1为无约束
创建六状态,六输出,四输入的非线性MPC控制器。
nx = 6;纽约= 6;ν= 4;nlobj = nlmpc (nx、纽约、ν);
在标准成本函数中,默认情况下对一个或多个OVs应用零权重,因为mv比OVs少。
指定控制器采样时间和范围。
t = 0.4;p = 30;c = 4;nlobj。Ts=Ts;nlobj。PredictionHorizon = p;nlobj。ControlHorizon = c;
指定预测模型状态函数和状态函数的雅可比矩阵。对于本例,使用飞行机器人的模型。
nlobj.Model.StateFcn =“FlyingRobotStateFcn”;nlobj.Jacobian.StateFcn =“FlyingRobotStateJacobianFcn”;
为控制器指定一个自定义代价函数,以取代标准代价函数。
nlobj.Optimization.CustomCostFcn = @(X,U,e,data) Ts*sum(sum(U(1:p,:)));nlobj.Optimization.ReplaceStandardCost = true;
为控制器指定一个自定义约束函数。
nlobj.Optimization.CustomEqConFcn = @(X,U,data) X(end,:)';
指定被操纵变量的线性约束。
为ct = 1:nu nlobj.MV(ct)。最小值= 0;nlobj.MV (ct)。Max = 1;结束
在初始状态验证预测模型和自定义函数(x0
)和初始输入(情况
)。
x0 =(-10; -10;π/ 2,0,0,0);情况= 0(ν,1);validateFcns (nlobj x0,情况);
模型。StateFcn就可以了。雅可比矩阵。StateFcn是OK. No output function specified. Assuming "y = x" in the prediction model. Optimization.CustomCostFcn is OK. Optimization.CustomEqConFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.
中返回的最优状态和操纵的可变轨迹信息
.
[~, ~,信息]= nlmpcmove (x0, nlobj情况);
松弛变量未使用或自定义成本函数中的零加权。所有的约束都将是艰难的。
画出最佳轨迹。
FlyingRobotPlotPlanning(信息)
最佳油耗= 4.712383
创建一个四状态、两个输出和一个输入的非线性MPC控制器。
nlobj = nlmpc (4 2 1);
在标准成本函数中,默认情况下对一个或多个OVs应用零权重,因为mv比OVs少。
指定控制器的采样时间和范围。
t = 0.1;nlobj。Ts=Ts;nlobj。PredictionHorizon = 10;nlobj。ControlHorizon = 5;
指定控制器的状态函数,该函数位于文件中pendulumDT0.m
.该离散时间模型集成了中定义的连续时间模型pendulumCT0.m
使用了多步向前的欧拉方法。
nlobj.Model.StateFcn =“pendulumDT0”;nlobj.Model.IsContinuousTime = false;
预测模型使用了一个可选参数,Ts
,表示样本时间。指定参数的数量。
nlobj.Model.NumberOfParameters = 1;
指定模型的输出函数,传递样本时间参数作为输入参数。
nlobj.Model.OutputFcn = @(x,u,Ts) [x(1);x (3)];
为控制器定义标准约束。
nlobj.Weights.OutputVariables = [3 3];nlobj.Weights.ManipulatedVariablesRate = 0.1;nlobj.OV(1)。最小值= -10;nlobj.OV(1)。Max = 10;nlobj.MV.Min = -100;nlobj.MV.Max = 100;
验证预测模型函数。
x0 =[0.1; 0.2; 0.3 -π/ 2,);情况= 0.4;validateFcns(nlobj, x0, u0, [], {Ts});
模型。StateFcn就可以了。模型。OutputFcn就可以了。分析用户提供的模型,成本和约束功能完成。
只有两种植物状态是可测量的。因此,创建一个扩展的卡尔曼滤波器来估计四种植物状态。它的状态转移函数定义在pendulumStateFcn.m
其测量函数定义在pendulumMeasurementFcn.m
.
EKF = extendedKalmanFilter (@pendulumStateFcn @pendulumMeasurementFcn);
为模拟定义初始条件,初始化扩展卡尔曼滤波状态,并指定初始操作变量值为零。
x =[0, 0, -π;0];y = x (x (1); (3)];卡尔曼滤波器。国家= x;mv = 0;
指定输出参考值。
Yref = [0 0];
创建一个nlmpcmoveopt
对象,并指定采样时间参数。
nloptions = nlmpcmoveopt;nloptions。参数= {Ts};
运行以下模拟10
秒。在每个控制间隔内:
用当前的测量来修正先前的预测。
计算最优控制移动nlmpcmove
.函数返回计算的最优序列nloptions
.将更新的选项对象传递给nlmpcmove
下一个控制区间提供最优序列的初始猜测。
预测模型状态。
应用第一个计算的最优控制移动到设备,更新设备状态。
生成带有白噪声的传感器数据。
拯救植物状态。
时间= 10;xHistory = x;为ct = 1(时间/ Ts):%正确先前的预测xk =正确(卡尔曼滤波器,y);计算最优控制移动[mv, nloptions] = nlmpcmove (yref nlobj xk, mv, [], nloptions);预测下一个迭代的预测模型状态。预测(卡尔曼滤波器,[mv;Ts]);执行第一个最优控制动作x = pendulumDT0 (x, mv, Ts);%生成传感器数据Y = x([1 3]) + randn(2,1)*0.01;%保存工厂状态xHistory = [xHistory x];结束
绘制结果状态轨迹。
图subplot(0:Ts:Duration,xHistory(1,:))“时间”) ylabel (“z”)标题(“车位置”) subplot(2,2,2) plot(0:Ts:Duration,xHistory(2,:)“时间”) ylabel (“zdot”)标题(“车速度”) subplot(2,2,3) plot(0:Ts:Duration,xHistory(3,:)“时间”) ylabel (“θ”)标题(“摆角”) subplot(0:Ts:Duration,xHistory(4,:))“时间”) ylabel (“thetadot”)标题(“摆速度”)
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
您也可以从以下列表中选择网站:
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。