September 2011


Options: Use Monospaced Font
Show Text Part by Default
Show All Mail Headers

Message: [<< First] [< Prev] [Next >] [Last >>]
Topic: [<< First] [< Prev] [Next >] [Last >>]
Author: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Roger Worden <[log in to unmask]>
Reply To:
ECJ Evolutionary Computation Toolkit <[log in to unmask]>
Mon, 26 Sep 2011 00:54:20 -0400
text/plain (33 lines)
As described in the Manual, I set up a shell script to vary some of my 
problem's parameters (elitism, tournament size, standard dev of Gaussian 
noise, min and max gene), to see which parameter set would produce the best 
evolution. Very cool! 

Since I'll be running several hundred "trials", I set breedthreads and 
evalthreads to try to optimize my run times. Unfortunately I'm seeing different 
evolution behavior with multiple threads than with a single thread. I have five 
subpopulations, all defined identically. When I run single-threaded, subpop 0 
always* gets a better fit, sooner, than do the other subpops. Subpops 1-4 
struggle to reach the fitness of subpop 0, but rarely reach it. They often (but 
not always) show a declining fitness, i.e. 1 is better than 2 is better than 3, 
but sometimes that curve evens out over time. If I run the same trials and 
change the threading, no changes to the subpopulations whatsoever, all five 
evolve evenly. Unless I'm misunderstanding something, this would seem to be 
a bug... has anyone reported such behavior? Or is there some valid reason 
why subpop 0 should get more "attention" or evolve (faster, better) in a 
multithread run?

(*I say always because that's what I'm observing visually. I have not checked 
EVERY output file, but I don't see any exceptions.) 

On a related note, is the number of the subpopulation to which an individual 
belongs, or the thread the evaluation is running in, available as a property or 
variable visible to the fitness evaluation method? Is there any relationship 
(affinity) between threads and subpops? I had set up some static variables in 
my fitness method to help with reporting and overall monitoring of progress, 
and when I run multithreaded these are getting corrupted and confused. What 
does a "static" variable mean in a multithreaded run? If I can detect the 
thread number (more likely) or subpop number (less likely), maybe I can 
make my monitoring variables thread-safe. (I'm new to Java, so maybe there 
is some flavor of static declaration I should be using to make them safe.)