轮盘赌中个体被选中的概率与其适应度大小成正比。
(1)计算各个个体的被选择概率
设群体的规模为N,F(xi)表示第i个个体的适应值,则第i个个体被选中的概率由下式给出:
(2)计算累积概率
为什么要计算累积概率?
上一步计算得到每个个体被选择的概率时,可容易看出,各个个体被选择概率的总概率和为1(相当于根据适应度进行归一化处理)。现在需要把这N个体按比例放入0~1范围的线段里,每个个体应该占用多长的线段呢?用线段的长度代表被选择概率。
因为轮盘没有方向,任何位置开始旋转都允许,代码中,我们生成一个[0,1]中的随机数,落在0~1线段上的哪段位置上的概率就是各个个体被选择的概率。
(3)最后转轮盘
伪代码:选择一个个体进入种群(如要选择多个个体请加外循环)
(a) R=random(0,1), S=0, i=0【R表示从0~1随机选一个数】
(b) IF S>=R,则转到(d)
(c ) S=S+P(xi) , i=i+1, 转到(b)【S记录着累积概率】
(d)即为被选中的个体,输出i,结束.
例子:
(图引自https://www.cnblogs.com/gaosheng12138/p/7534956.html)
比如,一轮选择中生成随机数R=0.58,则本轮选择的个体是4号;下一轮选择中生成随机数R=0.96,则本轮选择的个体是9号,同理。
*注意:
个体排序顺序会影响“轮盘赌”法;当适应性值相差不大的情况,该方法与随机选没什么区别,此时难于控制进化方向和速度;该方法是属于有放回的选择,不适合不放回的情况。
*如有错误,欢迎联系交流更正。