Java 基因型。进化()抛出';比较法违反其总合同';
我正在写一个遗传算法来解决分类问题 我正在按照我在网上看到的方式设置我的配置,但使用我自己的健身功能(必需)。我生成了一个随机的基因型来保存我的种群,然后进化出这个种群。然而,有时我会得到一个错误“比较方法违反了它的一般约定!” 我理解这个错误的含义,但由于它是在framework方法.evolve()上调用的,我不确定我能做什么 有什么想法/帮助吗? 谢谢 我的设置:Java 基因型。进化()抛出';比较法违反其总合同';,java,jgap,Java,Jgap,我正在写一个遗传算法来解决分类问题 我正在按照我在网上看到的方式设置我的配置,但使用我自己的健身功能(必需)。我生成了一个随机的基因型来保存我的种群,然后进化出这个种群。然而,有时我会得到一个错误“比较方法违反了它的一般约定!” 我理解这个错误的含义,但由于它是在framework方法.evolve()上调用的,我不确定我能做什么 有什么想法/帮助吗? 谢谢 我的设置: DefaultConfiguration.reset(); Configuration config = new De
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。“大于”和“小于”关系也是如此。反转参数也应反转答案
如果这不成立,就不可能找到排序值,因为顺序取决于比较器的精确输入。如我所说,我理解错误,但我不理解出了什么问题。