-1

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

我正在按照我在网上看到的其他人所做的完全正确地设置我的配置,但使用我自己的健身功能(必需)。我生成了一个随机基因型来保存我的种群,然后进化这个种群。但是,有时我会收到错误消息“比较方法违反了一般合同!”

我理解这个错误的含义,但由于它是在框架方法 .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;
    }
4

1 回答 1

1

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

例如 if compareTo(a,b)is 0,thencompareTo(b,a)也必须为 0。对于“大于”和“小于”关系也可以这样说。反转参数也应该反转答案。

如果这不成立,就不可能找到对值进行排序,因为顺序取决于比较器的确切输入。

于 2017-12-14T11:52:12.897 回答