我正在编写遗传算法来解决分类问题。
我正在设置我的配置,我确实看到其他人在网上做了什么,但是使用我自己的健身功能(必需)。我生成了一个随机的基因型,它保留了我的人口,然后进化了这个人口。但是,有时我会收到错误'比较方法违反了其一般合同!'
我理解这个错误意味着什么,但是因为它是在框架方法上调用的.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;
}
答案 0 :(得分:1)
这正是它所说的。此错误通常意味着您的compareTo
方法不一致,这可能意味着订单取决于参数的顺序。
例如,如果compareTo(a,b)
为0
,那么compareTo(b,a)
也必须为0.同样可以说&#34;大于&#34;和&#34;小于&#34;关系。反转参数也应该反转答案。
如果这不成立,则无法找到值的排序,因为顺序取决于比较器的确切输入。