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

📄 复件 yiqunsuanfa.m

📁 自己编的一个遗传算法的小程序
💻 M
字号:
Ant=100;
ECHO=50;
start1=-1;end1=1;start2=-1;end2=1;tcl=0.05;
f='cos(2*pi.*x).*cos(2*pi.*y).*exp(-((x.^2+y.^2)/10))';
[x,y]=meshgrid(start1:tcl:end1,start2:tcl:end2,start3:tcl:end3,start4:tcl:end4);vxp=x;vyp=y;

vzp=eval(f);
for i=1:Ant
    X(i,1)=(start1+(end1-start1)*rand(1));
    X(i,2)=(start2+(end2-start2)*rand(1));
    
    T0(i)=cos(2*pi.*X(i,1)).*cos(2*pi.*X(i,2)).*exp(-((X(i,1).^2+X(i,2).^2)/10));
end;

figure(1);mesh(vxp,vyp,vzp);hold on;
plot3(X(:,1),X(:,2),T0,'k*')
hold on;grid on;title('(a)');xlabel('x');ylabel('y');zlabel('f(x,y)');
for Echo=1:ECHO
    P0=0.2;P=0.8;
    lamda=1/Echo;
    [T_Best(Echo),BestIndex]=max(T0);
    for j_g=1:Ant
        r=T0(BestIndex)-T0(j_g);
        Prob(Echo,j_g)=r/T0(BestIndex);
    end;
     for j_g_tr=1:Ant
         if Prob(Echo,j_g_tr)<P0
           temp1=X(j_g_tr,1)+(2*rand(1)-1)*lamda;
           temp2=X(j_g_tr,2)+(2*rand(1)-1)*lamda;
         else
             temp1=X(j_g_tr,1)+(end1-start1)*(rand(1)-0.5);
             temp2=X(j_g_tr,2)+(end2-start2)*(rand(1)-0.5);
         end
         if temp1<start1
            temp1=start1;
         end;
         if temp1>end1
             temp1=end1;
         end;
         if temp2<start2
            temp2=start2;
         end;
         if temp2>end2
             temp2=end2;
         end;
         if cos(2*pi.*temp1).*cos(2*pi.*temp2).*exp(-((temp1.^2+temp2.^2)/10))>cos(2*pi.*X(j_g_tr,1)).*cos(2*pi.*X(j_g_tr,2)).*exp(-((X(j_g_tr,1).^2+X(j_g_tr,2).^2)/10))
             X(j_g_tr,1)=temp1;X(j_g_tr,2)=temp2;
         end;
     end;
     for t_t=1:Ant
         T0(t_t)=(1-P)*T0(t_t)+cos(2*pi.*X(t_t,1)).*cos(2*pi.*X(t_t,2)).*exp(-((X(t_t,1).^2+X(t_t,2).^2)/10));
     end;
     [c_iter,i_iter]=max(T0);
     maxpiont_iter=[X(i_iter,1),X(i_iter,2)];
     maxvalue_iter=cos(2*pi.*X(i_iter,1)).*cos(2*pi.*X(i_iter,2)).*exp(-((X(i_iter,1).^2+X(i_iter,2).^2)/10));
     max_local(Echo)=maxvalue_iter;
     if Echo>=2
         if max_local(Echo)>max_global(Echo-1)
             max_global(Echo)=max_local(Echo);
         else
             max_global(Echo)=max_global(Echo-1);
         end
     else
         max_global(Echo)=maxvalue_iter;
     end;
end;%ECHO循环结束
figure(2);mesh(vxp,vyp,vzp);hold on;
x=X(:,1);y=X(:,2);
plot3(x,y,eval(f),'k*')
hold on;grid on;title('蚂蚁的最终分布位置)');xlabel('x');ylabel('y');zlabel('f(x,y)'); 
figure(3);
 max_global= max_global';
 index(:,1)=1:ECHO;
 plot(index(:,1),max_global(:,1),'b-')
 hold on;
 title('最优函数值变化趋势');
 xlabel('iteration');
 ylabel('f(x)');
 grid on;
 [c_max,i_max]=max(T0);
 maxpiont=[X(i_max,1),X(i_max,2)];
 maxvalue=cos(2*pi.*X(i_max,1)).*cos(2*pi.*X(i_max,2)).*exp(-((X(i_max,1).^2+X(i_max,2).^2)/10))
 

     
             
             
             
        
        
        
        

⌨️ 快捷键说明

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