非线性模型预测控制器
非线性模型预测控制器通过非线性预测模型、非线性代价函数和非线性约束计算最优控制移动。有关非线性MPC的更多信息,请参见非线性MPC.
nx
-预测模型状态的数量预测模型状态的数量,指定为正整数。此值存储在维度。N.你mberOfStates
控制器只读属性。创建控制器对象后,无法更改状态的数量。
纽约
-预测模型输出数量预测模型输出的数量,指定为正整数。此值存储在尺寸.Numberofoutputs.
控制器只读属性。创建控制器对象后,无法更改输出的数量。
ν
-预测模型输入的数量预测模型输入的数量,它们都设置为被操纵变量,指定为正整数。此值存储在尺寸.NumberofInputs.
控制器只读属性。创建控制器对象后,无法更改被操纵变量的数量。
mvindex.
-操纵可变指数操纵变量指标,指定为一个正整数向量。此值存储在尺寸.MVINDEX.
控制器只读属性。创建控制器对象后,您无法更改这些索引。
来自mvindex.
那mdindex.
, 和udindex.
必须包含所有整数1
通过N.你, 在哪里N.你是预测模型输入的数量。
mdindex.
-测量扰动指数测量的干扰指数,指定为正整数的向量。此值存储在尺寸..MdIndex.
控制器只读属性。创建控制器对象后,您无法更改这些索引。
来自mvindex.
那mdindex.
, 和udindex.
必须包含所有整数1
通过N.你, 在哪里N.你是预测模型输入的数量。
udindex.
-未训练的障碍指数未测量的扰动指数,指定为正整数的向量。此值存储在尺寸.UDINDEX.
控制器只读属性。创建控制器对象后,您无法更改这些索引。
来自mvindex.
那mdindex.
, 和udindex.
必须包含所有整数1
通过N.你, 在哪里N.你是预测模型输入的数量。
Ts
-样本时间预测模型1
(默认)|正有限标量预测模型采样时间,指定为正有限标量。控制器使用具有采样时间的离散时间模型Ts
用于预测。如果指定连续时间预测模型(Model.IscontInuoustime.
是真的
),然后控制器使用内置隐式梯形规则来离散模型,其中采样时间Ts
.
predictionhorizon.
-预测地平线10
(默认)|正整数预测地平线步骤,指定为正整数。产品的产品predictionhorizon.
和Ts
是预测的时间;也就是说,控制器的观察到来了多远。
ControlHorizon
-控制地平线2
(默认)|正整数|正整数矢量控制视界,指定为以下之一:
正整数,m, 之间1
和P.,包括在内,在哪里P.等于predictionhorizon.
.在这种情况下,控制器计算m有时发生自由控制移动K.通过K.+m-1,并保持控制器输出不变的剩余预测视界步骤K.+m通过K.+P.-1。这里,K.是当前的控制间隔。
正整数向量[m1那m2,…],指定阻塞间隔的长度。默认情况下,控制器进行计算m方块自由移动,哪里m是阻塞间隔的数量。第一个免费移动适用于时间K.通过K.+m1-1,第二个自由举动适用于时间K.+m1通过K.+m1+m2-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
;也就是说,大的样本时间会导致不准确的预测。
如果默认的离散化方法不能为应用程序提供令人满意的预测,则可以指定自己的离散时间预测模型,该模型使用不同的方法,例如多步前向Euler规则。
您可以通过以下方式之一指定状态函数:
当前工作文件夹或MATLAB上的函数的名称®路径,指定为字符串或字符向量
模型。StateFcn =“mystatefunction”;
当前工作文件夹或MATLAB路径中的函数句柄
model.statefcn = @mystatefunction;
匿名函数
model.statefcn = @(x,u,params)mystatefunction(x,u,params)
有关更多信息,请参阅为非线性MPC指定预测模型.
outputfcn.
——输出函数[]
(默认)|字符串|字符向量|功能手柄输出函数,指定为字符串,字符向量或功能句柄。如果预测模型的状态和输出的数量相同,则可以省略outputfcn.
,这意味着所有的状态都是可测量的;也就是说,每个输出对应于一个状态。
笔记
您输出功能不能随时从任何操作变量直接馈通。
您可以通过以下方式之一指定输出功能:
当前工作文件夹或MATLAB路径上的函数的名称,指定为字符串或字符向量
model.outputfcn =.“myoutputfunction”;
当前工作文件夹或MATLAB路径中的函数句柄
model.outputfcn =.@myOutputFunction;
匿名函数
model.outputfcn =.@(x,u,params) myOutputFunction(x,u,params)
有关更多信息,请参阅为非线性MPC指定预测模型.
IsContInuoustime.
—预测模型时域标志真的
(默认)|错误的
指示预测模型时域的标志,指定为以下之一:
真的
- 连续时间预测模型。在这种情况下,控制器在预测期间自动离散模型Ts
.
错误的
- 离散时间预测模型。在这种情况下,Ts
是模型的采样时间。
笔记
IsContInuoustime.
必须与中指定的功能一致模型。StateFcn
和model.outputfcn.
.
如果IsContInuoustime.
是真的
那StateFcn
必须返回当前时间状态对时间的导数。否则StateFcn
必须在下一个控制间隔返回状态。
NumberOfParameters
- 可选模型参数的数量0.
(默认)|非负整数预测模型、自定义成本函数和自定义约束函数使用的可选模型参数数,指定为非负整数。参数的数量包括这些函数使用的所有参数。例如,如果状态函数仅使用参数P1
,约束函数仅使用参数p2
,并且成本函数仅使用参数p3
, 然后NumberOfParameters
是3.
.
州
-状态信息,界限和规模因素状态信息、边界和比例因子,作为结构数组指定N.X元素,N.X是状态数。每个结构元素有以下字段。
最小值
-状态下界-inf.
(默认)|标量|向量状态下限,指定为标量或向量。默认情况下,下限是不约束的。
要在预测视野上使用相同的绑定,请指定标量值。
从时间内改变预测地平线的界限K.+ 1,K.+P.,指定最多的向量P.值。这里,K.是当前的时间和P.是预测的地平线。如果您指定少于P.值,最终绑定用于预测地平线的剩余步骤。
状态范围始终是艰难的限制。
最大限度
-状态上界INF.
(默认)|标量|向量状态上界,指定为标量或向量。缺省情况下,上限不受约束。
要在预测视野上使用相同的绑定,请指定标量值。
从时间内改变预测地平线的界限K.+ 1,K.+P.,指定最多的向量P.值。这里,K.是当前的时间和P.是预测的地平线。如果您指定少于P.值,最终绑定用于预测地平线的剩余步骤。
状态范围始终是艰难的限制。
的名字
- 州名称状态名称,指定为字符串或字符向量。默认状态名称是“X#”
, 在哪里#
是它的状态索引。
单位
- 国家单位“
(默认)|字符串|字符向量状态单位,指定为字符串或字符向量。
比例因子
- 国家规模因子1
(默认)|正有限标量状态比例因子,指定为正有限标量。通常,使用状态的工作范围。指定适当的比例因子可以改善优化的数值条件。
opportVariables.
-输出变量信息、边界和比例因子输出变量(OV)信息,界限和比例因子,指定为结构阵列N.y元素,N.y为输出变量的个数。要访问此属性,可以使用别名机汇
代替opportVariables.
.
每个结构元素有以下字段。
最小值
- OV下界-inf.
(默认)|标量|向量OV下界,指定为标量或向量。默认情况下,此较低界限是不受约束的。
要在预测视野上使用相同的绑定,请指定标量值。
从时间内改变预测地平线的界限K.+ 1,K.+P.,指定最多的向量P.值。这里,K.是当前的时间和P.是预测的地平线。如果您指定少于P.值,最终绑定用于预测地平线的剩余步骤。
最大限度
- OV上限INF.
(默认)|标量|向量OV上限,指定为标量或向量。默认情况下,此上限是不受约束的。
要在预测视野上使用相同的绑定,请指定标量值。
从时间内改变预测地平线的界限K.+ 1,K.+P.,指定最多的向量P.值。这里,K.是当前的时间和P.是预测的地平线。如果您指定少于P.值,最终绑定用于预测地平线的剩余步骤。
地雷
- OV下限柔软1
(默认)|非负有限标量|向量OV下界柔软性,其中较大的ECR值表示较软的约束,指定为非负的有限标量或向量。默认情况下,OV上界为软约束。
要在预测视野上使用相同的ECR值,请指定标量值。
使ECR值在预测视界上随时间变化K.+ 1,K.+P.,指定最多的向量P.值。这里,K.是当前的时间和P.是预测的地平线。如果您指定少于P.值,最终ECR值用于预测范围的剩余步骤。
MAXEC.
- OV上界柔软度1
(默认)|非负有限标量|向量OV上界柔软性,其中较大的ECR值表示较软的约束,指定为非负的有限标量或向量。默认情况下,OV下界为软约束。
要在预测视野上使用相同的ECR值,请指定标量值。
使ECR值在预测视界上随时间变化K.+ 1,K.+P.,指定最多的向量P.值。这里,K.是当前的时间和P.是预测的地平线。如果您指定少于P.值,最终ECR值用于预测范围的剩余步骤。
的名字
- OV名字OV名称,指定为字符串或字符向量。默认的OV名称是“y#”
, 在哪里#
是它的输出指数。
单位
- OV单位“
(默认)|字符串|字符向量OV单元,指定为字符串或字符向量。
比例因子
- OV尺度因子1
(默认)|正有限标量OV比例因子,指定为正有限标量。通常,使用输出变量的操作范围。指定适当的比例因子可以改善数值调节以进行优化。
漫画variables.
-操纵可变信息,界限和规模因子操纵变量(MV)信息、边界和比例因子,指定为结构数组N.m元素,N.m是操纵变量的数目。若要访问此属性,可以使用别名MV
代替漫画variables.
.
每个结构元素有以下字段。
最小值
- MV下界-inf.
(默认)|标量|向量MV下界,指定为标量或向量。默认情况下,此较低界限是不受约束的。
要在预测视野上使用相同的绑定,请指定标量值。
从时间内改变预测地平线的界限K.时间K.+P.-1,指定最多的向量P.值。这里,K.是当前的时间和P.是预测的地平线。如果您指定少于P.值,最终绑定用于预测地平线的剩余步骤。
最大限度
- MV上限INF.
(默认)|标量|向量MV上限,指定为标量或向量。默认情况下,此上限是不受约束的。
要在预测视野上使用相同的绑定,请指定标量值。
从时间内改变预测地平线的界限K.时间K.+P.-1,指定最多的向量P.值。这里,K.是当前的时间和P.是预测的地平线。如果您指定少于P.值,最终绑定用于预测地平线的剩余步骤。
地雷
- MV下界柔软度0.
(默认)|非负标量|向量MV下界柔软性,其中较大的ECR值表示较软的约束,指定为非负标量或向量。默认情况下,MV下界是硬约束。
要在预测视野上使用相同的ECR值,请指定标量值。
使ECR值在预测视界上随时间变化K.时间K.+P.-1,指定最多的向量P.值。这里,K.是当前的时间和P.是预测的地平线。如果您指定少于P.值,最终ECR值用于预测范围的剩余步骤。
MAXEC.
- MV上限0.
(默认)|非负标量|向量MV上限柔软度,其中较大的ECR值表示更软的约束,指定为非负标量或向量。默认情况下,MV上限是硬约束。
要在预测视野上使用相同的ECR值,请指定标量值。
使ECR值在预测视界上随时间变化K.时间K.+P.-1,指定最多的向量P.值。这里,K.是当前的时间和P.是预测的地平线。如果您指定少于P.值,最终ECR值用于预测范围的剩余步骤。
拉特明
- MV变化率下限-inf.
(默认)|非正标量|向量MV变化率下限,指定为非叠数标量或向量。MV变化率定义为MV(K.) -MV(K.-1),在哪里K.是当前的时间。默认情况下,此较低界限是不受约束的。
要在预测视野上使用相同的绑定,请指定标量值。
从时间内改变预测地平线的界限K.时间K.+P.-1,指定最多的向量P.值。这里,K.是当前的时间和P.是预测的地平线。如果您指定少于P.值,最终绑定用于预测地平线的剩余步骤。
拉特马克斯
- MV变化率上限INF.
(默认)|非负标量|向量MV变化率上限,指定为非负标量或向量。MV变化率定义为MV(K.) -MV(K.-1),在哪里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名称是“你#”
, 在哪里#
是它的输入指标。
单位
- MV单位“
(默认)|字符串|字符向量MV单元,指定为字符串或字符向量。
比例因子
- MV比例因子1
(默认)|正有限标量MV比例因子,指定为正有限标量。通常,使用操纵变量的操作范围。指定适当的比例因子可以改善数值调节以进行优化。
测量扰动
-测量干扰信息和规模因素测量的干扰(MD)信息和比例因子,指定为结构阵列N.m元素,N.m是测量障碍的数量。如果您的型号没有测量的干扰,那么测量扰动
是[]
.要访问此属性,可以使用别名医学博士
代替测量扰动
.
每个结构元素有以下字段。
的名字
——MD的名字MD名称,指定为字符串或字符向量。默认MD名称是“你#”
, 在哪里#
是它的输入指标。
单位
- MD单位“
(默认)|字符串|字符向量MD单位,指定为字符串或字符向量。
比例因子
- MD比例因子1
(默认)|正有限标量MD比例因子,指定为正的有限标量。一般使用干扰的操作范围。指定适当的比例因子可以改善数值调节以进行优化。
重量
-标准成本函数调整权重标准成本函数调谐重量,指定为结构。控制器将这些权重应用于缩放变量。因此,调谐重量是无量纲值。
笔记
如果使用定制成本函数使用优化.customcostfcn.
并设置优化。ReplaceStandardCost
来真的
,然后控制器忽略标准成本函数调整权重重量
.
重量
具有以下字段。
漫画variables.
- 操纵可变调谐重量操纵变量调整权值,惩罚偏离MV目标的偏差,指定为非负值的行向量或数组。所有受操纵变量的默认权重为0.
.
要在预测地平线上使用相同的权重,请指定长度的行向量N.m, 在哪里N.m是操纵变量的数量。
从时间从预测地平线上改变调谐重量K.时间K.+P.-1,指定阵列N.m列和最多P.行。这里,K.是当前的时间和P.是预测的地平线。每行包含一个预测地平线步骤的操纵变量调谐权重。如果您指定少于P.行,最终行中的权重用于预测地平线的剩余步骤。
要在运行时指定MV目标,请创建一个nlmpcmoveopt.
对象,并设置其mvtarget.
财产。
操纵变量速率
- 操纵可变速率调谐重量操纵的变速率调整权重,用于惩罚控制移动中的重大更改,指定为行向量或非负值数组。所有操纵的变速率的默认权重为0.1
.
要在预测地平线上使用相同的权重,请指定长度的行向量N.m, 在哪里N.m是操纵变量的数量。
从时间从预测地平线上改变调谐重量K.时间K.+P.-1,指定阵列N.m列和最多P.行。这里,K.是当前的时间和P.是预测的地平线。每行包含一个预测地平线步骤的操纵可变速率调谐权重。如果您指定少于P.行,最终行中的权重用于预测地平线的剩余步骤。
opportVariables.
- 输出变量调谐重量输出变量调优权值,用于惩罚与输出引用的偏差,指定为非负值的行向量或数组。所有输出变量的默认权重为1
.
要在预测地平线上使用相同的权重,请指定长度的行向量N.y, 在哪里N.y为输出变量的个数。
从时间从预测地平线上改变调谐重量K.+ 1,K.+P.,指定一个数组N.y列和最多P.行。这里,K.是当前的时间和P.是预测的地平线。每行包含一个预测地平线步骤的输出变量调谐权重。如果您指定少于P.行,最终行中的权重用于预测地平线的剩余步骤。
eCR.
- 松弛可变调谐重量1E5.
(默认)|正标量松弛可变调谐重量,指定为正标量。
优化
-自定义优化函数和求解器自定义优化函数和求解器,指定为具有以下字段的结构。
CustomCostFcn
-自定义成本函数[]
|字符串|字符向量|函数句柄自定义成本函数,指定为以下之一:
当前工作文件夹或MATLAB路径上的函数的名称,指定为字符串或字符向量
优化.customcostfcn =“mycostfunction”;
当前工作文件夹或MATLAB路径中的函数句柄
优化.customcostfcn = @mycostfunction;
匿名函数
优化.customcostfcn =@(X,U,e,data,params) myCostFunction(X,U,e,data,params);
您的成本函数必须具有以下签名:
功能J = MyCostFunction(x,u,e,数据,params)
有关更多信息,请参阅指定非线性MPC的成本函数.
ReplaceStandardCost
-指示是否替换标准成本函数的标志真的
(默认)|错误的
标志,指示是否使用自定义成本函数替换标准成本函数,指定为以下之一:
真的
—在优化过程中,控制器只使用自定义成本作为目标函数。在这种情况下重量
控制器的属性被忽略。
错误的
—控制器以标准成本与定制成本之和作为优化的目标函数。
如果您不指定自定义成本函数使用CustomCostFcn
,则控制器忽略repalcestandardcost.
.
有关更多信息,请参阅指定非线性MPC的成本函数.
CustomEqConFcn
- 自定义平等约束函数[]
(默认)|字符串|字符向量|功能手柄自定义平等约束函数,指定为以下之一:
当前工作文件夹或MATLAB路径上的函数的名称,指定为字符串或字符向量
优化。CustomEqConFcn =“myeqconfunction”;
当前工作文件夹或MATLAB路径中的函数句柄
优化。CustomEqConFcn = @myEqConFunction;
匿名函数
Optimization.CustomEqConFcn=@(X,U,data,params)myEqConFunction(X,U,data,params);
等式约束函数必须具有签名:
功能CEQ = MyeqConfunction(x,u,数据,p1,p2,...)
有关更多信息,请参阅为非线性MPC指定约束条件.
customineqconfcn.
-自定义不等式约束函数[]
(默认)|字符串|字符向量|功能手柄自定义不等式约束函数,指定为以下函数之一:
当前工作文件夹或MATLAB路径上的函数的名称,指定为字符串或字符向量
优化.CustomIneqConFcn=“myineqconfunction”;
当前工作文件夹或MATLAB路径中的函数句柄
优化.customineqconfcn = @myineqconfunction;
匿名函数
优化.customineqconfcn = @(x,u,e,data,params)myineqconfunction(x,u,e,数据,params);
等式约束函数必须具有签名:
功能cineq = myineqconfunction(x,u,e,数据,params)
有关更多信息,请参阅为非线性MPC指定约束条件.
CustomSolverFcn
- 定制非线性编程求解器[]
(默认)|字符串|字符向量|功能手柄定制非线性编程求解器功能,指定为字符串,字符向量或功能句柄。如果您没有优化工具箱™软件,则必须指定您自己的自定义非线性编程求解器。您可以通过以下方式之一指定自定义求解器功能:
当前工作文件夹或MATLAB路径上的函数的名称,指定为字符串或字符向量
优化。CustomSolverFcn =“myNLPSolver”;
当前工作文件夹或MATLAB路径中的函数句柄
优化.customsolverfcn = @mynlpsolver;
有关更多信息,请参阅配置非线性MPC的优化求解器.
leveroptions.
- 求解器选项fmincon
|[]
求解器选项,指定为选项对象fmincon
或[]
.
如果您有优化工具箱软件,leveroptions.
包含的选项对象fmincon
求解器。
如果你没有优化工具箱,leveroptions.
是[]
.
有关更多信息,请参阅配置非线性MPC的优化求解器.
Runaslinearmpc.
- 指示是否模拟作为线性控制器的标志“离开”
(默认)|“自适应”
|“罚球”
指示是否模拟作为线性控制器的标志,指定为以下之一:
使用任何一种“自适应”
或“罚球”
选项,您的控制器必须没有自定义约束和无自定义成本函数。
将非线性MPC控制器模拟为线性控制器的示例,请参见使用非线性MPC的FED批量反应器的优化和控制.
使用imeryuboptimalsolution.
- 指示次优解决方案是否可接受的标志错误的
(默认)|真的
指示是否可接受次优解决方案的标志,作为逻辑值指定。当非线性规划求解器在未找到解的情况下达到最大迭代次数时(退出标志为0.
),控制器:
冻结MV值,如果使用imeryuboptimalsolution.
是错误的
在最终迭代之后应用求解器发现的次优溶液使用imeryuboptimalsolution.
是真的
要指定最大的迭代次数,请使用优化.SolverOptions.maxiter.
.
mvinterpolationOrder.
- 用于块移动的线性插值顺序0.
(默认)|1
块移动使用的线性插值顺序,指定为以下命令之一:
0.
-使用分段常数操纵变量间隔。
1
- 使用分段线性操纵可变间隔。
如果控件地平线是标量,则控制器忽略了mvinterpolationOrder.
.
有关操纵变量阻塞的更多信息,请参见操纵变量阻塞.
雅各比亚
-模型函数的雅可比矩阵,自定义成本和约束函数雅各比亚的模型函数,以及定制成本和约束函数,指定为结构。每当可以在可用时使用雅各者是最好的做法,因为它们提高了优化效率。如果未为给定函数指定Jacobian,则非线性编程求解器必须在数值上计算Jacobian。
这雅各比亚
结构包含以下字段。
StateFcn
- 雅各的国家功能[]
(默认)|字符串|字符向量|功能手柄状态函数的雅可比矩阵Z.
从模型。StateFcn
,指定为下列之一
当前工作文件夹或MATLAB路径上的函数的名称,指定为字符串或字符向量
模型。StateFcn =“mystatejacobian”;
当前工作文件夹或MATLAB路径中的函数句柄
model.statefcn = @mystatejacobian;
匿名函数
model.statefcn = @(x,u,params)mystatejacobian(x,u,params)
有关更多信息,请参阅为非线性MPC指定预测模型.
outputfcn.
- 输出函数的Jacobian[]
(默认)|字符串|字符向量|功能手柄雅各比奥输出功能y
从model.outputfcn.
,指定为以下之一:
当前工作文件夹或MATLAB路径上的函数的名称,指定为字符串或字符向量
模型。StateFcn =“myoutputjacobian”;
当前工作文件夹或MATLAB路径中的函数句柄
model.statefcn = @myoutputjacobian;
匿名函数
模型。StateFcn = @(x,u,params) myOutputJacobian(x,u,params)
有关更多信息,请参阅为非线性MPC指定预测模型.
CustomCostFcn
- 定制成本函数的Jacobian[]
|字符串|字符向量|函数句柄定制成本函数的雅可比矩阵j
从优化.customcostfcn.
,指定为以下之一:
当前工作文件夹或MATLAB路径上的函数的名称,指定为字符串或字符向量
jacobian.customcostfcn =“myCostJacobian”;
当前工作文件夹或MATLAB路径中的函数句柄
Jacobian.CustomCostFcn=@myCostJacobian;
匿名函数
Jacobian.CustomCostFcn=@(X,U,e,data,params)myCostJacobian(X,U,e,data,params)
您的成本Jacobian函数必须具有签名:
功能[g,gmv,ge] = mycostjacobian(x,u,e,数据,params)
有关更多信息,请参阅指定非线性MPC的成本函数.
CustomEqConFcn
- 雅各比亚的自定义平等约束[]
(默认)|字符串|字符向量|功能手柄雅各比亚自定义平等约束CEQ.
从优化。CustomEqConFcn
,指定为以下之一:
当前工作文件夹或MATLAB路径上的函数的名称,指定为字符串或字符向量
雅可比矩阵。CustomEqConFcn =“myeqconjacobian”;
当前工作文件夹或MATLAB路径中的函数句柄
jacobian.customeqconfcn = @myeqconjacobian;
匿名函数
雅可比矩阵。CustomEqConFcn = @(X,U,数据,参数)myEqConJacobian(X,U,数据,参数);
您的平等约束Jacobian函数必须具有签名:
功能(G, Gmv) = myEqConJacobian (X, U,数据、参数)
有关更多信息,请参阅为非线性MPC指定约束条件.
customineqconfcn.
-自定义不等式约束的雅可比矩阵[]
(默认)|字符串|字符向量|功能手柄雅各比亚的自定义不平等约束C
从优化.Customineqconfcn.
,指定为以下之一:
当前工作文件夹或MATLAB路径上的函数的名称,指定为字符串或字符向量
雅可比矩阵。CustomEqConFcn =“myineqconjacobian”;
当前工作文件夹或MATLAB路径中的函数句柄
jacobian.customeqconfcn = @myineqconjacobian;
匿名函数
jacobian.customeqconfcn = @(x,u,data,params)myineqconjacobian(x,u,data,params);
您的不等式约束Jacobian函数必须具有签名:
功能[g,gmv,ge] = myineqconjacobian(x,u,数据,params)
有关更多信息,请参阅为非线性MPC指定约束条件.
nlmpcmove. |
计算非线性MPC控制器的最优控制动作 |
验证EFCNS |
检查预测模型和自定义功能nlmpc. 或nlmpcmultistage 潜在问题的对象 |
ConvertTompc. |
转换nlmpc. 将对象转换为一个或多个MPC. 对象 |
createParameterBus |
创建万博1manbetx总线对象和配置总线创建者块传递模型参数到非线性MPC控制器块 |
使用四个状态,两个输出和一个输入创建非线性MPC控制器。
nx = 4;纽约= 2;nu = 1;nlobj = nlmpc(nx,ny,nu);
在标准成本函数中,默认情况下,零重量施加到一个或多个OV,因为没有比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.
和名义投入情况
.由于预测模型使用自定义参数,因此必须将此参数传递给验证EFCNS
.
x0 = [0.1; 0.2; -pi / 2; 0.3];U0 = 0.4;validatefcns(nlobj,x0,u0,[],{ts});
model.statefcn是好的。model.outputfcn是好的。分析用户提供的模型,成本和约束函数完成。
使用三种状态,一个输出和四个输入创建非线性MPC控制器。第一两个输入是测量干扰的,第三输入是操纵变量,第四输入是一个未测量的干扰。
nlobj=nlmpc(3,1,“MV”,3,'MD',[1 2],“UD”4);
要查看控制器状态、输出和输入尺寸和索引,请使用方面
属性。
nlobj.dimensions.
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 =“exocstrstatefcnc”;
指定在文件中的预测模型输出函数Exocstrutputfcn.m.
.
nlobj.Model.OutputFcn =“exocstrOutputFcn”;
使用初始操作点验证预测模型功能,作为用于测试和设置未测量的干扰状态的标称条件,X0(3)
, 到0.
.由于该模型具有衡量的干扰,因此您必须将它们传递给验证EFCNS
.
x0 = (311.2639;8.5698;0);情况= [10;298.15;298.15);validateFcns (x0, nlobj情况(3),情况(1:2)');
model.statefcn是好的。model.outputfcn是好的。分析用户提供的模型,成本和约束函数完成。
创建具有六个状态,六个输出和四个输入的非线性MPC控制器。
nx = 6;纽约= 6;nu = 4;nlobj = nlmpc(nx,ny,nu);
在标准成本函数中,默认情况下,零重量施加到一个或多个OV,因为没有比OVS更少。
指定控制器采样时间和视野。
ts = 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;pi/2;0;0;0];u0=零(nu,1);验证EFCNS(nlobj,x0,u0);
model.statefcn是好的。jacobian.statefcn还可以。没有指定输出函数。假设预测模型中的“y = x”。优化.customcostfcn是可以的。优化.customeqconfcn是可以的。分析用户提供的模型,成本和约束函数完成。
创建一个非线性MPC控制器,有四个状态,一个输出变量,一个操纵变量,和一个测量扰动。
nlobj = nlmpc(4,1,“MV”,1,'MD',2);
指定控制器采样时间和视野。
nlobj。PredictionHorizon = 10;nlobj.controlhorizon = 3;
指定预测模型的状态函数。
nlobj.Model.StateFcn =“氧化状态FCN”;
指定预测模型输出函数和输出变尺度因子。
nlobj.model.outputfcn = @(x,u)x(3);nlobj.outputvariables.scalefactor = 0.03;
指定被操纵的变量约束和比例因子。
nlobj.manipuldvariables.min = 0.0704;nlobj.manipuldvariables.max = 0.7042;nlobj.manipuldvariables.scalefactor = 0.6;
指定测量的扰动比例因子。
nlobj.MeasuredDisturbances.ScaleFactor = 0.5;
使用FSOLVE.
功能。
选项= Optimoptions('fsolve'那'展示'那“没有”);ulow = [0.38 0.5];xlow = fsolve(@(x)oxidationstatefcn(x,ulow),[1 0.3.03 1],选项);umedium = [0.24 0.5];XMedium = FSOLVE(@(x)氧化术菌(x,umedium),[1 0.03 1],选项);uhigh = [0.15 0.5];xhigh = fsolve(@(x)oxidationstatefcn(x,uhigh),[1 0.3.03 1],选项);
为每个标称条件创建线性MPC控制器。
mpcobjlow = converttompc(nlobj,xlow,ulow);MPCobjmedium = ConvertTompc(Nlobj,Xmedium,Umedium);mpcobjhigh = converttompc(nlobj,xhigh,uhigh);
您还可以使用标称条件数组创建多个控制器。数组中的行数指定要创建的控制器数。线性控制器以单元阵列的形式返回MPC.
物体。
u = [ulow;umedium;uhigh];x = [xlow;Xmedium;xhigh];mpcobjs = converttompc(nlobj,x,u);
查看mpcobjLow
控制器。
mpcobjLow
MPC对象(在23:19121 13:19:55创建):--------------------------------------------采样时间:1(秒)预测地平线:10控制地平线:3植物模型:------------- 1操纵变量- > |4州||| - > 1测量输出1测量干扰(S) - > |2个输入||| - > 0未测量的输出0未测量干扰(S) - > |1输出| -------------- Indices: (input vector) Manipulated variables: [1 ] Measured disturbances: [2 ] (output vector) Measured outputs: [1 ] Disturbance and Noise Models: Output disturbance model: default (type "getoutdist(mpcobjLow)" for details) Measurement noise model: default (unity gain after scaling) Weights: ManipulatedVariables: 0 ManipulatedVariablesRate: 0.1000 OutputVariables: 1 ECR: 100000 State Estimation: Default Kalman Filter (type "getEstimator(mpcobjLow)" for details) Constraints: 0.0704 <= u1 <= 0.7042, u1/rate is unconstrained, y1 is unconstrained
创建具有六个状态,六个输出和四个输入的非线性MPC控制器。
nx = 6;纽约= 6;nu = 4;nlobj = nlmpc(nx,ny,nu);
在标准成本函数中,默认情况下,零重量施加到一个或多个OV,因为没有比OVS更少。
指定控制器采样时间和视野。
ts = 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).min = 0;nlobj.mv(ct).max = 1;结束
在初始状态下验证预测模型和自定义函数(X0.
)和初始输入(情况
)这是机器人的名字。
x0=[-10;-10;pi/2;0;0;0];u0=零(nu,1);验证EFCNS(nlobj,x0,u0);
model.statefcn是好的。jacobian.statefcn还可以。没有指定输出函数。假设预测模型中的“y = x”。优化.customcostfcn是可以的。优化.customeqconfcn是可以的。分析用户提供的模型,成本和约束函数完成。
计算最优状态和操纵变量轨迹,这些轨迹在信息
.
[〜,〜,Info] = nlmpcmove(nlobj,x0,u0);
在您的自定义成本函数中松弛变量未使用或零加权。所有约束都将很难。
绘制最佳轨迹。
FlyingRobotplotplanning(信息)
最优油耗= 4.712383
使用四个状态,两个输出和一个输入创建非线性MPC控制器。
nlobj = nlmpc(4,2,1);
在标准成本函数中,默认情况下,零重量施加到一个或多个OV,因为没有比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; -pi / 2; 0.3];U0 = 0.4;validatefcns(nlobj,x0,u0,[],{ts});
model.statefcn是好的。model.outputfcn是好的。分析用户提供的模型,成本和约束函数完成。
只有两个植物状态是可衡量的。因此,创建一个扩展的卡尔曼滤波器,用于估计四个工厂状态。它的状态转换功能是定义的pendulumStateFcn.m
其测量功能定义为摆锤测量法
.
EKF = ExtendedKalmanFilter(@ PendulumStateFCN,@ PendulummeArementFCN);
定义仿真的初始条件,初始化扩展卡尔曼滤波状态,并指定初始操纵变量值为零。
x = [0; 0; -pi; 0];Y = [x(1); x(3)];ekf.state = x;mv = 0;
指定输出参考值。
Yref = [0 0];
创建一个nlmpcmoveopt.
对象,并指定采样时间参数。
nloptions = nlmpcmoveopt;nloptions.parameters = {ts};
运行模拟10
秒。在每个控制间隔期间:
使用当前测量值更正先前的预测。
计算最佳控制使用nlmpcmove.
.此函数返回计算的最佳序列nloptions.
。将更新的选项对象传递给nlmpcmove.
在下一个控制区间中提供最优序列的初始猜测。
预测模型状态。
将第一个计算的最佳控制移动到工厂,更新植物状态。
使用白噪声生成传感器数据。
保存植物状态。
时间= 10;xHistory = x;为了CT = 1 :(持续时间/ TS)正确的先前预测XK =正确(EKF,Y);%计算最佳控制移动[mv,nloptions] = nlmpcmove(nlobj,xk,mv,yref,[],nloptions);%预测预测模型状态为下一次迭代预测(EKF,[MV; TS]);%实施第一最佳控制移动x = Pendulumdt0(x,mv,ts);%生成传感器数据Y = X([1 3])+ RANDN(2,1)* 0.01;%拯救植物状态xHistory = [xHistory x];结束
绘制结果状态轨迹。
图形子图(2,2,1)绘图(0:TS:持续时间,Xhistory(1,:))XLabel(“时间”) ylabel (“z”) 标题('购物车位置')子图(2,2,2)绘图(0:TS:持续时间,Xhistory(2,:))XLabel(“时间”) ylabel ('ZDOT') 标题('购物车速度')子图(2,2,3)绘图(0:TS:持续时间,Xhistory(3,:))XLabel(“时间”) ylabel ('theta') 标题(“摆角”)子图(2,2,4)绘图(0:TS:持续时间,Xhistory(4,:))XLabel(“时间”) ylabel ('thetadot') 标题('摆锤')
Tiene UnaVersiónModififada de Este Ejegro。¿desea abrir este ejegro ejemero con modififiones?
有一个对应于MATLAB的代码:
ejecute el comandoinsuciéndoloen la Ventana de comandos de matlab。los navegadores网站没有adminiten comandos de matlab。
您还可以从以下列表中选择网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。