?? main.m
字號:
%仿真《西北師范大學學報》的遺傳主程序 %計算的染色體均方誤差 fitness=8/sum(error.^2)
% tic
clear
Popsize=40;
P_mutation=0.1;
P_cross=0.6;
real chrom;
real currentbest_value;
m=25; %權值和閾值的初始化范圍
chrom=2*m.*rand(Popsize,21)-m; % 產生初始種群
temchrom=zeros(size(chrom));
p=[0 0 0 0 1 1 1 1;0 0 1 1 0 0 1 1;1 0 1 0 1 0 1 0]; %輸入值
aim=[0 1 1 0 1 0 0 1]'; % 輸出值
ecope=100;
currentbest=zeros(ecope,21);
currentbest_value=zeros(ecope,1);
fitness_gene=fitness(chrom,p,aim);%計算的染色體均方誤差 fitness=8/sum(error.^2)
[c_value c_order]=max(fitness_gene);
for k=1:ecope
%保留當前最好染色體
[c_value c_order]=max(fitness_gene);
currentbest(k,:)=chrom(c_order,:);
currentbest_value(k)=c_value;
% 選擇過程
fit=cumsum(fitness_gene)/sum(fitness_gene);
N=Popsize;
s=select(fit,N);
temchrom=chrom(s,:);
%交叉
P=rand(1,N);
prob=find(P<P_cross);
crosschrom=temchrom(prob,:);
crosschrom=cross_over(crosschrom);
temchrom(prob,:)=crosschrom;
%變異
temchrom=mutation(temchrom,P_mutation,Popsize,ecope);
chrom=temchrom;
% 計算交叉變異之后的染色體的適應度
fitness_gene=fitness(chrom,p,aim);
fit=cumsum(fitness_gene)/sum(fitness_gene);
N=Popsize;
s=select(fit,N-1);
[s_value s_order]=max(fitness_gene);
if s_value<currentbest_value(k) %精因選擇
chrom=[chrom(s,:);currentbest(k,:)];
fitness_gene=[fitness_gene(s);currentbest_value(k)];
else
s=[s s_order(1)];
chrom=chrom(s,:);
fitness_gene=fitness_gene(s);
end
% if currentbest_value(k)==1
% break
% end
end
%圖表顯示
i=1:k;
y=1./currentbest_value(1:k,:);
plot(i,y,'r:');
title(' sum root mean square error');
% toc
y(k)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -