您现在的位置:首页 >> 智能控制 >> 内容

基于PSO优化BP神经网络PID控制器matlab仿真

时间:2023/2/19 21:48:30 点击:

  核心提示:A384,包括程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/ZJWXlJZv

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览




3.算法概述

      PID 控制器的方块图PID 控制器是一个在工业控制应用中常见的反馈回路部件。这个控制器把收集到的数据和一个参考值进行比较,然后把这个差别用于计算新的输入值,这个新的输入值的目的是可以让系统的数据达到或者保持在参考值。和其他简单的控制运算不同,PID控制器可以根据历史数据和差别的出现率来调整输入值,这样可以使系统更加准确,更加稳定。可以通过数学的方法证明,在其他控制方法导致系统有稳定误差或过程反复的情况下,一个PID反馈回路却可以保持系统的稳定。

4.部分源码

.......................................................

...........................................................

    %%%前向传播----------------------------------------

    net2=xi*(wi');

    for j=1:1:H

        Oh(j)=( exp( net2(j)-exp(-net2(j)) ) )/(exp( net2(j)+exp(-net2(j)) ));

    end

    net3=wo*Oh;

    for l=1:1:Out

        K(l)=exp(net3(l))/(exp(net3(l))+exp(-net3(l)));

    end

    kp(k)=M(1)*K(1); ki(k)=M(2)*K(2); kd(k)=M(3)*K(3);

    Kpid=[kp(k),ki(k),kd(k)];

    du(k)=Kpid*epid;

    u(k)=u_1+du(k); 

    if u(k)>10

        u(k)=10;

    end

    if u(k)<-10

        u(k)=-10;

    end

    %%%后向传播------------------------------------------------

    dyu(k)=sign((yout(k)-y_1)/(du(k)-du_1+0.0001));

    for j=1:1:Out

            dK(j)=1/(exp(net3(j))+exp(-net3(j)));

           %dK(j)=M;

    end

    for l=1:1:Out

        delta3(l)=error(k)*dyu(k)*epid(l)*dK(l);

    end

    for l=1:1:Out

        for i=1:1:H

            d_wo=xite*delta3(l)*Oh(i)+alfa*(wo_1-wo_2);

        end

    end

    wo=wo_1+d_wo+alfa*(wo_1-wo_2);

    for i=1:1:H

        dO(i)=4/(exp(net2(i))+exp(-net2(i)))^2;

    end

    segma=delta3*wo;

    for i=1:1:H

        delta2(i)=dO(i)*segma(i);

    end

    d_wi=xite*delta2'*xi;

    wi=wi_1+d_wi+alfa*(wi_1-wi_2);

    wo_2=wo_1; wo_1=wo;

    wi_2=wi_1; wi_1=wi;

    du_1=du(k);

    u_7=u_6;u_6=u_5;u_5=u_4; u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);   

    y_2=y_1; y_1=yout(k); 

    error_2=error_1; error_1=error(k);

end

figure;

[t,y]=BPNN_PID();

plot(t,y,'g','Linewidth',2);

hold on;

 

plot(time,rin,'k','Linewidth',2);

xlabel('t/s');  ylabel('rin,yout');

hold on ;

 

plot(time,yout,'r','Linewidth',2);

hold on;

 

[x,y]=classic_PID();

plot(x,y,'b','Linewidth',2);

%-----------------

figure;

plot(time,error,'b','Linewidth',2);

xlabel('t/s');  

ylabel('error');

 

figure;

plot(time,u,'b','Linewidth',2);

xlabel('t/s');  

ylabel('u');

 

figure;

subplot(311);

plot(time,kp,'b','Linewidth',2);

xlabel('t/s');  

ylabel('kp');

ylim([9.897,9.903])

 

subplot(312);

plot(time,ki,'b','Linewidth',2);

xlabel('t/s');  

ylabel('ki');

 

subplot(313);

plot(time,kd,'b','Linewidth',2);

xlabel('t/s'); 

ylabel('kd');

A384

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168