• 轮盘选择法


    在看进化算法的时候,看到一个东东,就是要根据轮盘赌法,选择可以交配的个体

    它的代码是这样的

    /** 在计算完种群适应度之后,我们需要使用转盘赌法选取可以产生下一代的个体,这里有个条件就是只有个人的适应度不小于平均适应度才会长生下一代(适者生存) */
        private Chromosome getParentChromosome() {
            double slice = Math.random() * totalScore;
            double sum = 0;
            for (Chromosome chro : population) {
                sum += chro.getScore();
                // 转到对应的位置并且适应度不小于平均适应度
                if (sum > slice && chro.getScore() >= averageScore) {
                    return chro;
                }
            }
            return null;
        }

    其中slice是一个随机数,由于Math.random 的范围在0.0~1.0的闭区间,设想每个个体的score是1,有10个个体,totalScore=10,所以 slice的值最终在[0,10]

    第一次for循环, sum+=chro.getScore 之后等于1,假设slice=5,这时候if中的条件

      sum > slice && chro.getScore() >= averageScore

                 1>5        &&   1>=1 

           不成立,直到sum=5的时候,才能通过。

    当然这是score都为1的,易于理解的设想。可以理解,如果某个个体的分数比较高,那么它更容易通过if条件,这就是轮盘赌算法的本质:自己的分数与被选择的概率成正比

  • 相关阅读:
    数字系统设计练习(一)—— 闪烁的小灯
    使用matplotlib时pyplot.show()图像不显示
    Linux命令——github篇
    Caffe: Cannot create Cublas handle. Cublas won't be available
    欧拉函数
    Prim最小生成树+优先队列优化
    KMP算法
    克鲁斯卡尔求最小生成树
    C++ 文件输出、输出
    并查集
  • 原文地址:https://www.cnblogs.com/heben/p/7447999.html
Copyright © 2020-2023  润新知