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条件,这就是轮盘赌算法的本质:自己的分数与被选择的概率成正比

  • 相关阅读:
    对公信贷系统与其他系统交互方式总结
    测试验收标准checklist
    测试风险汇报
    接口测试checklist
    52 | 深入浅出网站可扩展性架构设计
    51 | 深入浅出网站伸缩性架构设计
    html元素类型 块级元素、内联元素(又叫行内元素)和内联块级元素。(转载)
    IO流
    多线程
    Java网络编程
  • 原文地址:https://www.cnblogs.com/heben/p/7447999.html
Copyright © 2011-2022 走看看