轮盘赌选择法

目的:

有若干个备选方案,而且每个方案都有自己的潜力分值,但是在选择的时候并不完全按照分值的高低来选,而是有一定的概率接受,分值高的接受概率高,分值较低接受的概率也低。


思想:

各个个体的选择概率和其适应度值成比例,适应度越大,选中概率也越大。但实际在进行轮盘赌选择时个体的选择往往不是依据个体的选择概率,而是根据“累积概率”来进行选择。

引入“适应度”与“累积概率”的概念,其中每个部分被选中的概率与其适应度值成比例。设某一部分x(i)的适应度值表示为f(xi),该部分被选中的概率为p(xi),累积概率为q(xi),对应的计算公式如下:

P(x_{i})=f(x_{i})/\sum_{j=1}^{N}f_{j}

q(x_{i})=\sum_{j=1}^{i}p(x_{j})

累积概率表示每个个体之前所有个体的选择概率之和。

用一个抽奖的粒子,看看累积概率。

奖项参与奖三等奖二等奖一等奖
抽中概率0.40.30.20.1
累积概率0.40.70.91

过程:

  • 计算每个个体的被选中概率p(xi)
  • 计算每个部分的累积概率q(xi)
  • 随机生成一个数组m,数组中的元素取值范围在0和1之间,并将其按从小到大的方式进行排序。若累积概率q(xi)大于数组中的元素m[i],则个体x(i)被选中,若小于m[i],则比较下一个个体x(i+1)直至选出一个个体为止。

测试代码

以上边的抽奖问题测试

clc;clear;
fitvalue=[4 3 2 1]; %奖项对应的适应度值
totalf=sum(fitvalue); %适应值之和
p=fitvalue./totalf; %单个个体被选中的概率
q=cumsum(p); %每个个体的累积概率
c1=0; %用于存放编号1被选中的次数
c2=0; %用于存放编号2被选中的次数
c3=0; %用于存放编号3被选中的次数
c4=0; %用于存放编号4被选中的次数
while c1+c2+c3+c4<=9996
    fitin=1;
    newin=1;
    m=sort(rand(4,1)); %生成一组从小到大排列的随机数组
    while newin<=4
        if q(fitin)>m(newin)
            s(newin)=fitin; %s用来存放每次被选中的个体的编号
            switch s(newin)
                case 1
                    c1=c1+1;
                case 2
                    c2=c2+1;
                case 3
                    c3=c3+1;
                case 4
                    c4=c4+1;
            end
            newin=newin+1;
        else
            fitin=fitin+1;
        end
    end
end
pc1=c1/(c1+c2+c3+c4);
pc2=c2/(c1+c2+c3+c4);
pc3=c3/(c1+c2+c3+c4);
pc4=c4/(c1+c2+c3+c4);
disp('***************************************')
disp(['抽中“参与奖”的次数为:',num2str(c1)]);
disp(['抽中“参与奖”的概率为:',num2str(pc1)]);
disp('***************************************')
disp(['抽中“三等奖”的次数为:',num2str(c2)]);
disp(['抽中“三等奖”的概率为:',num2str(pc2)]);
disp('***************************************')
disp(['抽中“二等奖”的次数为:',num2str(c3)]);
disp(['抽中“二等奖”的概率为:',num2str(pc3)]);
disp('***************************************')
disp(['抽中“一等奖”的次数为:',num2str(c4)]);
disp(['抽中“一等奖”的概率为:',num2str(pc4)]);
disp('***************************************')

测试结果:

 结论:测试10000次,结果和设置的选中概率基本一致了。


应用:

遗传算法中,如果没有“依概率接受”,那么意味着每次都是按照分值的高低排序来选择,这样可能容易陷入局部最优,而无法获得全局最优解。使用了轮盘赌则可以更加修正陷入局部最优这个问题。

蚁群算法中,处理TSP问题时,用轮盘赌选择下一个城市。


小白一个,参照多篇,自我总结,侵删(私聊我),勿喷!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Handsome_Zpp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值