nlmpc

非线性模型预测控制器

描述

一个非线性模型预测控制器计算最优控制在使用非线性预测模型预测地平线,非线性成本函数和非线性约束。有关非线性MPC的更多信息,请参阅非线性MPC

创建

描述

例子

nlobj= nlmpc (nx,纽约,ν)创建一个nlmpc对象的预测模型nx州,纽约输出,ν输入,所有的输入都是操纵变量。使用这个语法如果你的模型没有测量或无节制的扰动输入。

nlobj= nlmpc (nx,纽约“MV”,mvIndex“医学博士”,mdIndex)创建一个nlmpc对象的预测模型测量扰动输入。指定的输入指标操纵变量,mvIndex测量的干扰,mdIndex

nlobj= nlmpc (nx,纽约“MV”,mvIndex“UD”,udIndex)创建一个nlmpc对象的预测模型有无边无际的扰动输入。指定的输入指标操纵变量和无边无际的障碍,udIndex

例子

nlobj= nlmpc (nx,纽约“MV”,mvIndex“医学博士”,mdIndex“UD”,udIndex)创建一个nlmpc对象的预测模型测量和无边无际的扰动输入。指定的输入指标操纵变量,测量干扰和不可测量的干扰。

输入参数

全部展开

数量的预测模型,指定为一个正整数。你不能改变的状态数在创建控制器对象。

数量的预测模型输出,指定为一个正整数。你不能改变输出的数量在创建控制器对象。

预测模型的输入,这些都是操纵变量,指定为一个正整数。你不能改变操作变量的数量在创建控制器对象。

被操纵的变量指标,指定为一个向量的正整数。你不能改变这些指标在创建控制器对象。这个值存储在Dimensions.MVIndex控制器的财产。

结合的一组指标mvIndex,mdIndex,udIndex必须包含所有整数1通过Nu,在那里Nu是预测模型输入的数量。

干扰指数衡量,指定为一个向量的正整数。你不能改变这些指标在创建控制器对象。这个值存储在Dimensions.MDIndex控制器的财产。

结合的一组指标mvIndex,mdIndex,udIndex必须包含所有整数1通过Nu,在那里Nu是预测模型输入的数量。

无边无际的干扰指标,指定为一个向量的正整数。你不能改变这些指标在创建控制器对象。这个值存储在Dimensions.UDIndex控制器的财产。

结合的一组指标mvIndex,mdIndex,udIndex必须包含所有整数1通过Nu,在那里Nu是预测模型输入的数量。

属性

全部展开

预测模型的样本时间,指定为一个积极的有限的标量。控制器使用离散时间模型与样本Ts为预测。如果你指定一个连续时间预测模型(Model.IsContinuousTime真正的),然后使用内置的控制器可获得模型隐式梯形积分法的样品时间Ts

预测地平线步骤,指定为一个正整数。的产物PredictionHorizonTs预测的时间;也就是说,控制器看起来在未来多远。

控制层,指定为以下之一:

  • 正整数,之间,1p、包容,p等于PredictionHorizon。在这种情况下,控制器计算自由控制动作发生k通过k+1,保持着剩下的预测地平线的控制器输出恒定的步骤k+通过k+p1。在这里,k是当前控制间隔。

  • 向量的正整数(1,2,…),指定阻塞时间间隔的长度。默认情况下,控制器计算块的自由移动,是阻塞的数量的间隔。第一次自由移动适用于时间k通过k+11,第二个免费的移动应用k+1通过k+1+21,等等。使用块运动可以提高控制器的鲁棒性。中的值的总和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)

分段常数阻止动作往往对最优路径规划应用程序限制太多。产生一个限制较少,better-conditioned非线性规划问题,您可以指定分段线性被控变量阻塞时间间隔。为此,设置Optimization.MVInterpolationOrder你的属性nlmpc控制器对象1

对被控变量的更多信息阻塞使用不同的插值方法,明白了被控变量阻塞

这个属性是只读的。

预测模型维度信息,创建时指定控制器和存储结构与以下字段。

许多州在预测模型中,指定为一个正整数。这个值对应于nx

输出数量预测模型,指定为一个正整数。这个值对应于纽约

输入数量预测模型,指定为一个正整数。这个值对应nmv或的长度的总和mvIndex,mdIndex,udIndex

被控变量指标的预测模型,指定为一个向量的正整数。这个值对应于mvIndex

测量扰动指数预测模型,指定为一个向量的正整数。这个值对应于mdIndex

无边无际的扰动指数预测模型,指定为一个向量的正整数。这个值对应于udIndex

预测模型,与以下字段指定为一个结构。

态函数,指定为一个字符串,特征向量,或函数句柄。对于一个连续时间的预测模型,StateFcn是国家导数函数。离散时间预测模型,StateFcn是状态更新功能。

如果你的态函数是连续时间时,控制器自动可使用隐式梯形积分法模型。该方法可以处理适度硬模型,其预测精度取决于控制器样品时间Ts;也就是说,大样本的时间会导致不准确的预测。

如果默认的离散化方法不提供令人满意的预测对于您的应用程序,您可以指定自己的离散时间预测模型,使用不同的方法,如多步向前欧拉规则。

你可以指定你的态函数以以下方式之一:

  • 一个函数的名称在当前工作目录或MATLAB®路径,指定为一个字符串或字符向量

    Model.StateFcn=“myStateFunction”;
  • 处理函数在当前工作目录中或MATLAB路径

    Model.StateFcn=@myStateFunction;
  • 匿名函数

    Model.StateFcn=@(x,u,params) myStateFunction(x,u,params)

有关更多信息,请参见为非线性MPC指定预测模型

输出函数,指定为一个字符串,特征向量,或函数句柄。如果州的数量和输出的预测模型是相同的,你可以省略OutputFcn,这意味着所有国家是可测量的;也就是说,每个输出对应于一个状态。

请注意

你输出函数不能直接引线从任何被控变量在任何时间任何输出。

您可以指定您的输出函数以以下方式之一:

  • 函数的名字在当前工作目录或MATLAB路径,指定为字符串或字符向量

    Model.OutputFcn=“myOutputFunction”;
  • 处理函数在当前工作目录中或MATLAB路径

    Model.OutputFcn=@myOutputFunction;
  • 匿名函数

    Model.OutputFcn=@(x,u,params) myOutputFunction(x,u,params)

有关更多信息,请参见为非线性MPC指定预测模型

国旗表明时域预测模型,指定为以下之一:

  • 真正的——连续时间预测模型。在这种情况下,控制器可自动模型在预测使用Ts

  • ——离散时间预测模型。在这种情况下,Ts的样品时间模型。

请注意

IsContinuousTime必须符合指定的函数Model.StateFcnModel.OutputFcn

使用的可选的模型参数数量预测模型,定义代价函数,和自定义约束函数,指定为一个非负整数。参数的数量包括所有这些函数使用的参数。例如,如果状态函数只使用参数p1,约束函数仅使用参数p2,成本函数只使用参数p3,然后NumberOfParameters3

状态信息、范围和规模因素,指定为一个结构数组Nx元素,Nx的状态数。每个结构元素有以下字段。

州下界,指定为一个标量或矢量。默认情况下,下界是不受限制。

使用相同的绑定在预测地平线,指定一个标量值。

不同的绑定预测地平线k+ 1,k+p,指定一个向量的p值。在这里,k当前时间和吗p是预测地平线。如果你指定不到p值,最后必然是用于预测地平线的其余步骤。

国家边界总是硬约束。

州上界,指定为一个标量或矢量。默认情况下,上限是不受限制。

使用相同的绑定在预测地平线,指定一个标量值。

不同的绑定预测地平线k+ 1,k+p,指定一个向量的p值。在这里,k当前时间和吗p是预测地平线。如果你指定不到p值,最后必然是用于预测地平线的其余步骤。

国家边界总是硬约束。

国家名称,指定为字符串或字符向量。的名字是默认状态“x”#,在那里#其状态指数。

国家单位,指定为字符串或字符向量。

国家尺度因子,指定为一个积极的有限的标量。一般来说,使用操作的状态。指定合适的比例因子可以提高数值条件优化。

输出变量(OV)信息、范围和规模因素,指定为一个结构数组Ny元素,Ny输出变量的数量。要访问该属性,您可以使用别名机汇而不是OutputVariables

每个结构元素有以下字段。

OV下界,指定为一个标量或矢量。默认情况下,这个下界是不受限制。

使用相同的绑定在预测地平线,指定一个标量值。

不同的绑定预测地平线k+ 1,k+p,指定一个向量的p值。在这里,k当前时间和吗p是预测地平线。如果你指定不到p值,最后必然是用于预测地平线的其余步骤。

OV上界,指定为一个标量或矢量。默认情况下,这个上限是不受限制。

使用相同的绑定在预测地平线,指定一个标量值。

不同的绑定预测地平线k+ 1,k+p,指定一个向量的p值。在这里,k当前时间和吗p是预测地平线。如果你指定不到p值,最后必然是用于预测地平线的其余步骤。

OV下界柔软,一个更大的ECR值表示软约束,指定为非负有限标量或矢量。默认情况下,OV上界是软约束。

使用相同的ECR值预测地平线,指定一个标量值。

改变ECR值对预测地平线k+ 1,k+p,指定一个向量的p值。在这里,k当前时间和吗p是预测地平线。如果你指定不到p值,最后ECR值用于预测地平线的其余步骤。

OV上界柔软,一个更大的ECR值表示软约束,指定为非负有限标量或矢量。默认情况下,OV下界是软约束。

使用相同的ECR值预测地平线,指定一个标量值。

改变ECR值对预测地平线k+ 1,k+p,指定一个向量的p值。在这里,k当前时间和吗p是预测地平线。如果你指定不到p值,最后ECR值用于预测地平线的其余步骤。

OV名称指定为字符串或字符向量。默认OV叫“y”#,在那里#是它的产出指数。

OV单位,指定为字符串或字符向量。

机汇比例因子,指定为一个积极的有限的标量。一般来说,使用操作范围的输出变量。指定合适的比例因子可以提高数值条件优化。

操纵变量(MV)信息、范围和规模因素,指定为一个结构数组Nmv元素,Nmv是操纵变量的数量。要访问该属性,您可以使用别名MV而不是ManipulatedVariables

每个结构元素有以下字段。

MV下界,指定为一个标量或矢量。默认情况下,这个下界是不受限制。

使用相同的绑定在预测地平线,指定一个标量值。

不同的绑定预测地平线k时间k+p1、指定的向量p值。在这里,k当前时间和吗p是预测地平线。如果你指定不到p值,最后必然是用于预测地平线的其余步骤。

MV上界,指定为一个标量或矢量。默认情况下,这个上限是不受限制。

使用相同的绑定在预测地平线,指定一个标量值。

不同的绑定预测地平线k时间k+p1、指定的向量p值。在这里,k当前时间和吗p是预测地平线。如果你指定不到p值,最后必然是用于预测地平线的其余步骤。

MV下界柔软,一个更大的ECR值表示软约束,指定为负的标量或矢量。默认情况下,MV下界是硬约束。

使用相同的ECR值预测地平线,指定一个标量值。

改变ECR值对预测地平线k时间k+p1、指定的向量p值。在这里,k当前时间和吗p是预测地平线。如果你指定不到p值,最后ECR值用于预测地平线的其余步骤。

MV上界柔软,一个更大的ECR值表示软约束,指定为负的标量或矢量。默认情况下,MV上界是硬约束。

使用相同的ECR值预测地平线,指定一个标量值。

改变ECR值对预测地平线k时间k+p1、指定的向量p值。在这里,k当前时间和吗p是预测地平线。如果你指定不到p值,最后ECR值用于预测地平线的其余步骤。

MV变化率下界,指定为负值的标量或矢量。MV的改变被定义为MV(k)- - -MV(k1),k是当前时间。默认情况下,这个下界是不受限制。

使用相同的绑定在预测地平线,指定一个标量值。

不同的绑定预测地平线k时间k+p1、指定的向量p值。在这里,k当前时间和吗p是预测地平线。如果你指定不到p值,最后必然是用于预测地平线的其余步骤。

MV变化率上界,指定为负的标量或矢量。MV的改变被定义为MV(k)- - -MV(k1),k是当前时间。默认情况下,这个下界是不受限制。

使用相同的绑定在预测地平线,指定一个标量值。

不同的绑定预测地平线k时间k+p1、指定的向量p值。在这里,k当前时间和吗p是预测地平线。如果你指定不到p值,最后必然是用于预测地平线的其余步骤。

MV变化率下界柔软,一个更大的ECR值表示软约束,指定为非负有限标量或矢量。默认情况下,MV变化率下界是硬约束。

使用相同的ECR值预测地平线,指定一个标量值。

改变ECR值对预测地平线k时间k+p1、指定的向量p值。在这里,k当前时间和吗p是预测地平线。如果你指定不到p值,最后使用ECR值预测地平线的其余步骤。

MV变化率上界柔软,一个更大的ECR值表示软约束,指定为非负有限标量或矢量。默认情况下,MV变化率上界是硬约束。

使用相同的ECR值预测地平线,指定一个标量值。

改变ECR值对预测地平线k时间k+p1、指定的向量p值。在这里,k当前时间和吗p是预测地平线。如果你指定不到p值,最后使用ECR值预测地平线的其余步骤。

MV名称指定为字符串或字符向量。默认的MV的名字是“u”#,在那里#是它的输入指标。

MV单位,指定为字符串或字符向量。

MV比例因子,指定为一个积极的有限的标量。一般来说,使用操作操纵变量的范围。指定合适的比例因子可以提高数值条件优化。

测量扰动(MD)信息和规模因素,指定为一个结构数组N医学博士元素,N医学博士是测量扰动的数量。如果你的模型没有测量干扰,那么MeasuredDisturbances[]。要访问该属性,您可以使用别名医学博士而不是MeasuredDisturbances

每个结构元素有以下字段。

医学名称,指定为字符串或字符向量。默认的MD的名字是“u”#,在那里#是它的输入指标。

MD单位,指定为字符串或字符向量。

医学博士比例因子,指定为一个积极的有限的标量。一般来说,使用操作范围的干扰。指定合适的比例因子可以提高数值条件优化。

标准成本优化权重函数,指定为一个结构。控制器适用于这些权重比例变量。因此,优化权重是无量纲值。

请注意

如果你定义一个自定义代价函数使用Optimization.CustomCostFcn并设置Optimization.ReplaceStandardCost真正的,那么控制器忽略了标准成本函数优化权重权重

权重有以下字段。

被控变量优化权重,这惩罚MV的偏离目标,指定为一个行向量或负的值的数组。所有操纵变量的默认重量0

使用相同的权重预测地平线,指定一个行向量的长度Nmv,在那里Nmv是操纵变量的数量。

不同的调优权重预测地平线k时间k+p1、指定数组Nmv列和p行。在这里,k当前时间和吗p是预测地平线。每行包含操纵变量优化权重预测地平线的一步。如果你指定不到p行,最后一行的权重是用于预测地平线的其余步骤。

在运行时指定MV目标,创建一个nlmpcmoveopt对象,并设置其MVTarget财产。

操纵可变利率调整权重,这惩罚发生巨大变化,控制措施,指定为一个行向量或负的值的数组。所有被控变量的默认体重率0.1

使用相同的权重预测地平线,指定一个行向量的长度Nmv,在那里Nmv是操纵变量的数量。

不同的调优权重预测地平线k时间k+p1、指定数组Nmv列和p行。在这里,k当前时间和吗p是预测地平线。每行包含被控变量率优化权重预测地平线的一步。如果你指定不到p行,最后一行的权重是用于预测地平线的其余步骤。

输出变量优化权重,这惩罚偏离输出引用指定为一个行向量或负的值的数组。所有输出变量的默认重量1

使用相同的权重预测地平线,指定一个行向量的长度Ny,在那里Ny输出变量的数量。

不同的调优权重预测地平线k+ 1,k+p,指定数组Ny列和p行。在这里,k当前时间和吗p是预测地平线。每行包含一个预测地平线步骤的输出变量优化权重。如果你指定不到p行,最后一行的权重是用于预测地平线的其余步骤。

松弛变量调整体重,指定为一个积极的标量。

自定义优化函数和求解,与以下字段指定为一个结构。

自定义代价函数,指定为以下之一:

  • 函数的名字在当前工作目录或MATLAB路径,指定为字符串或字符向量

    Optimization.CustomCostFcn=“myCostFunction”;
  • 处理函数在当前工作目录中或MATLAB路径

    Optimization.CustomCostFcn=@myCostFunction;
  • 匿名函数

    Optimization.CustomCostFcn=@(X,U,e,data,params) myCostFunction(X,U,e,data,params);

你的成本函数必须有签名:

函数J = myCostFunction (X, U, e,数据,参数)

有关更多信息,请参见为非线性MPC指定成本函数

标志指示是否要替换的标准成本函数定义代价函数,指定为以下之一:

  • 真正的——控制器使用单独定制成本作为优化目标函数。在这种情况下,权重控制器的属性将被忽略。

  • 控制器使用标准成本和定制成本之和作为目标函数在优化。

如果你不指定一个自定义代价函数使用CustomCostFcn忽略,那么控制器RepalceStandardCost

有关更多信息,请参见为非线性MPC指定成本函数

自定义等式约束函数,指定为以下之一:

  • 函数的名字在当前工作目录或MATLAB路径,指定为字符串或字符向量

    Optimization.CustomEqConFcn=“myEqConFunction”;
  • 处理函数在当前工作目录中或MATLAB路径

    Optimization.CustomEqConFcn=@myEqConFunction;
  • 匿名函数

    Optimization.CustomEqConFcn=@(X,U,data,params) myEqConFunction(X,U,data,params);

你的等式约束函数必须有签名:

函数测查= myEqConFunction (X, U,数据,p1, p2,)

有关更多信息,请参见为非线性MPC指定约束

定制的不等式约束函数,指定为以下之一:

  • 函数的名字在当前工作目录或MATLAB路径,指定为字符串或字符向量

    Optimization.CustomIneqConFcn=“myIneqConFunction”;
  • 处理函数在当前工作目录中或MATLAB路径

    Optimization.CustomIneqConFcn=@myIneqConFunction;
  • 匿名函数

    Optimization.CustomIneqConFcn=@(X,U,e,data,params) myIneqConFunction(X,U,e,data,params);

你的等式约束函数必须有签名:

函数cineq = myIneqConFunction (X, U, e,数据,参数)

有关更多信息,请参见为非线性MPC指定约束

自定义非线性规划求解函数,指定为一个字符串,特征向量,或函数句柄。如果你没有优化工具箱™软件,您必须指定您自己的自定义非线性规划求解器进行求解。您可以指定您的自定义解决函数以以下方式之一:

  • 函数的名字在当前工作目录或MATLAB路径,指定为字符串或字符向量

    优化。CustomSolverFcn =“myNLPSolver”;
  • 处理函数在当前工作目录中或MATLAB路径

    优化。CustomSolverFcn = @myNLPSolver;

有关更多信息,请参见为非线性MPC配置优化解算器

解算器选项,指定对象作为一个选项fmincon[]

如果你有优化工具箱软件,SolverOptions对象包含一个选项fmincon解算器。

如果你没有优化工具箱,SolverOptions[]

有关更多信息,请参见为非线性MPC配置优化解算器

标志指示是否模拟线性控制器,指定为以下之一:

  • “关闭”——模拟控制器非线性预测模型的非线性控制器。

  • “自适应”——为每个控制区间,得到线性模型从指定的非线性状态和输出函数在当前的操作点和使用预测地平线。可以确定一个适应性MPC控制器提供了类似的性能的非线性控制器,使用这个选项。适应性MPC的更多信息,请参阅自适应政策委员会

  • “TimeVarying”——为每个控制区间,p线性模型是获得指定的非线性状态和输出功能p操作点预测从先前的间隔,每个预测地平线上一个步骤。来确定一个线性时变MPC控制器提供了类似的性能的非线性控制器,使用这个选项。时变MPC的更多信息,请参阅时变MPC

使用的“自适应”“TimeVarying”选项,控制器必须没有自定义约束和自定义代价函数。

为例,模拟非线性MPC控制器的线性控制器,明白了优化和控制使用非线性MPC馈料式反应堆

标志指示是否一个理想的解决方案是可以接受的,指定为一个逻辑值。当非线性规划解算器达到最大迭代次数(退出标志是没有找到一个解决方案0),控制器:

  • MV值如果结冰UseSuboptimalSolution

  • 应用的理想解决方案解决者最后的迭代后如果发现UseSuboptimalSolution真正的

指定的最大迭代数,使用Optimization.SolverOptions.MaxIter

所使用的线性插值顺序块移动时,指定为以下之一:

  • 0——使用分段常数操纵变量区间。

  • 1——使用分段线性操纵变量区间。

如果控制地平线是一个标量,那么控制器忽略MVInterpolationOrder

有关被控变量的更多信息阻塞,明白了被控变量阻塞

雅克比的模型函数和自定义成本和约束函数,指定为一个结构。最佳实践是使用雅克比时是可用的,因为他们提高优化效率。如果你不指定一个雅可比矩阵对于一个给定的函数,非线性规划解算器必须数值计算雅可比矩阵。

雅可比矩阵结构包含以下字段。

雅可比矩阵的函数zModel.StateFcn,指定为以下之一

  • 函数的名字在当前工作目录或MATLAB路径,指定为字符串或字符向量

    Model.StateFcn=“myStateJacobian”;
  • 处理函数在当前工作目录中或MATLAB路径

    Model.StateFcn=@myStateJacobian;
  • 匿名函数

    Model.StateFcn=@(x,u,params) myStateJacobian(x,u,params)

有关更多信息,请参见为非线性MPC指定预测模型

雅可比矩阵的输出函数yModel.OutputFcn,指定为以下之一:

  • 函数的名字在当前工作目录或MATLAB路径,指定为字符串或字符向量

    Model.StateFcn=“myOutputJacobian”;
  • 处理函数在当前工作目录中或MATLAB路径

    Model.StateFcn=@myOutputJacobian;
  • 匿名函数

    Model.StateFcn=@(x,u,params) myOutputJacobian(x,u,params)

有关更多信息,请参见为非线性MPC指定预测模型

雅可比矩阵的自定义代价函数JOptimization.CustomCostFcn,指定为以下之一:

  • 函数的名字在当前工作目录或MATLAB路径,指定为字符串或字符向量

    雅可比矩阵。CustomCostFcn =“myCostJacobian”;
  • 处理函数在当前工作目录中或MATLAB路径

    雅可比矩阵。CustomCostFcn = @myCostJacobian;
  • 匿名函数

    雅可比矩阵。CustomCostFcn = @ (X, U, e,数据,params) myCostJacobian (X, U, e,数据、参数)

你的成本可比矩阵函数必须有签名:

函数(G, Gmv,通用电气)= myCostJacobian (X, U, e,数据、参数)

有关更多信息,请参见为非线性MPC指定成本函数

雅可比矩阵的自定义等式约束量表信Optimization.CustomEqConFcn,指定为以下之一:

  • 函数的名字在当前工作目录或MATLAB路径,指定为字符串或字符向量

    雅可比矩阵。CustomEqConFcn =“myEqConJacobian”;
  • 处理函数在当前工作目录中或MATLAB路径

    雅可比矩阵。CustomEqConFcn = @myEqConJacobian;
  • 匿名函数

    雅可比矩阵。CustomEqConFcn = @ (X, U,数据,params) myEqConJacobian (X, U,数据,参数);

你的雅可比矩阵等式约束函数必须有签名:

函数(G, Gmv) = myEqConJacobian (X, U,数据、参数)

有关更多信息,请参见为非线性MPC指定约束

雅可比矩阵的定制的不等式约束cOptimization.CustomIneqConFcn,指定为以下之一:

  • 函数的名字在当前工作目录或MATLAB路径,指定为字符串或字符向量

    雅可比矩阵。CustomEqConFcn =“myIneqConJacobian”;
  • 处理函数在当前工作目录中或MATLAB路径

    雅可比矩阵。CustomEqConFcn = @myIneqConJacobian;
  • 匿名函数

    雅可比矩阵。CustomEqConFcn = @ (X, U,数据,params) myIneqConJacobian (X, U,数据,参数);

你的雅可比矩阵不等式约束函数必须有签名:

函数(G, Gmv,通用电气)= myIneqConJacobian (X, U,数据、参数)

有关更多信息,请参见为非线性MPC指定约束

对象的功能

nlmpcmove 计算最优控制行动非线性MPC控制器
validateFcns 分析预测模型和自定义的函数nlmpc对象的潜在问题
convertToMPC 转换nlmpc到一个或多个对象货币政策委员会对象
createParameterBus 创建金宝app总线对象和配置总线创造者块传递模型参数非线性MPC控制器

例子

全部折叠

创建一个非线性MPC控制器有四个州,两个输出,和一个输入。

nx = 4;纽约= 2;ν= 1;nlobj = nlmpc (nx、纽约、ν);
在标准成本函数、零重量默认应用到一个或多个ov因为有MVs比ov少。

指定控制器的样品时间和视野。

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。Nu米berOfParameters = 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,情况,[],{Ts});
Model.StateFcn是OK. Model.OutputFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.

创建一个非线性MPC控制器三个州,一个输出,和四个输入。前两个输入测量干扰,第三个输入是操纵变量,和第四输入是一个无边无际的干扰。

nlobj = nlmpc (3、1、“MV”3,“医学博士”(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 =“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)');
Model.StateFcn是OK. Model.OutputFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.

创建非线性MPC控制器与六个州,六个输出,和四个输入。

nx = 6;纽约= 6;ν= 4;nlobj = nlmpc (nx、纽约、ν);
在标准成本函数、零重量默认应用到一个或多个ov因为有MVs比ov少。

指定控制器样品时间和视野。

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,情况);
Model.StateFcn是OK. Jacobian.StateFcn is 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。最小值= 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)(0.3 - 0.03 1)选项);uMedium = (0.24 - 0.5);xMedium = fsolve (@ (x) oxidationStateFcn (x, uMedium)(0.3 - 0.03 1)选项);uHigh = (0.15 - 0.5);xHigh = fsolve (@ (x) oxidationStateFcn (x, uHigh)(0.3 - 0.03 1)选项);

创建这些名义上的线性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对象(创建于2020年- 2月28日23:32:33):- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -采样时间:1(秒)预测地平线:10控制层:3工厂模式:- - - - - - - - - - - - - - - - 1操纵变量(s) - - > | 4州| | | - - > 1测量输出(s)测量扰动(s) - - >输入| 2 | | | - - > 0无边无际的输出(s) 0无边无际的干扰(s) - - > | | 1输出- - - - - - - - - - - - - - - -指数:(输入向量)操纵变量:[1]测量干扰:[2](输出向量)测量输出:[1]干扰和噪声模型:输出扰动模型:默认(类型”getoutdist (mpcobjLow)”)测量噪声模型:默认(缩放后单位增益)重量:ManipulatedVariables: 0 ManipulatedVariablesRate: 0.1000 OutputVariables: 1 ECR: 100000状态估计:默认的卡尔曼滤波器类型(“getEstimator (mpcobjLow)”)约束:0.0704 < = u1 < = 0.7042, u1 /率无约束,日元是不受限制

创建非线性MPC控制器与六个州,六个输出,和四个输入。

nx = 6;纽约= 6;ν= 4;nlobj = nlmpc (nx、纽约、ν);
在标准成本函数、零重量默认应用到一个或多个ov因为有MVs比ov少。

指定控制器样品时间和视野。

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:νnlobj.MV (ct)。最小值= 0;nlobj.MV (ct)。Max = 1;结束

验证预测模型和自定义函数在初始状态(x0)和初始输入(情况)的机器人。

x0 =(-10; -10;π/ 2,0,0,0);情况= 0(ν,1);validateFcns (nlobj x0,情况);
Model.StateFcn是OK. Jacobian.StateFcn is 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情况);
松弛变量未使用或zero-weighted定制成本函数。所有约束将是非常困难的。

情节最优轨迹。

FlyingRobotPlotPlanning(信息)
最佳的燃油消耗= 4.712383

创建一个非线性MPC控制器有四个州,两个输出,和一个输入。

nlobj = nlmpc (4 2 1);
在标准成本函数、零重量默认应用到一个或多个ov因为有MVs比ov少。

指定控制器的样品时间和视野。

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。Nu米berOfParameters = 1;

指定的输出函数模型,通过样本时间参数作为输入参数。

nlobj.Model。OutputFcn =@(x,u,Ts) [x(1); x(3)];

控制器定义标准的约束。

nlobj.Weights。OutputVariables = 3 [3];nlobj.Weights。米anipulatedVariablesRate = 0.1; nlobj.OV(1).Min = -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,情况,[],{Ts});
Model.StateFcn是OK. Model.OutputFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.

只有两个植物状态是可衡量的。因此,创建一个扩展卡尔曼滤波估计的四个工厂。其状态转换函数中定义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秒。在每个控制周期:

  1. 纠正之前的预测使用当前的测量。

  2. 计算最优控制移动使用nlmpcmove。这个函数返回计算最优序列nloptions。通过更新的选择对象nlmpcmove在接下来的控制区间为最优序列提供了最初的猜测。

  3. 预测模型。

  4. 应用第一个计算最优控制移动到工厂,工厂更新状态。

  5. 生成与白噪声传感器数据。

  6. 保存植物状态。

时间= 10;xHistory = x;ct = 1(时间/ Ts):%纠正之前的预测xk =正确(卡尔曼滤波器,y);%计算最优控制动作[mv, nloptions] = nlmpcmove (yref nlobj xk, mv, [], nloptions);%为下一次迭代预测模型预测状态预测(卡尔曼滤波器,[mv;Ts]);%实现第一次最优控制移动x = pendulumDT0 (x, mv, Ts);%生成传感器数据3 y = x ([1]) + randn (2, 1) * 0.01;%保存植物状态xHistory = [xHistory x];结束

情节产生的状态轨迹。

图次要情节(2 2 1)情节(0:Ts:持续时间、xHistory(1:))包含(“时间”)ylabel (“z”)标题(“车位置”次要情节(2,2,2)情节(0:Ts:持续时间、xHistory(2:))包含(“时间”)ylabel (“zdot”)标题(“车速度”次要情节(2,2,3)图(0:Ts:持续时间、xHistory(3:))包含(“时间”)ylabel (“θ”)标题(“摆角”次要情节(2,2,4)图(0:Ts:持续时间、xHistory(4:))包含(“时间”)ylabel (“thetadot”)标题(“摆速度”)

介绍了R2018b