为非线性MPC指定约束
当您创建一个非线性MPC控制器使用nlmpc
对象,您可以定义下列限制:
标准线性约束状态、输出、控制变量和被控变量的变化
自定义等式约束,指定为线性或非线性系统状态的函数,输入和输出
定制的不等式约束,指定为线性或非线性系统状态的函数,输入和输出
控制器优化控制措施来满足所有的这些约束;也就是说,自定义约束的补充标准线性约束。
为了提高计算效率,您还可以指定分析雅克比等式和不等式约束的定制。
等式或不等式约束通过指定自定义,你可以,例如:
要求工厂达成最后目标状态的预测地平线
需要累积的资源消耗保持在规定范围内
在模拟控制器之前,最佳实践来验证您的自定义功能,包括约束函数和他们的雅克比时,使用validateFcns
命令。
线性MPC控制器具有属性定义自定义限制输入和输出的线性组合,如前所述限制输入和输出的线性组合。这些属性是不能用于非线性MPC控制器。相反,你实现这些约束在定制平等或不平等的约束功能。
标准线性约束
下面的表显示了支持的标准线性约束非线性MPC控制器。万博1manbetx为每个这些限制,您可以指定一个约束,适用于整个预测地平线,或者你可以改变每个约束预测地平线。设置控制器的线性约束属性的更多信息,参见nlmpc
。
约束 | 控制器的财产 | 约束软化 |
---|---|---|
下界在国家我 |
州(i)。分钟>负 |
不适用。国家边界总是困难的。 |
上界在国家我 |
州(i)。马克斯<正 |
不适用。国家边界总是困难的。 |
输出变量上下界我 |
OutputVariables(我)。分钟>负 |
默认值: |
输出变量的上界我 |
OutputVariables(我)。马克斯<正 |
默认值: |
上下界操纵变量我 |
ManipulatedVariables(我)。分钟>负 |
默认值: |
被控变量上界我 |
ManipulatedVariables(我)。马克斯<正 |
默认值: |
上下界操纵变量我 变动率 |
ManipulatedVariables(我)。杀鼠灵>负 |
默认值: |
上下界操纵变量我 变动率 |
ManipulatedVariables(我)。RateMax <正 |
默认值: |
自定义约束
您可以指定为一个非线性等式和不等式约束的自定义MPC控制器。配置您的非线性等式或不等式约束MPC控制器使用自定义,设置它Optimization.CustomEqConFcn
或Optimization.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 |
输入 | 松弛变量的约束软化,指定为一个积极的标量。因为所有的等式约束是很难的,这只输入参数应用于不等式约束函数。 |
||||||||||||||||||||||||||
数据 |
输入 | 额外的信号,指定为一个结构有以下字段:
|
||||||||||||||||||||||||||
参数个数 |
输入 | 可选参数,指定为一个以逗号分隔(例如 如果你的模型使用可选参数,您必须指定参数的数量 |
||||||||||||||||||||||||||
量表信 |
输出 | 计算等式约束值,返回一个列向量的长度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是第一个被控变量:
在预测地平线,定义约束值使用:
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 (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.CustomEqConFcn
或Jacobian.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 基于X 从第二行,行p+ 1,忽略第一行。 |
Gmv |
雅可比矩阵等式或不等式约束的操纵变量轨迹,作为一个返回p——- - - - - -Nmv——- - - - - -Nc数组,
和MV(j)是jth MV指数 由于控制器的力量 |
通用电气 |
的雅可比矩阵不等式约束的松弛变量,e ,返回一个行向量的长度Nc,在那里
|
使用输出变量雅克比在你的雅可比矩阵约束功能,您必须首先获得他们的状态和输入参数使用雅可比矩阵预测模型的输出函数,作为中指定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是第一个被控变量。
计算雅可比矩阵的状态轨迹,使用:
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日
。