用于重新生成种群的复杂循环



我正在使用一种遗传算法,并试图在种群中重新创建个体(在生成结束时删除它们之后)。问题是"crossover"函数创建两个个体,而"mutate"one_answers"createRandomIndividual"函数创建一个个体。我该如何将其纳入循环中?

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();
    }
}

目前正在创建太多的个人。创建的个人数量应为="个人营业额"。

这可能会解决您的问题。我稍微更改了方法签名

 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;
            }
        }
    }

最新更新