www.pudn.com > GA-array.zip > selection.m, change:2015-06-04,size:1174b


% 2.4 选择复制 
% 选择或复制操作是决定哪些个体可以进入下一代。程序中采用赌轮盘选择法选择,这种方法较易实现。 
% 根据方程 pi=fi/∑fi=fi/fsum ,选择步骤: 
% 1)在第 t 代,由(1)式计算 fsum 和 pi  
% 2)产生 {0,1} 的随机数 rand( .),求 s=rand( .)*fsum 
% 3)求 ∑fi≥s 中最小的 k ,则第 k 个个体被选中 
% 4)进行 N 次2)、3)操作,得到 N 个个体,成为第 t=t+1 代种群 
%遗传算法子程序 
%Name: selection.m 
%选择复制 
function [newpop]=selection(pop,fitvalue) 
totalfit=sum(fitvalue);%求适应值之和 
fitvalue=fitvalue/totalfit;%单个个体被选择的概率 
fitvalue=cumsum(fitvalue); %累积概率,如 fitvalue=[1 2 3 4],则 cumsum(fitvalue)=[1 3 6 10]  
[px,py]=size(pop); 
ms=sort(rand(px,1)); %从小到大排列,将"rand(px,1)"产生的一列随机数变成轮盘赌形式的表示方法,由小到大排列 
fitin=1;  %fivalue是一向量,fitin代表向量中元素位,即fitvalue(fitin)代表第fitin个个体的单个个体被选择的概率 
newin=1;  %同理 
while newin<=px && fitin<=px 
  if(ms(newin))<fitvalue(fitin)         %ms(newin)表示的是ms列向量中第"newin"位数值,同理fitvalue(fitin) 
newpop(newin,:)=pop(fitin,:);      %赋值 ,即将旧种群中 的第fitin个个体保留到下一代(newpop) 
newin=newin+1; 
  else 
   fitin=fitin+1; 
  end 
end