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

  • 相关阅读:
    0是字符串的终止符
    c语言中获取数组的长度写法
    c语言第一个程序
    linux下adb连接不上解决方法
    android的apk权限查看
    dumpsys netpolicy中state的含义
    查看ps和dumpsys netpolicy
    批量安装/卸载手机apk--python语言
    【转载】Think as Customer 以客户为中心的测试理念
    利用xampp进行https操作
  • 原文地址:https://www.cnblogs.com/heben/p/7447999.html
Copyright © 2011-2022 走看看