⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ga_bp.txt

📁 ga优化神经网权值&阈值程序。为了方便
💻 TXT
字号:
file:gabp.m 
%************************************** 
clear all 
% 用GA训练BP网络的权值、阈值 
% 开始计时 
tic, 
% BP网络初始化 
[P,T,R,S1,S2,S]=bpinit; 
bounds=ones(S,1)*[-10 10]; 
% 初始种群个数 
num=60; 
pop=initializega(num,bounds,'fitness'); 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% clear all 
% % 用GA训练BP网络的权值、阈值 
% % 开始计时 
% tic, 
% % BP网络初始化 
% [P,T,R,S1,S2,S]=bpinit; 
% bounds=ones(S,1)*[0.1 0.9]; 
% % 初始种群个数 
% num=60; 
% pop=initializega(num,bounds,'fitness'); 
% % 遗传代数 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 



% 遗传代数 
gen=500; 
[x endPop bPop trace]=ga(bounds,'fitness',[],pop,[1e-6 1 1],'maxGenTerm',gen,... 
'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutation',[2 gen 3]); 



for i=1:S 
  x(i)=endPop(1,i); 
end; 
sum=0; 
% 前R*S1个编码为W1 
for i=1:S1, 
   for k=1:R, 
     W1(i,k)=x(R*(i-1)+k); 
   end 
end 
% 接着的S1*S2个编码(即第R*S1个后的编码)为W2 
for i=1:S2, 
  for k=1:S1, 
     W2(i,k)=x(S1*(i-1)+k+R*S1); 
  end 
end 
% 接着的S1个编码(即第R*S1+S1*S2个后的编码)为B1 
for i=1:S1, 
  B1(i,1)=x((R*S1+S1*S2)+i); 
end 
% 接着的S2个编码(即第R*S1+S1*S2+S1个后的编码)为B2 
for i=1:S2, 
  B2(i,1)=x((R*S1+S1*S2+S1)+i); 
end 
% 计算S1与S2层的输出 
for i=1:100 
   x1=W1*P(i)+B1; 
   A1=1./(1+exp(-x1)); 
   x2=W2*A1+B2; 
   A2=1./(1+exp(-x2)); 
% A1=logsig(W1*P(1:17,i),B1); 
% A2=logsig(W2*A1,B2); 
YY(i)=A2; 
% 计算误差平方和 
% SE=; 
%sum=sum+sumsqr(T(i)-A2); 
end 

i=1:1:100 
plot(i,YY(i),'r+',i,T(i),'b-'); 


% [W1 B1 W2 B2]=gadecod(x); 
% 仿真结果 
% TT=simuff(P,W1,B1,'logsig',W2,B2,'logsig') 
toc % 结束计时 

>>file:fitness.m 
function[sol,eval]=fitness(sol,options) 
[P,T,R,S1,S2,S]=bpinit; 
numv=size(sol,2)-1; 
       x=sol(1:numv); 
       eval=f(x); 

>>file:f.m 

function [eval]=f(sol) 
       numv=size(sol,2); 
       x=sol(1:numv); 
       [P,T,R,S1,S2,S]=bpinit; 
%get the value of fitness 

% 前R*S1个编码为W1 
for i=1:S1 
   for k=1:R, 
     W1(i,k)=x(R*(i-1)+k); 
   end 
end 
% 接着的S1*S2个编码(即第R*S1个后的编码)为W2 
for i=1:S2 
  for k=1:S1, 
     W2(i,k)=x(S1*(i-1)+k+R*S1); 
  end 
end 
% 接着的S1个编码(即第R*S1+S1*S2个后的编码)为B1 
for i=1:S1 
  B1(i,1)=x((R*S1+S1*S2)+i); 
end 
% 接着的S2个编码(即第R*S1+S1*S2+S1个后的编码)为B2 
for i=1:S2 
  B2(i,1)=x((R*S1+S1*S2+S1)+i); 
end 


sum=0; 
SE=0; 
for i=1:100 
   x1=W1*P(i)+B1; 
   A1=1./(1+exp(-x1)); 
   x2=W2*A1+B2; 
   A2=1./(1+exp(-x2)); 
% A1=logsig(W1*P(1:17,i),B1); 
% A2=logsig(W2*A1,B2); 

% 计算误差平方和 
SE=sumsqr(T(i)-A2); 
sum=sum+SE; 
end 
eval=10/sum; % 遗传算法的适应值 

>>file:bpinit.m 
% BP网络初始化:给出网络的训练样本P、T, 
% 输入、输出数及隐含神经元数R,S2,S1 
function [P,T,R,S1,S2,S]=bpinit; 
for i=1:100 
   P(i)=i; 
   T(i)=1/P(i); 
end 
[R,Q]=size(P);%R=1 
[S2,Q]=size(T);%S2=1 
S1=3;%3 nu 
S=R*S1+S1*S2+S1+S2; % 遗传算法编码长度

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -