Genotype.evolve()抛出'比较方法违反了其一般合同'

时间:2017-12-14 11:45:30

标签: java jgap

我正在编写遗传算法来解决分类问题。

我正在设置我的配置,我确实看到其他人在网上做了什么,但是使用我自己的健身功能(必需)。我生成了一个随机的基因型,它保留了我的人口,然后进化了这个人口。但是,有时我会收到错误'比较方法违反了其一般合同!'

我理解这个错误意味着什么,但是因为它是在框架方法上调用的.evolve()我不知道我能做什么......

有什么想法/帮助吗? 感谢。

我的设置:

DefaultConfiguration.reset();
    Configuration config = new DefaultConfiguration();
    config.setPopulationSize(100);

    // Setup fitness function
    FitnessFunction fit = new HyperrectFitnessFunction(is);
    config.setFitnessFunction(fit);


    // Get bounds
    double[][] bounds = getInstanceSetBounds(is);

    // Setup chromosome
    Chromosome sample = new Chromosome(config, createSampleGenes(config, attrCount, bounds));
    config.setSampleChromosome(sample);

    // Generate initial population
    Genotype population = Genotype.randomInitialGenotype(config);

    // Evolve
    int i = 0;
    IChromosome bestSolution = null;
    for (i = 1; i < 100 + 1; i++) {
      population.evolve();
      bestSolution = population.getFittestChromosome();

      double bestFitness = bestSolution.getFitnessValue();
      if (bestFitness > 0.8)
        break;
    }

1 个答案:

答案 0 :(得分:1)

这正是它所说的。此错误通常意味着您的compareTo方法不一致,这可能意味着订单取决于参数的顺序。

例如,如果compareTo(a,b)0,那么compareTo(b,a)也必须为0.同样可以说&#34;大于&#34;和&#34;小于&#34;关系。反转参数也应该反转答案。

如果这不成立,则无法找到值的排序,因为顺序取决于比较器的确切输入。