Advertisement

模型预测控制(MPC)简介及matlab实现

阅读量:

模型预测控制(MPC)是一种基于模型的预测控制方法,通过优化未来控制量序列来最小化系统输出与参考轨迹的误差。其核心思想是利用模型预测系统的未来行为,并通过优化方法确定最优控制序列。MPC具有处理多输入多输出系统、约束优化以及向前考虑未来时间步的能力。其数学建模通常采用线性模型或非线性模型,线性模型下常用二次规划方法求解优化问题。MPC与PID的主要区别在于:PID控制器仅基于当前误差和历史信息,缺乏前瞻性;而MPC通过优化未来控制量序列,具有更强的预测和优化能力。Matlab中,MPC控制器的实现通常涉及构建状态空间模型、设计代价函数并求解二次规划问题。

模型预测控制(MPC)简介及matlab实现

  • 基本概念

  • MPC算法 整体流程

  • 数学建模

    • 线性模型
  • MPC与PID的区别

  • Matlab实现MPC函数

在这里插入图片描述

基本概念

全称 :Model-based Predictive Control(MPC)—模型预测控制

MPC的本质是基于现有的模型,结合系统当前的状态和未来一系列的控制量,推导出系统未来可能的输出结果。随后,将这些预测结果与预期的系统输出进行对比,计算出相应的代价函数。通过优化算法,系统将不断调整并优化未来一系列控制量的取值,以使计算得到的代价函数达到最小值。最终优化后的控制量序列即为该算法的输出结果。

在这里插入图片描述

核心思想:通过优化方法求解最优控制器,其中,优化方法通常采用二次规划(Quadratic Programming)。

MPC控制器经过优化设计得到的控制指令序列,实际上是系统在未来时间段内发出的控制指令序列。然而,由于理论模型与实际系统模型之间存在误差,因此,更远时间段内的控制指令对系统控制的实际效果较为有限,因此,MPC控制器在实际应用中,通常仅会执行输出序列中的第一个控制指令。

模型分类

机理模型
基于数据的模型,例如采用基于神经网络的训练方法,基于数据的模型的MPC可以与基于模型的RL方法相结合。

基于现有的数学模型,推导出有限时间区间内的控制指令序列,以计算出系统的未来行为模式。

控制:优化的控制量,是一个未来有限时间步的控制序列

预测区间(Predictive Horizon):
在k时刻,我们能够测量到系统的当前状态y(k),通过优化计算得到一系列控制量u(k)、u(k+1)、u(k+2)直至u(k+j)。基于模型和这些控制量的组合,可以得到系统未来j个时间步的状态估计值y(k)、y(k+1)、y(k+2)直至y(k+j)。

在预测区间中,系统未来状态的预测值y(k), y(k+1), y(k+2), y(k+j)被定义为预测区间内的系统预测值,即一次优化后预测未来输出的时间步数。

控制区间(Control Horizon)
将控制估计的部分被定义为控制区间,通过优化计算得到u(k),u(k+1),u(k+2),u(k+j)这些控制量被称作控制区间内的控制量。
在获得最优输入后,我们仅施加当前时刻的输入u(k),即控制区间的第一位控制量。

区间参数配置:
设置过小的控制区间,可能导致控制效果不佳,而若设置控制区间与预测区间相等,则可能导致仅在控制范围的前部区域表现出较好的效果,后部区域的控制效果显著下降,同时计算开销也会大幅增加。

约束:对于约束,一般分为:

  • 硬约束:物理特性上的限制,必须遵守,如方向盘转向幅度、刹车力度
  • 软约束:软件层面的规定,允许超出,如车辆的最大速度限制

MPC 优点

该系统具备处理多输入多输出系统(MIMO)的能力。它能够处理各种约束条件,例如安全性约束和上下限值。该方法基于未来时间步的有限时间域优化,具备一定的预测能力。

控制框图:

在这里插入图片描述

MPC算法 整体流程

模型预测控制在k时刻共需三步

第一步:获取系统的当前状态;

第二步:基于u(k),u(k+1),u(k+2),u(k+j)进行最优化处理,代价函数为

在这里插入图片描述

其中EN 表示误差的终值,也是衡量优劣的一种标准。

第三步:只取u ( k )作为控制输入施加在系统上。

在下一阶段重复前述的三个步骤,在后续阶段的预测中,我们采用的是后续阶段的状态信息,该方案可被称作滚动优化控制,缩写为Receding Horizon Control(RHC)。

数学建模

线性模型

在模型为线性的情况下,MPC的设计过程通常涉及采用二次规划方法来解决优化问题。

在这里插入图片描述

基于所建立的模型框架和输入数据u(k),u(k+1),...,u(k+m),我们可以推导出未来m个时间步的状态序列。

在这里插入图片描述

将上面m步写成矩阵向量形式:

在这里插入图片描述

其中,

在这里插入图片描述

在式(B)中,下三角矩阵的形式直接揭示了系统在时间维度上的因果关系。具体而言,这表明k+1时刻的输入对k时刻的输出没有直接影响,同时k+2时刻的输入对k和k+1时刻的输出也没有直接影响。

假定参考轨迹为

在这里插入图片描述

则MPC的一个简单的目标代价函数如下:

在这里插入图片描述
在这里插入图片描述

以防止控制输入过大,uTRu 一项被引入到代价函数中,以确保控制量的大小得到限制。

将状态方程代入代价函数后,仅剩变量u。如上所述,该最优化问题可通过二次规划方法求解,从而获得满足目标代价函数的最优控制序列。

MPC与PID的区别

PID控制器不具有"前瞻性":参与计算的各个量,有当前时刻的偏差、上一个控制周期的偏差以及之前所有偏差的累积总和,而没有未来的偏差。 PID属于基于参数的控制方式。PID仅仅通过目标值与当前状态之间的偏差,以及三个调节参数,就输出控制量。

Matlab实现MPC函数

复制代码
    function [M,C,Q_bar,R_bar,G,E,H,U_k] = MPC_Zero_Ref(A,B,N,x_k,Q,R,F)
     
    %%%%%%%%%%%建立一个以0为参考目标的MPC求解函数
    %%%%%%%%%%%其中,状态矩阵A,输入矩阵B系统维度N,初始条件x_k,权重矩阵Q,R及终端误差矩阵F为输入
    %%%%%%%%%%%输出中U_k为所求控制器,其余为简化过程中引入的中间变量
     
    n=size(A,1); %A是n×n矩阵,求n
    p=size(B,2); %B是n×p矩阵,求p
    M=[eye(n);zeros(N*n,n)];%初始化M矩阵,M矩阵是(N+1)n × n的,
                        %它上面是n × n个“I”,这一步先把下半部分写成0
    C=zeros((N+1)*n,N*p);%初始化C矩阵,这一步令它有(N+1)n × NP个0
    %定义M和C
    tmp=eye(n);%定义一个n × n的I矩阵
    for i=1:N%循环,i从1到N
    rows = i*n+(1:n);%定义当前行数,从i×n开始,共n行
    C(rows,:)=[tmp*B,C(rows-n,1:end-p)];%将C矩阵填满
    tmp=A*tmp;%每一次将tmp左乘一次A
    M(rows,:)=tmp;%将M矩阵写满
    end
    %定义Q_bar
    S_q=size(Q,1);%找到Q的维度
    S_r=size(R,1);%找到R的维度
    Q_bar=zeros((N+1)*S_q,(N+1)*S_q);%初始化Q_bar为全0矩阵
    for i=0:N
    Q_bar(i*S_q+1:(i+1)*S_q,i*S_q+1:(i+1)*S_q)=Q;%将Q写到Q_bar的对角线上
    end
    Q_bar(N*S_q+1:(N+1)*S_q,N*S_q+1:(N+1)*S_q)=F;%将F放在最后一个位置
     
    %定义R_bar
    R_bar=zeros(N*S_r,N*S_r);%初始化R_bar为全0矩阵
    for i=0:N-1
    R_bar(i*S_r+1:(i+1)*S_r,i*S_r+1:(i+1)*S_r)=R;
    end
     
    %求解
    G=M'*Q_bar*M;%G
    E=C'*Q_bar*M;%E
    H=C'*Q_bar*C+R_bar;%H
    %最优化
    f=(x_k'*E')';%定义f矩阵
    U_k=quadprog(H,f);%用二次规划求解最优化U_k
    end

全部评论 (0)

还没有任何评论哟~