ec.eval
Class SlaveMonitor

java.lang.Object
  extended by ec.eval.SlaveMonitor

public class SlaveMonitor
extends java.lang.Object

SlaveMonitor.java

The SlaveMonitor manages slave connections to each remote slave, and provides synchronization facilities for the slave connections and for various other objects waiting to be notified when new slaves are available, space is available in a slave's job queue, an individual has been completed, etc.

The monitor provides functions to create and delete slaves (registerSlave(), unregisterSlave()), schedule a job for evaluation (scheduleJobForEvaluation(...)), block until all jobs have completed (waitForAllSlavesToFinishEvaluating(...)), test if any individual in a job has been finished (evaluatedIndividualAvailable()), and block until an individual in a job is available and returned (waitForindividual()).

Generally speaking, the SlaveMonitor owns the SlaveConnections -- no one else should speak to them. Also generally speaking, only MasterProblems create and speak to the SlaveMonitor.


Field Summary
static java.lang.String P_EVALCOMPRESSION
           
static java.lang.String P_EVALMASTERPORT
           
static java.lang.String P_MAXIMUMNUMBEROFCONCURRENTJOBSPERSLAVE
           
static int SEED_INCREMENT
           
 java.net.ServerSocket servSock
          The socket where slaves connect.
 EvolutionState state
           
 boolean useCompression
          Indicates whether compression is used over the socket IO streams.
 
Constructor Summary
SlaveMonitor(EvolutionState state, boolean showDebugInfo)
          Simple constructor that initializes the data structures for keeping track of the state of each slave.
 
Method Summary
 boolean evaluatedIndividualAvailable()
           
 void notifyMonitor(java.lang.Object monitor)
           
 void registerSlave(EvolutionState state, java.lang.String name, java.net.Socket socket, java.io.DataOutputStream out, java.io.DataInputStream in)
          Registers a new slave with the monitor.
 void scheduleJobForEvaluation(EvolutionState state, Job job)
          Schedules a job for execution on one of the available slaves.
 void shutdown()
          Shuts down the slave monitor (also shuts down all slaves).
 void unregisterSlave(ec.eval.SlaveConnection slave)
          Unregisters a dead slave from the monitor.
 void waitForAllSlavesToFinishEvaluating(EvolutionState state)
          This method returns only when all slaves have finished the jobs that they were assigned.
 QueueIndividual waitForIndividual()
          Blocks until an individual comes available
 boolean waitOnMonitor(java.lang.Object monitor)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

P_EVALMASTERPORT

public static final java.lang.String P_EVALMASTERPORT
See Also:
Constant Field Values

P_EVALCOMPRESSION

public static final java.lang.String P_EVALCOMPRESSION
See Also:
Constant Field Values

P_MAXIMUMNUMBEROFCONCURRENTJOBSPERSLAVE

public static final java.lang.String P_MAXIMUMNUMBEROFCONCURRENTJOBSPERSLAVE
See Also:
Constant Field Values

SEED_INCREMENT

public static final int SEED_INCREMENT
See Also:
Constant Field Values

state

public EvolutionState state

servSock

public java.net.ServerSocket servSock
The socket where slaves connect.


useCompression

public boolean useCompression
Indicates whether compression is used over the socket IO streams.

Constructor Detail

SlaveMonitor

public SlaveMonitor(EvolutionState state,
                    boolean showDebugInfo)
Simple constructor that initializes the data structures for keeping track of the state of each slave. The constructor receives two parameters: a boolean flag indicating whether the system should display information that is useful for debugging, and the maximum load per slave (the maximum number of jobs that a slave can be entrusted with at each time).

Method Detail

waitOnMonitor

public boolean waitOnMonitor(java.lang.Object monitor)

notifyMonitor

public void notifyMonitor(java.lang.Object monitor)

registerSlave

public void registerSlave(EvolutionState state,
                          java.lang.String name,
                          java.net.Socket socket,
                          java.io.DataOutputStream out,
                          java.io.DataInputStream in)
Registers a new slave with the monitor. Upon registration, a slave is marked as available for jobs.


unregisterSlave

public void unregisterSlave(ec.eval.SlaveConnection slave)
Unregisters a dead slave from the monitor.


shutdown

public void shutdown()
Shuts down the slave monitor (also shuts down all slaves).


scheduleJobForEvaluation

public void scheduleJobForEvaluation(EvolutionState state,
                                     Job job)
Schedules a job for execution on one of the available slaves. The monitor waits until at least one slave is available to perform the job.


waitForAllSlavesToFinishEvaluating

public void waitForAllSlavesToFinishEvaluating(EvolutionState state)
This method returns only when all slaves have finished the jobs that they were assigned. While this method waits, new jobs can be assigned to the slaves. This method is usually invoked from MasterProblem.finishEvaluating. You should not abuse using this method: if there are two evaluation threads, where one of them waits until all jobs are finished, while the second evaluation thread keeps posting jobs to the slaves, the first thread might have to wait until the second thread has had all its jobs finished.


evaluatedIndividualAvailable

public boolean evaluatedIndividualAvailable()

waitForIndividual

public QueueIndividual waitForIndividual()
Blocks until an individual comes available