[jgap-users] jGap won't use my chromosome
Brought to you by:
klausikm
From: Gabriel R. <gab...@he...> - 2007-11-09 10:45:33
|
Hello, I was using the regular Chromosome class with BooleanGenes, until I needed to use them (the chromosomes) as keys in a hashmap. I noticed that I had collisions, and after verifying that the jGap source code didn't have a bug (and it doesn't) I decided to create a UniqueChromosome class that inherits from Chromosome and overrides hashcode() and equals. There is an internal static counter that gives a unique id to each UniqueChromosome, thus the only way for them to be euqal is for them to have the same genes and the same id, which is impossible since there is no way to set/change the id after the object is created. My problem is that I give the UniqueChromosome as the as the sample Chromosome to the configuration and as soon as I generate a random chromosome using this code : private IChromosome generateNewChromosome(Configuration conf) { IChromosome c = conf.getSampleChromosome(); IInitializer chromIniter = conf.getJGAPFactory().getInitializerFor(c, c.getClass()); try { return (IChromosome) chromIniter.perform(c, c.getClass(), null); } catch (Exception e) { e.printStackTrace(); } return null; } I get a Chromosome back and not a UniqueChromosome. I checked in debug mode, and c is a UniqueChromosome, and c.class() returns the correct class, but as soon as the initializer's perform() method returns, I get a Chromosome back. Since I get a Chromosome back, my hashcode() and equals() methods aren't used (of course) and I get collisions. The DefaultInitializer's perform() method is what is being called by the way. Does anyone know why this isn't working correctly? Or did I do something wrong? Best regards, Gabriel |