GEP中的轮盘赌选择程序(MATLAB)

GEP中的轮盘赌选择程序(MATLAB)  

2011-04-02 22:49:34

GEP中考虑了遗传算法中常用的选择算子,包括轮盘赌选择(roulette wheel selection),确定性选择(deterministic)和竞标赛选择(tournament selection)。Ferreira分析了这三种不同的选择算子对算法性能的影响,最后得出初步结论,选择算子的使用对算法性能影响不大,但轮盘赌选择表现更加稳定。也因此,Ferreira的所有实验都是采用轮盘赌选择。同时,由于轮盘赌有可能失去上一代最佳个体,因而GEP算法采用了简单精英策略(simple elitism)(即复制最佳个体直接进入新一代种群),以防止通过遗传操作而导致种群中的最优个体消失。又因为算法中使用了轮盘赌选择,所以GEP算法的选择策略又称为“保留精英的轮盘赌策略(roulette-wheel sampling with simple elitism)”。

轮盘赌选择,基本思想就是个体被选中的概率与该个体的适应度值成正比,适应度值越大,该个体被选中的几率就越大。具体可参考:http://hi.baidu.com/wangxiaoliblog/blog/item/d7ee698bafeef8739f2fb451.html

注意:轮盘赌选择并不要求对个体先按适应度值从大到小或者从小到大排列。

另外,在GEP中,经常会出现适应度值为0的染色体,对于这种情况,我个人采取了以下处理方式:①如果种群中所有个体适应度值为0,则对这些个体采取随机抽取的方式来选择。②如果种群中个体的适应度值不全为0,则先将适应度为0的个体删除,不考虑在选择范围内,然后从剩余的个体中进行轮盘赌选择进行挑选。

需要注意的是,对于情况①即适应度值全0的情况,该情况多出现在种群进化初期的随机初始化初始种群时候,而Ferreira指出,如果出现这种情况,则重新初始化,直至种群中至少有一个个体适应度值不为0为止。同时,由于采取了简单精英策略,只有种群中有了适应度值不为0的个体,则在后续进化过程中,种群至少会有一个精英个体的存在来保证种群适应度值不全为0。

为了程序的可移植性,本人的轮盘赌选择matlab程序采取了①②所述的情况,具体如下:

function index=RouletteWheelSelection(V,m)
%用Roulette Wheel Selection法选择m个个体
% Input:
%      V           -----待挑选种群中每个个体的重要性指标(如适应度等)
%      m           -----选择的个体数
% Output:
%      index       -----挑选的m个体的位置索引

%Tips:当V为全零向量时,该算法无效,将随机选择个体;否则算法将从重要性指标不为0的个体中选择。

n=size(V,2);%待挑选的个体数
    if max(V)==0&min(V)==0%如果V是全零向量,随机选择
        index=ceil(rand(1,m)*n);
    else
        %将适应度为0的个体驱逐出待选择范围
        temindex=find(V~=0);
        n=length(temindex);%待挑选的个体数目降低
        V=V(temindex);

        index=zeros(1,m);
        %[V,I]=sort(V,'descend');
        V=cumsum(V)/sum(V);

        pp=rand(1,m);
        for i=1:m,
            for j=1:n,
                if pp(i)                     index(i)=j;
                    break
                end
            end
        end
        index=temindex(index);
    end

 
来源: http://winsonman.blog.163.com/blog/static/1040091082010112492549840/

你可能感兴趣的:(人工智能)