MATLAB - mpcobj = mpc(model,ts,P,M,W,MV,OV,DV) 函数(下)

简介: MATLAB - mpcobj = mpc(model,ts,P,M,W,MV,OV,DV) 函数

MATLAB - mpcobj = mpc(model,ts,P,M,W,MV,OV,DV) 函数(上)+https://developer.aliyun.com/article/1585319

  • 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 应用程序创建模型预测控制器。

目录
相关文章
|
2月前
|
存储 算法 数据可视化
MATLAB - 模型预测控制入门教程(MPC)
MATLAB - 模型预测控制入门教程(MPC)
87 9
|
2月前
|
数据建模 Python
MATLAB - mpcobj = mpc(model,ts,P,M,W,MV,OV,DV) 函数(上)
MATLAB - mpcobj = mpc(model,ts,P,M,W,MV,OV,DV) 函数
34 7
|
2月前
|
存储 测试技术
MATLAB - 用命令行设计 MPC 控制器
MATLAB - 用命令行设计 MPC 控制器
23 5
|
2月前
|
算法
MATLAB - MPC - QP Solvers
MATLAB - MPC - QP Solvers
49 4
|
2月前
|
存储
MATLAB - 使用 MPC Designer 线性化 Simulink 模型
MATLAB - 使用 MPC Designer 线性化 Simulink 模型
37 1
|
2月前
|
自然语言处理 并行计算 自动驾驶
MATLAB - 模型预测控制(MPC)控制入门 —— 设计并仿真 MPC 控制器
MATLAB - 模型预测控制(MPC)控制入门 —— 设计并仿真 MPC 控制器
217 1
|
2月前
|
数据可视化
MATLAB - 利用非线性模型预测控制(Nonlinear MPC)来控制四旋翼飞行器
MATLAB - 利用非线性模型预测控制(Nonlinear MPC)来控制四旋翼飞行器
55 0
|
2月前
|
自然语言处理
一级倒立摆控制 - 非线性 MPC 控制及 MATLAB 实现
一级倒立摆控制 - 非线性 MPC 控制及 MATLAB 实现
42 0
|
2月前
|
机器学习/深度学习 数据建模 调度
MATLAB - 自适应 MPC(Adaptive MPC)
MATLAB - 自适应 MPC(Adaptive MPC)
42 0
|
2月前
MATLAB - MPC - 优化问题(Optimization Problem)
MATLAB - MPC - 优化问题(Optimization Problem)
88 0

热门文章

最新文章

下一篇
无影云桌面