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

📄 cross.m

📁 包含遗传算法十进制编码的交叉子函数和变异子函数
💻 M
字号:
function v=cross(v,L) %交叉子函数,V为父代距阵,为一个N x 1的距阵,每一个元素都是一个十进制染色体,L为染色体原始二进制编码长度(编码时先用二进制,然后转化为十进制)

N = size(v,1);
pc = 0.5; 

% Crossver
for i=1:N
   cindex(i)=i;
end
for i=1:N %产生要配对的父代的序号;经过N次顺序调换,将原有顺序打乱,使相邻两个个体作为交叉的父代
   point=unidrnd(N-i+1);
   temp=cindex(i);
   cindex(i)=cindex(i+point-1);
   cindex(i+point-1)=temp;
end
for i=1:2:N
   p=rand(1);
   if(p<pc)
      a=floor((L-1)*rand(1));%0=<a<b<L 产生突变片段范围
      b=floor((L-1)*rand(1));
      if(a>b)
          temp=a;
          a=b;
          b=temp;
      end
      x1=mod(v(cindex(i),1),2^(b+1))-mod(v(cindex(i),1),2^a); %提取交叉点中的片段
      x2=mod(v(cindex(i+1)),2^(b+1))-mod(v(cindex(i+1)),2^a);
      v(cindex(i),1)=v(cindex(i),1)/(2^(b+1))*(2^(b-1))+x2+mod(v(cindex(i),1),2^a);%进行交叉
      v(cindex(i+1),1)=v(cindex(i+1))/(2^(b+1))*(2^(b-1))+x1+mod(v(cindex(i+1)),2^a);     
   end
end
   

⌨️ 快捷键说明

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