• 大小: 0M
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-18
  • 语言: Matlab
  • 标签: 其他  

资源简介

PID神经网络.m

资源截图

代码片段和文件信息

%% 清空环境变量
clc
clear

%% 网络结构初始化
rate1=0.006;rate2=0.001; %学习率
k=0.3;K=3;
y_1=zeros(31);y_2=y_1;y_3=y_2;   %输出值
u_1=zeros(31);u_2=u_1;u_3=u_2;   %控制率
h1i=zeros(31);h1i_1=h1i;  %第一个控制量
h2i=zeros(31);h2i_1=h2i;  %第二个控制量
h3i=zeros(31);h3i_1=h3i;  
x1i=zeros(31);x2i=x1i;x3i=x2i;x1i_1=x1i;x2i_1=x2i;x3i_1=x3i;   %隐含层输出 
ki=1.5;kp=1;kd=10;
%权值初始化
k0=0.03;

%第一层权值
w11=k0*rand(32);
w12=k0*rand(32);
w13=k0*rand(32);
%第二层权值
w21=k0*rand(19);
w22=k0*rand(19);
w23=k0*rand(19);

%值限定
ynmax=1;ynmin=-1;  %系统输出值限定
xpmax=1;xpmin=-1;  %P节点输出限定
qimax=1;qimin=-1;  %I节点输出限定
qdmax=1;qdmin=-1;  %D节点输出限定
uhmax=1;uhmin=-1;  %输出结果限定

%% 网络迭代优化
for k=1:1:200

    %% 控制量输出计算
    %--------------------------------网络前向计算--------------------------
    
    %系统输出
    y1(k)=(0.4*y_1(1)+u_1(1)/(1+u_1(1)^2)+0.2*u_1(1)^3+0.5*u_1(2))+0.3*y_1(2);
    y2(k)=(0.2*y_1(2)+u_1(2)/(1+u_1(2)^2)+0.4*u_1(2)^3+0.2*u_1(1))+0.3*y_1(3);
    y3(k)=(0.3*y_1(3)+u_1(3)/(1+u_1(3)^2)+0.4*u_1(3)^3+0.4*u_1(2))+0.3*y_1(1);
    
    r1(k)=0.7;r2(k)=0.4;r3(k)=0.6;  %控制目标
    
    %系统输出限制
    yn=[y1(k)y2(k)y3(k)];
    yn(find(yn>ynmax))=ynmax;
    yn(find(yn    
    %输入层输出
    x1o=[r1(k);yn(1)];x2o=[r2(k);yn(2)];x3o=[r3(k);yn(3)];
    
    %隐含层 
    x1i=w11*x1o;
    x2i=w12*x2o;
    x3i=w13*x3o;

    %比例神经元P计算
    xp=[x1i(1)x2i(1)x3i(1)];
    xp(find(xp>xpmax))=xpmax;
    xp(find(xp    qp=kp*xp;
    h1i(1)=qp(1);h2i(1)=qp(2);h3i(1)=qp(3);

    %积分神经元I计算
    xi=[x1i(2)x2i(2)x3i(2)];
    qi=[000];qi_1=[h1i(2)h2i(2)h3i(2)];
    qi=qi_1+xi;
    
    qi(find(qi>qimax))=qimax;
    qi(find(qi    QI=ki*qi;
    h1i(2)=QI(1);h2i(2)=QI(2);h3i(2)=QI(3);

    %微分神经元D计算
    xd=[x1i(3)x2i(3)x3i(3)];
    qd=[0 0 0];
    xd_1=[x1i_1(3)x2i_1(3)x3i_1(3)];
    qd=kd*(xd-xd_1);
    qd(find(qd>qdmax))=qdmax;
    qd(find(qd    h1i(3)=qd(1);h2i(3)=qd(2);h3i(3)=qd(3);

    %输出层计算
    wo=[w21;w22;w23];
    qo=[h1i‘h2i‘h3i‘];qo=qo‘;
    uh=wo*qo;
    uh(find(uh>uhmax))=uhmax;
    uh(find(uh    u1(k)=uh(1);u2(k)=uh(2);u3(k)=uh(3);  %控制律
    
    %% 网络权值修正
    %--------------------------------------网络反馈修正----------------------
    
    %计算误差
    error=[r1(k)-y1(k);r2(k)-y2(k);r3(k)-y3(k)];  
    error1(k)=error(1);error2(k)=error(2);error3(k)=error(3);
    J(k)=0.5*(error(1)^2+error(2)^2+error(3)^2);   %调整

评论

共有 条评论