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

📄 自适应遗传算法2.m

📁 自适应遗传算法 最基础的版本需要可以自己修改目标函数
💻 M
字号:
figure(1);
fplot('abs(sin(30*variable)).*(1-variable/2)',[0,1]);   %画出函数曲线
%定义遗传算法参数
NIND=100;        %个体数目(Number of individuals)
MAXGEN=500;      %最大遗传代数(Maximum number of generations)
PRECI=32;       %变量的二进制位数(Precision of variables)
GGAP=1;       %代沟(Generation gap)
trace=zeros(2, MAXGEN);                        %寻优结果的初始值
FieldD=[32;0;1;1;0;1;1];                      %区域描述器(Build field descriptor)
Chrom=crtbp(NIND, PRECI);                      %初始种群
gen=0;                                         %代计数器
variable=bs2rv(Chrom, FieldD);                 %计算初始种群的十进制转换
ObjV=abs(sin(30*variable)).*(1-variable/2);        %计算目标函数值
Y=0;
while abs(Y-0.9739626456)>0.00000001
   FitnV=ranking(-ObjV); 
   [c3,r3]=sort(FitnV);
   for i=1:NIND*0.1
   flag(i)=r3(i+NIND*0.9);
  end
   SelCh=select('rws', Chrom, FitnV, GGAP); 
   variable1=bs2rv(SelCh, FieldD); 
   ObjV1=abs(sin(30*variable)).*(1-variable/2); 
    FitnV1=ranking(-ObjV1);
    avgFitnV1=sum(FitnV1)/NIND;
    maxFitnV1=max(FitnV1);
    for i=1:NIND/2;
        ffFitnV1(i)=max(FitnV1(2*i-1),FitnV1(2*i));
    end
    for i=1:NIND/2;
        if ffFitnV1(i)>avgFitnV1
            pc(i)=0.7-((0.2*(ffFitnV1(i)-avgFitnV1))./(maxFitnV1-avgFitnV1));
        else
            pc(i)=0.7;
        end
    end
    for i=1:NIND;
      if FitnV1(i)>avgFitnV1
              pm(i)=0.1-((0.099*(maxFitnV1-FitnV1(i)))./(maxFitnV1-avgFitnV1));
        else
            pm(i)=0.1;
        end
    end
    for i=1:NIND/2
        SelCh(i:2*i,:)=recombin('xovsp',SelCh(i:2*i,:),pc(i));
    end
    for i=1:NIND
      SelCh(i)=mut(SelCh(i),pm(i)); 
    end   
    Chrom=SelCh;
   variable=bs2rv(SelCh, FieldD);                         %子代个体的十进制转换
   ObjV=abs(sin(30*variable)).*(1-variable/2);             %计算子代的目标函数值
   gen=gen+1;                                             %代计数器增加
 
   [Y, I]=max(ObjV);hold on;
   plot(variable(I), Y, 'bo');
   trace(1, gen)=max(ObjV);                               %遗传算法性能跟踪
   trace(2, gen)=sum(ObjV)/length(ObjV);
end
variable=bs2rv(Chrom, FieldD);                            %最优个体的十进制转换
hold on, grid;
plot(variable,ObjV,'b*');
figure(2);
plot(trace(1,:));
hold on;
plot(trace(2,:),'-.');grid

⌨️ 快捷键说明

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