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

📄 my_sga_haimingmainprog.m

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

%%%%%%%%自适应参数PCPM 
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=16; %字符串长度(个体长度),染色体长度

n=60000;
% n=9000;
% pc=1; %设置交叉概率
pc=0.95; %设置交叉概率
pm=0.08; %设置变异概率
%参数设置结束

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

dna_best=0;
dna_best_value=0;
%给最佳染色体及其适应度值赋初值%
pop_best=zeros(1,chromlength);
value_best=0;
dai_best=1;
%结束
i=1;
max_fitvalue=0;
% while(mean_fitvalue~=2700)
  fitvalue=my_sga_calfitvalue(pop,popsize); %计算群体中每个个体的适应度
  old_max_fitvalue=max(fitvalue);
for i=1:dai%50为迭代次数   

    [bestindividual,bestfit]=my_sga_best(popsize,pop,fitvalue);%求出群体中适应值最大的个体及其适应值
    best_fit(i)=bestfit;
    
    
[newpop,dna_best,dna_best_value]=my_sga_selection(popsize,pop,fitvalue); %复制

[newpop]=my_sga_haimingcrossover(popsize,chromlength,newpop,pc); %交叉

[newpop]=my_sga_mutation(popsize,chromlength,newpop,pm,dna_best);%变异

fitvalue_tem=my_sga_calfitvalue(newpop,popsize); %计算变异后群体中每个个体的适应度
% newpop
[newpop]=my_sga_care(popsize,newpop,fitvalue_tem,dna_best);%%根据变异后的适应度替换最差的个体
% newpop
fitvalue=my_sga_calfitvalue(newpop,popsize); %计算群体中每个个体的适应度
  new_max_fitvalue=max(fitvalue);
  

if bestfit>value_best   %保存数代遗传之后最好的种群
    value_best=bestfit;
    pop_best=bestindividual;
    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-30000)./1000;%第一个测试函数
% pop_best_real=(pop_best-1048)./1000;  %第二个测试函数
% pop_best_real=pop_best/1000;  %第三个测试函数


% pop_best=dec2bin(pop_best,9);
% value_best
% dai_best
% value_best_real

tol_pop_best_real(:,j)=pop_best_real;
tol_value_best(j)=87000000-value_best;

tol_dai_best(j)=dai_best;


j=j+1;
end

toc;
% 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -