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

📄 select.m

📁 我自己的遗传算法工具箱
💻 M
字号:
function ret=select(individuals,sizepop,opts)
% 本函数对每一代种群中的染色体进行选择,以进行后面的交叉和变异
% individuals input  : 种群信息
% sizepop     input  : 种群规模
% opts        input  : 选择方法的选择
% ret         output : 经过选择后的种群
switch opts
    case 'roulette'  %轮盘赌方法
        sumfitness=sum(individuals.fitness);
        sumf=individuals.fitness./sumfitness;
        index=[]; 
        for i=1:sizepop   %转sizepop次轮盘
            pick=rand;
            while pick==0
                 pick=rand;
            end
            for i=1:sizepop
                pick=pick-sumf(i);
                if pick<0
                   index=[index i];
                   break;  %寻找落入的区间,此次转轮盘选中了染色体i,注意:在转sizepop次轮盘的过程中,有可能会重复选择某些染色体
                end
            end
        end
        individuals.chrom=individuals.chrom(index,:);
        individuals.fitness=individuals.fitness(index);
        ret=individuals;
        
case 'tournament'  %锦标赛方法 
    allindex=[];    
    for i=1:sizepop
        pick=rand(1,2);
        while prod(pick)==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 + -