Subject: | |
From: | |
Reply To: | |
Date: | Wed, 27 Jun 2012 17:32:28 -0400 |
Content-Type: | text/plain |
Parts/Attachments: |
|
|
On Jun 27, 2012, at 3:46 PM, Andreas Meier wrote:
> Thanks for your message. I've *fixed* it for myself by disabling the check for
> the evaluated flag at the beginning of the method. However, I do not work on
> the SVN build but on the official ECJ 20 build instead. Thus, I cannot test your
> fix at the moment. If I have some time, I will give it a try.
It's an easy patch you can do yourself. There are three breeder classes in ec/de/.
In each one there's a line which says:
DoubleVectorIndividual v = (DoubleVectorIndividual)(inds[index].clone());
Replace this line with
DoubleVectorIndividual v = (DoubleVectorIndividual)
(state.population.subpops[subpop].species.i_prototype.clone());
And you should be good to go.
> I also noticed another issue. I'm using a specific seed for the Mersenne
> Twister, e.g. 4357, which I keep unchanged while tuning my configuration.
> However, I noticed that although nothing of the configuration has been
> changed the results differ, which should usually not be the case if all random
> numbers are created by the Twister. Is there some other random function
> involved in the DE-algorithms?
Nope. ECJ only uses the MersenneTwister array in state.random[]. If you're running
single-threaded, ECJ (including the de package) should always return the same values
for the same initial parameters and seed. The primary exception is if you're using
distributed networking facilities (island models, distributed evaluation), in which
case repeatability is not guaranteed. Are you sure you're actually using a set seed?
The default is to use the timestamp as a seed.
Sean
|
|
|