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

📄 crossover2.m

📁 基于GAACA的协同多目标攻击空战决策算法
💻 M
字号:
function crosspop=crossover2(pcross,selectpop)
%%%%%%%%%% 采用交叉策略B,先添加交叉数字再删除重复数字 %%%%%%%%%

%selectpop=[1,2,3,4,1,2;   %测试用例
%           2,3,1,4,1,2;
%           3,4,1,1,2,2;
%           1,2,1,4,3,2];
%pcross=0.9;

   [mpop,npop]=size(selectpop);
   
   for i=1:2:(mpop-1)
       temp=rand;
       if pcross>temp
           
           j1 = rand_function(1,npop);     %随机选取数串的交叉区域
           j2 = rand_function(1,npop); 
            while j1==j2
                j1 = rand_function(1,npop); 
                j2 = rand_function(1,npop); 
            end
            if j1>j2
               j_int=j2;
               j2=j1;
               j1=j_int;
            end

           p1=selectpop(i,:);
           p2=selectpop(i+1,:);
           p2_cho=p2(j1:j2);
           
            for k=1:(j2-j1+1)        %将串1中和交叉区域相同的去掉
               ch=p2_cho(k);
               for kk=1:npop
                   if p1(kk)==ch
                      p1(kk)=0;
                      break;
                   end
               end     
            end    
         
           p1=[p1(1:(j1-1)),p2_cho,p1(j1:npop)];  %将串2的交叉区域加到串1的对应位置j1-j2
           
           n=1;                          %将串1重新整理
            for j=1:length(p1)
               if p1(j)>0
                  crosspop(i,n)=p1(j);
                  n=n+1;
               end
            end
           crosspop(i+1,:)=selectpop(i+1,:);    %串2不变
           
       else                                   %不满足交叉条件时不进行交叉
           crosspop(i,:)=selectpop(i,:);
           crosspop(i+1,:)=selectpop(i+1,:);
       end 
       
   end

⌨️ 快捷键说明

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