赞
踩
最优控制介绍
一级倒立摆控制 —— 系统建模(传递函数模型与状态空间方程表示)
一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现
一级倒立摆控制 —— LQR 控制器设计及 MATLAB 实现
模型预测控制(MPC)是一种最优控制技术,其计算出的控制输入可在有限的、后退的时间跨度内使受限动态系统的成本函数最小化。
在每个时间步长内,MPC 控制器接收或估计被控对象的当前状态。然后,它通过求解一个依赖于被控对象模型并取决于当前系统状态的约束优化问题,计算出一系列控制行动,从而使整个时间跨度内的成本最小化。然后,控制器只对被控对象执行第一个计算出的控制操作,而不考虑后面的操作。在接下来的时间步中,该过程将重复进行。
当成本函数为二次函数、被控对象为线性且无约束条件、视界趋于无穷大时,MPC 等同于线性二次调节器 (LQR) 控制,如果卡尔曼滤波器从输入和输出中估计出被控对象的状态,则等同于线性二次高斯 (LQG) 控制。
在实践中,尽管时间跨度有限,但 MPC 通常继承了传统最优控制的许多有用特性,如自然处理多输入多输出 (MIMO) 被控对象的能力、处理时间延迟(可能在不同通道中持续时间不同)的能力,以及针对建模错误的内置鲁棒性特性。还可通过使用特定的终端约束来保证标称稳定性。其他重要的 MPC 功能还包括明确处理约束的能力,以及利用未来参考和干扰信号信息的可能性。
有关该主题的介绍,请参阅参考书目中的前两本书。有关控制器内部模型及其估算器的解释,请分别参阅 MPC 预测模型和控制器状态估算。有关优化问题的概述,请参见优化问题。有关求解器的更多信息,请参阅 QP 求解器。
在每个时间步在线求解受限最优控制可能需要大量计算资源。不过在某些情况下,例如对于线性受控对象,可以预先计算并存储整个状态空间的控制律,而不是实时求解优化。这种方法被称为显式 MPC。
在最简单的情况下(也称为传统或线性 MPC),即被控对象和约束条件均为线性,成本函数为二次型,开发 MPC 控制器的一般工作流程包括以下步骤。
指定被控对象 —— 定义 MPC 控制器用于预测整个预测范围被控对象行为的模型。通常,您可以通过在给定运行点对非线性被控对象进行线性化并将其指定为 LTI 对象(如 ss、tf 和 zpk)来获得此工厂模型。您也可以使用 System Identification Toolbox™ 软件识别被控对象。请注意,一个限制是被控对象的控制输入和任何输出之间不能有直接馈通。有关此步骤的更多信息,请参阅构建线性时间不变模型、指定多输入多输出被控对象模型、线性化 Simulink 模型、使用 MPC Designer 线性化 Simulink 模型以及从数据中识别被控对象。
定义信号类型 —— 出于 MPC 设计目的,通常将被控对象信号分为不同的输入和输出类型。在上一步定义的被控对象中,您通常使用 setmpcsignals 来指定每个被控对象的输出是可测量的还是不可测量的,以及每个被控对象的输入是受控变量(即控制输入)还是可测量的或不可测量的干扰。您也可以在 MPC Designer 中指定信号类型。更多信息,请参阅 MPC 信号类型。
创建 MPC 对象 - 在被控对象中指定信号类型后,在 MATLAB® 工作区(或 MPC 设计器)中创建一个 mpc 对象,并在该对象中指定控制器参数,如采样时间、预测和控制范围、代价函数权重、约束和扰动模型。下面概述了需要选择的最重要参数。
创建 mpc 对象后,好的做法是使用 cloffset 等函数计算闭环稳态输出灵敏度,从而检查控制器是否能拒绝恒定的输出干扰。更一般的审查也会检查对象是否存在潜在问题。要对预期无约束的时间框架进行更深入的灵敏度和鲁棒性分析,还可以使用 ss、zpk 或 tf 将无约束控制器转换为 LTI 系统对象。相关示例,请参阅审查模型预测控制器的稳定性和鲁棒性问题、使用 MPC Designer 测试 MPC 控制器的鲁棒性、计算稳态输出灵敏度增益和提取控制器。
请注意,mpc 对象的默认值中包含了许多推荐的参数选择;不过,由于每个参数通常都是根据问题的不同而进行权衡的结果,因此您必须根据具体的设备和要求选择合理的参数。
模拟闭环 —— 创建 MPC 控制器后,通常会使用以下选项之一模拟控制器与被控对象的闭环控制,以评估控制器的性能。
请注意,这些选项中的任何一个都允许仿真模型失配(实际被控对象与控制器用于预测的模型略有不同的情况)。相关示例请参阅 “仿真被控对象模型不匹配的 MPC 控制器”。当提前知道参考干扰和测量干扰时,MPC 可以利用这些信息(也称为前瞻或预览)来提高控制器性能。更多信息请参阅信号预览,相关示例请参阅利用前瞻(预览)提高控制性能。同样,您也可以指定随预测范围变化的调整权重和约束条件。相关示例请参阅运行时更新约束条件、运行时改变输入和输出界限、运行时调整权重和运行时调整水平线。
改进设计 —— 在对闭环进行初步评估后,通常需要通过调整控制器参数和评估不同的模拟场景来完善设计。除了步骤 3 中描述的参数外,您还可以考虑
提高执行速度 —— 请参阅 MPC 控制器部署。
部署控制器 —— 请参阅 MPC 控制器部署。
通常情况下,需要控制的设备只能在给定的工作点附近用线性设备进行局部近似。随着时间的推移和设备运行点的变化,这种近似值可能不再准确。
您可以使用几种方法来处理这些情况,从比较简单的到比较一般和复杂的。
自适应 MPC —— 如果工厂的阶次(和时间延迟的数量)不发生变化,您可以设计一个单一的 MPC 控制器(例如用于初始运行点),然后在运行时,您可以在每个时间步更新控制器的预测模型(同时控制器仍假设预测模型在未来的预测范围内保持不变)。
请注意,虽然这种方法最简单,但它要求您持续(即在每个时间步)计算必须提供给控制器的线性化工厂。主要有三种方法
这种方法需要一个 mpc 对象和 mpcmoveAdaptive 函数或自适应 MPC 控制器模块。更多信息,请参阅自适应 MPC 和模型更新策略。
线性时变 MPC —— 这种方法是一种自适应 MPC,控制器事先知道系统模型在未来会如何变化,因此在计算整个预测范围内的最优控制时会使用这些信息。在这里,每个时间步不仅要向控制器提供当前的系统模型,还要提供整个预测范围内所有未来步的系统模型。要计算未来各步的工厂模型,可以使用 MPC 控制器在每一步预测的操纵变量和工厂状态作为操作点,围绕这些操作点对非线性模型进行线性化。
当系统模型在预测范围内发生较大变化(但可预测)时,这种方法尤为有用。它需要一个 mpc 对象,并使用 mpcmoveAdaptive 或自适应 MPC 控制器模块。更多信息,请参阅时变 MPC。
增益调度 MPC —— 在这种方法中,您需要离线设计多个 MPC 控制器,每个相关运行点一个。然后,随着工厂运行点的变化,在线切换主动控制器。虽然切换控制器在计算上非常简单,但与自适应 MPC 相比,这种方法需要更多的在线存储空间(一般来说也需要更多的设计工作)。这种方法只适用于线性化工厂模型具有不同阶数或时间延迟(切换变量相对于工厂动态变化较慢)的情况。要使用增益调度 MPC,需要创建一个 mpc 对象数组,然后使用 mpcmoveMultiple 函数或多重 MPC 控制器模块进行仿真。更多信息,请参阅增益调度 MPC。有关示例,请参见增益调度 MPC 控制非线性化学反应器。
非线性 MPC - 当前面所有方法都不适用,或需要使用非线性约束或非二次成本函数时,您可以使用这种策略来控制高度非线性的系统。与前几种方法相比,这种方法的计算量更大,而且如果系统状态不完全可用,还需要设计和实施非线性状态估计器。有两种非线性 MPC 方法可供选择。
当您对控制器设计的仿真性能感到满意时,通常会寻求加快执行速度的方法,以便为未来的仿真优化设计,并满足嵌入式应用程序更严格的计算要求。
您可以使用多种策略来提高 MPC 控制器的计算性能。
对于采样时间极快的应用,可考虑使用显式 MPC。可以证明,线性 MPC 问题(二次方成本函数、线性工厂和约束条件)的解是多面体上的片断仿射 (PWA)。换句话说,约束条件将状态空间划分为多面体 "临界 "区域,在这些区域中,最优控制动作是状态的仿射(线性加常数)函数。显式 MPC 背后的理念是对每个区域的状态函数进行离线预计算。这些函数可以存储在控制器中。运行时,控制器会根据当前运行点所处的临界区域,选择并应用适当的状态反馈法则。由于显式 MPC 控制器不在线解决优化问题,因此所需的计算量要少得多,适用于需要较少采样时间的应用。另一方面,它们的内存占用也大得多。事实上,过大的内存需求会使这种方法不再适用于中型到大型问题。此外,由于显式 MPC 是离线预计算控制器,因此不支持权重、约束或水平线等参数的运行时更新。
要使用显式 MPC,需要从现有的 mpc 对象生成显式MPC 对象,然后使用 mpcmoveExplicit 函数或显式 MPC 控制器模块进行仿真。更多信息,请参阅显式 MPC。
要提高隐式和显式 MPC 的计算性能,最后一个可考虑的方案是简化问题。一些参数,如约束条件的数量和状态变量的数量,会大大增加优化问题的复杂性。因此,如果前面的选项不能令人满意,可以考虑重新调整这些参数(并可能使用更简单的低保真预测模型)来简化问题。
一旦对设计的计算性能感到满意,就可以生成代码,以便从 MATLAB 或 Simulink 部署到实时应用中。更多信息,请参阅生成代码并将控制器部署到实时目标。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。