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

📄 ga.m

📁 对4个参数优化的基本遗传算法程序
💻 M
字号:
clear all
clc
Size=80;
G=100;
codel=10;

Umax=1;
Umin=0;

E=round(rand(Size,4*codel)); % initial code

% main program
   for k=1:1:G
       time(k)=k;
       
       for s=1:1:Size
           m=E(s,:);
           a1=0;
           a2=0;
           a3=0;
           a4=0;
           
           % uncoding
           m1=m(1:1:codel);
              for i=1:1:codel
                  a1=a1+m1(i)*2^(i-1);
              end
              x1=(Umax-Umin)*a1/1023+Umin;
              if x1>0.140
                  x1=0.134;
                 else x1=x1;
              end
             
           m2=m(codel+1:1:2*codel)
              for i=1:1:codel
                  a2=a2+m2(i)*2^(i-1);
              end
              x2=(Umax-Umin)*a2/1023+Umin;
             if x2>0.397
                  x2=0.3969;
                 else x2=x2;
              end 
           m3=m(2*codel+1:1:3*codel)
              for i=1:1:codel
                  a3=a3+m3(i)*2^(i-1);
              end
               x3=(Umax-Umin)*a3/1023+Umin;
              if x3>0.671
                  x3=0.6699;
                 else x3=x3;
              end
           m4=m(3*codel+1:1:4*codel)
              for i=1:1:codel
                  a4=a4+m4(i)*2^(i-1);
              end
              x4=(Umax-Umin)*a4/1023+Umin;   
              if x4>0.780
                  x4=0.751;
                 else x4=x4;
              end
            F(s)=(x1+2*x2+2*x3+x4)*0.01/6;
       end
       
      Ji=F;
      
      % evaluate best J
      BestJ(k)=min(Ji);
      fi=F;          %fitness function
      [Oderfi,Indexfi]=sort(fi);
      Bestfi=Oderfi(Size);
      BestS=E(Indexfi(Size),:);
      bfi(k)=Bestfi;
      
      %select and reproduct operation
      fi_sum=sum(fi);
      fi_Size=(Oderfi/fi_sum)*Size;
      fi_S=floor(fi_Size);
      kk=1;
         for i=1:1:Size
             for j=1:1:fi_S(i)
                 TempE(kk,:)=E(Indexfi(i),:);
                 kk=kk+1;
             end
         end
         
       %crossover
       pc=0.60
       n=ceil(40*rand);
       for i=1:2:(Size-1)
           temp=rand;
           if pc>temp
               for j=n:1:40
                   TempE(i,j)=E(i+1,j);
                   TempE(i+1,j)=E(i,j);
               end
           end
       end
       TempE(Size,:)=BestS;
       E=TempE;
       
       %mutation
       pm=0.1
        for i=1:1:Size
            for j=1:1:4*codel
                temp=rand;
                if temp<pm
                    if TempE(i,j)==0
                       TempE(i,j)=1;
                   else
                       TempE(i,j)=0;
                  
                   end
               end
           end
       end
       
      TempE(Size,:)=BestS;
      E=TempE;
  end
    
     Max_value=Bestfi
     BestS
     x1
     x2
     x3
     x4
     figure(1);
     plot(time,BestJ);
     xlabel('Times');ylabel('BestJ');
     figure(2);
     plot(time,bfi);
     xlabel('timeS');ylabel('BestF');
     
     

⌨️ 快捷键说明

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