📄 select.m
字号:
function Ret=Select(Individuals,SizePop,Opts,localSort)
% In this function,it fulfils a selection among chromosomes
% Individuals input : set of Individuals
% SizePop input : size of population
% Opts input : tag for choosing method of selection
% Ret output : new set of Individuals
%--------------------------------------------------------------------我添加的程序
%用于免疫机制。现在缺少的是种群中个体适应度的高低,现在要排序,然后在后面如果出现数量不足时进行补充
countf=0;
fitness=Individuals.Fitness;
%AfterSort=sort(fitness,'descend');%不知道对不对呢,目的是先将原来的数据结构中的数据进行排序,然后想从前往后去适应度高的那些。
%localSort=zeros(1,SizePop);%重新定义一个矩阵用来存储排好的序列
j=1;
avgf=sum(Individuals.Fitness)/numel(Individuals.Fitness);
SumI=sum(Individuals.Fitness);
%for i=0:SizePop-1
% if i==SizePop-1
% break;
% end
% d=find(Individuals.Fitness==AfterSort(i+1));%d用来存储所获得的位置号
% [m n]=size(d);
% for j=1:n
% localSort(i+j)=d(j);
% end
% j=i+n;
%end
%这样就记录了按顺序排列后,各个高位所在的位置了。
%-------------------------------------------------------------------
switch Opts
case 'roulette' % roulette wheel model
Sumf=Individuals.Fitness/SumI ; %计算适应度,即每个适应度在总适应度中的比值。
Individuals.Fitness;
Index=[];
for i=1:SizePop
fff=Individuals.Fitness;
if Individuals.Fitness(i)>avgf %如果大于随机数就进行下面的操作,并列的为选优操作,即适应度大于上代群体中的平均
countf=countf+1;
Index=[Index i]; %矩阵合并,记录下一群体中的个体,即适应度大于随即的那些个体。
end
end
countf
if countf<SizePop; %不足的用原始种群中适应度高的来补充
fillin=SizePop-countf;
for j=1:fillin
Index=[Index localSort(j)];
end
end
% 上面用来将不足的数量补充,这样就可以将总体的数量达到一致。
Individuals.Chrom=Individuals.Chrom(Index,:);
Individuals.Fitness=Individuals.Fitness(Index);
Ret=Individuals;
%-------------------------------------
case 'tournament' % tourment model
AllIndex=[];
for i=1:SizePop
Pick=rand(1,2);
while prod(Pick)==0 %含有0元素
Pick=rand(1,2);
end
Index=ceil(Pick.*SizePop);
if Individuals.Fitness(Index(1))>=Individuals.Fitness(Index(2))
AllIndex=[AllIndex Index(1)];
else
AllIndex=[AllIndex Index(2)];
end
end
Individuals.Chrom=Individuals.Chrom(AllIndex,:);
Individuals.Fitness=Individuals.Fitness(AllIndex);
Ret=Individuals;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -