基于神经网络的传递函数控制器matlab实现,神经网络自己编程实现不使用matlab的工具箱

125 阅读2分钟

1.算法描述

       神经控制器在在实时控制系统中起着“大脑”的作用。神经网络具有自学习和自适应等智能特点,因而非常适用于控制器设计。对于复杂非线性系统,神经控制器所取得的控制效果往往明显优于常规控制器。近年来,神经控制器在工业、航空及机器人等领域控制系统的应用中已经取得许多成就。

 

       神经控制器与古典控制器和现代控制器相比,有优点也有缺点。

       优点是神经控制器的设计与被控制对象的数学模型无关,这是神经控制器的最大优点,也是神经网络能够在自动控制中立足的根本原因。

       缺点是神经网络需要在线或离线开展学习训练,并利用训练结果进行系统设计。这种训练在很大程度上依赖训练样本的准确性,而训练样本的选取依旧带有人为的因素。

 

      模型预测控制的第一阶段是训练神经网络来表示被控对象的前向动态。被控对象输出和神经网络输出之间的预测误差用作神经网络训练信号。该过程如下图所示:

 

1.png

 

       神经网络被控对象模型使用先前的输入和先前的被控对象输出来预测被控对象输出的将来值。下图给出了神经网络被控对象模型的结构。  

 

2.仿真效果预览

matlab2022a仿真结果如下:

 

2.png

3.png

4.png  

3.MATLAB核心程序 `alldatanum=1000;

traindatanum=500;

testdatanum=500;

 

u=rands(1,alldatanum+10);

y=zeros(1,alldatanum+10);

for i=3:alldatanum+2

    y=dlsim(numd,dend,u);

end

 

alldatain=[];

alldataout=[];

for i=3:alldatanum+2

    newin=[u(i-1);y(i-1);u(i-2);y(i-2)];

    alldatain=[alldatain newin];

    alldataout=[alldataout y(i)];

end

 

traindatain=alldatain(:,1:traindatanum);

traindataout=alldataout(:,1:traindatanum);

testdatain=alldatain(:,traindatanum+1:alldatanum);

testdataout=alldataout(:,traindatanum+1:alldatanum);

 

figure

hold on

grid

j=traindatanum+1:alldatanum

plot(j,testdatain,'k-')

xlabel('input t');

ylabel('output u');

 

figure

hold on

grid

j=traindatanum+1:alldatanum

plot(j,testdataout,'b-')

xlabel('input t');

ylabel('output y');

 

indim=4;

outdim=1;

hiddenunitnum=10;

maxepochs=10000;

E0=0.000001;

 

center=1*rand(indim,hiddenunitnum)-0.5;

sp=0.2*rand(1,hiddenunitnum)+0.1;

w=0.2*rand(1,hiddenunitnum)-0.1;

 

lrcent=0.001;

lrsp=0.001;

lrw=0.001;`