Brad, sorry for the long wait time -- I dropped this on the floor
while I was out attending various trips.
It looks like the problem is my fault: when I updated ECJ's
newIndividual(...) mechanisms, I neglected to change how the island
model does reading/writing. When an island writes an individual, it
originally did so through writeGenotype() rather than writeIndividual
(), to avoid having to write the fitness of the individual. When it
reads an individual, originally it (naturally) used readGenotype()).
I changed that to newIndividual() to be consistent with the rest of
ECJ but forgot to change writeGenotype to writeIndividual(). As a
result one side was expecting a whole individual, including fitness,
and the other side was just writing out the genotype. That's why you
were getting corrupted data. I think.
For the moment, I've set both sides to read and write individuals. I
was considering making both sides just read and write genotypes, but
I think that might be dangerous if people are adding funky stuff to
their fitnesses. So we'll be a bit less efficient for the time being.
Here's a revised version of IslandExchange.java, which I've also put
out on CVS.
It's got three changes:
- the bug fix described above
- another minor bug fix so the islands properly shut themselves down
when a perfect individual is found
- the default for 'compression' is now FALSE
It seems to be working with your code, let me know if things are
On Feb 4, 2008, at 7:40 PM, Bradford Barr wrote:
> I made a zip file of all the files I was using. The problem is the
> regression example included in ECJ.