系列文章目录
前言
模型预测控制器使用线性工厂、干扰和噪声模型来估计控制器状态并预测未来的工厂输出。控制器利用预测的设备输出,解决二次规划优化问题,以确定控制动作。
有关模型预测控制器结构的更多信息,请参阅 MPC 预测模型。
一、语法
mpcobj = mpc(plant) mpcobj = mpc(plant,ts) mpcobj = mpc(plant,ts,P,M,W,MV,OV,DV) mpcobj = mpc(plant) mpcobj = mpc(plant,ts) mpcobj = mpc(plant,ts,P,M,W,MV,OV,DV)
二、创建
2.1 说明
mpcobj = mpc(plant) 根据离散时间预测模型 plant 创建模型预测控制器对象。控制器 mpcobj 的控制间隔继承自 plant.Ts,时间单位继承自 plant.TimeUnit。所有其他控制器属性均为默认值。创建 MPC 控制器后,可以使用点符号设置其属性。
如果 plant.Ts =-1,则在设计和仿真控制器之前,必须将控制器的 Ts 属性设置为正值。
mpcobj = mpc(plant,ts) 根据指定的工厂模型创建模型预测控制器,并设置控制器的 Ts 属性。如果工厂是
- 连续时间模型,则控制器使用采样时间 ts 对模型进行离散预测
- 具有指定采样时间的离散时间模型,则控制器使用采样时间 ts 对工厂进行重新采样以进行预测
- 未指定采样时间的离散时间模型(plant.Ts =-1),用于预测时将继承采样时间 ts。
2.1.1 示例
mpcobj = mpc(plant,ts,P,M,W,MV,OV,DV) 指定了以下控制器属性。如果省略或为空,则使用默认值。
- P 设置 PredictionHorizon 属性。
- M 设置 ControlHorizon 属性。
- W 设置权重属性。
- MV 设置 ManipulatedVariables(操纵变量)属性。
- OV 设置输出变量属性。
- DV 设置干扰变量属性。
mpcobj = mpc(model)根据指定的预测模型集创建模型预测控制器对象,预测模型集包括工厂、输入干扰和测量噪声模型,以及获取模型的标称条件。如果没有指定采样时间,工厂模型 model.Plant 必须是离散时间模型。此语法设置控制器的模型属性。
mpcobj = mpc(model,ts) 根据指定的工厂模型创建模型预测控制器,并将控制器的 Ts 属性设置为 ts。如果 model.Plant 是一个未指定采样时间的离散时间 LTI 模型(model.Plant.Ts =-1),则在用于预测时将继承采样时间 ts。
mpcobj = mpc(model,ts,P,M,W,MV,OV,DV)指定了额外的控制器属性。如果省略或为空,则使用默认值。
2.2 输入参数
plant - 工厂预测模型 —— LTI 线性时不变模型 | 辨识线性模型
- 工厂预测模型,可指定为 LTI 模型或线性系统识别工具箱(System Identification Toolbox™)模型。指定的工厂与控制器的 Model.Plant 属性相对应。
- 如果在创建控制器时没有指定采样时间,则工厂必须是离散时间模型。在预测时,如果需要,将使用 mpcobj.Ts 作为采样时间对工厂进行离散化或重新采样。如果存在延迟,则将延迟纳入生成的离散时间模型中。
有关 MPC 预测模型的更多信息,请参阅 MPC 预测模型。
注释:不支持从操纵变量直接馈通到工厂中的任何输出。
示例:TF(10,[1 10])
model - 预测模型 —— 结构
- 预测模型,以结构形式指定,格式与控制器的模型属性相同。如果在创建控制器时没有指定采样时间,则 model.Plant 必须是离散时间模型。
有关 MPC 预测模型的更多信息,请参阅 MPC 预测模型。
三、属性
Ts - 控制器采样时间 —— 正标量
- 控制器采样时间,指定为正有限标量。控制器使用采样时间为 Ts 的离散时间模型进行预测。时间单位继承自 plant.TimeUnit。
示例:mpcobj.Ts = 0.1
PredictionHorizon - 预测范围 —— 10 + 与延迟有关的步长(默认) | 正整数
- 预测范围步数,指定为正整数。PredictionHorizon 和 Ts 的乘积就是预测时间,即控制器对未来的预测时间。
- 如果指定的预测范围不大于覆盖所有输入输出通道中最长延迟所需的步数,即 Nd = max(mpcobj.Model.Plant.IODelay(:))/mpcobj.Ts ,则软件会自动按 floor(Nd) 增加预测范围。
示例:mpcobj.PredictionHorizon = 15
ControlHorizon - 控制范围 —— 2(默认) | 正整数 | 正整数向量
控制范围,指定为以下之一:
- 介于 1 和 p 之间的正整数 m,其中 p 等于 PredictionHorizon。在这种情况下,控制器会在 k 至 k+m-1 的时间段内计算 m 次自由控制移动,并在 k+m 至 k+p-1 的剩余预测时间段内保持控制器输出不变。这里,k 是当前的控制区间。
- 正整数向量 [m1,m2,...],指定阻塞区间的长度。默认情况下,控制器会计算 M 个自由移动区间,其中 M 是阻塞区间的个数。第一次自由移动适用于时间 k 至 k+m1-1,第二次自由移动适用于时间 k+m1 至 k+m1+m2-1,以此类推。使用分块移动可以提高控制器的鲁棒性。ControlHorizon 中的值之和必须与预测范围 p 一致。
如果指定的矢量之和:
- 小于预测范围,那么控制器会增加一个阻塞区间。例如,如果 p=10 并指定 ControlHorizon=[1 2 3] 的控制范围,那么控制器将使用四个长度为 [1 2 3 4] 的区间。
- 大于预测范围,那么区间将被截断,直到区间长度之和等于 p。例如,如果 p=10 并指定 ControlHorizon= [1 2 3 6 7] 的控制范围,那么控制器将使用长度为 [1 2 3 4] 的四个区间。
有关操纵变量阻塞的更多信息,请参阅操纵变量阻塞。
示例:mpcobj.ControlHorizon = 3
Model - 预测模型和标称条件 —— 结构体
预测模型和标称条件,指定为包含以下字段的结构。有关 MPC 预测模型的更多信息,请参阅 MPC 预测模型和控制器状态估计。
- Plant - 工厂预测模型 —— LTI 模型 | 识别线性模型
工厂预测模型,指定为 LTI 模型或线性系统识别工具箱模型。
注意
不支持从操作变量直接馈通到工厂中的任何输出。
示例:mpcobj.Model.Plant = ss(-1,1,1,0)
- Disturbance - 描述预期未测量干扰的模型 —— LTI 模型
描述预期未测量干扰的模型,指定为 LTI 模型。只有当设备存在未测量干扰时才需要该模型。您可以使用点符号或 setindist 函数直接设置该扰动模型。
默认情况下,输入扰动应为积分白噪声。为建立信号模型,会为每个未测量的输入干扰添加一个无量纲统一增益的积分器,除非添加该积分器会导致控制器失去状态可观测性。在这种情况下,预计扰动将是白噪声,因此会为该通道添加一个无量纲统一增益。
示例:mpcobj.Model.Disturbance = tf(5,[1 5])
- Noise - 描述预期输出测量噪声的模型 —— LTI 模型
描述预期输出测量噪声的模型,指定为 LTI 模型。
默认情况下,测量噪声是具有单位方差的白噪声。为建立信号模型,每个测量通道都会添加一个无量纲统一增益。
示例:mpcobj.Model.Noise = zpk(0,-1,1)
- Nominal - 设备模型线性化时的标称运行点 —— 结构体
设备模型线性化时的标称运行点,以结构形式指定,包含以下字段。
Field Description Default X 运行点的设备状态,指定为长度等于 Model.Plant 中状态个数的列向量。 zero vector U
运行点上的设备输入,包括操纵变量、测量到的和未测量到的干扰,指定为长度等于 Model.Plant 中输入个数的列向量。 zero vector Y
运行点的设备输出(包括已测量和未测量的输出),以列向量形式指定,长度等于 Model.Plant 中的输出数。 zero vector DX
对于连续时间模型,DX 是运行点的状态导数: DX=f(X,U)。对于离散时间模型,DX=x(k+1)-x(k)=f(X,U)-X。指定 DX 为列向量,其长度等于 Model.Plant 中的状态数。 zero vector
ManipulatedVariables - 受操纵的变量信息、边界和比例因子 —— 结构体数组
被操纵变量(MV)的信息、边界和比例因子,指定为一个包含 Nmv 元素的结构数组,其中 Nmv 是被操纵变量的个数。要访问此属性,可以使用别名 MV 代替 ManipulatedVariables。注释
速率指的是差值 Δu(k)=u(k)-u(k-1). 对于离散时间差 Δu(k),必须使用近似值 du/dt ≅ Δu(k)/Ts,对基于连续时间输入信号导数 du/dt 的约束条件和权重进行适当的重新表述。
每个结构单元都有以下字段。
- Min - MV 下限 —— -Inf(默认) | 标量 | 向量
指定操作变量的下限,以标量或向量形式指定。默认情况下,该下限为 -Inf。
要在整个预测范围内使用相同的下限值,请指定一个标量值。
若要在时间 k 至时间 k+p-1 的预测范围内改变约束,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,最终约束将用于预测范围的剩余步骤。
示例:mpcobj.ManipulatedVariables(1).Min = -5
- Max - MV 上限 —— Inf (默认) | 标量 | 向量
给定操作变量的上界,指定为标量或向量。默认情况下,上限为 Inf。
要在整个预测范围内使用相同的上限,请指定一个标量值。
若要在时间 k 至时间 k+p-1 的预测范围内改变上限,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,最终约束将用于预测范围的剩余步骤。
示例:mpcobj.ManipulatedVariables(1).Max = 5
- MinECR - MV 软下限 —— 0(默认) | 非负标量 | 向量
给定操作变量软下限。等价松弛(ECR)值越大,表示约束越软,可以指定为非负标量或向量。默认情况下,MV 下限为硬约束。
要在整个预测范围内使用相同的 ECR 值,请指定一个标量值。
若要在时间 k 至时间 k+p-1 的预测范围内改变 ECR 值,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,最终 ECR 值将用于预测时间跨度的剩余步骤。
示例:mpcobj.ManipulatedVariables(1).MinECR = 0.01
- MaxECR - MV 上限 —— 0(默认) | 非负标量 | 向量
给定操作变量上限的柔性。等价松弛(ECR)值越大,表示约束越软,可以指定为非负标量或向量。默认情况下,MV 上限为硬约束。
要在整个预测范围内使用相同的 ECR 值,请指定一个标量值。
若要在时间 k 至时间 k+p-1 的预测范围内改变 ECR 值,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,最终 ECR 值将用于预测时间跨度的剩余步骤。
示例:mpcobj.ManipulatedVariables(1).MaxECR = 0.01
- RateMin - MV 变化率下限 —— -无穷大(默认) | 非正标量 | 向量
指定受控变量变化率的下限,以非正标量或向量形式指定。MV 变化率定义为 MV(k) - MV(k-1),其中 k 为当前时间。默认情况下,该下限为-Inf。
要在整个预测范围内使用相同的界限,请指定一个标量值。
若要改变从时间 k 到时间 k+p-1 的预测范围内的界限,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,最终约束将用于预测范围的剩余步骤。
示例:mpcobj.ManipulatedVariables(1).RateMin = -2
- RateMax - MV 变化率上限 —— Inf(默认) | 非负标量 | 矢量
给定操作变量变化率的上限,指定为非负标量或向量。MV 变化率定义为 MV(k) - MV(k-1),其中 k 为当前时间。默认情况下,该下限为 Inf。
要在整个预测范围内使用相同的下限值,请指定一个标量值。
若要改变从时间 k 到时间 k+p-1 的预测范围内的界限,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,最终约束将用于预测范围的剩余步骤。
示例:mpcobj.ManipulatedVariables(1).RateMax = 2
- RateMinECR - MV 变化率软下限 —— 0(默认值) | 非负有限标量 | 向量
给定操作变量变化率软下限。等价松弛(ECR)值越大,表示约束越软,可以指定为非负有限标量或矢量。默认情况下,MV 变化率下限为硬约束。
要在整个预测范围内使用相同的 ECR 值,请指定一个标量值。
若要在时间 k 至时间 k+p-1 的预测范围内改变 ECR 值,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,最终 ECR 值将用于预测时间跨度的剩余步骤。
示例:mpcobj.ManipulatedVariables(2).RateMinECR = 0.01
- RateMaxECR - MV 变化率软上限 —— 0(默认值) | 非负有限标量 | 向量
给定操作变量变化率软上限。等价松弛(ECR)值越大,表示约束越软,可以指定为非负有限标量或矢量。默认情况下,MV 变化率上限为硬约束。
要在整个预测范围内使用相同的 ECR 值,请指定一个标量值。
若要在时间 k 至时间 k+p-1 的预测范围内改变 ECR 值,请指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,最终 ECR 值将用于预测时间跨度的剩余步骤。
示例:mpcobj.ManipulatedVariables(2).RateMaxECR = 0.01
- Target - MV 目标 —— 标量 | 矢量
给定操作变量的目标,指定为标量、向量或 "标称"(默认)。当 Target 为 "标称 "时,操纵变量的目标与 mpcobj.Model.Nominal.U 对应。
要在整个预测范围内使用相同的目标值,请指定一个标量值。
要在时间 k 到时间 k+p-1 的预测范围内改变目标值,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,则在预测范围的剩余步骤中使用最终值。
出于经济或运行原因,当操作变量多于设备输出时,您可能需要为某些操作变量设置目标值以及相应的非零成本函数权重。更多信息,请参阅 "为非方形工厂设计 MPC 控制器 "和 "为受控变量设置目标值"。
示例:mpcobj.ManipulatedVariables(2).Target = [0.3 0.2]
- Name - MV 名称 —— 字符串 | 字符向量
指定操作变量的名称,以字符串或字符向量形式指定。这是一个只读属性。要修改操纵变量的名称,请使用 mpcobj.Model.Plant.InputName。
示例:mpcobj.ManipulatedVariables(2).Name
- Unit - MV 单位 —— ""(默认) | 字符串 | 字符向量
指定操作变量的单位,以字符串或字符向量形式指定。这是一个只读属性。要修改操作变量的单位,请使用 mpcobj.Model.Plant.InputUnit。
示例: mpcobj.ManipulatedVariables(2).Units
- ScaleFactor - MV 比例因子 —— 1(默认) | 正有限标量
给定操作变量的比例因子,指定为正有限标量。指定适当的比例因子可以改善优化时的数值调节。一般情况下,使用操作变量工作范围的振幅。更多信息,请参阅指定比例因子。
示例:mpcobj.ManipulatedVariables(1).ScaleFactor = 10
- Type - MV 类型 —— 连续"(默认) | "整数" | "二进制" | 向量
给定操作变量的类型,指定为
'continuous' —— 表示操作变量是连续的。
'binary' —— 表示被操作变量只能是 0 或 1。
'integer'
—— 表示操作变量为整数。包含所有可能值的矢量 - 将被操作变量限制为指定值,例如 mpcobj.MV(1).Type=[-1,0,0.5,1,2];。
默认情况下,类型设置为 "连续"。
更多信息,请参阅有限控制集 MPC。
示例:mpcobj.ManipulatedVariables(1).Type = 'binary' (二进制变量)
OutputVariables - 输出变量信息、边界和比例因子 —— 结构数组
输出变量(OV)信息、边界和比例因子,指定为包含 Ny 个元素的结构数组,其中 Ny 是输出变量的个数。要访问此属性,可以使用别名 OV 代替 OutputVariables。每个结构元素都包含以下字段
- Min - OV 下限 —— -Inf(默认) | 标量 | 向量
给定输出变量的下限,指定为标量或向量。默认情况下,该下限为 -Inf。
要在整个预测范围内使用相同的下限值,请指定一个标量值。
若要在时间 k+1 到时间 k+p 的预测范围内改变下限值,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,最终约束将用于预测范围的剩余步骤。
示例:mpcobj.OutputVariables(1).Min = -10
- Max - OV 上限 —— Inf (默认) | 标量 | 向量
给定输出变量的上限,指定为标量或向量。默认情况下,该上限为 Inf。
要在整个预测范围内使用相同的上限,请指定一个标量值。
若要在时间 k+1 到时间 k+p 的预测范围内改变上限,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,最终约束将用于预测范围的剩余步骤。
示例:mpcobj.OutputVariables(1).Max = 10
- MinECR - OV 软下限 —— 1(默认) | 非负有限标量 | 向量
给定输出变量软下限。等价松弛(ECR)值越大,表示约束越软,指定为非负有限标量或向量。默认情况下,OV 上限为柔性约束。
为避免在运行时产生不可行的优化问题,最好使用软性 OV 约束。
要在整个预测范围内使用相同的 ECR 值,请指定一个标量值。
要在时间 k+1 到时间 k+p 的预测范围内改变 ECR 值,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,则最终 ECR 值将用于预测时间跨度的剩余步骤。
示例:mpcobj.OutputVariables(1).MinECR = 5
- MaxECR - OV 软上界 —— 1(默认) | 非负有限标量 | 向量
给定输出变量软上限。等价松弛(ECR)值越大,表示约束越软,指定为非负有限标量或向量。默认情况下,OV 下限为柔性约束。
为避免在运行时产生不可行的优化问题,最好使用柔性 OV 下限。
要在整个预测范围内使用相同的 ECR 值,请指定一个标量值。
要在时间 k+1 到时间 k+p 的预测范围内改变 ECR 值,可指定一个最多包含 p 个值的向量。这里,k 是当前时间,p 是预测范围。如果指定的值少于 p,则最终 ECR 值将用于预测时间跨度的剩余步骤。
示例:mpcobj.OutputVariables(1).MaxECR = 10
- Name - OV 名称 —— 字符串 | 字符向量
给定输出变量的名称,以字符串或字符向量形式指定。这是一个只读属性。要修改输出变量的名称,请使用 mpcobj.Model.Plant.OutputName。
示例:mpcobj.OutputVariables(2).Name
- Unit - OV 单位 —— "" (默认) | 字符串 | 字符向量
给定输出变量的单位,以字符串或字符向量形式指定。这是一个只读属性。要修改输出变量的名称,请使用 mpcobj.Model.Plant.OutputUnit。
示例:mpcobj.OutputVariables(2).Units
- ScaleFactor - OV 比例因子 —— 1(默认) | 正有限标量
给定输出变量的比例因子,指定为正有限标量。指定适当的比例因子可以改善优化的数值调节。一般来说,应使用输出变量的工作范围。更多信息,请参阅指定比例因子。
示例:mpcobj.OutputVariables(1).ScaleFactor = 20
DisturbanceVariables - 输入干扰变量信息和比例因子 —— 结构体数组
扰动变量(DV)信息和比例因子,指定为具有 Nd 个元素的结构数组,其中 Nd 为已测量和未测量扰动输入的总数。扰动变量(DisturbanceVariables)中扰动信号的顺序如下:前 Nmd 项与测量输入扰动有关,后 Nud 项与未测量输入扰动有关。要访问此属性,可以使用别名 DV 代替 DisturbanceVariables。
每个结构元素都有以下字段。
- Name - DV 名称 —— 字符串 | 字符向量
以字符串或字符向量形式指定的 DV 名称。这是一个只读属性。要修改干扰变量的名称,请使用 mpcobj.Plant.Inputname。
示例: mpcobj.DisturbanceVariables(1).Name
- Unit - OV 单位 —— ""(默认) | 字符串 | 字符向量
OV 单位,以字符串或字符向量形式指定。这是一个只读属性。要修改扰动变量的单位,请使用 mpcobj.Model.Plant.InputUnit。
示例:mpcobj.DisturbanceVariables(1).Units
- ScaleFactor - DV 比例因子 —— 1(默认) | 正有限标量
DV 比例因子,指定为正有限标量。指定适当的比例因子可以改善优化的数值条件。更多信息,请参阅指定比例因子。
示例:mpcobj.DisturbanceVariables(1).ScaleFactor = 15
Weights - 标准成本函数调整权重 —— 结构体
以结构形式指定的标准代价函数调整权重。控制器将这些权重应用于比例变量。因此,调整权重是无量纲值。输出权重的格式必须与控制器对象的 Weights.OutputVariables 属性的格式一致。例如,不能在控制器对象中指定整个预测范围内的恒定权重,然后再使用 mpcmoveopt 指定随时间变化的权重。
权重具有以下字段。这些字段的值取决于使用的是标准成本函数还是替代成本函数。有关这些成本函数的更多信息,请参阅优化问题。
- ManipulatedVariables - 受操纵的变量调整权重 —— 行向量数组
操纵变量调整权重,用于惩罚偏离 MV 目标的变量,指定为非负值行向量或数组。所有操纵变量的默认权重都是 0。
如果要在整个预测范围内使用相同的权重,可以指定一个长度为 Nmv 的行向量,其中 Nmv 是操纵变量的个数。
要在时间 k 到时间 k+p-1 的预测范围内改变调整权重,可指定一个 Nmv 列、最多 p 行的数组。这里,k 是当前时间,p 是预测范围。每行包含一个预测跨度步长的受控变量调整权重。如果指定的行数少于 p,最后一行的权重将用于预测跨度的剩余步长。
如果使用替代代价函数,请将 Weights.ManipulatedVariables 指定为包含 Nmv-by-Nmv Ru 矩阵的单元格数组。例如,mpcobj.Weights.ManipulatedVariables = {Ru}。Ru 必须是正半inite 矩阵。不支持在整个预测范围内改变 Ru 矩阵。更多信息,请参阅替代成本函数。
示例:mpcobj.Weights.ManipulatedVariables = [0.1 0.2] (0.1 0.2)
- ManipulatedVariablesRate - 受操纵的变量速率调整权重 —— 行向量 | 数组 | 单元数组
操纵可变速率调整权重,用于惩罚控制移动中的大幅变化,指定为行向量或非负值数组。所有操纵变量率的默认权重为 0.1。
要在整个预测范围内使用相同的权重,可指定长度为 Nmv 的行向量,其中 Nmv 为操作变量的数量。
要在时间 k 至时间 k+p-1 的预测范围内改变调整权重,可指定一个 Nmv 列、最多 p 行的数组。这里,k 是当前时间,p 是预测范围。每行包含一个预测跨度步长的可变速率调整权重。如果指定的行数少于 p,最后一行的权重将用于预测跨度的剩余步长。
注意
最佳做法是使用非零操纵可变比率权重。如果所有操纵可变费率权重都是严格正值,则所产生的 QP 问题是严格凸的。如果某些权重为零,则 QP 的 Hessian 可能是正半有限的。为了保持 QP 问题的严格凸性,当 Hessian 矩阵 KΔU 的条件数大于 1012 时,每个对角项都要加上 10*sqrt(eps) 的量。参见成本函数。
如果使用替代代价函数,请将 Weights.ManipulatedVariablesRate 指定为包含 Nmv-by-Nmv RΔu 矩阵的单元格数组。例如,mpcobj.Weights.ManipulatedVariablesRate = {Rdu}。RΔu 必须是正半定量矩阵。不支持在整个预测范围内改变 RΔu 矩阵。更多信息,请参阅替代成本函数。
示例:mpcobj.Weights.ManipulatedVariablesRate = [0.1 0.1]
- OutputVariables - 输出变量调整权重 —— 向量 | 数组
输出变量调整权重,用于惩罚偏离输出参考值的行为,指定为非负值的行向量或数组。所有输出变量的默认权重都是 1。
要在整个预测范围内使用相同的权重,可以指定一个长度为 Ny 的行向量,其中 Ny 是输出变量的个数。
要在时间 k+1 到时间 k+p 的预测范围内改变调整权重,可指定一个 Ny 列、最多 p 行的数组。这里,k 是当前时间,p 是预测范围。每行包含一个预测跨度步长的输出变量调整权重。如果指定的行数少于 p,最后一行的权重将用于预测跨度的剩余步长。
如果使用替代代价函数,请将 Weights.OutputVariables 指定为包含 Ny-by-Ny Q 矩阵的单元格数组。例如,mpcobj.Weights.OutputVariables = {Q}。Q 必须是正半inite 矩阵。不支持在整个预测范围内改变 Q 矩阵。更多信息,请参阅替代成本函数。
示例:mpcobj.Weights.OutputVariables = [1 1]
- ECR - 松弛变量调整权重 —— 1e5(默认值) | 正标量
松弛变量调整权重,指定为正标量。增大或减小等量松弛(ECR)权重,分别使所有柔性约束变硬或变软。
示例:mpcobj.Weights.ECR = 1e4
Optimizer - 优化信息 —— 结构体
优化信息是一个包含以下字段的结构。前三个字段(OptimizationType、Solver 和 SolverOptions)只与内置求解器有关。如果使用自定义求解器进行仿真(将 CustomSolver 设置为 true),仿真时将忽略这三个字段。同样,如果使用自定义求解器进行代码生成(将 CustomSolverCodeGen 设置为 true),代码生成时也会忽略这三个字段。有关支持的 QP 求解器的更多信息,请参阅 QP 求解器。
- OptimizationType - 优化类型—— "QP"(默认) | "MIQP
此属性为只读。
优化类型,对于连续问题,返回 "QP";对于有限集问题,返回 "MIQP"。该属性由软件根据 mpc 对象的 ManipulatedVariables.Type 属性自动选择。有关有限集 MPC 的更多信息,请参阅有限控制集 MPC。
示例:"MIQP"
- Solver - 求解器算法 —— "主动集"(默认) | "内点" | "admm" | "分支边界"
求解器算法,指定为以下算法之一:
"主动集"- 使用 KWIK 主动集算法求解 QP 问题。
"内点"- 使用带有 Mehrotra 预测校正器的原始双内部点算法求解 QP 问题。
"admm"--使用一阶交替乘法(ADMM)求解器求解 QP 问题。
"分支与边界"- 使用带分支与边界的 KWIK 算法解决 MIQP 问题。当任何操作变量的类型属性设置为 "连续 "以外的其他属性时,将自动选择此方法。
对于需要解决 QP 问题的自定义应用程序,还可以分别使用 mpcActiveSetSolver 和 mpcInteriorPointSolver 函数访问主动集算法和内点算法。
示例:mpcobj.Optimizer.Solver = "interior-point"
- SolverOptions - 求解器选项 —— ActiveSet 对象(默认) | InteriorPoint 对象 | ADMM 对象 | BranchBound 对象
以 ActiveSet、InteriorPoint、ADMM 或 BranchBound 选项对象形式指定的求解器选项。适用的选项对象与优化器属性的求解器字段中选择的求解器相对应。更多信息,请参阅优化问题和 QP 求解器。
- MinOutputECR - 输出约束 ECR 值允许的最小值 —— 0(默认) | 非负标量
允许的输出约束等同松弛(ECR)值的最小值,指定为非负标量。值为 0 表示允许硬输出约束。如果 MPC 控制器的 OutputVariables.MinECR 或 OutputVariables.MaxECR 属性中的任何一个小于 MinOutputECR,则会显示警告,并在计算过程中将该值提高到 MinOutputECR。
示例:mpcobj.Optimizer.MinOutputECR = 1e-10
- UseSuboptimalSolution - 表示是否接受次优解的选项 —— 假(默认) | 真
表示是否接受次优解的选项,以逻辑值指定。当 QP 求解器迭代次数达到最大值但未找到解决方案时(退出选项为 0),控制器会:
如果使用次优解为假,则冻结 MV 值
如果使用次优解为 true,则在最后一次迭代后应用求解器找到的次优解
要根据算法值指定最大迭代次数,请使用 ActiveSetOptions.MaxIterations 或 InteriorPointOptions.MaxIterations。
示例:mpcobj.Optimizer.UseSuboptimalSolution = true
- CustomSolver - 表示是否使用自定义 QP 求解器进行仿真的选项 —— false(默认) | true
表示是否使用自定义 QP 求解器进行仿真的选项,以逻辑值指定。如果 CustomSolver 为 true,用户必须在 MATLAB® 路径上提供 mpcCustomSolver 函数。
该自定义求解器不用于生成代码。要使用自定义求解器为控制器生成代码,请使用 CustomSolverCodeGen。
如果 CustomSolver 为真,控制器会忽略仿真的 OptimizationType、Solver 和 SolverOptions 属性。
您还可以使用函数 setCustomSolver 自动配置 mpcobj,将 quadprog(优化工具箱)的 active-set 算法用作仿真和代码生成的自定义 QP 求解器。
有关使用自定义 QP 求解器的更多信息,请参阅 QP 求解器。
示例:mpcobj.Optimizer.CustomSolver = true
- CustomSolverCodeGen - 表示是否使用自定义 QP 求解器生成代码的选项 —— false(默认) | true
表示是否使用自定义 QP 求解器生成代码的选项,以逻辑值指定。如果 CustomSolverCodeGen 为 true,则必须在 MATLAB 路径上提供 mpcCustomSolverCodeGen 函数。
此自定义求解器不用于仿真。要使用自定义求解器仿真控制器,请使用 CustomSolver。
您还可以使用函数 setCustomSolver 自动配置 mpcobj,将 quadprog(优化工具箱)的 active-set 算法用作仿真和代码生成的自定义 QP 求解器。
有关使用自定义 QP 求解器的更多信息,请参阅 QP 求解器。
示例:mpcobj.Optimizer.CustomSolverCodeGen = true
Notes - 用户备注 —— {}(默认) | 单元字符向量数组
与 MPC 控制器相关的用户注释,以字符矢量单元数组的形式指定。示例:mpcobj.Notes = {'纵向控制器'; '版本 2.1'}
UserData - 用户数据 —— [](默认) | 任何 MATLAB 数据
与 MPC 控制器相关的用户数据,指定为任何 MATLAB 数据,如单元数组或结构。示例:mpcobj.UserData = {'参数',0.2,[3 4]'}
History - 控制器创建日期和时间 —— 矢量
此属性为只读。控制器创建日期和时间,指定为包含以下元素的向量:
History(1) - 年
History(2) - 月
历史记录(3) - 日
History(4) - 小时
历史记录(5) - 分钟
历史记录(6) - 秒
使用 datestr(mpcobj.History) 以字符向量形式显示控制器创建日期。
示例: mpcobj.History = datevec(now)
四、对象函数
buildMEX | 建立 MEX 文件,解决 MPC 控制问题 |
cloffset | 从输出干扰到测量输出计算闭环直流增益,假定约束在稳态时无效 |
compare | 比较两个 MPC 对象 |
generateExplicitMPC | 将隐式 MPC 控制器转换为显式 MPC 控制器 |
generatePlotParameters | plotSection 的参数 |
generateExplicitOptions | 显式 MPC 生成的优化选项 |
generateExplicitRange | 显式 MPC 控制法参数的约束 |
get | 从 MPC 对象获取属性值 |
getCodeGenerationData | 为 mpcmoveCodeGeneration 创建数据结构 |
getEstimator | 为估计器设计获取卡尔曼增益和模型 |
getconstraint | 从模型预测控制器获取混合输入/输出约束条件 |
getindist | 检索未测量的输入干扰模型 |
getname | 从 MPC 工厂模型中检索 I/O 信号名称 |
getoutdist | 检索未测量的输出干扰模型 |
mpcmove | 计算最优控制操作并更新控制器状态 |
mpcmoveAdaptive | 计算最佳控制,更新预测模型 |
plot | 绘制 MPC 仿真生成的响应图 |
review | 在运行时检查 MPC 控制器是否存在设计错误和稳定性问题 |
sensitivity | 计算性能指标值及其对 MPC 控制器对角线权重的敏感性 |
set | 设置或修改 MPC 对象属性 |
setCustomSolver | 将 MPC 对象配置为使用优化工具箱中的 QP 求解器作为自定义求解器 |
setEstimator | 修改模型预测控制器的状态估计器 |
setconstraint | 为模型预测控制器设置混合输入/输出约束条件 |
setindist | 修改未测量的输入干扰模型 |
setname | 在 MPC 工厂模型中设置 I/O 信号名称 |
setoutdist | 修改未测量的输出干扰模型 |
setterminal | 终端权重和约束 |
sim | 用线性工厂仿真闭环中的 MPC 控制器 |
size | MPC 控制器的大小和阶数 |
ss | 将无约束 MPC 控制器转换为状态空间线性系统形式 |
tf | 将无约束 MPC 控制器转换为线性传递函数形式 |
trim | 针对给定的输入和输出,计算 MPC 控制器工厂模型状态的稳态值 |
五、示例
创建具有指定预测和控制范围的 MPC 控制器
创建具有传递函数的工厂模型
Plant = tf([1 1],[1 2 0]);
该设备是 SISO 设备,因此其输入必须是可操作的变量,输出必须是可测量的。一般来说,好的做法是使用 setmpcsignals 命令或 LTI InputGroup 和 OutputGroup 属性指定所有工厂信号类型。
指定控制器的采样时间。
Ts = 0.1;
定义被操作变量的边界,u,
MV = struct(Min=-1,Max=1);
MV 仅包含被操作变量的上下限。一般来说,您可以指定其他 MV 属性。如果不指定其他属性,则将使用默认值。
指定 20 步预测跨度和 3 步控制跨度。
p = 20;
m = 3;
使用指定值创建 MPC 控制器。第五个输入参数为空,因此使用默认的调整权重。
mpcobj = mpc(Plant,Ts,p,m,[],MV);
-->"Weights.ManipulatedVariables" is empty. Assuming default 0.00000.
-->"Weights.ManipulatedVariablesRate" is empty. Assuming default 0.10000.
-->"Weights.OutputVariables" is empty. Assuming default 1.00000.
六、算法
为尽量减少计算开销,模型预测控制器的创建分为两个阶段。第一个阶段是在使用 mpc 函数或更改控制器属性时创建控制器。创建包括基本的有效性和一致性检查,如信号维度和权重的非负性。
第二个阶段是初始化,即在仿真或分析程序中首次使用对象时进行初始化。初始化会计算高效数值计算所需的所有常量属性,如定义最优控制问题的矩阵和状态估计增益。初始化过程中还会进行其他诊断性检查,例如验证控制器状态是否可观测。
默认情况下,这两个阶段都会在命令窗口中显示信息消息。您可以使用 mpcverbosity 函数打开或关闭这些消息。
七、其他功能
您还可以使用 MPC Designer 应用程序创建模型预测控制器。