www.gusucode.com > matlab编程遗传算法计算匹配电路源码程序 > code1/code/MATLAB源代码/recombin_structure.m
function NewChrom = recombin_structure(OldChrom,num_integer,num_parameter,SUBPOP) %recombin_structure 离散重组,对结构进行重组,电气参数随着结构一起移动 % num_integer为结构的总数,num_parameter为每个结构所含的电气参数的数量 [Nind,Lind]=size(OldChrom); NewChrom=zeros(Nind,Lind); Xops = floor(Nind/2); %用于重组的父母的对数 Mask1 = (rand(Xops,num_integer)<0.5); %子代1的掩码 Mask2 = (rand(Xops,num_integer)<0.5); %子代2的掩码 %Mask = (rand(Nind/SUBPOP,num_integer)<0.5); %子代的掩码 odd = 1:2:Nind-1; %奇数行 even= 2:2:Nind; %偶数行 i=1:num_parameter:(num_parameter*num_integer); %用于电气参数的移动 %[x,y]=sort(rand(Nind/SUBPOP,Nind/SUBPOP)); %for order_subpop=0:SUBPOP-1; %子代的结构重组 %NewChrom(order_subpop*(Nind/SUBPOP)+1:(order_subpop+1)*Nind/SUBPOP,1:num_integer)=OldChrom(order_subpop*SUBPOP+y(:,1),1:num_integer).*Mask+OldChrom(order_subpop*SUBPOP+y(:,2),1:num_integer).*(~Mask); %子代的电气参数重组 %for k=0:num_parameter-1; % NewChrom(order_subpop*(Nind/SUBPOP)+1:(order_subpop+1)*Nind/SUBPOP,num_integer+i+k)=OldChrom(order_subpop*SUBPOP+y(:,1),num_integer+i+k).*Mask+OldChrom(order_subpop*SUBPOP+y(:,2),num_integer+i+k).*(~Mask); %end %end NewChrom(odd,1:num_integer) = (OldChrom(odd,1:num_integer).* Mask1) + (OldChrom(even,1:num_integer).*(~Mask1)); %子代1的结构重组 NewChrom(even,1:num_integer) = (OldChrom(odd,1:num_integer).* Mask2) + (OldChrom(even,1:num_integer).*(~Mask2)); %子代2的结构重组 for k=0:num_parameter-1; NewChrom(odd,num_integer+i+k) = (OldChrom(odd,num_integer+i+k).* Mask1) + (OldChrom(even,num_integer+i+k).*(~Mask1)); %电气参数移动 NewChrom(even,num_integer+i+k) = (OldChrom(odd,num_integer+i+k).* Mask2) + (OldChrom(even,num_integer+i+k).*(~Mask2)); %电气参数移动 end if rem(Nind,2) %如果个体的数目为奇数,则最后一个个体不进行重组,直接复制到新的种群中 NewChrom(Nind,:)=OldChrom(Nind,:); end end