神经网络自适应控制
学院:电气工程与自动化学院
专业:控制科学与工程
姓名:兰利亚
学号: 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
当时得到的最后控制响应曲线为:
五、结论
由上述仿真结果可以看出,间接自适应控制的神经网络,可以对复杂的非线性和不确定系统进行智能控制,神经网络的逼近能力起了重要的作用。神经网络对未知的过程进行离线辨识,再根据辨识结果以及参考模型进行控制器的设计,达到预期的效果。