最大化Java中的函数

时间:2016-07-12 21:32:45

标签: java algorithm genetic-algorithm maximize

我跟着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的最高结果?

1 个答案:

答案 0 :(得分:1)

通过“指定解决方案”,您可能在博客中表示以下功能:

static int getMaxFitness() {
    int maxFitness = solution.length;
    return maxFitness;
}

哪种情况会给您带来麻烦。愚蠢的解决方案:

static int getMaxFitness() {
    return 12;
}

现在算法会找到300011您只需要5位/基因来检查031)或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);
}