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

📄 main_improve_complete3_new.m

📁 多种群的链式智能体遗传算法
💻 M
字号:

function [best_fit,best_fitvalue,out_dai]=main_improve_complete3_new(pop,n,popsize,chromlength,fun_num,up_range,down_range,var_num)
%函数说明
%入口参数:pop         当前处理的种群,
%          n           绝对上限,
%          popsize     种群大小,
%          chromlength 基因位长度,
%          fun_num     函数序列号,
%          up_range    自变量的相对上限,
%          down_range  自变量的相对下限
%出口参数:best_fit    各代最有适应度值的集合
%功能说明:初始种群pop通过遗传交叉变异在给定定义域中寻优,在遗传最大代数dai之前得到最优值就自动退出遗传,
%          判定最优值的标准:前后两代间最优值之间差值连续30次小于 阈值0.00001
%          如果达到遗传最大代数也没有达到退出标准,则强制结束遗传。

% 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.05; %设置变异概率
%参数设置结束
best_fit = [];

% pop=my_sga_initpop(popsize,n); %运行初始化函数,随机产生初始群体
dai=1000;

% dna_best=0;
% dna_best_value=0;
%给最佳染色体及其适应度值赋初值%
% var_num = 10;
pop_best=zeros(var_num,1);
value_best=-999999;
dai_best=1;
%结束
i=1;
max_fitvalue=0;
% while(mean_fitvalue~=2700)
 %计算群体中每个个体的适应度
fitvalue=my_sga_calfitvalue(pop,fun_num,var_num);
old_max_fitvalue=max(fitvalue);
% best_fit(1) = old_max_fitvalue;
[bestindividual,bestfit]=my_sga_best(popsize,pop,fitvalue);
best_fit(1)=bestfit;

for i=1:dai %1000为迭代次数   
%求出群体中适应值最大的个体及其适应值
[bestindividual,bestfit]=my_sga_best(popsize,pop,fitvalue);
[dna_best_value,I]=max(fitvalue);
dna_best=pop(:,I);
%左右邻域竞争   
[newpop]=improve_compete3(popsize,pop,fitvalue,fun_num,up_range,down_range,var_num);
%交叉
[newpop]=complete3_o_crossover(popsize,newpop,pc,fitvalue,fun_num,up_range,down_range,var_num); 
%变异
[newpop]=complete_mutation(popsize,newpop,pm,i,fun_num,var_num);
%计算群体中每个个体的适应度
fitvalue_tem=my_sga_calfitvalue(newpop,fun_num,var_num); 
[new_dna_best_value,I_new]=max(fitvalue_tem);
new_dna_best=newpop(:,I_new);
%精英保留    
if new_dna_best_value>dna_best_value
     best_fit(i+1)=new_dna_best_value;
     pop=newpop;
     
 else
     best_fit(i+1)=dna_best_value;
     pop=newpop;
     pop(:,I_new)=dna_best;
 end
 %计算群体中每个个体的适应度
fitvalue=my_sga_calfitvalue(pop,fun_num,var_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
 if error(i)==0
    cont=cont+1;
else
    cont=0;
end
%达到累计次数则打印遗传代数,退出遗传;否则进行下一次遗传
if cont==10
%     quit_dai(j)=i;
   out_dai = i;
   best_fitvalue = best_fit(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 + -