搜档网
当前位置:搜档网 › 神经网络自适应控制

神经网络自适应控制

神经网络自适应控制
神经网络自适应控制

神经网络自适应控制

学院:电气工程与自动化学院

专业:控制科学与工程

姓名:兰利亚

学号: 1430041009

日期: 2015年6月25日

神经网络间接自适应控制

摘要:自适应模糊控制系统对参数变化和环境变化不敏感,能用于非线性和多变

量复杂对象,不仅收敛速度快,鲁棒性好,而且可以在运行中不断修正自己的控制

规则来改善控制性能,因而受到广泛重视。间接自适应控制是通过在线辨识的到

控制对象的模型。神经网络作为自适应控制器,具有逼近任意函数的能力。

关键词:神经网络间接自适应控制系统辨识

一、引言

自适应控制系统必须完成测量性能函数、辨识对象的动态模型、决定控制

器如何修改以及如何改变控制器的可调参数等功能。自适应控制有两种形式:

一种是直接自适应控制,另一种是间接自适应控制。直接自适应控制是根据实

际系统性能与理想性能之间的偏差,通过一定的方法来直接调整控制器的参

数。

二、间接自适应系统分析与建模

2.1系统的分析

系统过程动态方程:y(k+1)= -0.8y(k)/(1+y2(k))+u(k),参考系统模型

由三阶差分方程描述:

ym(k+1)=0.8ym(k)+1.2ym(k-1)+0.2ym(k-2)+r(k)

式中,r(k)是一个有界的参考输入。如果输出误差ec(k)定义为

ec(k)=y(k)-ym(k),则控制的目的就是确定一个有界的控制输入u(k),当k趋于

正无穷时,ec(k)=0.那么在k阶段,u(k)可以从y(k)和它的过去值中计算得

到:

u(k)=0.8y(k)/(1+y2(k))+0.8y(k)+1.2y(k-1)+0.2y(k-2)+r(k) (1)

于是所造成的误差方程为:

ec(k+1)=0.8ec(k)+1.2ec(k-1)+0.2ec(k-2) (2)

因为参考模型是渐进稳定的,所以对任意的初始条件,它服从当k趋于无穷,

ec(k)=0。在任何时刻k,用神经元网络N2计算过程的输入控制,即

u(k)=-N[y(k)]+0.8y(k)+1.2y(k-1)+0.2y(k-2)+r(k) (3)

由此产生非线性差分方程:y(k+1)=-0.8y(k)/(1+y2(k))+N[y(k)] +0.8y(k)+ 1.2y(k-1)+0.2y(k-2)+r(k) (4)

故设计的要点是设计一个神经网络来逼近0.8y(k)/(1+y2(k))。

2.2系统的建模设计过程

第一步,用BP神经网络逼近,神经网络的结构包含三层:输入层、隐含层

和输出层。BP网络的训练过程如下:正向传播是输入信号从输入层经隐层传向

输出层,若输出层得到了期望的输出,则学习算法结束;否则,转至反向传

播。

第二步,输入测试样本,对神经网络的逼近程度进行测试,将测试后的期

望输出与实际输出的曲线画出。

第三步,控制器设计。将控制器设计为

u(k)= -N[y(k)]+0.8y(k)+1.2y(k-1)+0.2y(k-2)+r(k)。系统的原理框图如下图所示。

系统的原理框图

若将控制器设计成u(k),则可得到相应曲线。

三、系统的MATLAB编程

clear all;

close all;

x=[-10:1:10]; %训练样本输入

for i=1:21

d(i)=0.8*x(i)/(1+x(i)^2); %目标函数,期望输出end

nx1=length(x); %样本的大小

y=zeros(1,nx1); %输出初始化

nx2=8; %隐含层的神经元个数

times=20000; %学习次数

w1=0.05*rand(nx2,1); %第一层的连接权值

theta1=0.05*rand(nx2,1); %第一层的阈值

w2=0.05*rand(1,nx2); %第二层的连接权值

theta2=0.05*rand(1); %第二层的阈值

ux=0.2; %学习率

for n=1:times

Epx=0; %误差初始化

for i=1:nx1

s1=w1*x(i)-theta1; %隐含层输入

x1=1./(1+exp(-s1)); %隐含层输出

s2=w2*x1-theta2; %输出层输入

y(i)=s2; %输出层输出

error=d(i)-y(i);

delta1=(error*(w2)').*x1.*(1-x1);

delta2=error;

w1=w1+ux*delta1*x(i); %第一层权值修正

w2=w2+ux*delta2*(x1)'; %第二层权值修正

theta1=theta1-ux*delta1; %第一层阈值修正

theta2=theta2-ux*delta2; %第二层阈值修正

Epx=Epx+0.5*error^2; %误差输出

end

Error(n)=Epx;epoch(n)=n;

if Epx<=0.01

break;

end

end

n,

figure(1);

subplot(221);

plot(x,d,'b-',x,y,'r--');title('训练完后的期望输出与实际输出'); grid on;

subplot(222);

plot(epoch,Error);title('训练误差输出');xlabel('epoch');ylabel('误差E');grid on;

xt=[0:1:20];n3=length(xt);%dt=sin(xt);

for i=1:21

dt(i)=0.8*xt(i)/(1+xt(i)^2); %目标函数,期望输出

end

for k=1:n3

s1=w1*xt(k)-theta1;x1=1./(1+exp(-s1));s2=w2*x1-theta2;yt(k)=s2;

Et(k)=dt(k)-yt(k);

end

subplot(223);

plot(xt,dt,'b-',xt,yt,'r:');legend('期望输出','实际输出');title('测试时的实际输出与期望输出');

grid on;

subplot(224);

plot(xt,Et);title('测试误差输出');xlabel('测试样本'),ylabel('误差E');grid on;

%control

%u(k)=0.8*yf(k)+1.2*yf(k-1)+0.2*yf(k-2)+r(k);

%final_y(k+1)=-0.8*final_y(k)/(1+final_y(k)^2)+u(k);

xf=[0:1:20];n=length(xf);

for i=1:21

d(i)=0.8*xf(i)/(1+xf(i)^2); %目标函数,期望输出

fc(i)=0.8*xf(i)/(1+xf(i)^2); %目标函数,期望输出

end

for k=1:n3

s1=w1*xt(k)-theta1;x1=1./(1+exp(-s1));s2=w2*x1-theta2;yf(k)=s2; end

u(1)=0.8*yf(1)+sin(2*pi/25);

u(2)=0.8*yf(2)+1.2*yf(1)+sin(4*pi/25); for k=3:21

u(k)=0.8*yf(k)+1.2*yf(k-1)+0.2*yf(k-2)+sin(2*pi*k/25); end

for k=1:21

yt(k)=-fc(k)+u(k); final_y(k)=yt(k); if(k<21)

fc(k+1)=0.8*yt(k)/(1+yt(k)^2); end end

figure(2);

plot(xf,fc,'--',xf,d,'r--'); grid on;

%n1=length(fc) %n2=length(d) figure(3);

plot(xf,u,'b-',xf,final_y,'r:',xf,fc,'r--',xf,(u-final_y),':'); grid on;

四、 matlab 仿真结果如下:

下图所示的是利用神经网络训练后得到的仿真图:

-0.4-0.200.20.4训练完后的期望输出与实际输

出00.10.20.3

0.4训练误差输出

epoch

误差E

00.10.20.30.4测试时的实际输出与期望输出

-0.05

0.05

测试误差输出

测试样本

误差E

训练后的结果图

测试时和训练时的目标函数期望输出:

0.4

0.3

0.2

0.1

-0.1

-0.2

-0.3

-0.4

当时得到的最后控制响应曲线为:

五、结论

由上述仿真结果可以看出,间接自适应控制的神经网络,可以对复杂的非线性和不确定系统进行智能控制,神经网络的逼近能力起了重要的作用。神经网络对未知的过程进行离线辨识,再根据辨识结果以及参考模型进行控制器的设计,达到预期的效果。

相关主题