Genotype.evolve() выдает "Метод сравнения нарушает его общий контракт"

Я пишу генетический алгоритм для решения проблемы классификации.

Я настраиваю свою конфигурацию точно так, как я видел, что другие делают онлайн, но использую мою собственную функцию фитнеса (обязательно). Я генерирую случайный генотип, который содержит мою популяцию, а затем развивает эту популяцию. Однако иногда я получаю сообщение об ошибке "Метод сравнения нарушает его общий контракт!"

Я понимаю, что означает эта ошибка, но так как она вызывается в методе Framework.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 ответ

Это означает именно то, что он говорит. Эта ошибка обычно означает, что ваш compareTo метод не согласован, что может означать, что порядок зависит от порядка параметров.

Например, если compareTo(a,b) является 0, затем compareTo(b,a) также должно быть 0. То же самое можно сказать и для отношений "больше чем" и "меньше". Инвертирование параметров также должно инвертировать ответ.

Если это не выполняется, невозможно найти сортировку значений, так как порядок зависит от точного ввода компаратора.

Другие вопросы по тегам