模型预测控制(MPC)的公式推导与理解 (转)

转自:https://blog.csdn.net/qq_40241332/article/details/105023605

(公式:预测域P和控制域M大小不同,且有常干扰)

在本文中,主要是针对线性无约束系统,设计模型预测控制算法。首先给出一个离散的数学模型,再根据模型预测控制“三步走”战略,实现控制器的设计

(相比原文,修改了一个小小的错)

“三步走”策略

预测系统未来动态
求解优化问题
解第一个元素作用于系统

模型:

我们引入离散时间的状态空间模型,如下:

在这里插入图片描述
其中 x(k) 为系统内部状态变量;A 为系统矩阵;Bu 为控制输入矩阵;u(k) 为控制输入变量;Bd 为外部干扰输入矩阵;d(k) 为可测外部干扰变量。

预测方程:

将模型改成增量模型
在这里插入图片描述
在这里插入图片描述
两式相减得:在这里插入图片描述
其中 Δ x ( k ) = x ( k ) − x ( k − 1 ) Δx(k)=x(k)-x(k-1) Δx(k)=x(k)x(k1) , Δ u ( k ) = u ( k ) − u ( k − 1 ) Δu(k)=u(k)-u(k-1) Δu(k)=u(k)u(k1) , Δ d ( k ) = d ( k ) − d ( k − 1 ) Δd(k)=d(k)-d(k-1) Δd(k)=d(k)d(k1)

那输出y可由:

在这里插入图片描述
在这里插入图片描述
合并得:

以最新测量值为初始条件,预测时域为p,控制时域为m,并且有以下两个假设:
在这里插入图片描述
在这里插入图片描述
则:
在这里插入图片描述
其中 Δ x ( k + 1 ∣ k ) Δx(k+1|k) Δx(k+1k) 表示第k个时刻对第k+1个时刻的状态预测,那么接下来预测域 p p p长个状态表示为:。
这里我改了一下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
进一步输出方程可以为

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
定义以下向量:

在这里插入图片描述
那么,对系统未来p步预测的输出:

在这里插入图片描述
其中:
在这里插入图片描述
在这里插入图片描述
这里 I I I中ne指的是: C ∗ A ∗ B C*A*B CAB矩阵的维度,是为了能够将 y ( k ) y(k) y(k)和其他项能够合并。

优化问题描述:

对于此优化问题考虑两个方面,一是输出跟踪上参考输入;二是尽可能减少控制幅度。目标函数选择如下:

在这里插入图片描述
其中 Γ y , i =  def  d i a g ( Γ y 1 , i \Gamma_{y,i}\stackrel{\text { def }}{=}diag(\Gamma_{y_1,i} Γy,i= def diag(Γy1,i, Γ y 2 , i , ⋯   , Γ y n c , i ) \Gamma_{y_2,i},\cdots,\Gamma_{y_{n_c},i}) Γy2,i,,Γync,i) Γ u , i =  def  d i a g ( Γ u 1 , i \Gamma_{u,i}\stackrel{\text { def }}{=}diag(\Gamma_{u_1,i} Γu,i= def diag(Γu1,i, Γ u 2 , i \Gamma_{u_2,i} Γu2,i, ⋯   , Γ u n u , i ) \cdots,\Gamma_{u_{n_u},i}) ,Γunu,i) Γ y j , i \Gamma_{y_j,i} Γyj,i是第i步预测的第j个输出的误差的加权因子, Γ u j , i \Gamma_{u_j,i} Γuj,i是第i步预测对控制增量第j个分量的加权因子。改写为矩阵形式:

*强调文本* _强调文本_
其中: Γ y = d i a g ( Γ y , 1 \Gamma_y=diag(\Gamma_{y,1} Γy=diag(Γy,1, Γ y , 2 \Gamma_{y,2} Γy,2, ⋯   , Γ y , p ) \cdots,\Gamma_{y,p}) ,Γy,p) Γ u = d i a g ( Γ u , 1 \Gamma_u=diag(\Gamma_{u,1} Γu=diag(Γu,1, Γ u , 2 \Gamma_{u,2} Γu,2, ⋯   , Γ u , p ) \cdots,\Gamma_{u,p}) ,Γu,p),参考输入序列为

**加粗文本** __加粗文本__
问题可以被描述为: min ⁡ Δ U ( k ) J ( x ( k ) , Δ U ( k ) , m , p ) \min _{\Delta U(k)} J(x(k), \Delta U(k), m, p) minΔU(k)J(x(k),ΔU(k),m,p)
满足动力学模型: Y p ( k + 1 ∣ k ) = S x Δ x ( k ) + I y c ( k ) + S d Δ d ( k ) + S u Δ U ( k ) Y_p(k+1|k)=S_x\Delta x(k)+\mathcal {I} y_c(k)+S_d\Delta d(k)+S_u\Delta U(k) Yp(k+1k)=SxΔx(k)+Iyc(k)+SdΔd(k)+SuΔU(k)

定义一个辅助变量
在这里插入图片描述
将预测方程带入可得

~~删除文本~~
其中:
在这里插入图片描述
E p ( k + 1 ∣ k ) = R ( k + 1 ) − S x Δ x ( k ) − I y c ( k ) − S d Δ d ( k ) E_{p}(k+1 | k)=R(k+1)-\mathcal{S}_{x} \Delta x(k)-\mathcal{I} y_{c}(k)-\mathcal{S}_{d} \Delta d(k) Ep(k+1k)=R(k+1)SxΔx(k)Iyc(k)SdΔd(k)
因此 min ⁡ z ρ T ρ = ( A z − b ) T ( A z − b ) \min _{z} \rho^{\mathrm{T}} \rho=(\mathcal{A}z-b)^T(\mathcal {A}z-b) minzρTρ=(Azb)T(Azb)的极值解为 z ∗ = ( A T A ) − 1 A T b z^*=(\mathcal A^T\mathcal A)^{-1}\mathcal A^Tb z=(ATA)1ATb。(充要条件自证)

最优控制序列为:
在这里插入图片描述

解第一个元素

Δ u ( k ) = [ I n u × n u 0 ⋯ 0 ] 1 × m Δ U ∗ ( k ) \Delta u(k)=\left[\begin{array}{cccc} I_{n_{u} \times n_{u}} & \mathbf{0} & \cdots & \mathbf{0} \end{array}\right]_{1 \times m} \Delta U^{*}(k) Δu(k)=[Inu×nu00]1×mΔU(k)
定义 K m p c = [ I n u × n u 0 ⋯ 0 ] 1 × m ( S u T Γ y T Γ y S u + Γ u T Γ u ) − 1 S u T Γ y T Γ y K_{\mathrm{mpc}}=\left[\begin{array}{cccc} I_{n_{u} \times n_{u}} & \mathbf{0} & \cdots & \mathbf{0} \end{array}\right]_{1 \times m}\left(\mathcal{S}_{u}^{\mathrm{T}} \Gamma_{y}^{\mathrm{T}} \Gamma_{y} \mathcal{S}_{u}+\Gamma_{u}^{\mathrm{T}} \Gamma_{u}\right)^{-1} \mathcal{S}_{u}^{\mathrm{T}} \Gamma_{y}^{\mathrm{T}} \Gamma_{y} Kmpc=[Inu×nu00]1×m(SuTΓyTΓySu+ΓuTΓu)1SuTΓyTΓy,因此控制增量可以写为

Δ u ( k ) = K m p c E p ( k + 1 ∣ k ) \Delta u(k)=K_{\mathrm{mpc}} E_{p}(k+1 | k) Δu(k)=KmpcEp(k+1k)

理解:

E p ( k + 1 ∣ k ) = R ( k + 1 ) − S x Δ x ( k ) − I y c ( k ) − S d Δ d ( k ) E_{p}(k+1 | k)=R(k+1)-\mathcal{S}_{x} \Delta x(k)-\mathcal{I} y_{c}(k)-\mathcal{S}_{d} \Delta d(k) Ep(k+1k)=R(k+1)SxΔx(k)Iyc(k)SdΔd(k)带入 Δ u ( k ) = K m p c E p ( k + 1 ∣ k ) \Delta u(k)=K_{\mathrm{mpc}} E_{p}(k+1 | k) Δu(k)=KmpcEp(k+1k),可得

Δ u ( k ) = K m p c R ( k + 1 ) − K m p c ( S x + I C c ) Δ x ^ ( k ) − K m p c I y ^ c ( k − 1 ) − K m p c S d Δ d ( k ) \begin{aligned} \Delta u(k)=& K_{\mathrm{mpc}} R(k+1)-K_{\mathrm{mpc}}\left(\mathcal{S}_{x}+\mathcal{I} C_{c}\right) \Delta \hat{x}(k) -K_{\mathrm{mpc}} \mathcal{I} \hat{y}_{c}(k-1)-K_{\mathrm{mpc}} \mathcal{S}_{d} \Delta d(k) \end{aligned} Δu(k)=KmpcR(k+1)Kmpc(Sx+ICc)Δx^(k)KmpcIy^c(k1)KmpcSdΔd(k)

K m p c R ( k + 1 ) K_{\mathrm{mpc}} R(k+1) KmpcR(k+1)相当于未来参考输入的前馈补偿;
− K m p c S d Δ d ( k ) -K_{\mathrm{mpc}} \mathcal{S}_{d} \Delta d(k) KmpcSdΔd(k)相当于可预测扰动的前馈补偿;
− K m p c ( S x + I C c ) Δ x ^ ( k ) − K m p c I y ^ c ( k − 1 ) -K_{\mathrm{mpc}}\left(\mathcal{S}_{x}+\mathcal{I} C_{c}\right) \Delta \hat{x}(k) -K_{\mathrm{mpc}} \mathcal{I} \hat{y}_{c}(k-1) Kmpc(Sx+ICc)Δx^(k)KmpcIy^c(k1)相当于状态反馈补偿。

初学,转发保存。

  • 17
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
MPC模型预测控制)是一种先进的控制算法,可以在多个步长内预测系统的行为,并根据所设定的性能指标对其进行优化。下面是一个用于完整推导和实现MPC的Matlab代码示例。 首先,我们需要定义系统的动态模型。假设我们有一个离散时间系统,其状态方程可以用以下形式表示: x(k+1) = Ax(k) + Bu(k) 其中x(k)表示系统在时刻k的状态,u(k)表示在该时刻的控制输入,A和B分别是系统的状态移矩阵和控制输入矩阵。 接下来,我们需要定义MPC的优化目标函数。在本例中,我们将使用二次型性能指标。假设我们的目标是最小化以下形式的性能指标函数: J = ∑(x(k)'Qx(k) + u(k)'Ru(k)) 其中Q和R是正定矩阵,分别表示状态和控制输入的权重。 然后,我们需要确定MPC的约束条件。在这个例子中,假设有一个控制输入的上下限: u_min <= u(k) <= u_max 最后,我们可以使用Matlab中的优化工具箱来解决这个优化问题。下面是一个简化的MPC代码示例: ```matlab % 系统参数 A = [1 0.5; 0 1]; B = [0.125; 0.5]; % MPC参数 N = 5; % 预测步长 Q = eye(2); % 状态权重 R = eye(1); % 控制输入权重 u_min = -1; % 控制输入下限 u_max = 1; % 控制输入上限 % 优化问题设置 x_initial = [0; 0]; % 初始状态 x = x_initial; % 当前状态 u = zeros(N, 1); % 控制输入序列 for k = 1:N % 构建二次型目标函数 H = blkdiag(Q, R); f = [x(k,:) * Q, 0]; % 构建线性约束 Aeq = [A - eye(2), B]; beq = -A * x(k,:)'; lb = u_min * ones(size(u)); ub = u_max * ones(size(u)); % 优化求解 options = optimoptions('quadprog', 'Display', 'off'); u_opt = quadprog(H, f, [], [], Aeq, beq, lb, ub, [], options); % 更新状态和控制输入序列 u(k,:) = u_opt(1); x(k+1,:) = A * x(k,:)' + B * u(k,:); end % 输出结果 disp('Optimal control sequence:'); disp(u); ``` 以上代码通过使用Matlab的`quadprog`函数来求解二次规划问题,并使用其中的优化结果作为控制输入。通过优化迭代,我们可以获得最优的控制序列,并将其应用于系统中。 请注意,以上是一个简化的MPC推导和实现示例,实际应用中可能需要考虑更多的约束条件和系统动态模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值