matalb遗传算法学习笔记

%《智能算法及应用》P218遗传算法
%**********初始参数***************
Size=80;               %种群大小为80
G=100;                 %迭代次数100
CodeL=10;            %染色体长度10
umax=2.048;         %变量上限
umin=-2.048;        %变量下限
E=round(rand(Size,2*CodeL));%初始随机种群           
%**********主程序********************
for k=1:1:G
   time(k)=k;          %迭代循环
   
   for s=1:1:Size
       m=E(s,:);         %每次取出矩阵一行
       y1=0;y2=0;          
       
       %解码方法
       %*****x1******
       m1=m(1:1:CodeL);
       for i=1:1:CodeL
           y1=y1+m1(i)*2^(i-1);
       end
       x1=(umax-umin)*y1/1023+umin;
       %*****x2*******
       m2=m(CodeL+1:1:2*CodeL);
       for i=1:1:CodeL
           y2=y2+m2(i)*2^(i-1);
       end
       x2=(umax-umin)*y2/1023+umin;
       %******目标函数值,个体适应度*****
       F(s)=100 * (x1^2 - x2)^2 + (1 - x1)^2;
   end
   
   %***********1:选择最佳个体***********
   BestJ(k)=max(F);
   
   fi=F;                                %适应度函数
   [Orderfi,Indexfi]=sort(fi);  %排序
   Bestfi=Orderfi(Size);         %最后一个即为最大值
   BestS=E(Indexfi(Size),:);    %Index(x)从小到大排第x位的值在fi中对应位置,记录每一代中最优个体0.1编码
   bfi(k)=Bestfi;                    %记录每一代中最优个体适应度,此算法中等于每一代最大函数值
   
   %************2:选择与复制操作I***********
   fi_sum=sum(fi);
   fi_Size=(Orderfi/fi_sum)*Size;%计算个体相对适应度
   
   fi_S=floor(fi_Size);                 %floor向负无穷四舍五入,依据相对适应度给个体分级
   kk=1;
   for i=1:1:Size
       for j=1:1:fi_S(i)                           %分级为0的个体剔除,分级为2的被选择两次。
           TempE(kk,:)=E(Indexfi(i),:);     %选择进入下一代个体的个数,显然不足80。
           kk=kk+1;
       end
   end
   
   %********3:interlace operation***********
   pc=0.9;
   n=ceil(20*rand);
   for i=1:2:(Size-1)
       temp=rand;
       if pc>temp                                   %交叉条件
          TempE(i,n:end)=E(i+1,n:end);     %染色体交叉
          TempE(i+1,n:end)=E(i,n:end);
       end
   end
   TempE(Size,:)=BestS;                         %记录最优个体
   E=TempE;
   
   %***************4:mutation operation***********
   %pm=0.001---------------------------------------低变异率
   %pm=0.001-p[1:1:Size]*(0.001)/Size-------------自适应变异率
   %pm=0.0;----------------------------------------无变异
   pm=0.1;
   for i=1:1:Size
       for j=1:1:2*CodeL
           temp=rand;
           if pm>temp                              %变异条件
               if TempE(i,j)==0                    %变异实现,0.1反转
                   TempE(i,j)=1;
               else
                   TempE(i,j)=0;
               end
           end
       end
   end
   TempE(Size,:)=BestS;                       %最优个体保留
   E=TempE;                                       %种群替换
end

%********************result output******************
Max_Value=Bestfi
BestS
x1
x2
plot(time,BestJ);
xlabel('Time');
ylabel('Best J');
figure
plot(time,bfi);
xlabel('times');
ylabel('Best F');
hold off

********************************************************************************************************************************************

sort用法

 floor:向负无穷四舍五入

ceil:向正无穷四舍五入

猜你喜欢

转载自blog.csdn.net/qq_40761235/article/details/81100928