主要内容

为非线性MPC指定约束

当您创建一个非线性MPC控制器使用nlmpc对象,您可以定义下列限制:

  • 标准线性约束状态、输出、控制变量和被控变量的变化

  • 自定义等式约束,指定为线性或非线性系统状态的函数,输入和输出

  • 定制的不等式约束,指定为线性或非线性系统状态的函数,输入和输出

控制器优化控制措施来满足所有的这些约束;也就是说,自定义约束的补充标准线性约束。

为了提高计算效率,您还可以指定分析雅克比等式和不等式约束的定制。

等式或不等式约束通过指定自定义,你可以,例如:

  • 要求工厂达成最后目标状态的预测地平线

  • 需要累积的资源消耗保持在规定范围内

在模拟控制器之前,最佳实践来验证您的自定义功能,包括约束函数和他们的雅克比时,使用validateFcns命令。

线性MPC控制器具有属性定义自定义限制输入和输出的线性组合,如前所述限制输入和输出的线性组合。这些属性是不能用于非线性MPC控制器。相反,你实现这些约束在定制平等或不平等的约束功能。

标准线性约束

下面的表显示了支持的标准线性约束非线性MPC控制器。万博1manbetx为每个这些限制,您可以指定一个约束,适用于整个预测地平线,或者你可以改变每个约束预测地平线。设置控制器的线性约束属性的更多信息,参见nlmpc

约束 控制器的财产 约束软化
下界在国家 州(i)。分钟>负 不适用。国家边界总是困难的。
上界在国家 州(i)。马克斯<正 不适用。国家边界总是困难的。
输出变量上下界 OutputVariables(我)。分钟>负

OutputVariables(我)。MinECR > 0

默认值:1(软)

输出变量的上界 OutputVariables(我)。马克斯<正

OutputVariables(我)。MaxECR > 0

默认值:1(软)

上下界操纵变量 ManipulatedVariables(我)。分钟>负

ManipulatedVariables(我)。MinECR > 0

默认值:0(硬)

被控变量上界 ManipulatedVariables(我)。马克斯<正

ManipulatedVariables(我)。MaxECR > 0

默认值:0(硬)

上下界操纵变量变动率 ManipulatedVariables(我)。杀鼠灵>负

ManipulatedVariables(我)。RateMinECR > 0

默认值:0(硬)

上下界操纵变量变动率 ManipulatedVariables(我)。RateMax <正

ManipulatedVariables(我)。RateMaxECR > 0

默认值:0(硬)

自定义约束

您可以指定为一个非线性等式和不等式约束的自定义MPC控制器。配置您的非线性等式或不等式约束MPC控制器使用自定义,设置它Optimization.CustomEqConFcnOptimization.CustomIneqConFcn分别。为此,指定自定义函数是下列之一。

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

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

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

    Optimization.CustomEqConFcn=@ (X, U,数据、参数)myEqConFunction (X, U,数据,参数);Optimization.CustomIneqConFcn=@ (X, U, e、数据参数)myIneqConFunction (X, U, e,数据、参数);

你的约束函数必须有下列形式之一的签名。

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

    函数测查= myEqConFunction (X, U,数据)函数cineq = myIneqConFunction (X, U, e,数据)
  • 如果您的控制器使用参数。在这里,参数个数是一个以逗号分隔的参数:

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

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

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

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

  • N量表信是平等的数量限制。

  • Ncineq是不等式约束的数量。

  • 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 输入

松弛变量的约束软化,指定为一个积极的标量。因为所有的等式约束是很难的,这只输入参数应用于不等式约束函数。

数据 输入

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

描述
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

量表信 输出 计算等式约束值,返回一个列向量的长度N量表信。一个等式约束时满足相应的输出0
cineq 输出 计算不等式约束值,返回一个列向量的长度Ncineq。满足一个不等式约束时,相应的输出小于或等于0

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

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

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

一般来说:

  • 等式约束都难。

  • 定义软不等式约束,利用松弛变量输入参数,e。约束软化在MPC的更多信息,请参阅约束软化

  • 等式约束应连续,连续一阶导数对决策变量。

您可以定义自定义约束,应用在整个预测地平线。例如,假设你想要满足如下不等式约束预测地平线,对面u1是第一个被控变量:

2 x 1 2 3 x 2 10 0 u 1 2 5 0

在预测地平线,定义约束值使用:

p = data.PredictionHorizon;U1 = U (1: p, data.MVIndex (1));X1 = X (2: p + 1, - 1);X2 = X (2: p + 1, 2);cineq = [2 * X1。^ 2 - 3 * X2 - 10;U1。^ 2 - 5);

应用这两个约束p预测地平线步骤产生一个列向量2 *p不等式约束。这些不等式约束的对应元素时感到满意cineq小于或等于零。

或者,您可以定义约束,应用在特定的预测地平线的步骤。例如,假设你想要的三阶植物:

x 1 = 5 x 2 = 3 x 3 = 0

这些状态值指定为限制只有最后预测地平线步骤中,使用:

测查= [X (p + 1) - 5;X (p + 1, 2) + 3;X (p + 1, 3)];

这些等式约束的对应元素时感到满意量表信等于零。

对于相对简单的约束,可以指定约束函数使用一个匿名函数处理。例如,指定一个匿名函数,实现了等式约束,使用:

Optimization.CustomEqConFcn=@(X,U,data) [X(p+1,1) - 5; X(p+1,2) + 3; X(p+1,3)];

自定义约束雅克比

为了提高计算效率,最佳实践是为您的自定义指定分析雅克比约束功能。如果你不指定雅克比时,控制器计算雅克比使用数值摄动。

为平等或指定一个雅可比矩阵不等式约束函数,设置相应的Jacobian.CustomEqConFcnJacobian.CustomIneqConFcn控制器的属性之一。

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

    Jacobian.CustomEqConFcn=“myEqConJacobian”;Jacobian.CustomIneqConFcn=“myIneqConJacobian”;
  • 处理函数在当前工作目录中或MATLAB路径

    Jacobian.CustomEqConFcn=@myEqConJacobian; Jacobian.CustomIneqConFcn = @myIneqConJacobian;
  • 匿名函数

    Jacobian.CustomEqConFcn=@(X,U,data,params) myEqConJacobian(X,U,data,params); Jacobian.CustomInqConFcn = @(X,U,e,data,params) myIneqConJacobian(X,U,e,data,params);

你的雅可比矩阵约束函数必须有下列形式之一的签名。

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

    函数[组,Gmv] = myEqConJacobian (X, U,数据)函数(组、Gmv Ge) = myIneqConJacobian (X, U, e,数据)
  • 如果您的控制器使用参数。在这里,参数个数是一个以逗号分隔的参数:

    函数[组,Gmv] = myEqConJacobian (X, U,数据、参数)函数(组、Gmv Ge) = myIneqConJacobian (X, U, e,数据、参数)

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

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

  • Nmv是操纵变量的数量。

  • Nc是约束的数量(等式或不等式约束,根据约束函数)。

  • p是预测地平线。

论点 描述
G 雅可比矩阵等式或不等式约束的状态轨迹,作为一个返回p——- - - - - -Nx——- - - - - -Nc数组, G ( , j , l ) = c ( l ) / X ( + 1 , j ) 。计算G基于X从第二行,行p+ 1,忽略第一行。
Gmv

雅可比矩阵等式或不等式约束的操纵变量轨迹,作为一个返回p——- - - - - -Nmv——- - - - - -Nc数组, Gmv ( , j , l ) = c ( l ) / 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,返回一个行向量的长度Nc,在那里 通用电气 ( l ) = c ( l ) / e

使用输出变量雅克比在你的雅可比矩阵约束功能,您必须首先获得他们的状态和输入参数使用雅可比矩阵预测模型的输出函数,作为中指定Jacobian.OutputFcn控制器的属性。例如,计算雅克比输出变量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) ';结束

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

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

2 x 1 2 3 x 2 10 0 u 1 2 5 0

计算雅可比矩阵的状态轨迹,使用:

Nx = data.NumOfStates;数控= 2 * p;G = 0 (p Nx Nc);G (1: p 2 1: p) =诊断接头(2 * X1 - 3);

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

Nmv =长度(data.MVIndex);Gmv = 0 (p Nmv Nc);Gmv (1: p, p + 1:2 * p) =诊断接头(2 * u (1: p, data.MVIndex (1)));

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

另请参阅

相关的话题