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

📄 遗传算法(ga).txt

📁 遗传算法的MATALAB实现
💻 TXT
字号:
遗传算法(GA)训练BP网络权值、阈值的matlab源码[matlab


file:gabp.m 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
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 + -