📄 main_improve_complete3.m
字号:
function [best_fit]=main_improve_complete3(pop,n,popsize,chromlength,fun_num,up_range,down_range)
% clear;
tic; %用于记录运行时间
% tol_pop_best_real=zeros(2,50); %1
% tol_pop_best_real=zeros(20); %2
% j=1;
% while (j<=50)
cont=0;
% popsize=64; %设置初始参数,群体大小
% chromlength=14; %字符串长度(个体长度),染色体长度
% n=12000;
% n=9000;
pc=0.95; %设置交叉概率
pm=0.08; %设置变异概率
%参数设置结束
% pop=my_sga_initpop(popsize,n); %运行初始化函数,随机产生初始群体
dai=1000;
% dna_best=0;
% dna_best_value=0;
%给最佳染色体及其适应度值赋初值%
pop_best=zeros(2,1);
value_best=-999999;
dai_best=1;
%结束
i=1;
max_fitvalue=0;
% while(mean_fitvalue~=2700)
fitvalue=my_sga_calfitvalue(pop,fun_num); %计算群体中每个个体的适应度
old_max_fitvalue=max(fitvalue);
for i=1:dai%1000为迭代次数
[bestindividual,bestfit]=my_sga_best(popsize,pop,fitvalue);%求出群体中适应值最大的个体及其适应值
best_fit(i)=bestfit;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% [newpop,dna_best,dna_best_value]=my_complete3_selection(popsize,pop,fitvalue); %复制
%
% % [newpop]=my_complete3_crossover(popsize,chromlength,newpop,pc); %交叉
% % [newpop]=adaptivePC_sga_crossover(popsize,chromlength,newpop,fitvalue); %交叉
% [newpop]=complete3_o_crossover(popsize,newpop,pc,fitvalue); %交叉
%
% % [newpop]=my_complete3_mutation(popsize,chromlength,newpop,pm,dna_best);%变异
% % [newpop]=adapticePM_sga_mutation(popsize,chromlength,newpop,fitvalue);%变异
% [newpop]=complete_mutation(popsize,newpop,i);%变异
%
% [newpop]=improve_compete3(popsize,newpop,fitvalue);
%
% fitvalue_tem=my_sga_calfitvalue(newpop,popsize); %计算变异后群体中每个个体的适应度
% % newpop
% [newpop]=my_complete3_care(popsize,newpop,fitvalue_tem,dna_best);%%根据变异后的适应度替换最差的个体
% % newpop
%
%
% fitvalue=my_sga_calfitvalue(newpop,popsize); %计算群体中每个个体的适应度
% new_max_fitvalue=max(fitvalue);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[dna_best,dna_best_value]=selection_best(popsize,pop,fitvalue); % 选出本代最好的个体
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[newpop]=improve_compete3(popsize,pop,fitvalue,fun_num,up_range,down_range);
% [newpop]=complete_o_crossover(popsize,newpop,pc,fitvalue); %交叉
[newpop]=complete3_o_adaptivePC_crossover(popsize,newpop,fitvalue,fun_num);
[newpop]=complete_mutation(popsize,newpop,i,fun_num,up_range,down_range);%变异
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fitvalue_tem=my_sga_calfitvalue(newpop,fun_num); %计算变异后群体中每个个体的适应度
% newpop
[newpop]=my_complete3_care(popsize,newpop,fitvalue_tem,dna_best);%%根据变异后的适应度替换最差的个体
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fitvalue=my_sga_calfitvalue(newpop,fun_num); %计算群体中每个个体的适应度
new_max_fitvalue=max(fitvalue);
if bestfit>value_best %保存数代遗传之后最好的种群
value_best=bestfit;
pop_best=bestindividual;
% value_best_real=best_f;
dai_best=i;
end
error(i)=abs(new_max_fitvalue-old_max_fitvalue);
if error(i)<=0.00001
cont=cont+1;
else
cont=0;
end
if cont==30
% quit_dai(j)=i;
i
break;
else
% pop_temp=bestindividual;
% value_temp=bestfit;
pop=newpop;
old_max_fitvalue=new_max_fitvalue;
end
% i=i+1;
end
% pop1_range_min(j)=(min(pop(1,:))-1048)/1000; %第一个实验函数
% pop1_range_max(j)=(max(pop(1,:))-1048)/1000;
% %
% pop2_range_min(j)=(min(pop(2,:))-1048)/1000;
% pop2_range_max(j)=(max(pop(2,:))-1048)/1000;
% pop1_range_min(j)=(min(pop(1,:))-3000)/1000; %第二个实验函数
% pop1_range_max(j)=(max(pop(1,:))-3000)/1000;
%
% pop1_range_min(j)=min(pop(1,:))/1000; %第三个实验函数
% pop1_range_max(j)=max(pop(1,:))/1000;
% newpop
% newpop;
% pop_best;
%
% pop_best_real=(pop_best-6000)./10000;
% ;%第一个测试函数
% % pop_best_real=(pop_best-1048)./1000; %第二个测试函数
% % pop_best_real=pop_best/1000; %第三个测试函数
%
%
% % pop_best=dec2bin(pop_best,9);
% value_best;
% dai_best;
%
% tol_pop_best_real(:,j)=pop_best_real;
% tol_value_best(j)=200-value_best;
% % tol_value_best(j)=-value_best;
% % tol_value_best_real(j)=value_best_real;
% tol_dai_best(j)=dai_best;
%
%
% j=j+1;
% end
toc;
%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -