计算最优控制行动非线性MPC控制器
创建非线性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,数据)Ts *金额(金额(U (1: p)));nlobj.Optimization。ReplaceStandardCost = true;
指定一个自定义的约束函数控制器。
nlobj.Optimization。CustomEqConFcn = @ (X, U,数据)X(最终:)”;
指定线性约束的操纵变量。
为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。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。最小值= -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
秒。在每个控制周期:
纠正之前的预测使用当前的测量。
计算最优控制移动使用nlmpcmove
。这个函数返回计算最优序列nloptions
。通过更新的选择对象nlmpcmove
在接下来的控制区间为最优序列提供了最初的猜测。
预测模型。
应用第一个计算最优控制移动到工厂,工厂更新状态。
生成与白噪声传感器数据。
保存植物状态。
时间= 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”)标题(“摆速度”)
这个例子展示了如何创建和模拟一个非常简单的多级闭环MPC控制器。
创建一个多级MPC控制器
创建一个多级mpc对象与地平线5步骤,一个州,一个操纵变量。
nlmsobj = nlmpcMultistage (5、1、1);
指定的状态转换函数预测模型(mystatefcn
定义在文件的末尾)。
nlmsobj.Model。StateFcn =@mystatefcn;
为三个阶段(指定成本函数mycostfcn
定义在文件的末尾)。
为我= 3:6 nlmsobj.Stages (6)。CostFcn = @mycostfcn;结束
模拟闭环控制器
初始化植物状态和输入。
x = 3;mv = 0;
验证功能。
validateFcns (nlmsobj x, mv);
Model.StateFcn是OK. "CostFcn" of the following stages 6 are OK. Analysis of user-provided model, cost, and constraint functions complete.
模拟控制回路的10个步骤。
为k = 1:10 mv = nlmpcmove (nlmsobj x, mv);%计算移动(没有最初的猜测)x = x + (mv-sqrt (x)) * 1;%更新x: x (t + 1) = x (t) + xdot * Ts结束
显示最后一个值的状态和操作变量。
disp ([“x =最终值”num2str (x)))
x = 0.57118的最终值
disp ([“mv =最终值”num2str (mv)))
最终值的mv = 0.75571
金宝app支持功能
状态转换函数。
函数xdot = mystatefcn (x, u) xdot = u-sqrt (x);结束
阶段成本函数。
函数j = mycostfcn (s, x, u) j = abs (u) / s + s * x ^ 2;结束
这个例子展示了如何创建和模拟一个非常简单的多级闭环MPC控制器。
创建一个多级MPC控制器
创建一个多级mpc对象7步骤地平线,一个国家,一个操纵变量。
nlmsobj = nlmpcMultistage (7, 1, 1);
指定的状态转换函数预测模型(mystatefcn
定义在文件的末尾)。
nlmsobj.Model。StateFcn =@mystatefcn;
最佳实践是使用雅克比时可用,否则解算器必须数值计算。
指定状态转换函数的雅可比矩阵(mystatejacobian
定义在文件的末尾)。
nlmsobj.Model。StateJacFcn = @mystatejac;
指定所有阶段的成本函数除了前两个(mycostfcn
定义在文件的末尾)。
为i =三nlmsobj.Stages (6)。CostFcn = @mycostfcn;结束
定义初始条件,创建数据结构和验证功能
初始化植物状态和输入。
x = 3;mv = 0;
创建初始模拟数据结构。
simdata = getSimulationData (nlmsobj)
simdata =结构体字段:StateMin: [] StateMax: [] MVMin: [] MVMax: [] InitialGuess: []
验证函数和数据结构。
validateFcns (nlmsobj x, mv, simdata);
Model.StateFcn是OK. Model.StateJacFcn is OK. "CostFcn" of the following stages 6 are OK. Analysis of user-provided model, cost, and constraint functions complete.
模拟闭环控制器
模拟控制回路的10个步骤。
为k = 1:10 [mv, simdata] = nlmpcmove (nlmsobj x, mv, simdata);%计算移动x = x + (mv-sqrt (x)) * 1;%更新x: x (t + 1) = x (t) + xdot * Ts结束
显示最后一个值的状态和操作变量。
disp ([“x =最终值”num2str (x)))
x = 1.6556的最终值
disp ([“mv =最终值”num2str (mv)))
最终值的mv = 1.2816
金宝app支持功能
状态转换函数。
函数xdot = mystatefcn (x, u) xdot = u-sqrt (x);结束
雅可比矩阵的状态转换函数。
函数[A, B] = mystatejac (x ~) = 1 / (2 * x ^ (1/2));B = 1;结束
阶段成本函数。
函数j = mycostfcn (s, x, u) j = abs (u) / s + s * x ^ 2;结束
nlmpcobj
- - - - - -非线性MPC控制器nlmpc
对象非线性MPC控制器,指定为一个nlmpc
对象。
x
- - - - - -当前状态预测模型目前的预测模型,指定为一个向量的长度Nx,在那里Nx预测模型的状态数。由于非线性MPC控制器不执行状态估计,您必须测量或估计当前状态预测模型在每个时间间隔的控制。关于非线性MPC预测模型的更多信息,请参阅为非线性MPC指定预测模型。
lastmv
- - - - - -控制信号用于工厂之前的控制区间控制信号用于控制区间,以前工厂指定为一个向量的长度Nmv,在那里Nmv是操纵变量的数量。
请注意
指定lastmv
由于被控变量的信号应用于植物在前面的控制区间。通常,这些信号控制器所产生的价值,尽管这并非总是如此。例如,如果您的控制器是离线和跟踪模式下运行;即控制器输出不是开工厂,然后给实际控制信号last_mv
可以帮助实现无扰转移时,控制器将重新上线。
裁判
- - - - - -植物输出参考价值[]
(默认)|行向量|数组植物输出参考价值,指定为一个行向量的长度Ny或数组Ny列,Ny输出变量的数量。如果你不指定裁判
,默认引用值是零。
使用相同的参考价值在预测地平线,指定一个行向量。
不同的参考价值预测地平线k+ 1,k+p,指定数组p行。在这里,k当前时间和吗p是预测地平线。每行包含引用值一个预测地平线的一步。如果你指定不到p行,最后一行中的值用于预测地平线的其余步骤。
医学博士
- - - - - -测量扰动值[]
(默认)|行向量|数组测量扰动值,指定为一个行向量的长度N医学博士或数组N医学博士列,N医学博士是测量扰动的数量。如果你的控制器测量干扰,你必须指定医学博士
。如果你的控制器没有测量干扰,指定医学博士
作为[]
。
使用相同的扰动值预测地平线,指定一个行向量。
不同的扰动值预测地平线k时间k+p,指定数组p+ 1行。在这里,k当前时间和吗p是预测地平线。每行包含一个预测地平线的扰动值的步骤。如果你指定不到p行,最后一行中的值用于预测地平线的其余步骤。
选项
- - - - - -运行时选项nlmpcmoveopt
对象运行时选项,指定为一个nlmpcmoveopt
对象。使用这些选项,您可以:
调整控制器权重
更新线性约束
设置控制变量的目标
指定预测模型参数
为国家提供初始猜测和操纵变量轨迹
这些选项只适用于当前nlmpcmove
瞬间的时间。
提高求解效率,最佳实践为国家指定初始猜测和操纵变量轨迹。
nlmpcMSobj
- - - - - -非线性多级MPC控制器nlmpcMultistage
对象多级非线性MPC控制器,指定为一个nlmpcMultistage
对象。
simdata
- - - - - -模拟运行时数据结构模拟运行时数据结构。它必须是最初创建的getSimulationData
,然后填充被传递给前(如果需要)nlmpcmove
作为输入参数。更新版本然后总是作为第二输出参数返回nlmpcmove
。请注意,MVMin
,MVMax
,StateMin
,StateMax
,MVRateMin
,MVRateMax
字段只有如果你想需要在运行时更改这些界限。这些字段存在于返回的结构getSimulationData
只有当你让他们明确当调用getSimulationData
。的simdata
结构有以下字段。
MeasuredDisturbance
——测量扰动值[]
(默认)| |行向量数组测量扰动值,指定为一个行向量的长度N医学博士或数组N医学博士列,N医学博士是测量扰动的数量。如果你的多级MPC对象有任何干扰测量通道定义,您必须指定MeasuredDisturbance
。如果您的控制器没有测量干扰,这个领域不存在所产生的结构getSimulationData
。
使用相同的扰动值预测地平线,指定一个行向量。
不同的扰动值预测地平线k时间k+p,指定数组p+ 1行。在这里,k当前时间和吗p是预测地平线。每行包含一个预测地平线的扰动值的步骤。如果你指定不到p行,最后一行中的值用于预测地平线的其余步骤。
MVMin
——被控变量下界[]
(默认)| |矩阵行向量操纵变量下界,指定为一个行向量的长度Nmv或一个矩阵Nmv列,Nmv是操纵变量的数量。MVMin(:,我)
取代了ManipulatedVariables .Min(我)
在运行时控制器的属性。
使用相同的范围在整个预测地平线,指定一个行向量。
不同范围的预测地平线k时间k+p1,指定一个矩阵p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后边界用于预测地平线的其余步骤。
MVMax
——操纵变量上界[]
(默认)| |矩阵行向量操纵变量上界,指定为一个行向量的长度Nmv或一个矩阵Nmv列,Nmv是操纵变量的数量。MVMax(:,我)
取代了ManipulatedVariables .Max(我)
在运行时控制器的属性。
使用相同的范围在整个预测地平线,指定一个行向量。
不同范围的预测地平线k时间k+p1,指定一个矩阵p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后边界用于预测地平线的其余步骤。
MVRateMin
——被控变量率下界[]
(默认)| |矩阵行向量被控变量率下界,指定为一个行向量的长度Nmv或一个矩阵Nmv列,Nmv是操纵变量的数量。MVRateMin(:,我)
取代了ManipulatedVariables .RateMin(我)
在运行时控制器的属性。MVRateMin
范围必须是负的。
使用相同的范围在整个预测地平线,指定一个行向量。
不同范围的预测地平线k时间k+p1,指定一个矩阵p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后边界用于预测地平线的其余步骤。
MVRateMax
——被控变量率上界[]
(默认)| |矩阵行向量被控变量率上界,指定为一个行向量的长度Nmv或一个矩阵Nmv列,Nmv是操纵变量的数量。MVRateMax(:,我)
取代了ManipulatedVariables .RateMax(我)
在运行时控制器的属性。MVRateMax
范围必须是负的。
使用相同的范围在整个预测地平线,指定一个行向量。
不同范围的预测地平线k时间k+p1,指定一个矩阵p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后边界用于预测地平线的其余步骤。
StateMin
——国家下界[]
(默认)| |矩阵行向量州下界,指定为一个行向量的长度Nx或一个矩阵Nx列,Nx的状态数。StateMin(:,我)
取代了州.Min(我)
在运行时控制器的属性。
使用相同的范围在整个预测地平线,指定一个行向量。
不同范围的预测地平线k+ 1,k+p,指定一个矩阵p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后边界用于预测地平线的其余步骤。
StateMax
——国家上界[]
(默认)| |矩阵行向量州上界,指定为一个行向量的长度Nx或一个矩阵Nx列,Nx的状态数。StateMax(:,我)
取代了州.Max(我)
在运行时控制器的属性。
使用相同的范围在整个预测地平线,指定一个行向量。
不同范围的预测地平线k+ 1,k+p,指定一个矩阵p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后边界用于预测地平线的其余步骤。
StateFcnParameters
——状态函数参数值[]
(默认)|向量态函数参数值,指定为一个向量的长度等于价值Model.ParameterLength
多级控制器对象的属性。如果Model.StateFcn
需要一个参数向量,你必须在运行时使用这个字段提供值。如果Model.ParameterLength
是0
这个领域不存在返回的结构getSimulationData
。
StageFcnParameters
——阶段函数参数值[]
(默认)|向量阶段函数参数值,指定为一个向量长度等于中的所有值的总和(我).ParameterLength阶段
多级控制器对象的属性。如果任何成本或约束函数中定义阶段
房地产需求参数向量,在运行时必须提供所有参数向量(堆叠在一列)使用这个字段。如果没有你的舞台函数参数,这个领域不存在返回的结构getSimulationData
。
所有阶段的参数向量必须堆放在列向量StateFcnParameters
为:
阶段1(参数向量;参数向量为第二阶段;…参数向量阶段p + 1;]
TerminalState
——终端状态[]
(默认)|向量终端状态,指定为一个列向量和尽可能多的元素的数量。终端状态所需的状态在最后预测步骤。指定所需的终端状态通过这个领域在运行时,您必须指定的有限值TerminalState
场的模型
的属性nlmpcMSobj
。指定正
的国家不需要限制终端价值。在运行时,nlmpcmove
忽略任何值TerminalState
领域的simdata
对应于正
值nlmpcMSobj
。如果你不指定任何终值条件nlmpcMSobj
,这个领域不是中创建simdata
。
如果没有TerminalState
在simdata
然后终端状态约束(如果存在)在运行时不会改变。
InitialGuess
——决策变量的初始猜测[]
(默认)|向量决策变量的初始猜测,指定为一个列向量的长度等于所有决策变量向量的长度之和为每个阶段。良好的初始猜测是重要的,因为他们帮助解决者更快地收敛到一个解决方案。当模拟控制回路通过调用nlmpcmove
反复循环,因此,重要的是通过simdata
作为一个输入参数(所以可以使用初始猜测),同时返回一个更新的版本simdata
(新的初始猜测接下来的控制区间),作为输出参数。
的初始猜测所有阶段必须堆放在列向量InitialGuess
为:
阶段1(状态向量的估计;被控变量向量猜第一阶段;被控变量向量率猜第一阶段;%如果使用松弛变量向量猜第一阶段;%如果状态向量估计用于第二阶段;被控变量向量猜第二阶段;被控变量向量率猜第二阶段;%如果猜松弛变量向量用于第二阶段;%如果使用…阶段p状态向量的估计; manipulated variable vector guess for stage p; manipulated variable vector rate guess for stage p; % if used slack variable vector guess for stage p; % if used state vector guess for stage p+1; slack variable vector guess for stage p+1; % if used ]
如果InitialGuess
是[]
,默认的初始猜测的计算x
和lastmv
参数传递给nlmpcmove
)。
一般来说,在闭环仿真,您没有指定InitialGuess
你自己。相反,当调用nlmpcmove
,返回simdata
输出参数,其中包含计算初始猜测下一个控制间隔。然后您可以通过simdata
作为输入参数nlmpcmove
在接下来的控制区间。这些步骤是一个最佳实践,即使你不指定任何其他运行时选项。
mv
——最优操纵变量控制行动最优操纵变量控制行动,作为一个列向量的长度返回Nmv,在那里Nmv是操纵变量的数量。
如果解决收敛于局部最优的解决方案(info.ExitFlag
是积极的),然后呢mv
包含最优解。
如果解算器达到最大迭代次数没有找到一个最佳的解决方案(info.ExitFlag= 0
):
nlmpcobj.Optimization.UseSuboptimalSolution
是真正的
,然后mv
包含了次优的解决方案
nlmpcobj.Optimization.UseSuboptimalSolution
是假
,然后mv
包含lastmv
如果解决失败(info.ExitFlag
是负的),然后呢mv
包含lastmv
。
选择
——运行时选项初始猜测nlmpcmoveopt
对象运行时选项与初始猜测状态和操纵变量轨迹用于下一个控制区间,作为一个返回nlmpcmoveopt
对象。任何您指定使用的运行时选项选项
,如重量、约束或参数,复制选择
。
最初的猜测州(opt.X0
)和操纵变量(opt.MV0
最优轨迹计算nlmpcmove
和对应于最后p1行info.Xopt
和info.MVopt
,分别。
使用这些初始猜测未来控制区间,指定选择
随着选项
输入参数nlmpcmove
。
信息
——解决方案细节解决方案的细节,作为结构与以下字段返回。
MVopt
——最优操纵变量序列最优操纵变量序列,作为(返回p+ 1)——-Nmv数组,p预测地平线和吗Nmv是操纵变量的数量。
MVopt(我,:)
包含了计算最优操纵变量值k +张
,因为我= 1,…,p
,在那里k
是当前时间。:MVopt (1)
包含相同的操纵变量值作为输出参数mv
。由于控制器不计算最优控制移动k + p
,:MVopt (p + 1)
等于MVopt (p,:)
。
Xopt
——最优预测模型状态序列最优预测模型状态序列,作为(返回p+ 1)——-Nx数组,p预测地平线和吗Nx在预测模型的状态数。
Xopt(我,:)
包含计算状态值k +张
,因为我= 2,…,p + 1
,在那里k
是当前时间。:Xopt (1)
目前的状态是一样的吗x
。
Yopt
——最优输出变量序列最优输出变量序列,作为(返回p+ 1)——-Ny数组,p预测地平线和吗Ny是输出的数量。
Yopt(我,:)
包含计算输出值k +张
,因为我= 2,…,p + 1
,在那里k
是当前时间。:Yopt (1)
计算基于当前状态x
和当前测量的干扰医学博士
,如果任何。
Topt
——预测时间序列预测地平线时间序列,返回一个列向量的长度p+ 1,p是预测地平线。Topt
包含了时间序列k时间k+p,在那里k是当前时间。
Topt (1)
= 0表示当前时间。随后的时间步长Topt(我)
是Ts *(张)
,在那里Ts
是控制器样品时间。
使用Topt
当策划MVopt
,Xopt
,或Yopt
序列。
松弛
——堆积松弛变量向量堆叠松弛变量向量,用于约束软化。如果所有元素为零,那么所有软约束满足整个预测地平线。如果任何元素大于零,那么至少有一个软约束违反。
所有阶段堆积的松弛变量向量为:
第一阶段(松弛变量向量;%如果松弛变量向量用于第二阶段;%如果使用…松弛变量向量阶段p + 1;%如果使用)
ExitFlag
——优化退出代码优化退出代码,返回以下之一:
正整数,找到最优解
0
——可行的次优解发现后的最大迭代数
负整数——没有找到可行的解决方案
迭代
——迭代次数非线性规划求解器使用的迭代次数,作为一个正整数返回。
成本
——目标函数成本目标函数成本,作为一个负的标量值返回。成本量化程度控制器实现其目标。
成本值才有意义ExitFlag
是负的。
simdata
——运行时仿真数据结构运行时仿真数据更新,包含新的初始猜测状态和操作轨迹用于下一个控制间隔。这是一个与以下领域的结构。
MeasuredDisturbance
——测量扰动值[]
(默认)| |行向量数组测量扰动值,指定为一个行向量的长度N医学博士或数组N医学博士列,N医学博士是测量扰动的数量。如果你的多级MPC对象有任何干扰测量通道定义,您必须指定MeasuredDisturbance
。如果您的控制器没有测量干扰,这个领域不存在所产生的结构getSimulationData
。
使用相同的扰动值预测地平线,指定一个行向量。
不同的扰动值预测地平线k时间k+p,指定数组p+ 1行。在这里,k当前时间和吗p是预测地平线。每行包含一个预测地平线的扰动值的步骤。如果你指定不到p行,最后一行中的值用于预测地平线的其余步骤。
MVMin
——被控变量下界[]
(默认)| |矩阵行向量操纵变量下界,指定为一个行向量的长度Nmv或一个矩阵Nmv列,Nmv是操纵变量的数量。MVMin(:,我)
取代了ManipulatedVariables .Min(我)
在运行时控制器的属性。
使用相同的范围在整个预测地平线,指定一个行向量。
不同范围的预测地平线k时间k+p1,指定一个矩阵p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后边界用于预测地平线的其余步骤。
MVMax
——操纵变量上界[]
(默认)| |矩阵行向量操纵变量上界,指定为一个行向量的长度Nmv或一个矩阵Nmv列,Nmv是操纵变量的数量。MVMax(:,我)
取代了ManipulatedVariables .Max(我)
在运行时控制器的属性。
使用相同的范围在整个预测地平线,指定一个行向量。
不同范围的预测地平线k时间k+p1,指定一个矩阵p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后边界用于预测地平线的其余步骤。
MVRateMin
——被控变量率下界[]
(默认)| |矩阵行向量被控变量率下界,指定为一个行向量的长度Nmv或一个矩阵Nmv列,Nmv是操纵变量的数量。MVRateMin(:,我)
取代了ManipulatedVariables .RateMin(我)
在运行时控制器的属性。MVRateMin
范围必须是负的。
使用相同的范围在整个预测地平线,指定一个行向量。
不同范围的预测地平线k时间k+p1,指定一个矩阵p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后边界用于预测地平线的其余步骤。
MVRateMax
——被控变量率上界[]
(默认)| |矩阵行向量被控变量率上界,指定为一个行向量的长度Nmv或一个矩阵Nmv列,Nmv是操纵变量的数量。MVRateMax(:,我)
取代了ManipulatedVariables .RateMax(我)
在运行时控制器的属性。MVRateMax
范围必须是负的。
使用相同的范围在整个预测地平线,指定一个行向量。
不同范围的预测地平线k时间k+p1,指定一个矩阵p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后边界用于预测地平线的其余步骤。
StateMin
——国家下界[]
(默认)| |矩阵行向量州下界,指定为一个行向量的长度Nx或一个矩阵Nx列,Nx的状态数。StateMin(:,我)
取代了州.Min(我)
在运行时控制器的属性。
使用相同的范围在整个预测地平线,指定一个行向量。
不同范围的预测地平线k+ 1,k+p,指定一个矩阵p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后边界用于预测地平线的其余步骤。
StateMax
——国家上界[]
(默认)| |矩阵行向量州上界,指定为一个行向量的长度Nx或一个矩阵Nx列,Nx的状态数。StateMax(:,我)
取代了州.Max(我)
在运行时控制器的属性。
使用相同的范围在整个预测地平线,指定一个行向量。
不同范围的预测地平线k+ 1,k+p,指定一个矩阵p行。在这里,k当前时间和吗p是预测地平线。每一行包含一个预测地平线的界限一步。如果你指定不到p行,最后边界用于预测地平线的其余步骤。
StateFcnParameters
——状态函数参数值[]
(默认)|向量态函数参数值,指定为一个向量的长度等于价值Model.ParameterLength
多级控制器对象的属性。如果Model.StateFcn
需要一个参数向量,你必须在运行时使用这个字段提供值。如果Model.ParameterLength
是0
这个领域不存在返回的结构getSimulationData
。
StageFcnParameters
——阶段函数参数值[]
(默认)|向量阶段函数参数值,指定为一个向量长度等于中的所有值的总和(我).ParameterLength阶段
多级控制器对象的属性。如果任何成本或约束函数中定义阶段
房地产需求参数向量,在运行时必须提供所有参数向量(堆叠在一列)使用这个字段。如果没有你的舞台函数参数,这个领域不存在返回的结构getSimulationData
。
所有阶段的参数向量必须堆放在列向量StateFcnParameters
为:
阶段1(参数向量;参数向量为第二阶段;…参数向量阶段p + 1;]
TerminalState
——终端状态[]
(默认)|向量终端状态,指定为一个列向量和尽可能多的元素的数量。终端状态所需的状态在最后预测步骤。指定所需的终端状态通过这个领域在运行时,您必须指定的有限值TerminalState
场的模型
的属性nlmpcMSobj
。指定正
的国家不需要限制终端价值。在运行时,nlmpcmove
忽略任何值TerminalState
领域的simdata
对应于正
值nlmpcMSobj
。如果你不指定任何终值条件nlmpcMSobj
,这个领域不是中创建simdata
。
如果没有TerminalState
在simdata
然后终端状态约束(如果存在)在运行时不会改变。
InitialGuess
——决策变量的初始猜测[]
(默认)|向量决策变量的初始猜测,指定为一个列向量的长度等于所有决策变量向量的长度之和为每个阶段。良好的初始猜测是重要的,因为他们帮助解决者更快地收敛到一个解决方案。当模拟控制回路通过调用nlmpcmove
反复循环,因此,重要的是通过simdata
作为一个输入参数(所以可以使用初始猜测),同时返回一个更新的版本simdata
(新的初始猜测接下来的控制区间),作为输出参数。
的初始猜测所有阶段必须堆放在列向量InitialGuess
为:
阶段1(状态向量的估计;被控变量向量猜第一阶段;被控变量向量率猜第一阶段;%如果使用松弛变量向量猜第一阶段;%如果状态向量估计用于第二阶段;被控变量向量猜第二阶段;被控变量向量率猜第二阶段;%如果猜松弛变量向量用于第二阶段;%如果使用…阶段p状态向量的估计; manipulated variable vector guess for stage p; manipulated variable vector rate guess for stage p; % if used slack variable vector guess for stage p; % if used state vector guess for stage p+1; slack variable vector guess for stage p+1; % if used ]
如果InitialGuess
是[]
,默认的初始猜测的计算x
和lastmv
参数传递给nlmpcmove
)。
一般来说,在闭环仿真,您没有指定InitialGuess
你自己。相反,当调用nlmpcmove
,返回simdata
输出参数,其中包含计算初始猜测下一个控制间隔。然后您可以通过simdata
作为输入参数nlmpcmove
在接下来的控制区间。这些步骤是一个最佳实践,即使你不指定任何其他运行时选项。
在闭环仿真,这是最佳实践温暖的开始非线性解算器通过使用状态和操纵变量轨迹预测从先前的控制区间作为初始猜测当前控制区间。使用这些轨迹作为初始猜测:
返回选择
输出参数时调用nlmpcmove
。这nlmpcmoveopt
对象包含任何运行时选项你前面调用中指定nlmpcmove
与最初的猜测状态(opt.X0
)和操纵变量(opt.MV0
)轨迹。
通过这个对象中选项
输入参数nlmpcmove
在接下来的控制区间。
这些步骤是一个最佳实践,即使你不指定任何其他运行时选项。
你点击一个链接对应MATLAB命令:
运行该命令通过输入MATLAB命令窗口。Web浏览器不支持MATLAB命令。金宝app
你也可以从下面的列表中选择一个网站:
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。