精华内容
下载资源
问答
  • 神经网络PID控制及其Matlab仿真.pdf
  • 神经网络PID控制及其Matlab仿真.pdf
  • 使用MATLAB软件中的simulink模块,进行RBF神经网络PID控制仿真,实测成功!!
  • 常规PID模糊PID神经网络PID控制效果比较-success.rar 最近做毕设,题目是智能励磁,做了个模糊PID和神经网络PID励磁控制,说白了,和励磁没任何关系,就是对一个三阶模型进行控制,现在与大家分享下。其中常规PID...
  • 使用MATLAB软件中的simulink模块,进行BP神经网络PID控制仿真
  • SPO_BPNN_PID:基于粒子群优化的神经网络PID控制
  • #资源达人分享计划#
  • 《基于S函数的BP神经网络PID控制器及Simulink仿真》这篇论文和论文的S函数以及Simulink模型文件,MATLAB2016b以上版本测试正常运行。
  • MatlabRBF神经网络pid控制器-BRF.mdl 我正在做一个RBF神经网络pid控制器,用s函数编写。现在遇到点问题,查了一下说薛定宇老师的控制系统计算机辅助设计上有RBF神经网络pid控制器,可我没有。请哪位大侠有这个资料...
  • matlab代码
  • MatlabRBF神经网络pid控制器-rbfpid.m 我正在做一个RBF神经网络pid控制器,用s函数编写。现在遇到点问题,查了一下说薛定宇老师的控制系统计算机辅助设计上有RBF神经网络pid控制器,可我没有。请哪位大侠有这个...
  • 关于RBF整定的资料,希望大家多多看 希望对大家有所帮助
  • 神经网络 pid控制 simulink 模型 matlab 2017a平台 可供参考 模型十分复杂,可以挑选需要的部分使用
  • (1)PID控制算法简介;(2)基于单神经元网络PID控制器;(3)基于BP神经网络PID控制器;(4) 基于RBF神经网络系统辨识的PID控制器 资源内容包括:PPT文档和MATLAB仿真程序
  • 基于S函数的BP神经网络PID控制器及Simulink仿真,运用于Matlab2016b。
  • 针对该系统动态特性的非线性和时变性因素,提出了一种基于BP神经网络PID控制器的设计方案,该控制器既有经典PID控制算法的特点,又有神经网络良好的自适应和抗干扰能力。Matlab仿真结果表明,基于BP神经网络PID控制...
  • BP神经网络PID控制

    2018-11-17 10:44:16
    BP PID控制器,加入了一个传递函数作为案例,能够实现优化PID算法,
  • 提出了一种新的改进遗传算法优化的神经网络PID控制器。该方法设计了基于性能指标的适应度函数、自适应的交叉概率、变异概率,引入移民的遗传算法,从而有效地抑制了早熟和维持种群多样性,保证了得到的优化参数为...
  • 通过BP神经网络实现PID参数在线正整定。
  • 神经网络PID控制

    万次阅读 2017-09-14 23:05:04
    神经网络PID控制控制结构NNC控制器采用增量PID控制结构 x1(k)=e(k)=r(k)−y(k)x_{1}( k) =e( k)=r( k)-y( k) x2(k)=Δe(k)=e(k)−e(k−1)x_{2}( k) =\Delta e( k) =e( k) -e( k-1) x3(k)=Δ2e(k)=Δe(k)−Δe(k...

    神经网络PID控制

    这里写图片描述

    控制结构

    NNC控制器采用增量PID控制结构

    x1(k)=e(k)=r(k)y(k)
    x2(k)=Δe(k)=e(k)e(k1)
    x3(k)=Δ2e(k)=Δe(k)Δe(k1)=e(k)e(k1)[e(k1)e(k2)]
            =e(k)2×e(k1)+e(k2)

    NNC的控制输出为

    Δu(k)=k1x1(k)+k2x2(k)+k3x3(k)

    性能指标

    J=12[r(k+1)y(k+1)]2

    训练系数 w

    =λJy(k+1)y(k+1)u(k)u(k)w

    问题在于当系统未知时, y(k+1)u(k) 无法求得,因此采用NNI来辨识对象模型,以求得 y(k+1)u(k) 的代替量 y^(k+1)u(k)


    辨识器

    这里写图片描述

    设辨识对象是单输入单输出的非线性系统

    y(k+1)=F[y(k),y(k1),,y(kny+1),u(k),u(k1),,u(knu+1)]
    ny 为输出的阶次
    nu 为输入的阶次

    采用BP神经网络

    • 输入层

    输入信号由两部分组成,分别为控制及其延迟信号 u(k),u(k1),,u(knu+1) ,和输出和输出延迟信号 y(k),y(k1),,y(kny+1)

    来自控制: Out1j(k)=y(kj),0jny1
    来自输出: Out1j(k)=u(kj),0jnu1
    Out 表示输入神经元的输出
    下角标表示第几个神经元, j 表示第j个
    上角标表示第几层神经元,1表示第一层,即输入层

    • 隐藏层

    net2j(k)=ny+nui=0w2ji(k)Out1i(k)
    Out2j(k)=f(net2j(k)),i=0,,nhidden1
    nhidden 为隐藏层个数

    • 输出层

    y^(k+1)=nhiddeni=0w3i(k)Out2i(k)

    • 性能指标

    J=12[y(k+1)y^(k+1)]2

    • 求偏导

    输出层权值 w3i(k) 偏导
    Jw3i(k)=Jy(k+1)y(k+1)u(k)u(k)w(k)=[y(k+1)y^(k+1)]1Out2i(k)

    隐藏层权值 w2ji(k) 偏导
    Jw2ji(k)=Jy(k+1)y(k+1)u(k)u(k)Out2j(k)Out2j(k)u(k)u(k)w2ji(k)
              =[y(k+1)y^(k+1)]1w3i(k)f(net2j(k))Out1j(k)


    • 权值更新

    w3i(k+1)=w3i(k)+ηΔw3i(k)
    w2ji(k+1)=w2ji(k)+ηw2ji(k)


    综合

    利用辨识器NNI可以求得 y^(k+1)u(k)

    y^(k+1)u(k)=Qi=0Jy(k+1)y(k+1)u(k)u(k)Out2j(k)Out2j(k)u(k)u(k)Out1j(k)Out1j(k)u(k)
               =Qi=0w3i(k)f(net2j(k))w2ji(k)

    将NNI得到的 y^(k+1)u(k) 代入NNC的权值更新中,即可更新NNC控制器参数

    如果不采用NNI辨识器,则 y(k+1)u(k) 可以用近似符号函数 sgn[y(k+1)u(k)] 或者采用 y(k+1)y(k)u(k)u(k1) 得到,由此带来的计算不精确的影响可以通过调整学习速率 η 来补偿

    展开全文
  • BP神经网络PID控制,可以对预定数据进行快速跟踪,误差较小,路径可以根据自己需要设定。
  • BP 网络在人工神经网络中应用最为广泛,文中给出基于 MATLAB 语言的 BP 神经网络 PID 控制器的 S 函数实 现,在此基础上建立 BP 神经网络 PID 控制器的 Simulink 仿真模型,最后给出了该仿真模型应用在非线性对象中...
  • 基于BP算法的神经网络PID控制器设计及仿真.pdf
  • 基于BP神经网络PID控制的方法研究,孙广孟,,PID控制是一种经典的控制方法,它以结构简单,不依赖于被控对象的数学模型,抗干扰能力强等优点,成为了过程控制领域一种重要的方
  • 针对不确定时延影响无线网络控制系统的控制性能、常规PID控制策略无法满足网络控制要求的问题,提出了一种基于RBF神经网络PID控制的无线网络时延控制方案。采用Matlab/Simulink的TrueTime工具箱建立了无线网络时延...
  • %基于BP神经网络PID控制clear all;x1=0.25;a1=0.05;S=1; %信号类型In=4;h=5;Out=3; %神经网络结构if S==1, %阶跃信号wi=[-0.6394-0.2696-0.3756-0.7023;-0.8603-0.2013-0.05024-0.2596;-1.07490.5543-1.6820-0....

    %基于BP神经网络的PID控制

    clear all;

    x1=0.25;a1=0.05;

    S=1; %信号类型

    In=4;h=5;Out=3; %神经网络结构

    if S==1, %阶跃信号

    wi=[-0.6394  -0.2696  -0.3756  -0.7023;

    -0.8603  -0.2013  -0.05024  -0.2596;

    -1.0749  0.5543  -1.6820  -0.5437;

    -0.3625  -0.0724  -0.6463  -0.2859;

    0.1425  0.0279  -0.5406  -0.7660];

    %wi=0.50*rands(h,In);

    wi1=wi;wi2=wi;wi3=wi;

    wo=[0.7576 0.2616 0.5820 -0.1416 -0.1325;

    -0.1146 0.2949 0.8352 0.2205 0.4508;

    0.7201 0.4566 0.7672 0.4962 0.3632];

    %wo=0.50*rands(Out,h);

    wo1=wo;wo2=wo;wo3=wo;

    end

    if S==2 %正弦信号

    wi=[-0.2846 0.2193 -0.5097 -1.0668;

    -0.7484 -0.1210 -0.4708 0.0988;

    -0.7176 0.8297 -1.6000 0.2049;

    -0.0858 0.1925 -0.6346 0.0347;

    0.4358 0.2369 -0.4564 -0.1324];

    %wi=0.50*rands(h,In);

    wi1=wi;wi2=wi;wi3=wi;

    wo=[1.0438 0.5478 0.8682 0.1446 0.1537;

    0.1716 0.5811 1.1214 0.5067 0.7370;

    1.0063 0.7428 1.0534 0.7824 0.6494];

    %wo=0.50*rands(Out,h);

    wo1=wo;wo2=wo;wo3=wo;

    end

    x=[0,0,0];

    u1=0;u2=0;u3=0;u4=0;u5=0;

    y1=0;y2=0;y3=0;

    oh=zeros(h,1); %神经网络中间层输出

    I=oh;%神经网络中间层输入

    error1=0;

    error2=0;

    ts=0.001;

    for k=1:1:6000,

    time(k)=k*ts;

    if S==1,

    rin(k)=1.0;

    elseif S==2,

    rin(k)=sin(1*2*pi*k*ts);

    end

    %非线性模型

    a(k)=1.2*(1-0.8*exp(-0.1*k));

    y(k)=a(k)*y1/(1+y1^2)+u1;

    error(k)=rin(k)-y(k);

    xi=[rin(k),y(k),error(k),1];

    x(1)=error(k)-error1;

    x(2)=error(k);

    x(3)=error(k)-2*error1+error2;

    ed=[x(1);x(2);x(3)];

    I=xi*wi';

    for j=1:1:h

    oh(j)=(exp(I(j))-exp(-I(j)))/(exp(I(j))+exp(-I(j))); %中间层

    end

    K=wo*oh; %输出层

    for j=1:1:Out

    K(j)=exp(K(j))/(exp(K(j))+exp(-K(j))); %求kp,ti,td

    end

    kp(k)=K(1);ti(k)=K(2);td(k)=K(3);

    Kd=[kp(k),ti(k),td(k)];

    du(k)=Kd*ed;

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

    if u(k)>=10, %限制控制器输出

    u(k)=10;

    end

    if u(k)<=-10,

    u(k)=-10;

    end

    dyu(k)=sign((y(k)-y1)/(u(k)-u1+0.0000001));

    %输出层

    for j=1:1:Out,

    dK(j)=2/(exp(K(j))+exp(-K(j)))^2;

    end

    for i=1:1:Out,

    de3(i)=error(k)*dyu(k)*ed(i)*dK(i);

    end

    for j=1:1:Out,

    for i=1:1:h,

    dwo=x1*de3(j)*oh(i)+a1*(wo1-wo2);

    end

    end

    wo=wo1+dwo+a1*(wo1-wo2);

    %隐含层

    for i=1:1:h,

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

    end

    seg=de3*wo;

    for i=1:1:h

    de2(i)=dO(i)*seg(i);

    end

    dwi=x1*de2'*xi;

    wi=wi1+dwi+a1*(wi1-wi2);

    %参数更新

    u5=u4;u4=u3;u3=u2;u2=u1;u1=u(k);

    y2=y1;y1=y(k);

    wo3=wo2;wo2=wo1;wo1=wo;

    wi3=wi2;wi2=wi1;wi1=wi;

    error2=error1;

    error1=error(k);

    end

    figure(1);

    plot(time,rin,'r',time,y,'b');

    xlabel('时间(秒)');ylabel('系统输入、输出');

    figure(2);

    plot(time,error,'r:');

    xlabel('时间(秒)');ylabel('误差');

    figure(3);

    subplot(311);

    plot(time,kp,'r');

    xlabel('时间(秒)');ylabel('参数kp');

    subplot(312);

    plot(time,ti,'g--');

    xlabel('时间(秒)');ylabel('参数ti');

    subplot(313);

    plot(time,td,'b*');

    xlabel('时间(秒)');ylabel('参数td');

    神经网络PID控制,不过为什么有newff,train这样的语句,还望高手指点一下。相互交流一下哈。

    展开全文
  • 基于BP神经网络PID控制+Simulink仿真

    万次阅读 多人点赞 2019-05-30 10:58:30
    最近在学习电机的智能控制,上周学习了基于单神经元的PID控制,这周研究基于BP神经网络PID控制神经网络具有任意非线性表达能力,可以通过对系统性能的学习来实现具有最佳组合的PID控制。利用BP神经网络可以...

        最近在学习电机的智能控制,上周学习了基于单神经元的PID控制,这周研究基于BP神经网络的PID控制。

        神经网络具有任意非线性表达能力,可以通过对系统性能的学习来实现具有最佳组合的PID控制。利用BP神经网络可以建立参数Kp,Ki,Kd自整定的PID控制器。基于BP神经网络的PID控制系统结构框图如下图所示:

        控制器由两部分组成:经典增量式PID控制器;BP神经网络

        经典增量式PID控制器

        

        BP神经网络控制算法

        BP神经网络结构如下图所示:

        它是一种有隐含层的3层前馈网络,包括输入层、隐含层和输出层。输出层的三个输出分别对应PID控制器的三个可调参数Kp、Ki和Kd。由于Kp、Ki和Kd不能为负,所以输出层神经元的变换函数取非负的Sigmoid函数,而隐含层神经元的变换函数可取正负对称的Sigmoid函数。

        BP神经网络的输入(M为输入变量的个数):

        隐含层的输入输出为:

        输出层的输入输出:

         采用以输出误差二次方为性能指标,其性能指标函数为:

        按照梯度下降法修正网络的加权系数,并附加一使搜索快速收敛全局极小的惯性项,则有BP神经网络输出层的加权系数修正公式为:

        同理,可得隐含层加权系数的计算公式为:

        由此,BP神经网络PID控制算法可总结为:

        (1)确定BP神经网络结构,即确定输入层和隐含层的节点个数,选取各层加权系数的初值wij(0)、wli(0),选定学习速率和惯性系数,此时k=1

        (2)采样给定和反馈信号,即r(k)和y(k),计算误差e(k)=r(k)-y(k)

        (3)确定输入量

        (4)根据上述公式,计算各层神经元的输入、输出,神经网络输出层即为PID控制器的三个可调参数Kp、Ki和Kd

        (5)由增量式PID控制公式,计算PID控制器的控制输出u(k)

        (6)进行神经网络学习,实时自动调整输出层和隐含层的加权系数wli(k)和wij(k),实现PID控制参数的自适应调整

        (7)置k=k+1,返回步骤(2)

        Matlab Simulink仿真建模

        输入为阶跃信号,其参数为默认值,一个简单的闭环控制系统。BP神经网络PID控制器的内部结构如下图所示:

        S-function的输入为:u=[e(k);e(k-1);e(k-2);y(k);y(k-1);r(k);u(k-1);隐含层+输出层权值系数(k-2);隐含层+输出层权值系数(k-1)]=

    [u(1);u(2);u(3);u(4);u(5);u(6);u(7);...u(隐含层权值个数+输出层权值个数)],把所有的权值系数从输出再返回到输入是为了更新权值矩阵,从而自适应的调整PID三个参数。关于S-function的使用方法,请参考我写的另一篇博客:           https://blog.csdn.net/weixin_42650162/article/details/90488610

        S-function函数

        下面是S-function函数编写的控制算法:

        为了更好的理解下面的程序代码,先要理解Matlab中的几个函数

        通过(:)把一个矩阵变为一个列向量

        通过reshape函数,从列向量里任意组成矩阵如c=reshape(b,3,8),b中元素按顺序排成一个3*8的矩阵,也就是还原了矩阵a,

        c=reshape(b(10:24),3,5),b中第10个元素到第24个元素,按顺序排成一个3*5的矩阵。

        在我编写的S-function函数中,就是通过reshape函数,把输入的隐含层+输出层的列权值系数还原成:隐含层权值系数矩阵+输出层权值系数矩阵,通过算法完成这两个权值系数矩阵的更新。

        下面是M文件编写的S-function控制算法:

    function [sys,x0,str,ts,simStateCompliance] = nnbp(t,x,u,flag,T,nh,xite,alfa)
    switch flag,
      case 0,
        [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes(T,nh);
    %初始化函数
      case 3,
        sys=mdlOutputs(t,x,u,nh,xite,alfa);
    %输出函数
      case {1,2,4,9},
        sys=[];
      otherwise
        DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
    end
    function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes(T,nh)
    %调用初始画函数,两个外部输入参数 参数T确定采样时间,参数nh确定隐含层层数
    sizes = simsizes;
    sizes.NumContStates  = 0;
    sizes.NumDiscStates  = 0;
    sizes.NumOutputs     = 4+6*nh;
    %定义输出变量,包括控制变量u,三个PID参数:Kp,Ki,Kd,隐含层+输出层所有加权系数
    sizes.NumInputs      = 7+12*nh;
    %定义输入变量,包括前7个参数[e(k);e(k-1);e(k-2);y(k);y(k-1);r(k);u(k-1)]
    %隐含层+输出层权值系数(k-2),隐含层+输出层权值系数(k-1)
    sizes.DirFeedthrough = 1;
    sizes.NumSampleTimes = 1; 
    sys = simsizes(sizes);
    x0  = [];
    str = [];
    ts  = [T 0];
    simStateCompliance = 'UnknownSimState';
    function sys=mdlOutputs(t,x,u,nh,xite,alfa)
    %调用输出函数
    wi_2 = reshape(u(8:7+3*nh),nh,3);
    %隐含层(k-2)权值系数矩阵,维数nh*3
    wo_2 = reshape(u(8+3*nh:7+6*nh),3,nh);
    %输出层(k-2)权值系数矩阵,维数3*nh
    wi_1 = reshape(u(8+6*nh:7+9*nh),nh,3);
    %隐含层(k-1)权值系数矩阵,维数nh*3
    wo_1 = reshape(u(8+9*nh:7+12*nh),3,nh);
    %输出层(k-1)权值系数矩阵,维数3*nh
    xi = [u(6),u(4),u(1)];
    %神经网络的输入xi=[u(6),u(4),u(1)]=[r(k),y(k),e(k)]
    xx = [u(1)-u(2);u(1);u(1)+u(3)-2*u(2)];
    %xx=[u(1)-u(2);u(1);u(1)+u(3)-2*u(2)]=[e(k)-e(k-1);e(k);e(k)+e(k-2)-2*e(k-1)]
    I = xi*wi_1';
    %计算隐含层的输入,I=神经网络的输入*隐含层权值系数矩阵的转置wi_1',结果为:
    %I=[net0(k),net1(k)...netnh(k)]为1*nh矩阵
    Oh = exp(I)./(exp(I)+exp(-I));
    %激活函数,可更改
    %计算隐含层的输出,(exp(I)-exp(-I))./(exp(I)+exp(-I))为隐含层的激活函数Sigmoid
    %Oh=[o0(k),o1(k)...onh(k)],为1*nh的矩阵
    O = wo_1*Oh';
    %计算输出层的输入,维数3*1
    K = 2./(exp(O)+exp(-O)).^2;
    %激活函数,可更改
    %计算输出层的输出K=[Kp,Ki,Kd],维数为1*3
    %exp(Oh)./(exp(Oh)+exp(-Oh))为输出层的激活函数Sigmoid
    uu = u(7)+K'*xx;
    %根据增量式PID控制算法计算控制变量u(k)
    dyu = sign((u(4)-u(5))/(uu-u(7)+0.0000001));
    %计算输出层加权系数修正公式的sgn
    %sign((y(k)-y(k-1))/(u(k)-u(k-1)+0.0000001)近似代表偏导
    dK = 2./(exp(K)+exp(-K)).^2;
    %激活函数,可更改
    delta3 = u(1)*dyu*xx.*dK;
    wo = wo_1+xite*delta3*Oh+alfa*(wo_1-wo_2);
    %输出层加权系数矩阵的修正
    dOh = 2./(exp(Oh)+exp(-Oh)).^2;
    %激活函数,可更改
    wi = wi_1+xite*(dOh.*(delta3'*wo))'*xi+alfa*(wi_1-wi_2);
    %隐含层加权系数修正
    sys = [uu;K(:);wi(:);wo(:)];
    %输出层输出sys=[uu;K(:);wi(:);wo(:)]=
    %[uu;Kp;Ki;Kd;隐含层+输出层所有权值系数]
    %K(:),wi(:),wo(:),把这三个矩阵按顺序排为列向量

        本函数有四个外部输入变量:T,nh,xite,alfa T输入采样时间,nh确定隐含层层数,xite和alfa权值系数修正公式里的学习速率和惯性系数。

        为了更好地分配S-function的输出,需要对Demux进行如下设置:

        确保前三个输出变量为:控制变量u,Kp,Ki,Kd,剩下的变量为隐含层权值系数矩阵+输出层权值系数矩阵总数之和。

        然后对此S-function函数进行封装:

    具体过程可以参考我的另一篇博客:

        https://blog.csdn.net/weixin_42650162/article/details/90488610

        

        完成后点击S-function函数,会弹出外部参数设置框,设置参数如下:

        注:T采样时间要和设置的控制算法的采样时间一样,不然会报错,如下:

        下面是仿真结果:

        Kp、Ki、Kd的自适应变化曲线:

        Kp:

        Ki:

        Kd:

        有关仿真的所有资源已上传,如有需要可自行下载:

        https://download.csdn.net/download/weixin_42650162/11216367

    展开全文
  • 很经典的神经网络控制源程序,使用BP算法,能直接使用,很有参考价值。
  • 编写BP神经网络S函数,搭建BP神经网络PID控制器simulink模型进行仿真

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,542
精华内容 1,016
关键字:

神经网络pid控制