Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基因型。进化()抛出';比较法违反其总合同';_Java_Jgap - Fatal编程技术网

Java 基因型。进化()抛出';比较法违反其总合同';

Java 基因型。进化()抛出';比较法违反其总合同';,java,jgap,Java,Jgap,我正在写一个遗传算法来解决分类问题 我正在按照我在网上看到的方式设置我的配置,但使用我自己的健身功能(必需)。我生成了一个随机的基因型来保存我的种群,然后进化出这个种群。然而,有时我会得到一个错误“比较方法违反了它的一般约定!” 我理解这个错误的含义,但由于它是在framework方法.evolve()上调用的,我不确定我能做什么 有什么想法/帮助吗? 谢谢 我的设置: DefaultConfiguration.reset(); Configuration config = new De

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

我正在按照我在网上看到的方式设置我的配置,但使用我自己的健身功能(必需)。我生成了一个随机的基因型来保存我的种群,然后进化出这个种群。然而,有时我会得到一个错误“比较方法违反了它的一般约定!”

我理解这个错误的含义,但由于它是在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;
    }
DefaultConfiguration.reset();
Configuration config=new DefaultConfiguration();
config.setPopulationSize(100);
//设置适应度函数
FitnessFunction fit=新的HyperDirectFitnessFunction(is);
config.setFitnessFunction(fit);
//获得边界
double[][]界限=getInstanceSetBounds(is);
//设置染色体
染色体样本=新染色体(配置,createSampleGenes(配置,属性计数,界限));
配置setSampleChromosome(样本);
//生成初始种群
基因型群体=基因型。随机初始基因型(配置);
//进化
int i=0;
IChromosome bestSolution=null;
对于(i=1;i<100+1;i++){
人口。进化();
bestSolution=population.getFittest染色体();
double bestFitness=bestSolution.getFitnessValue();
如果(最佳适合度>0.8)
打破
}

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

例如,如果
compareTo(a,b)
0
,则
compareTo(b,a)
也必须为0。“大于”和“小于”关系也是如此。反转参数也应反转答案


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

如我所说,我理解错误,但我不理解出了什么问题。