zoukankan      html  css  js  c++  java
  • 轮盘选择法

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

    它的代码是这样的

    /** 在计算完种群适应度之后,我们需要使用转盘赌法选取可以产生下一代的个体,这里有个条件就是只有个人的适应度不小于平均适应度才会长生下一代(适者生存) */
        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条件,这就是轮盘赌算法的本质:自己的分数与被选择的概率成正比

  • 相关阅读:
    0429 Scrum团队成立与第6-7章读后感
    0428 团队2.0
    0422 寻找数学口袋精灵BUG
    0422 Step2-FCFS调度
    0415 博客评价
    0414 结对--软件再升级(韩麒麟 列志华)
    0408 结对做汉堡
    0406 复利计算器--结对 组员 韩麒麟 列志华
    0405 构建之法第4章 读后感
    文法分析
  • 原文地址:https://www.cnblogs.com/heben/p/7447999.html
Copyright © 2011-2022 走看看