首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >再生种群的复循环

再生种群的复循环
EN

Stack Overflow用户
提问于 2013-11-22 18:09:06
回答 1查看 53关注 0票数 0

我正在使用一种遗传算法,我试图在一个群体中重新创造个体(在一代人结束时将他们移除后)。问题是,“交叉”函数创建了两个个体,“变异”和“createRandomIndividual”函数创建了一个个体。我怎样才能把它融入循环呢?

代码语言:javascript
复制
List<Individual> population = new ArrayList<Individual>();

private void replaceIndividuals(int individualsTurnover) {
    //individualTurnover = number of individuals I need to re-generate
    boolean even = individualsTurnover % 2 == 0;

    for (int i=0; i<individualsTurnover/2; i++){
        replaceIndividuals();
    }

    if (!even)
        mutate();
}

private void replaceIndividuals() {
    int random = generator.nextInt(10);

    if (random < 1) {
        // generates one individual via mutation
        mutate(); 
    }
    else if (random < 2) {
        // generates one individual randomly
        createRandomIndividual();
    }
    else  {
        //generates two individuals by crossing-over individuals from a pool of parents
        crossover();
    }
}

目前,有太多的人被创造出来。创建的个体数应该是=“个人化The”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-22 18:29:41

这也许能解决你的问题。我稍微更改了方法签名。

代码语言:javascript
复制
 public class Test
    {

        private void replaceIndividuals(int individualsTurnover) {
            //individualTurnover = number of individuals I need to re-generate
           while(individualsTurnover > 1)
           {
               individualsTurnover = individualsTurnover - replaceIndividuals();
               //I am deducting this count because those many individuals are already created
           }
           //This is the only possible count > 0
           if(individualsTurnover == 1)
           {
               mutate();
           }
        }
        /**
         * 
         * @return No of individulas created
         */
        private int  replaceIndividuals() {
            int random = generator.nextInt(10);

            if (random < 1) {
                // generates one individual via mutation
                mutate();
                retrun 1;
            }
            else if (random < 2) {
                // generates one individual randomly
                createRandomIndividual();
                return 1;
            }
            else  {
                //generates two individuals by crossing-over individuals from a pool of parents
                crossover();

                return 2;
            }
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20151634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档