基于粒子群算法优化BP神经网络的PID控制算法(Matlab代码实现)

 💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

     传统比例-积分-微分(Proportion Integral Derivative,PID)控制器存在参数整定困难,不能在线实时调整以及面对复杂非线性系统时应用效果不佳等问题,提出一种基于粒子群算法(Particle Swarm Optimization,PSO)优化的反向传播(Back Propagation,BP)神经网络PID控制方法。将BP神经网络与PID控制器相结合,利用BP神经网络的自适应学习能力在线实时调整PID控制参数,提升系统稳定性,针对BP-PID自学习过程中容易陷入局部极小值问题,利用改进的PSO算法对其进行优化,确保BP-PID系统收敛于全局最优解。基于仿真数据开展实验,结果表明,所提方法能够有效提升系统的控制精度和控制稳定度。 

基于粒子群算法(Particle Swarm Optimization, PSO)优化BP(Back Propagation)神经网络的PID控制算法是一种结合智能优化技术和传统控制方法的先进方案。在这一方法中,PSO 用于优化 BP 神经网络的权重和偏差参数,然后利用优化后的神经网络设计 PID 控制器的参数。这种方法能够提高 PID 控制器的性能,如快速响应和更好的鲁棒性。

关键步骤

1. **初始化粒子群和网络参数:**
    - 设定粒子数量、最大迭代次数、惯性权重以及个体和全局学习因子。
    - 初始化 BP 神经网络的结构,包括输入层、隐藏层和输出层的节点数。

2. **粒子编码和初始化:**
    - 每个粒子编码表示 BP 神经网络的权重和偏差(或者直接编码 PID 控制器的参数)。
    - 初始化粒子的位置和速度。

3. **适应度函数设计:**
    - 选择适当的适应度函数来评估每个粒子的优劣。适应度函数通常基于控制系统的性能指标,如上升时间、超调量、稳态误差等。

4. **迭代优化:**
    - 更新粒子速度和位置:
      \[
      v_{i}(t+1) = w \cdot v_{i}(t) + c_{1} \cdot rand() \cdot (p_{best_i} - x_{i}(t)) + c_{2} \cdot rand() \cdot (g_{best} - x_{i}(t))
      \]
      \[
      x_{i}(t+1) = x_{i}(t) + v_{i}(t+1)
      \]
    - 其中,\( w \) 是惯性权重,\( c_{1} \) 和 \( c_{2} \) 是个体和全局学习因子,\( rand() \) 是随机数,\( p_{best_i} \) 是粒子 \( i \) 的个体最佳位置,\( g_{best} \) 是全局最佳位置。

5. **BP 神经网络训练:**
    - 使用粒子当前的位置(即权重和偏差)初始化 BP 神经网络。
    - 通过 BP 算法训练网络,获取 PID 控制器的参数。

6. **适应度评价:**
    - 计算 BP 神经网络生成的 PID 控制器在控制系统中的表现,作为粒子的位置评估依据。
    - 更新个体最佳位置 \( p_{best_i} \) 和全局最佳位置 \( g_{best} \)。

7. **迭代终止条件:**
    - 如果达到最大迭代次数或者适应度函数达到预设标准,则迭代终止;否则,返回步骤 4。

8. **输出优化的 PID 参数:**
    - 将经过 PSO 优化后的最优权重和偏差应用到 BP 神经网络,生成最优的 PID 控制器参数。
 

 结论

通过结合粒子群算法和 BP 神经网络,可以高效地优化 PID 控制器参数,从而提升控制系统的性能。PSO 算法能够有效搜索全局最优解,避免陷入局部最优,同时 BP 神经网络能够捕捉复杂的非线性关系,提高 PID 控制器的调节精度和鲁棒性。

📚2 运行结果

部分代码:

function [wi_init, wo_init]=SPO_InitW()
%clear;
tic   %该函数表示计时开始
%神经网络参数
IN=4; H=5; Out=3;
%------给定初始化条件----------------------------------------------
c1=2;    %1.4962;             %加速常数
c2=2 ;   %1.4962;             %加速常数
%w=0.7298;              %惯性权重
Wmax=0.9 ;   Wmin=0.4;  %准备采用线性权重衰减法
MaxDT=50;            %最大迭代次数
D=(H*IN)+(Out*H); %搜索空间维数(测试函数sphere中未知数个数)
N=20;                      %初始化群体个体数目( 一般20个粒子就足够)
Vmax=5;
Vmin=-5;
Pmax=5;
Pmin=-5;

%------初始化种群的个体(可以在这里限定位置和速度的范围)------------
for i=1:N
        x(i,:)=0.15*rands(1,D); 
        v(i,:)=0.15*rands(1,D); 
end

%------先计算各个粒子的适应度,并初始化个体最优位置y和全局最优位置Pg--------
for i=1:N
    p(i)=BPNN_Fitness(x(i,:)) ; %计算每个粒子适应度
    y(i,:)=x(i,:);         %初始化个体最优位置y为在时间步t=0时的粒子位置
end
Pg=x(1,:);              %Pg为全局最优位置 这里是初始化
for i=2:N
    if BPNN_Fitness(x(i,:))<BPNN_Fitness(Pg)
        Pg=x(i,:);          %更新全局最优位置 初始化完毕 
    end
end

%------进入主要循环,按照公式依次迭代,直到满足精度要求------------
for t=1:MaxDT
    fprintf('第%d次迭代-----\n',t);
    %fprintf('适应度=%f\n',Pbest(t));
    for i=1:N
        w=Wmax-(t-1)*(Wmax-Wmin)/(MaxDT-1);
        v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(Pg-x(i,:));
        v(i,find(v(i,:)>Vmax))=Vmax;    %不能超过最大速度
        v(i,find(v(i,:)<Vmin))=Vmin;      %不低过最小速度
        
        x(i,:)=x(i,:)+v(i,:);   %更新了每个粒子的位置
        x(i,find(x(i,:)>Pmax))=Pmax;
        x(i,find(x(i,:)<Pmin))= Pmin;
        if BPNN_Fitness(x(i,:))<p(i)
            p(i)=BPNN_Fitness(x(i,:));     %更新适应度
            y(i,:)=x(i,:);      %更新个体最佳位置
        end
        if p(i)<BPNN_Fitness(Pg)
            Pg=y(i,:);          %每一次迭代结束后更新群体最佳位置
        end
    end
    Pbest(t)=BPNN_Fitness(Pg);     %保存每一代的群体最佳适应值
end
toc %该函数表示计时结束

%获得经粒子群算法优化的神经网络权值初始值
for t=1:H
       wi_init(t,:)=x(1,(t-1)*IN+1:t*IN);
end
for r=1:Out
       wo_init(r,:)=x(1, ( (IN*H+1)+(r-1)*H ): ( (IN*H+1)+r*H-1 ) );
end

%------最后给出计算结果--------
disp('*************************************************************')    
disp('最优适应函数最优位置为:')
for i=1:D
    fprintf('x(%d)=%s\n',i,Pg(i));
end
fprintf('最后得到的优化极值为:%s\n',BPNN_Fitness(Pg));
disp('*************************************************************')
disp('迭代分析结果')
fprintf('迭代次数:%d\n',MaxDT);

figure(1);
plot(Pbest,'Linewidth',2);
title( ['适应度曲线' ]);
grid on
xlabel('迭代次数');ylabel('适应度');

🎉3 参考文献

[1]曾雄飞.基于粒子群算法优化BP神经网络的PID控制算法[J].电子设计工程,2022,30(11):69-73+78.DOI:10.14022/j.issn1674-6236.2022.11.015.

🌈4 Matlab代码实现

  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值