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

📄 cross.m

📁 GA2 for single Machin Problem
💻 M
字号:
function [ crossed ] = cross(CR,newpop)
% soultion is permutation
% input is "newpop" is the population after roultte wheel generation
% output is m*n single_point crossed array
t=size(newpop);
crossed=[];

    for i=1:t(1)
        rr=rand(1,1);
        if rr<CR
          r(i)=1;
        else
          r(i)=0;
        end
    end
    
    while rem(sum(r),2)==1
        z=round(1+(t(1)-1)*rand(1,1));
        if r(z)==0
            r(z)=1;
        end
    end
    
    netpool=[];
    rempool=[];
    for i=1:t(1)
        if r(i)==1;
            netpool=[netpool;newpop(i,:)];
        else
            rempool=[rempool;newpop(i,:)];
        end
    end
    netpool
    rempool
 %   if sum(r)==t(1)
 %       netpool=newpop;
 %  end
    % until now "netpool" is m*n array for crossing(m should be even)

D=size(netpool);
j=D(2);
u=1;
uu=1;
while uu<=D(1)/2
    c(1,:)=netpool(u,:);
    c(2,:)=netpool(u+1,:);
    z=round(1+(j-1)*rand(1,1));
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
    if z<j-1  
        for i=1:z
            new(1,i)= c(1,i);
            new(2,i)= c(2,i);
        end

        %%%%%%%%%%%%%%%%%%%% cross new(1)
        cm1=c(1,:);
        cm2=c(2,:);
        L=length(c);

        for p=1:L
            v(p)=0;
            for q=z+1:L
                if cm2(p)==cm1(q)
                    v(p)=1;
                end
            end
        end
        tt=[];
        for pp=1:L
            if v(pp)==1
                tt=[tt,cm2(1,pp)];
            end
        end

        vv=1;
        for i=z+1:j
          new(1,i)=tt(vv);
          vv=vv+1;
        end
        %%%%%%%%%%%%%%%%%%%%
        %%%%%%%%%%%%%%%%%%%% cross new(2)
        cm1=c(1,:);
        cm2=c(2,:);

        for p=1:L
            v(p)=0;
            for q=z+1:L
                if cm1(p)==cm2(q)
                    v(p)=1;
                end
            end
        end
        tt=[];
        for pp=1:L
            if v(pp)==1
               tt=[tt,cm1(1,pp)];
            end
        end

        vv=1;
        for i=z+1:j
          new(2,i)=tt(vv);
          vv=vv+1;
        end
        %%%%%%%%%%%%%%%%%%%%
        
    else
         new=c;
    end
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    crossed=[crossed;new];
    
    u=u+2;
    uu=uu+1;
end
crossed=[crossed;rempool];

⌨️ 快捷键说明

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