神经网络自适应控制Word文档格式.docx
《神经网络自适应控制Word文档格式.docx》由会员分享,可在线阅读,更多相关《神经网络自适应控制Word文档格式.docx(6页珍藏版)》请在冰豆网上搜索。
二、间接自适应系统分析与建模
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)。
系统的原理框图如下图所示。
参考模
型
e
神
经
r
控制器
过程
y
系统的原理框图若将控制器设计成u(k),则可得到相应曲线。
三、系统的MATLAB编程
clearall;
closeall;
x=[-10:
1:
10];
%训练样本输入fori=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;
%学习率
forn=1:
times
Epx=0;
%误差初始化fori=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;
%误差输出
endError(n)=Epx;
epoch(n)=n;
ifEpx<
=0.01
break;
endend
n,figure
(1);
subplot(221);
plot(x,d,'
b-'
x,y,'
r--'
);
title('
训练完后的期望输出与实际输出'
gridon;
subplot(222);
plot(epoch,Error);
训练误差输出'
xlabel('
epoch'
ylabel('
误差E'
gridon;
xt=[0:
20];
n3=length(xt);
%dt=sin(xt);
fori=1:
dt(i)=0.8*xt(i)/(1+xt(i)^2);
%目标函数,期望输出
end
fork=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);
endsubplot(223);
plot(xt,dt,'
xt,yt,'
r:
'
legend('
期望输出'
'
实际输出'
测试时的实际输出与期望输出'
subplot(224);
plot(xt,Et);
测试误差输出'
测试样本'
),ylabel('
误差
E'
%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:
n=length(xf);
fori=1:
d(i)=0.8*xf(i)/(1+xf(i)^2);
%目标函数,期望输出fc(i)=0.8*xf(i)/(1+xf(i)^2);
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);
fork=3:
u(k)=0.8*yf(k)+1.2*yf(k-1)+0.2*yf(k-2)+sin(2*pi*k/25);
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);
figure
(2);
plot(xf,fc,'
--'
xf,d,'
%n1=length(fc)
%n2=length(d)figure(3);
plot(xf,u,'
xf,final_y,'
xf,fc,'
xf,(u-final_y),'
:
四、matlab仿真结果如下:
训练完后的期望输出与实际输出
训练误差输出
0.4
0.2
0.3
0 E
误
-0.2
0.1
下图所示的是利用神经网络训练后得到的仿真图:
差
-0.4
-10 -5 0 5 10
测试时的实际输出与期望输出
期望输出实际输出
0.2 E
0
0.05
0 100 200 300
epoch
测试误差输出
0 5 10 15 20
-0.05
测试样本
训练后的结果图
测试时和训练时的目标函数期望输出:
-0.1
-0.3
0 2 4 6 8 10 12 14 16 18 20
当
时得到的最后控制响应曲线为:
1.5
1
0.5
-0.5
-1
五、结论
由上述仿真结果可以看出,间接自适应控制的神经网络,可以对复杂的非线性和不确定系统进行智能控制,神经网络的逼近能力起了重要的作用。
神经网络对未知的过程进行离线辨识,再根据辨识结果以及参考模型进行控制器的设计,达到预期的效果。