MATLAB - 模型预测控制入门教程(MPC)

简介: MATLAB - 模型预测控制入门教程(MPC)

前言 —— 什么是模型预测控制?

模型预测控制(MPC)是一种最优控制技术,其计算出的控制输入可在有限的、后退的时间跨度内使受限动态系统的成本函数最小化。

在每个时间步长内,MPC 控制器接收或估计被控对象的当前状态。然后,它通过求解一个依赖于被控对象模型并取决于当前系统状态的约束优化问题,计算出一系列控制行动,从而使整个时间跨度内的成本最小化。然后,控制器只对被控对象执行第一个计算出的控制操作,而不考虑后面的操作。在接下来的时间步中,该过程将重复进行。

一、MPC 基本控制回路

当成本函数为二次函数、被控对象为线性且无约束条件、视界趋于无穷大时,MPC 等同于线性二次调节器 (LQR) 控制,如果卡尔曼滤波器从输入和输出中估计出被控对象的状态,则等同于线性二次高斯 (LQG) 控制。

在实践中,尽管时间跨度有限,但 MPC 通常继承了传统最优控制的许多有用特性,如自然处理多输入多输出 (MIMO) 被控对象的能力、处理时间延迟(可能在不同通道中持续时间不同)的能力,以及针对建模错误的内置鲁棒性特性。还可通过使用特定的终端约束来保证标称稳定性。其他重要的 MPC 功能还包括明确处理约束的能力,以及利用未来参考和干扰信号信息的可能性。


有关该主题的介绍,请参阅参考书目中的前两本书。有关控制器内部模型及其估算器的解释,请分别参阅 MPC 预测模型和控制器状态估算。有关优化问题的概述,请参见优化问题。有关求解器的更多信息,请参阅 QP 求解器。


在每个时间步在线求解受限最优控制可能需要大量计算资源。不过在某些情况下,例如对于线性受控对象,可以预先计算并存储整个状态空间的控制律,而不是实时求解优化。这种方法被称为显式 MPC。

二、MPC 控制器设计流程

2.1 控制线性系统

在最简单的情况下(也称为传统或线性 MPC),即被控对象和约束条件均为线性,成本函数为二次型,开发 MPC 控制器的一般工作流程包括以下步骤。


  1. 指定被控对象 —— 定义 MPC 控制器用于预测整个预测范围被控对象行为的模型。通常,您可以通过在给定运行点对非线性被控对象进行线性化并将其指定为 LTI 对象(如 ss、tf 和 zpk)来获得此工厂模型。您也可以使用 System Identification Toolbox™ 软件识别被控对象。请注意,一个限制是被控对象的控制输入和任何输出之间不能有直接馈通。有关此步骤的更多信息,请参阅构建线性时间不变模型、指定多输入多输出被控对象模型、线性化 Simulink 模型、使用 MPC Designer 线性化 Simulink 模型以及从数据中识别被控对象。
  2. 定义信号类型 —— 出于 MPC 设计目的,通常将被控对象信号分为不同的输入和输出类型。在上一步定义的被控对象中,您通常使用 setmpcsignals 来指定每个被控对象的输出是可测量的还是不可测量的,以及每个被控对象的输入是受控变量(即控制输入)还是可测量的或不可测量的干扰。您也可以在 MPC Designer 中指定信号类型。更多信息,请参阅 MPC 信号类型。
  3. 创建 MPC 对象 - 在被控对象中指定信号类型后,在 MATLAB® 工作区(或 MPC 设计器)中创建一个 mpc 对象,并在该对象中指定控制器参数,如采样时间、预测和控制范围、代价函数权重、约束和扰动模型。下面概述了需要选择的最重要参数。
  • 采样时间 —— 典型的起始假设包括设置控制器的采样时间,使 10 至 20 个采样覆盖设备的上升时间。
  • 预测范围 —— 控制器试图最小化成本的未来样本数。它应足够长,以捕捉瞬态响应并涵盖系统的重要动态。时间跨度越长,性能和计算要求就越高。典型的预测范围为 10 到 20 个样本。
  • 控制范围 —— 在预测范围内,控制器用于最小化成本的自由控制移动次数。与预测范围类似,较长的控制范围会增加性能和计算要求。对于控制跨度,一个好的经验法则是将其设定为预测跨度的 10%到 20%,同时至少有两到三个步骤。有关采样时间和跨度的更多信息,请参阅选择采样时间和跨度。
  • 标称值 —— 如果您的被控对象是通过围绕运行点对非线性模型进行线性化得到的,那么一个好的做法是为 输入、状态、状态导数(如果不为零)和输出设置标称值。这样做可以指定实际输入和输出的约束条件(而不是指定与标称值的偏差),并在使用 Simulink® 或 sim 命令时更轻松地模拟闭环和可视化信号。
  • 比例系数 —— 良好的做法是为每个被控对象的输入和输出指定比例系数,尤其是当它们的范围和幅度相差很大时。适当的比例系数可以改善基础优化问题的数值条件,使权重调整更容易。一个好的建议是将比例因子设置为近似等于相关信号的跨度(以工程单位表示的最大值和最小值之差)。更多信息,请参阅指定比例因子。
  • 约束条件 —— 约束通常反映物理限制。您可以指定硬约束(在优化过程中不能违反)或软约束(在很小程度上可以违反)。一个好的建议是,必要时对输入或其变化率设置硬约束,而必要时将输出约束设置为软约束。同时对输入和输出设置硬约束可能会导致不可行性,一般不建议这样做。更多信息,请参阅指定约束。
  • 权重 —— 您可以通过调整代价函数调整权重来优先实现控制器的性能目标。通常情况下,较大的输出权重可提供积极的参考跟踪性能,而较大的操纵变率权重则可使控制动作更平滑,从而提高鲁棒性。更多信息,请参阅调整权重。
  • 干扰和噪声模型 —— 控制器用来计算控制动作的内部预测模型通常由被控对象模型和影响被控对象的干扰和测量噪声模型组成。扰动模型分别指定输入和输出上未测量扰动的动态特性,以便更好地抵抗这些扰动。默认情况下,这些扰动模型被假定为积分器(因此控制器可以抵抗阶跃型扰动),除非另行指定。测量噪声通常假定为白噪声。有关被控对象和干扰模型的更多信息,请参阅 MPC 预测模型和调整干扰和噪声模型。

创建 mpc 对象后,好的做法是使用 cloffset 等函数计算闭环稳态输出灵敏度,从而检查控制器是否能拒绝恒定的输出干扰。更一般的审查也会检查对象是否存在潜在问题。要对预期无约束的时间框架进行更深入的灵敏度和鲁棒性分析,还可以使用 ss、zpk 或 tf 将无约束控制器转换为 LTI 系统对象。相关示例,请参阅审查模型预测控制器的稳定性和鲁棒性问题、使用 MPC Designer 测试 MPC 控制器的鲁棒性、计算稳态输出灵敏度增益和提取控制器。

请注意,mpc 对象的默认值中包含了许多推荐的参数选择;不过,由于每个参数通常都是根据问题的不同而进行权衡的结果,因此您必须根据具体的设备和要求选择合理的参数。

4.模拟闭环 —— 创建 MPC 控制器后,通常会使用以下选项之一模拟控制器与被控对象的闭环控制,以评估控制器的性能。

使用 MATLAB,您可以使用 sim(对线性模型更方便)或 mpcmove(更灵活,可用于更一般的离散时间工厂或干扰信号,并可使用自定义状态估计器)模拟闭环。

使用 Simulink,您可以将 MPC 控制器模块(将您的 mpc 对象作为参数)与 Simulink 中建立的工厂模型一起用于闭环。该选项在模拟更复杂的系统时具有最大的灵活性,并可轻松从控制器生成生产代码。

使用 MPC Designer,您可以模拟线性闭环响应,同时调整控制器参数。

请注意,这些选项中的任何一个都允许仿真模型失配(实际被控对象与控制器用于预测的模型略有不同的情况)。相关示例请参阅 “仿真被控对象模型不匹配的 MPC 控制器”。当提前知道参考干扰和测量干扰时,MPC 可以利用这些信息(也称为前瞻或预览)来提高控制器性能。更多信息请参阅信号预览,相关示例请参阅利用前瞻(预览)提高控制性能。同样,您也可以指定随预测范围变化的调整权重和约束条件。相关示例请参阅运行时更新约束条件、运行时改变输入和输出界限、运行时调整权重和运行时调整水平线。

5. 改进设计 —— 在对闭环进行初步评估后,通常需要通过调整控制器参数和评估不同的模拟场景来完善设计。除了步骤 3 中描述的参数外,您还可以考虑

使用操纵变量阻塞。更多信息,请参阅操纵变量阻塞。

对于超调系统,为受控变量设定参考目标。相关示例请参阅为操纵变量设定目标。

调整卡尔曼状态估计器的增益(或设计自定义状态估计器)。更多信息和相关示例,请参阅控制器状态估计、自定义状态估计和实施等同于内置卡尔曼滤波器的自定义状态估计器。

指定终端约束。有关详细信息和相关示例,请参阅终端权重和约束条件以及使用终端惩罚权重提供 LQR 性能。

指定自定义约束。相关示例请参阅输入和输出线性组合的约束条件和在混合过程中使用自定义约束条件。

指定非对角线成本函数权重。有关示例,请参阅使用非对角线权重矩阵指定替代成本函数。

6.提高执行速度 —— 请参阅 MPC 控制器部署。

7。部署控制器 —— 请参阅 MPC 控制器部署。

2.2 控制线性和时变系统

通常情况下,需要控制的设备只能在给定的工作点附近用线性设备进行局部近似。随着时间的推移和设备运行点的变化,这种近似值可能不再准确。

您可以使用几种方法来处理这些情况,从比较简单的到比较一般和复杂的。

1.自适应 MPC —— 如果工厂的阶次(和时间延迟的数量)不发生变化,您可以设计一个单一的 MPC 控制器(例如用于初始运行点),然后在运行时,您可以在每个时间步更新控制器的预测模型(同时控制器仍假设预测模型在未来的预测范围内保持不变)。

请注意,虽然这种方法最简单,但它要求您持续(即在每个时间步)计算必须提供给控制器的线性化工厂。主要有三种方法


a. 如果您有可靠的工厂模型,可以通过线性化方程在线提取局部线性工厂,前提是这一过程的计算成本不高。如果设备模型的符号方程比较简单,则可以离线推导出任何给定运行条件下线性化设备矩阵的符号表达式。然后,您可以在线计算这些矩阵,并将其提供给自适应 MPC 控制器,而无需在每个时间步执行数值线性化。有关使用此策略的示例,请参阅《使用连续线性化对非线性化学反应器进行自适应 MPC 控制》。

b. 另外,您也可以离线提取一系列线性化工厂模型,覆盖状态-输入空间的相关区域,然后在线使用线性参数可变 (LPV) 工厂,通过插值获得当前运行点的线性工厂。有关使用此策略的示例,请参阅 “使用线性参数变化系统对非线性化学反应器进行自适应 MPC 控制”。

c. 如果被控对象无法用数学模型准确表示,但可以假定有一个已知的结构,并对其参数、稳定性和最小输入噪声做出一些估计,那么就可以使用过去的电厂输入和输出来在线估计电厂模型,不过这可能需要大量计算。有关使用此策略的示例,请参阅《使用在线模型估计对非线性化学反应器进行自适应 MPC 控制》(Adaptive MPC Control of Nonlinear Chemical Reactor Using Online Model Estimation)。

这种方法需要一个 mpc 对象和 mpcmoveAdaptive 函数或自适应 MPC 控制器模块。更多信息,请参阅自适应 MPC 和模型更新策略。


2.线性时变 MPC —— 这种方法是一种自适应 MPC,控制器事先知道系统模型在未来会如何变化,因此在计算整个预测范围内的最优控制时会使用这些信息。在这里,每个时间步不仅要向控制器提供当前的系统模型,还要提供整个预测范围内所有未来步的系统模型。要计算未来各步的工厂模型,可以使用 MPC 控制器在每一步预测的操纵变量和工厂状态作为操作点,围绕这些操作点对非线性模型进行线性化。

当系统模型在预测范围内发生较大变化(但可预测)时,这种方法尤为有用。它需要一个 mpc 对象,并使用 mpcmoveAdaptive 或自适应 MPC 控制器模块。更多信息,请参阅时变 MPC。


3.增益调度 MPC —— 在这种方法中,您需要离线设计多个 MPC 控制器,每个相关运行点一个。然后,随着工厂运行点的变化,在线切换主动控制器。虽然切换控制器在计算上非常简单,但与自适应 MPC 相比,这种方法需要更多的在线存储空间(一般来说也需要更多的设计工作)。这种方法只适用于线性化工厂模型具有不同阶数或时间延迟(切换变量相对于工厂动态变化较慢)的情况。要使用增益调度 MPC,需要创建一个 mpc 对象数组,然后使用 mpcmoveMultiple 函数或多重 MPC 控制器模块进行仿真。更多信息,请参阅增益调度 MPC。有关示例,请参见增益调度 MPC 控制非线性化学反应器。


4,非线性 MPC - 当前面所有方法都不适用,或需要使用非线性约束或非二次成本函数时,您可以使用这种策略来控制高度非线性的系统。与前几种方法相比,这种方法的计算量更大,而且如果系统状态不完全可用,还需要设计和实施非线性状态估计器。有两种非线性 MPC 方法可供选择。


a. 多级非线性 MPC - 对于多级 MPC 控制器而言,水平线上的每一步(阶段)都有自己的决策变量和参数,以及自己的非线性成本和约束条件。最重要的是,特定阶段的成本和约束函数仅是该阶段决策变量和参数的函数。虽然指定多个成本和约束函数可能需要更多的设计时间,但它也允许有效地制定底层优化问题和较小的数据结构,与一般的非线性 MPC 相比,大大减少了计算时间。如果您的非线性 MPC 问题的成本和约束函数不涉及跨阶段项(通常是这种情况),请使用这种方法。要使用多级非线性 MPC,需要创建一个 nlmpcMultistage 对象,然后使用 nlmpcmove 函数或多级非线性 MPC 控制器模块进行仿真。更多信息,请参阅多级非线性 MPC。

b. 通用非线性 MPC - 这种方法是 MPC 中最通用、计算成本最高的一种。由于它明确提供了标准权重和线性边界设置,因此对于唯一的非线性来自系统模型的设计来说,它是一个很好的起点。此外,您还可以使用 nlmpc 对象中的 RunAsLinearMPC 选项来评估线性、时变或自适应 MPC 是否能达到相同的性能。如果可以,请使用这些设计选项,并在可能的情况下评估增益计划 MPC;否则,请考虑多级非线性 MPC。通用非线性 MPC 仅用作初始设计,或当前面的所有设计方案都不可行时才使用。要使用通用非线性 MPC,需要创建一个 nlmpc 对象,然后使用 nlmpcmove 函数或非线性 MPC 控制器模块进行仿真。更多信息,请参阅通用非线性 MPC。

2.3 MPC 控制器部署

当您对控制器设计的仿真性能感到满意时,通常会寻求加快执行速度的方法,以便为未来的仿真优化设计,并满足嵌入式应用程序更严格的计算要求。

您可以使用多种策略来提高 MPC 控制器的计算性能。

  1. 尝试增加采样时间 - 采样频率必须足够高,以覆盖系统的重要带宽。但是,如果采样时间太短,不仅会减少控制器的可用计算时间,还必须使用更大的预测范围来覆盖系统响应,从而增加计算需求。
  2. 尝试缩短预测和控制时间跨度 - 由于这两个时间跨度会直接影响优化问题中决策变量和约束条件的总数,因此会严重影响内存使用量和所需计算量。因此,请检查是否可以通过更短的时间跨度获得类似的跟踪响应和对不确定性的稳健性。请注意,采样时间也有影响。采样频率要足够高(采样时间要足够短),以覆盖系统的重要带宽。但是,如果采样时间太短,不仅硬件上的可用执行时间会缩短,而且还需要更多的预测步骤来覆盖系统响应,从而导致每个时间步骤都需要解决计算成本更高的优化问题。
  3. 仅在需要时使用变化参数 - 通常情况下,模型预测控制工具箱™ 允许您在运行时更改某些参数(如权重或约束系数)。虽然这种功能在某些情况下非常有用,但却大大增加了软件的复杂性。因此,除非特别需要,否则在部署时应考虑明确指定此类参数为常量,从而避免在线更改的可能性。相关示例请参阅运行时更新约束条件、运行时改变输入和输出界限、运行时调整权重和运行时调整水平线。
  4. 限制控制器求解二次优化问题的最大迭代次数,并在达到最大迭代次数时将其配置为使用当前次优解。使用次优解可缩短控制器计算控制动作所需的时间,在某些情况下也不会明显降低性能。无论如何,由于迭代次数在不同的控制区间会有很大变化,因此在实时应用中,建议限制最大迭代次数。这样做有助于确保最坏情况下的执行时间不超过硬件平台允许的总计算时间,而总计算时间由控制器采样时间决定。相关示例请参见在快速 MPC 应用中使用次优解。
  5. 调整求解器及其选项–模型预测控制工具箱的默认求解器是基于 KWIK 算法的 “密集”、"活动集 "求解器,通常在很多情况下性能良好。但是,如果整个范围内的操作变量、输出和约束条件总数很大,则可以考虑使用内点求解器。如果内部设备开环高度不稳定,可以考虑使用稀疏求解器。有关优化问题的概述,请参阅优化问题。有关求解器的更多信息,请参阅 QP 求解器和配置非线性 MPC 的优化求解器。相关示例请参阅使用自定义 QP 求解器模拟 MPC 控制器和使用自定义求解器优化非线性 MPC 的结核病治疗。

对于采样时间极快的应用,可考虑使用显式 MPC。可以证明,线性 MPC 问题(二次方成本函数、线性工厂和约束条件)的解是多面体上的片断仿射 (PWA)。换句话说,约束条件将状态空间划分为多面体 "临界 "区域,在这些区域中,最优控制动作是状态的仿射(线性加常数)函数。显式 MPC 背后的理念是对每个区域的状态函数进行离线预计算。这些函数可以存储在控制器中。运行时,控制器会根据当前运行点所处的临界区域,选择并应用适当的状态反馈法则。由于显式 MPC 控制器不在线解决优化问题,因此所需的计算量要少得多,适用于需要较少采样时间的应用。另一方面,它们的内存占用也大得多。事实上,过大的内存需求会使这种方法不再适用于中型到大型问题。此外,由于显式 MPC 是离线预计算控制器,因此不支持权重、约束或水平线等参数的运行时更新。


要使用显式 MPC,需要从现有的 mpc 对象生成显式MPC 对象,然后使用 mpcmoveExplicit 函数或显式 MPC 控制器模块进行仿真。更多信息,请参阅显式 MPC。


要提高隐式和显式 MPC 的计算性能,最后一个可考虑的方案是简化问题。一些参数,如约束条件的数量和状态变量的数量,会大大增加优化问题的复杂性。因此,如果前面的选项不能令人满意,可以考虑重新调整这些参数(并可能使用更简单的低保真预测模型)来简化问题。


一旦对设计的计算性能感到满意,就可以生成代码,以便从 MATLAB 或 Simulink 部署到实时应用中。更多信息,请参阅生成代码并将控制器部署到实时目标。

目录
相关文章
|
1月前
|
存储 测试技术
MATLAB - 用命令行设计 MPC 控制器
MATLAB - 用命令行设计 MPC 控制器
19 5
|
6天前
|
算法 5G 数据安全/隐私保护
3D-MIMO信道模型的MATLAB模拟与仿真
该研究利用MATLAB 2022a进行了3D-MIMO技术的仿真,结果显示了不同场景下的LOS概率曲线。3D-MIMO作为5G关键技术之一,通过三维天线阵列增强了系统容量和覆盖范围。其信道模型涵盖UMa、UMi、RMa等场景,并分析了LOS/NLOS传播条件下的路径损耗、多径效应及空间相关性。仿真代码展示了三种典型场景下的LOS概率分布。
19 1
|
14天前
|
监控 算法 安全
基于颜色模型和边缘检测的火焰识别FPGA实现,包含testbench和matlab验证程序
本项目展示了基于FPGA的火焰识别算法,可在多种应用场景中实时检测火焰。通过颜色模型与边缘检测技术,结合HSV和YCbCr颜色空间,高效提取火焰特征。使用Vivado 2019.2和Matlab 2022a实现算法,并提供仿真结果与测试样本。FPGA平台充分发挥并行处理优势,实现低延迟高吞吐量的火焰检测。项目包含完整代码及操作视频说明。
|
14天前
|
算法
基于GA遗传优化的离散交通网络双层规划模型设计matlab仿真
该程序基于GA遗传优化设计了离散交通网络的双层规划模型,以路段收费情况的优化为核心,并通过一氧化碳排放量评估环境影响。在MATLAB2022a版本中进行了验证,显示了系统总出行时间和区域排放最小化的过程。上层模型采用多目标优化策略,下层则确保总阻抗最小,实现整体最优解。
|
15天前
|
算法
基于SIR模型的疫情发展趋势预测算法matlab仿真
该程序基于SIR模型预测疫情发展趋势,通过MATLAB 2022a版实现病例增长拟合分析,比较疫情防控力度。使用SIR微分方程模型拟合疫情发展过程,优化参数并求解微分方程组以预测易感者(S)、感染者(I)和移除者(R)的数量变化。![]该模型将总人群分为S、I、R三部分,通过解析或数值求解微分方程组预测疫情趋势。
|
4天前
|
算法 5G 数据安全/隐私保护
SCM信道模型和SCME信道模型的matlab特性仿真,对比空间相关性,时间相关性,频率相关性
该简介展示了使用MATLAB 2022a进行无线通信信道仿真的结果,仿真表明信道的时间、频率和空间相关性随间隔增加而减弱,并且宏小区与微小区间的相关性相似。文中介绍了SCM和SCME模型,分别用于WCDMA和LTE/5G系统仿真,重点在于其空间、时间和频率相关性的建模。SCME模型在SCM的基础上进行了扩展,提供了更精细的参数化,增强了模型的真实性和复杂度。最后附上了MATLAB核心程序,用于计算不同天线间距下的空间互相关性。
10 0
|
1月前
|
数据建模 Python
MATLAB - mpcobj = mpc(model,ts,P,M,W,MV,OV,DV) 函数(上)
MATLAB - mpcobj = mpc(model,ts,P,M,W,MV,OV,DV) 函数
30 7
|
1月前
|
算法 数据建模 Python
MATLAB - mpcobj = mpc(model,ts,P,M,W,MV,OV,DV) 函数(下)
MATLAB - mpcobj = mpc(model,ts,P,M,W,MV,OV,DV) 函数
37 3
|
1月前
|
机器人
MATLAB - 机器人任务空间运动模型
MATLAB - 机器人任务空间运动模型
27 1
|
1月前
|
机器学习/深度学习
MATLAB - 机翼摇摆过程中飞机的模型参考自适应控制
MATLAB - 机翼摇摆过程中飞机的模型参考自适应控制
26 0