我跟着an example关于Java中的遗传算法。虽然我理解了这个应用程序的概念,但我不明白如何应用我选择的公式,让遗传算法用x
(个体'基因)找到它的最高值。
我尝试了以下代码,通过使适应度返回公式的值如下:
static int getFitness(Individual individual) {
int fitness = 0;
Integer x = Integer.parseInt(individual.toString(), 2);
fitness = calculateFormula(x);
return fitness;
}
public static int calculateFormula(int x) {
int result = (-x * x) + (7 * x);
return result;
}
但是根据我所遵循的教程,你应该在开始时指定一个解决方案。但是当我这样做时,它将搜索该解决方案而不是x
的值,它将返回最高result
。如果没有指定解决方案,它只会在找到代表0
的基因时结束。
所以问题是:
我如何将公式应用于遗传算法,因此它将寻找公式-x² + 7x
的最高结果?
答案 0 :(得分:1)
通过“指定解决方案”,您可能在博客中表示以下功能:
static int getMaxFitness() {
int maxFitness = solution.length;
return maxFitness;
}
哪种情况会给您带来麻烦。愚蠢的解决方案:
static int getMaxFitness() {
return 12;
}
现在算法会找到3
(00011
您只需要5位/基因来检查0
到31
)或4
({{1}正如它应该的那样。
对于更智能的解决方案,我们必须查看终止标准:
00100
当X世代没有改善时,你可以停止寻找解决方案:
int generationCount = 0;
while(myPop.getFittest().getFitness() < FitnessCalc.getMaxFitness()){
generationCount++;
System.out.println("Generation: "+generationCount+" Fittest: "+myPop.getFittest().getFitness());
myPop = Algorithm.evolvePopulation(myPop);
}