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

📄 across.m

📁 用遗传算法解决车间生产调度。Matlab下实现。
💻 M
字号:
function ChromNew=across(Chrom,NIND,XOVR,WNumber)

% Chrom=[1 2 3 4 6 7 8 9 5; 
%     3 4 5 6 2 1 8 7 9;
%     3 4 5 6 2 1 8 7 9;
%     1 2 3 4 5 6 8 7 9;
%     3 4 2 6 1 8 5 7 9;
%     8 9 5 4 6 3 2 1 7 ;
%     7 4 5 6 2 3 1 8  9;
%     3 4 5 8 2 1 7 9 6;
%     3 4 1 5 6 9 2 8 7 ;
%     9 4 5 3 6 1 2 8 7 ;
%     ];
%   NIND=10;
%  
%  WNumber=9;
%   XOVR=0.7;
 
 %新群
 ChromNew=Chrom;
 
%  %交叉位置
%  Pos1=fix((1-XOVR)*WNumber);
%  Pos2=fix(XOVR*WNumber);
 
 %随机选择交叉个体
 SelNum=randperm(NIND);
% for i=1:NIND
%  SelNum(i)=unidrnd(NIND);
% end

 
 %交叉个体组个数
 Num=NIND/2;
 Num=2*fix(Num);
 
 for i=1:2:Num
 
 a=rand;
 if XOVR>a;
     
   %变异位置
 Pos1=unidrnd(WNumber);
 Pos2=unidrnd(WNumber);
 Pos3=unidrnd(WNumber);
 Pos4=unidrnd(WNumber);

 %变异位置不相同
 while Pos1==Pos2      
 Pos2=unidrnd(WNumber);
 end 
 
 if Pos1>Pos2   
     temp=Pos1;
     Pos1=Pos2;
     Pos2=temp;
 end
 
  while Pos3==Pos4      
 Pos3=unidrnd(WNumber);
 end 
 
 if Pos3>Pos4   
     temp=Pos3;
     Pos3=Pos4;
     Pos4=temp;
 end
 
    %取交换的个体
   S1=Chrom(SelNum(i),:);
   S2=Chrom(SelNum(i+1),:);
   
   %初始化新2个体
   S11=zeros(1,WNumber);
   S22=zeros(1,WNumber);
   
   %新个体中间部分的COPY
   for j=Pos1:Pos2       
     S11(j)=S1(j);
%      S22(j)=S2(j);
   end
   
    for j=Pos3:Pos4       
      S22(j)=S2(j);
    end
   
   %交换个体1
   for j=1:WNumber     
     flag=ismember(S2(j),S11);  
      if flag==0
          k=1;
          while k<=WNumber
              if S11(k)==0
                 S11(k)=S2(j);
                 k=WNumber+1;
              end
             k=k+1;
         end
      end        
   end
   
   %交换个体2
   for j=1:WNumber     
     flag=ismember(S1(j),S22);  
      if flag==0
          k=1;
          while k<=WNumber
              if S22(k)==0
                 S22(k)=S1(j);
                 k=WNumber+1;
              end
             k=k+1;
         end
      end        
   end

   %放入新群
    ChromNew(SelNum(i),:)=S11;
    ChromNew(SelNum(i+1),:)=S22;
 end
 end

⌨️ 快捷键说明

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