This package implements steady state evolution and, by extension, asynchronous evolution when used in combination with the master/slave evaluation package. The steady state evolution facility in ECJ is fairly simple: each iteration the facility breeds a single individual, evaluates it, and reinserts it into the population (selecting an individual to die and be replaced with it). In asynchronous evolution, the system breeds individuals and ships them off to remote slaves to evaluated whenever a remote slave is available; when an individual is completed from a remote slave, if the initial population has not yet been filed up, the individual is inserted directly in the population, else the system selects an individual to die and be replaced by it. To do this magic requires several replacement classes: a new top-level evolution state object provides the evolutionary loop, plus a custom breeder and evaluator. Because steady-state isn't generational, certain ECJ classes are required to implement special interfaces in order to be compatible with it: breeding sources (breeding pipelines, selection methods) must be of SteadyStateBSourceform -- notably many selection methods don't work right, we suggest using Tournament Selection; the statistics facility must implement a different non-generational collection of statistics hooks embodied in SteadyStateStatisticsForm; and exchangers must implement SteadyStateExchangerForm. Steady state evolution doesn't have a notion of generations per se, as no entire generation is replaced each iteration. Instead, the evolution state facility defines a "generation" as when a population's worth of individuals has just been introduced into the system. Most statistics counts are run not off of these pseudo-generations but rather are based on the number of *evaluations* (a variable in SteadyStateEvolutionState) which have been done so far. As such you have the option of either stating the number of evaluations that the system should run for, OR the number of "generations" (so to speak) the system should run for. See the file steadystate.params for an example of how to set up steady state evolution. Classes of relevance: ec.steady.SteadyStateEvolutionState The top-level EvolutionState which performs steady-state and asynchronous evolution loops. ec.steady.SteadyStateBreeder The steady-state breeder. A drop-in replacement for Breeder, except that it also requires an additional parameter 'deselector' which indicates the SelectionMethod used to pick individuals to be replaced with new incoming children. This could be a random selector, or a Tournament Selection method picking the worst individuals, etc. See steadystate.params for an example. ec.steady.SteadyStateEvaluator The steady-state evaluator. A drop-in replacement for Evaluator. ec.steady.QueueIndividual A wrapper which holds an Individual, plus the subpopulation the Individual is stored in. This class is used by the SteadyStateEvaluator and also by the master-slave evaluation system to maintain some additional information about the Individual for purposes of Asynchronous Evolution. It's an internal class and shouldn't be fooled around with; it's public because the master-slave facility must also be able to use it. Ignore it. ec.steady.SteadyStateStatisticsForm Statistics objects which implement this interface will receive additional statistics hooks appropriate for the steady state loop (based largely on individuals being evaluated rather than based around generations). This is an optional interface and your Statistics object can always be used even if it doesn't implement this interface; it just won't receive the new method calls. ec.steady.SteadyStateExchangerForm All exchangers must implement the SteadyStateExchangerForm in order to be used with the steady state facility. This is a "gold star" interface which has no methods but merely is implemented by exchangers which have agreed to perform certain special tasks (see the code of the class). ec.steady.SteadyStateBSourceForm All breeding sources (BreedingPipelines, SelectionMethods) must implement this interface in order to be used with the steady state facility. The interface largely informs breeding sources that an individual has replaced another in the population Some breeding sources (such as FitnessProportionateSelection) must update their distributions each time this happens, which is quite expensive, and so they do not implement this interface. We suggest you use Tournament Selection, which is effective and fast.