BP神经网络监督控制系统设计.doc
《BP神经网络监督控制系统设计.doc》由会员分享,可在线阅读,更多相关《BP神经网络监督控制系统设计.doc(13页珍藏版)》请在冰点文库上搜索。
班级:
控制5班学号:
2111504213姓名:
张睿
设计一个BP神经网络监督控制系统,被控对象为:
采样时间1ms,输入信号为方波信号,幅值0.5,频率2hz。
设计一个BP神经网络监督控制系统,并采用遗传算法进行BP神经网络参数及权值的优化设计,并进行matlab仿真。
需要说明控制系统结构,遗传算法优化BP网络的具体步骤,并对仿真结果做出分析。
解决过程及思路如下:
1BP网络算法
以第p个样本为例,用于训练的BP网络结构如图1所示。
…...…..
.…..
……
i
j
k
输入层
隐含层
输出层
…
…
…
xk
图1具有一个隐含层和输出层的BP神经网络结构
网络的学习算法如下:
(1)信息的正向传播
隐含层神经元的输入为所有输入加权之和,
隐层神经元的输出采用S函数激发,则
输出层的神经元输出为
网络输出与理想输出误差为
误差性能指标函数为
上式的N表示网络输出层的个数。
(2)利用梯度下降法调整各层间权值的反向传播
对从第j个输入到第k个输出的权值有:
其中,为学习速率,。
K+1时刻网络权值为
对从第i个输入到第j个输出的权值有:
式中,
t+1时刻网络权值为
2.BP网络的监督控制系统结构
设计的BP网络监督控制系统结构如图2所示。
图2BP神经网络监督控制
在BP网络结构中,取网络的输入为r(k),实际输出为y(k),PID控制输出为up(k),隐层神经元的输出采用S函数激发,
网络的权向量为W1,W2
BP的网络输出为
控制律为
u(k)=up(k)+yn(k)
采用梯度下降法调整网络的权值为
神经网络权值的调整过程为
3.遗传算法对BP网络权值的优化过程
(1)取逼近总步骤为:
N=100
(2)终止代数:
G=80
(3)样本个数:
Size=30
(4)交叉概率:
Pc=0.70
(5)二进制编码长度:
Godel=10
(6)变异概率:
Pm=0.001-[1:
1:
Size]*0.001/Size
(7)用于优化的BP网络结构为:
1-4-1i=1j=1,2,3,4
(8)网络权值W1的取值范围为:
[-1,+1]
(9)网络权值W2的取值范围为:
[-0.5,+0.5]
(10)取BP网络误差绝对值为参数选择的最小目标函数:
式中,N为逼近的总步骤,ee(i)为第i步BP网络逼近误差。
(11)需要优化参数为:
4遗传算法优化BP网络权值的步骤
(1)初始化种群;
(2)计算其适应值,保留最优个体,判断是否达到最优解;
(3)交叉、变异产生新个体;
(4)重新计算种群中每个个体的适应值并保留最优个体;
(5)交叉、变异前后的种群放在一起进行二人竞赛选择法,直到填满新的种群;
(6)转2)直到找到最优解BestJ。
5MATLAB仿真结果
BP监督网络遗传算法优化程序包括3部分,即遗传算法优化程序ga_bp.m,BP网络逼近函数程序bp_a和BP网络逼近测试程序bp_test。
输入信号为r(t)=0.5*sign(sin(2*2*pi*k*ts)采样时间ts=0.001s,η=0.30,a=0.05,kp=1,kd=1.
经遗传算法优化后,对象p的值为
P=[-0.2160,0.7576,0.5230,0.9863,-0.0714,0.2551,0.6911,-0.3627,0.2146,0.3338,-0.0875,-0.0582]
仿真结果图:
图3代价函数J的优化过程
图4方波位置跟踪
图5BP网络,PD及总控制器输出的比较以及误差曲线
结论:
采用遗专算法可以实现BP网络参数初始值的优化,节约计算量。
并由仿真结果可知,其误差大部分趋于0,但局部有三个地区的误差比较大,产生原因可能与遗传算法的运行参数有关。
代码:
1、bp_a.m
function[p,BsJ]=rbf_gaf(p,BsJ)
ts=0.001;
alfa=0.05;
xite=0.30;
sys=tf(1000,[1,87.35,10470]);
dsys=c2d(sys,ts,'z');
[num,den]=tfdata(dsys,'v');
y_1=0;y_2=0;
u_1=0;u_2=0;
e_1=0;
xi=0;
x=[0,0]';
I=[0,0,0,0]';
Iout=[0,0,0,0]';
FI=[0,0,0,0]';
kp=25;
kd=0.3;
w1=[p
(1),p
(2),p(3),p(4);p(5),p(6),p(7),p(8)];
w1_1=w1;w1_2=w1;
w2=[p(9);p(10);p(11);p(12)];
w2_1=w2;w2_2=w2_1;
fork=1:
1:
1000
timef(k)=k*ts;
Y=1;
ifY==1
r(k)=0.5*sign(sin(2*2*pi*k*ts));%SquareSignal
elseifY==2
r(k)=0.5*(sin(3*2*pi*k*ts));%SquareSignal
end
y(k)=-den
(2)*y_1-den(3)*y_2+num
(2)*u_1+num(3)*u_2;
e(k)=r(k)-y(k);
xi=r(k);
forj=1:
1:
4
I(j)=x'*w1(:
j);
Iout(j)=1/(1+exp(-I(j)));
end
yn(k)=w2'*Iout;%OutputofNNInetworks
%PDController
up(k)=kp*x
(1)+kd*x
(2);
M=2;
ifM==1%OnlyUsingPIDControl
u(k)=up(k);
elseifM==2%Totalcontroloutput
u(k)=up(k)+yn(k);
end
ifu(k)>=10
u(k)=10;
end
ifu(k)<=-10
u(k)=-10;
end
ifk==400
u(k)=u(k)+5.0;
end
%UpdateNNWeight
ee(k)=u(k)-yn(k);
w2=w2_1+(xite*ee(k))*Iout+alfa*(w2_1-w2_2);
forj=1:
1:
4
FI(j)=exp(-I(j))/(1+exp(-I(j)))^2;
end
dw1=0*w1;
fori=1:
1:
2
forj=1:
1:
4
dw1(i,j)=ee(k)*xite*FI(j)*w2(j)*x(i);
end
end
w1=w1_1+dw1+alfa*(w1_1-w1_2);
w1_2=w1_1;w1_1=w1;
w2_2=w2_1;w2_1=w2;
u_2=u_1;
u_1=u(k);
y_2=y_1;
y_1=y(k);
x
(1)=e(k);%CalculatingP
x
(2)=(e(k)-e_1)/0.05;%CalculatingD
e_1=e(k);
end
B=0;
fori=1:
1:
100
Ji(i)=abs(ee(i));
B=B+50*Ji(i);
end
BsJ=B;
2、bp_test.m
clearall;
closeall;
loadpfile;
ts=0.001;
alfa=0.05;
xite=0.30;
kp=25;
kd=0.3;
sys=tf(1000,[1,87.35,10470]);
dsys=c2d(sys,ts,'z');
[num,den]=tfdata(dsys,'v');
N=1;
ifN==1
w1=[p
(1),p
(2),p(3),p(4);p(5),p(6),p(7),p(8)];
w2=[p(9);p(10);p(11);p(12)];
elseifN==2
w1=rand(2,4);
w2=rand(1,4);
end
end
w1_1=w1;w1_2=w1;
w2_1=w2;w2_2=w2_1;
y_1=0;y_2=0;
u_1=0;u_2=0;
e_1=0;
x=[0,0]';
I=[0,0,0,0]';
Iout=[0,0,0,0]';
FI=[0,0,0,0]';
ts=0.001;
fork=1:
1:
1000
time(k)=k*ts;
Y=1;
ifY==1
r(k)=0.5*sign(sin(2*2*pi*k*ts));%SquareSignal
elseifY==2
r(k)=0.5*(sin(3*2*pi*k*ts));%SquareSignal
end
y(k)=-den
(2)*y_1-den(3)*y_2+num
(2)*u_1+num(3)*u_2;
e(k)=r(k)-y(k);
forj=1:
1:
4
I(j)=x'*w1(:
j);
Iout(j)=1/(1+exp(-I(j)));
end
yn(k)=w2'*Iout;%OutputofNNInetworks
%PDController
up(k)=kp*x
(1)+kd*x
(2);
M=2;
ifM==1%OnlyUsingPIDControl
u(k)=up(k);
elseifM==2%Totalcontroloutput
u(k)=up(k)+yn(k);
end
ifu(k)>=10
u(k)=10;
end
ifu(k)<=-10
u(k)=-10;
end
ifk==400
u(k)=u(k)+6.0;
end
%UpdateNNWeight
ee(k)=u(k)-yn(k);
w2=w2_1+(xite*ee(k))*Iout+alfa*(w2_1-w2_2);
forj=1:
1:
4
FI(j)=exp(-I(j))/(1+exp(-I(j)))^2;
end
dw1=0*w1;
fori=1:
1:
2
forj=1:
1:
4
dw1(i,j)=ee(k)*xite*FI(j)*w2(j)*x(i);
end
end
w1=w1_1+dw1+alfa*(w1_1-w1_2);
w1_2=w1_1;w1_1=w1;
w2_2=w2_1;w2_1=w2;
u_2=u_1;
u_1=u(k);
y_2=y_1;
y_1=y(k);
x
(1)=e(k);%CalculatingP
x
(2)=(e(k)-e_1)/0.05;%CalculatingD
e_1=e(k);
end
figure
(1);
plot(time,r,'r',time,y,'b');
xlabel('time(s)');ylabel('randy');
figure
(2);
subplot(411);
plot(time,yn,'b');
xlabel('time(s)');ylabel('yn');
subplot(412);
plot(time,up,'k');
xlabel('time(s)');ylabel('up');
subplot(413);
plot(time,u,'r');
xlabel('time(s)');ylabel('u');
subplot(414);
plot(time,r-y,'b');
xlabel('time(s)');ylabel('error');
3、ga_bp.m
%GA(GenericAlgorithm)toOptimizeInitialParametersofRBFApproaching
clearall;
closeall;
Size=30;%ȺÌå×ܸöÌåÊýÁ¿
G=80;%ÔÊÐí×î´óµü´ú´ÎÊý
CodeL=10;%ÿ¸ö±äÁ¿ÓµÓеÄȾɫÌåÊýÁ¿
fori=1:
1:
8
umax(i)=ones
(1);%Á¬½ÓȨֵµÄ×î´óÖµ
umin(i)=-ones
(1);%ȨֵµÄ×îСֵ
end
fori=9:
1:
12
umax(i)=0.5*ones
(1);%ãÐÖµµÄ×î´óÖµ
umin(i)=-0.5*ones
(1);%ãÐÖµµÄ×îСֵ
end
%¶ÔËùÇó²ÎÊý½øÐгõʼ¶þ½øÖƱàÂë
E=round(rand(Size,12*CodeL));%³õʼ»¯¸öÌå´úÂ루ȾɫÌ壩
%ÒÅ´«Éñ¾ÍøÂçѵÁ·¿ªÊ¼
BsJ=0;
forkg=1:
1:
G
time(kg)=kg;
fors=1:
1:
Size
m=E(s,:
);
forj=1:
1:
12
yoy(j)=0;
mj=m((j-1)*CodeL+1:
1:
j*CodeL);
fori=1:
1:
CodeL
yoy(j)=yoy(j)+mj(i)*2^(i-1);
end
f(s,j)=(umax(j)-umin(j))*yoy(j)/1023+umin(j);
end
clearyoy;
p=f(s,:
);
[p,BsJ]=bp_a(p,BsJ);
BsJi(s)=BsJ;
end
[OderJi,IndexJi]=sort(BsJi);
BestJ(kg)=OderJi
(1);
BJ=BestJ(kg);
Ji=BsJi+1e-005;
fi=1./Ji;
[Oderfi,Indexfi]=sort(fi);%Arrangingfismalltobigger
Bestfi=Oderfi(Size);%LetBestfi=max(fi)
BestS=E(Indexfi(Size),:
);%LetBestS=E(m),mistheIndexfibelongtomax(fi)
kg
p
BJ
%******Step2:
SelectandReproductOperation******
fi_sum=sum(fi);
fi_Size=(Oderfi/fi_sum)*Size;
fi_S=floor(fi_Size);
kk=1;
fori=1:
1:
Size
forj=1:
1:
fi_S(i)
TempE(kk,:
)=E(Indexfi(i),:
);
kk=kk+1;
end
end
%************Step3:
CrossoverOperation************
pc=0.70;
n=ceil(20*rand);
fori=1:
2:
(Size-1)
temp=rand;
ifpc>temp%CrossoverCondition
forj=n:
1:
20
TempE(i,j)=E(i+1,j);
TempE(i+1,j)=E(i,j);
end
end
end
TempE(Size,:
)=BestS;
E=TempE;
%************Step4:
MutationOperation**************
pm=0.001-[1:
1:
Size]*(0.001)/Size;%Biggerfi,smallerpm
fori=1:
1:
Size
forj=1:
1:
12*CodeL
temp=rand;
ifpm>temp%MutationCondition
ifTempE(i,j)==0
TempE(i,j)=1;
else
TempE(i,j)=0;
end
end
end
end
%GuaranteeTempE(Size,:
)belongtothebestindividual
TempE(Size,:
)=BestS;
E=TempE;
%*******************************************************
end
Bestfi
BestS
fi
Best_J=BestJ(G)
figure
(1);
plot(time,BestJ);
xlabel('Times');ylabel('BestJ');
savepfilep;