我正在使用一种遗传算法,并试图在种群中重新创建个体(在生成结束时删除它们之后)。问题是"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;
}
}
}