主要内容

为非线性MPC指定成本函数

而传统的线性MPC控制器优化控制行动,减少二次成本函数,非线性MPC控制器支持通用的定制成本函数。金宝app例如,您可以指定你作为一个组合的成本函数的线性或非线性系统的状态和输入的函数。为了提高计算效率,您还可以指定您的自定义代价函数的雅可比矩阵分析。

使用一个定制的成本函数,您可以,例如:

  • 盈利能力最大化

  • 减少能源消耗

当你指定一个自定义代价函数非线性MPC控制器,你可以选择更换或增加货币政策委员会二次成本函数的标准。默认情况下,一个nlmpc控制器取代了标准成本函数与定制成本函数。在这种情况下,控制器忽略的标准调整权重权重财产。

使用一个目标函数是标准成本和定制成本之和,设置Optimization.ReplaceStandardCost你的属性nlmpc对象。在这种情况下,标准中指定的调优权重权重控制器为成本函数的性质。然而,您可以消除任何标准的成本函数通过设置相应的处罚条款重量为零。标准MPC成本函数的更多信息,见标准成本函数

在模拟控制器之前,最佳实践来验证您的自定义功能,包括成本函数和其雅可比矩阵,使用validateFcns命令。

自定义代价函数

配置您的非线性MPC控制器使用定制的成本函数,设置它Optimization.CustomCostFcn下列财产。

  • 一个函数的名称在当前工作目录或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,数据)
  • 如果您的控制器使用参数。在这里,参数个数是一个以逗号分隔的参数:

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

此表描述了这个函数的输入和输出,地点:

  • Nx是州的数量等于Dimensions.NumberOfStates控制器的属性。

  • Nu是输入的数量,包括所有操纵变量,测量干扰,和无边无际的干扰,等于Dimensions.NumberOfInputs控制器的属性。

  • p是预测地平线。

  • k是当前时间。

论点 输入/输出 描述
X 输入 状态轨迹的时间k时间k+p指定为一个(p+ 1)——-Nx数组中。第一行的X包含当前状态值,这意味着解决者不使用的值X (1:)作为决策变量在优化。
U 输入 输入轨迹从时间k时间k+p指定为一个(p+ 1)——-Nu数组中。的最后一行U总是重复前面的行;也就是说,U(最终,:)=U (end-1:)。因此,在最后一行的值U并不是独立的决策变量在优化。
e 输入

松弛变量的约束软化,指定为负的标量。e是零如果没有软约束你的控制器。

如果你有非线性软约束不等式约束函数中定义(Model.CustomIneqConFcn),使用积极的处罚重e并使其成本函数的一部分。

数据 输入

额外的信号,指定为一个结构有以下字段:

描述
Ts 预测模型的样本中定义的Ts控制器的属性
现状后 目前的预测模型,为中指定x输入参数的nlmpcmove
LastMV MV移动中使用以前的控制区间,中指定lastmv输入参数的nlmpcmove
引用 参考植物输出值,作为中指定裁判输入参数的nlmpcmove
MVTarget 被控变量的目标,如中指定MVTarget财产的nlmpcmoveopt对象
PredictionHorizon 预测地平线,如中定义PredictionHorizon控制器的属性
NumOfStates 许多州,如中定义Dimensions.NumberOfStates控制器的属性
NumOfOutputs 数量的输出,如中定义Dimensions.NumberOfOutputs控制器的属性
NumOfInputs 数量的输入,如中定义Dimensions.NumberOfInputs控制器的属性
MVIndex 被操纵的变量指标,如中定义Dimensions.MVIndex控制器的属性
MDIndex 测量干扰指标,如中定义Dimensions.MDIndex控制器的属性
UDIndex 无边无际的扰动指数,如中定义Dimensions.UDIndex控制器的属性
参数个数 输入

可选参数,指定为一个以逗号分隔(例如p1, p2, p3)。相同的参数被传递到预测模型中,自定义代价函数和自定义的约束功能的控制器。例如,如果状态函数只使用参数p1,约束函数仅使用参数p2,成本函数只使用参数p3,那么所有三个参数传递给所有这些功能。

如果你的模型使用可选参数,您必须指定使用的参数的数量Model.NumberOfParameters控制器的属性。

J 输出 计算成本,作为一个标量返回

你的自定义代价函数必须:

  • 是一个连续的,有限的功能U,X,e有限的一阶导数

  • 增加松弛变量e增加或独立

使用在你的成本函数输出变量值,您必须首先获得他们从国家和使用预测模型的输出函数输入参数,如中指定Model.OutputFcn控制器的属性。例如,计算输出轨迹Y从时间k时间k+p使用:

p = data.PredictionHorizon;i = 1: p + 1 Y(我:)= myOutputFunction (X(我:),U(我,:),params) ';结束

对预测模型的输出功能的更多信息,参见为非线性MPC指定预测模型

通常,您优化控制行动最小化代价函数预测地平线。自代价函数值必须是一个标量,你计算成本函数在每个预测地平线步骤并添加在一起的结果。例如,假设阶段成本函数是:

J = 10 u 1 2 + 5 x 2 3 + x 1

也就是说,你想减少第一个输出和参考价值的区别,和产品的第一个操纵变量和第二个状态。计算总成本函数在整个预测地平线,使用:

p = data.PredictionHorizon;U1 = U (1: p, data.MVIndex (1));X1 = X (2: p + 1, - 1);X2 = X (2: p + 1, 2);J = 10 *总和(sum (U1。^ 2)) + 5 *金额(金额(X2。^ 3) +总和(sum (X1));

一般来说,成本函数,不使用以下值,因为它们是不使用的决策变量解算器的一部分:

  • U(最终,:)——这一行是重复的行。

  • X (1:)——这一行包含当前状态值。

因为本例中代价函数是相对简单的,你可以指定它使用一个匿名函数处理。

相对简单的成本,您可以指定函数使用一个匿名函数处理成本。例如,指定一个匿名函数实现的第一个任期之前的成本函数,使用:

Optimization.CustomCostFcn=@(X,U,data) 10*sum(sum((U(1:end-1,data.MVIndex(1)).^2));

成本函数雅可比矩阵

为了提高计算效率,最佳实践是指定一个分析雅可比矩阵为你定制的成本函数。如果你不指定一个雅可比矩阵,控制器使用数值摄动计算雅可比矩阵。对你的成本函数指定一个雅可比矩阵,设置Jacobian.CustomCostFcn控制器的属性之一。

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

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

    Jacobian.CustomCostFcn=@myCostJacobian;
  • 匿名函数

    Jacobian.CustomCostFcn=@(X,U,e,data,params) myCostJacobian(X,U,e,data,params)

你的成本可比矩阵函数必须有一个下面的签名。

  • 如果你的控制器不使用可选参数:

    函数(G, Gmv,通用电气)= myCostJacobian (X, U, e,数据)
  • 如果您的控制器使用参数。在这里,参数个数是一个以逗号分隔的参数:

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

雅可比矩阵成本函数的输入参数是一样的自定义代价函数的输入。此表描述了雅可比矩阵的输出函数,地点:

  • Nx是州的数量等于Dimensions.NumberOfStates控制器的属性。

  • Nmv是操纵变量的数量。

  • p是预测地平线。

论点 描述
G 雅可比矩阵的成本函数的状态轨迹,作为一个返回p——- - - - - -Nx数组, G ( , j ) = J / X ( + 1 , j ) 。计算G基于X从第二行,行p+ 1,忽略第一行。
Gmv

雅可比矩阵成本函数对被控变量的轨迹,作为一个返回p——- - - - - -Nmv数组, Gmv ( , j ) = J / U ( , V ( j ) ) MV(j)是jth MV指数data.MVIndex

由于控制器的力量U (p + 1,:)等于U (p,:),如果你的成本函数使用U (p + 1,:),你必须包括两者的影响U (p,:)U (p + 1,:)的雅可比矩阵U (p,:)

通用电气 雅可比矩阵的成本函数对松弛变量,e,作为一个标量返回 通用电气 = J / e

使用雅可比矩阵输出变量值和雅克比在你的成本函数,首先必须获得他们的状态和输入参数。为此,使用预测模型的输出函数的雅可比矩阵,作为中指定Jacobian.OutputFcn控制器的属性。例如,计算输出变量Y和他们的雅克比Yjacob从时间k时间k+p使用:

p = data.PredictionHorizon;i = 1: p + 1 Y(我:)= myOutputFunction (X(我:),U(我,:),params) ';结束i = 1: p + 1 Yjacob(我:)= myOutputJacobian (X(我:),U(我,:),params) ';结束

因为预测模型的输出函数不支持直接从输入到输出引线,雅可比矩阵包含输出函数偏导数只有美国金宝appX。雅可比矩阵输出函数的更多信息,请参阅为非线性MPC指定预测模型

找到雅克比,计算成本函数的偏导数的状态轨迹,被控变量轨迹,松弛变量。例如,假设你的成本函数如下u1是第一个被控变量。

J = 10 u 1 2 + 5 x 2 3 + x 1

计算雅可比矩阵的状态轨迹,使用以下。回想一下,你计算G基于X从第二行,行p+ 1,忽略第一行。

p = data.PredictionHorizon;Nx = data.NumOfStates;U1 = U (1: p, data.MVIndex (1));X2 = X (2: p + 1, 2);G = 0 (p, Nx);G (1: p, 1) = 1;G (1: p, 2) = 15 * X2。^ 2;

计算雅可比矩阵的操纵变量轨迹,使用:

Nmv =长度(data.MVIndex);Gmv = 0 (p, Nmv);Gmv (1: p, 1) = 20 * U1;

在这种情况下,松弛变量的导数通用电气(Ge) = 0

另请参阅

相关的话题