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

📄 ga.m

📁 简单的遗传算法matlab的代码实现
💻 M
字号:

clear all
Pc=0.25;
Pm=0.01;
M=10;
TT=1000;
U=zeros(M,33);
t1=(12.1+3)/(2^18-1);
t2=(5.8-4.1)/(2^15-1);
U=round(rand(M,33));

for p=1:1:TT
    for i=1:1:M
        sum1=0;
        sum2=0;
        for j=1:1:18
           sum1=sum1+U(i,j)*(2^(18-j));       
        end
        x1(i)=-3.0+sum1*t1;    
        for k=19:1:33
            sum2=sum2+U(i,k)*(2^(33-k));
        end
         x2(i)=4.1+sum2*t2;
    end
    for i=1:1:M
        EU(i)= 21.5+x1(i)*sin(4*pi*x1(i))+x2(i)*sin(20*pi*x2(i));
    end
    [MAX,CC]=max(EU);
    best=U(CC,:)
    %选择
    sum0=0;
    for i=1:1:M
       sum0=sum0+EU(i);
    end
    for i=1:1:M
        PU(i)=EU(i)/sum0;
    end
    QU=cumsum(PU); 
    QU0=[0 QU];
     for i=1:1:M
         TU(i,:)=U(length(find(rand>=QU0)),:);
     end
      %交叉
      c1=fix(32*rand(1));
      for i=1:2:M-1
          if rand<Pc
              for j=c1+1:1:33
                  u=TU(i,j);
                 TU(i,j)=TU(i+1,j);
                 TU(i+1,j)=u;
              end
          end
      end    
  
 %变异
   for i=1:1:M
       for j=1:1:33
          if rand<Pm
              if TU(i,j)==0
                 TU(i,j)=1;
              else TU(i,j)=0;
              end
          end
       end
   end
   U=TU;
   U(M,:)=best;
end
x1(CC)
x2(CC)
best
MAX
           

⌨️ 快捷键说明

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