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

📄 crossoverop.asv

📁 多目标试题组卷仿真程序,是毕业设计的好材料
💻 ASV
字号:
function PO2=crossoverop(PO1,POPSIZE,l,m,PC,t)
global T 
PO2=PO1;
for i=1:POPSIZE
   index(i)=i;
end
%Create random parents chromosome
for i=1:POPSIZE
   point=round(rand*(POPSIZE-i));
   temp=index(i);
   index(i)=index(point+i);
   index(point+i)=temp;
end
 %calculate HAMMING
     a1=T/3;
      for i=1:POPSIZE-1
       for j=(i+1):POPSIZE
      h(i,j)=sum(abs(PO1(i,1:l)-PO1(j,1:l)));
      end
   end
HA=sum(sum(h(:,:)))/(POPSIZE*(POPSIZE-1)/2);
%calculate p;
p1=0.8*exp(-t.^2/(2*(a1.^2)));
p2=HA*p1;
%one-point crossover operation  
for i=1:POPSIZE
   for j=1:POPSIZE
      H(i,j)=sum(abs(PO1(index(i),1:l)-PO1(index(j),1:l)));
   end
end
for i=1:2:(POPSIZE-1);
  p=rand; 
   if p<PC 
      if H(i,i+1)>p2
         PO1=PO1(index(i),:);
         PO2=PO1(index(i+1),:);
      else 
         j=max(H(i,:));
         c=findstr(H(i,:),j);
         PO1=PO1(index(i),:);
         PO2=PO1(index(c(1)),:);
         PO1(index(c(1)),:)=PO1(index(i+1),:);
         PO1(index(i+1),:)=PO2;
         H(:,c(1))=H(:,i+1);
         H(c(1),:)=H(i+1,:);
         H(c(1),i)=0;
      end
      point=round(rand*(l-2))+1;
      H1=sum(abs(PO1(point:l)-PO2(point:l)));
      if H1==0
         point1=point;
         for k=1:point1-1
            if PO1(k)-PO2(k)~=0
               point=k+1;
            end
         end
      end
        ch=PO1(index(i),point:l);
        PO1(index(i),point:l)=PO1(index(i+1),point:l);
        PO1(index(i+1),point:l)=ch;
   end
   if sum(PO2(i,:))~=m;
            i=i-2;
   end    
end

⌨️ 快捷键说明

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