This directory contains the code for running the ECJ master/slave
evaluator.  The master/slave evaluator allows you to connect one ECJ
evolution process with some N remove slave processes.  You can also use it
in conjunction with island models to connect each island to its own
private group of N slaves. The slave's random number generator will be
hard-coded to be based on the current time (at present).  We may change
that in the future.  Also at present individuals are sent TO the
slave and then received FROM the slave -- we may in the future simply
return the fitness from the slave, which will cut the network bandwidth
in half.

Typically the master will look something like this:

---------
parent.0 =    [point to your problem's parameter file]

# Compression is probably helpful
eval.compression=true

# The number of evalthreads must equal the number of slaves.
evalthreads = 3
seed.0 = 1500
seed.1 = 1501
seed.2 = 1502

# Here you must specify the master's IP address.  The slaves will
# connect to this IP address.
eval.master.host = 127.0.0.1

# Specify a port to connect to.  15000 is probably okay.
eval.master.port = 15000

# Specify that you're a master.  You do this by using a "MasterProblem"
# which will wrap itself around the main Problem.
eval.masterproblem = ec.eval.MasterProblem
---------




The slave will look something like this:

---------
parent.0 =    [point to the master's file -- for convenience]

# The only things we need from the master's file are the hostname and port.
# Otherwise you could just point to the problem's parameter file.

# State that I'm a slave
eval.i-am-slave = true

# Optionally provide a name for myself.  Otherwise a name will be given
# to me based on my IP address and the Current Time in Milliseconds:
# eval.slave-name = my-slave-name
---------





You fire up the master like this:

java ec.Evolve -file master.params


You fire up each of the N slaves like this:

java ec.eval.Slave -file slave.params


...and it should all nicely work!  The system works fine under 
checkpointing as far as we know.  Note that it's not fast: if ECJ must 
send a single individual at a time to a slave to be evaluated, there's a 
lot of overhead there: tcp/ip will cost you 50ms on a Dell, up to 500ms 
on Mac.  Right now SimpleEvaluator is set up to send a large chunk of 
individuals at a time to a given slave to be evaluated.  This is 
relatively faster.  Still, you must take the networking cost into 
consideration: master-slave evaluation only becomes really useful if your 
evaluation times are a half-second or more in length typically.
