我正在使用一种遗传算法,我试图在一个群体中重新创造个体(在一代人结束时将他们移除后)。问题是,“交叉”函数创建了两个个体,“变异”和“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();
}
}目前,有太多的人被创造出来。创建的个体数应该是=“个人化The”。
发布于 2013-11-22 18:29:41
这也许能解决你的问题。我稍微更改了方法签名。
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;
}
}
}https://stackoverflow.com/questions/20151634
复制相似问题