?? ga_bp.txt
字號:
file:gabp.m
%**************************************
clear all
% 用GA訓(xùn)練BP網(wǎng)絡(luò)的權(quán)值、閾值
% 開始計時
tic,
% BP網(wǎng)絡(luò)初始化
[P,T,R,S1,S2,S]=bpinit;
bounds=ones(S,1)*[-10 10];
% 初始種群個數(shù)
num=60;
pop=initializega(num,bounds,'fitness');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% clear all
% % 用GA訓(xùn)練BP網(wǎng)絡(luò)的權(quán)值、閾值
% % 開始計時
% tic,
% % BP網(wǎng)絡(luò)初始化
% [P,T,R,S1,S2,S]=bpinit;
% bounds=ones(S,1)*[0.1 0.9];
% % 初始種群個數(shù)
% num=60;
% pop=initializega(num,bounds,'fitness');
% % 遺傳代數(shù)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 遺傳代數(shù)
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);
% 仿真結(jié)果
% TT=simuff(P,W1,B1,'logsig',W2,B2,'logsig')
toc % 結(jié)束計時
>>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; % 遺傳算法的適應(yīng)值
>>file:bpinit.m
% BP網(wǎng)絡(luò)初始化:給出網(wǎng)絡(luò)的訓(xùn)練樣本P、T,
% 輸入、輸出數(shù)及隱含神經(jīng)元數(shù)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; % 遺傳算法編碼長度
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -