[6152] | 1 | This package implements steady state evolution and, by extension, asynchronous |
---|
| 2 | evolution when used in combination with the master/slave evaluation package. |
---|
| 3 | The steady state evolution facility in ECJ is fairly simple: each iteration |
---|
| 4 | the facility breeds a single individual, evaluates it, and reinserts it into |
---|
| 5 | the population (selecting an individual to die and be replaced with it). In |
---|
| 6 | asynchronous evolution, the system breeds individuals and ships them off to |
---|
| 7 | remote slaves to evaluated whenever a remote slave is available; when an |
---|
| 8 | individual is completed from a remote slave, if the initial population has not |
---|
| 9 | yet been filed up, the individual is inserted directly in the population, else |
---|
| 10 | the system selects an individual to die and be replaced by it. |
---|
| 11 | |
---|
| 12 | To do this magic requires several replacement classes: a new top-level |
---|
| 13 | evolution state object provides the evolutionary loop, plus a custom breeder |
---|
| 14 | and evaluator. Because steady-state isn't generational, certain ECJ classes |
---|
| 15 | are required to implement special interfaces in order to be compatible with |
---|
| 16 | it: breeding sources (breeding pipelines, selection methods) must be of |
---|
| 17 | SteadyStateBSourceform -- notably many selection methods don't work right, |
---|
| 18 | we suggest using Tournament Selection; the statistics facility must implement |
---|
| 19 | a different non-generational collection of statistics hooks embodied in |
---|
| 20 | SteadyStateStatisticsForm; and exchangers must implement |
---|
| 21 | SteadyStateExchangerForm. |
---|
| 22 | |
---|
| 23 | Steady state evolution doesn't have a notion of generations per se, as no |
---|
| 24 | entire generation is replaced each iteration. Instead, the evolution state |
---|
| 25 | facility defines a "generation" as when a population's worth of individuals |
---|
| 26 | has just been introduced into the system. Most statistics counts are run |
---|
| 27 | not off of these pseudo-generations but rather are based on the number of |
---|
| 28 | *evaluations* (a variable in SteadyStateEvolutionState) which have been |
---|
| 29 | done so far. As such you have the option of either stating the number |
---|
| 30 | of evaluations that the system should run for, OR the number of "generations" |
---|
| 31 | (so to speak) the system should run for. See the file steadystate.params |
---|
| 32 | for an example of how to set up steady state evolution. |
---|
| 33 | |
---|
| 34 | Classes of relevance: |
---|
| 35 | |
---|
| 36 | |
---|
| 37 | |
---|
| 38 | ec.steady.SteadyStateEvolutionState |
---|
| 39 | |
---|
| 40 | The top-level EvolutionState which performs steady-state and asynchronous |
---|
| 41 | evolution loops. |
---|
| 42 | |
---|
| 43 | |
---|
| 44 | ec.steady.SteadyStateBreeder |
---|
| 45 | |
---|
| 46 | The steady-state breeder. A drop-in replacement for Breeder, except that |
---|
| 47 | it also requires an additional parameter 'deselector' which indicates the |
---|
| 48 | SelectionMethod used to pick individuals to be replaced with new incoming |
---|
| 49 | children. This could be a random selector, or a Tournament Selection |
---|
| 50 | method picking the worst individuals, etc. See steadystate.params for |
---|
| 51 | an example. |
---|
| 52 | |
---|
| 53 | |
---|
| 54 | ec.steady.SteadyStateEvaluator |
---|
| 55 | |
---|
| 56 | The steady-state evaluator. A drop-in replacement for Evaluator. |
---|
| 57 | |
---|
| 58 | |
---|
| 59 | ec.steady.QueueIndividual |
---|
| 60 | |
---|
| 61 | A wrapper which holds an Individual, plus the subpopulation the Individual |
---|
| 62 | is stored in. This class is used by the SteadyStateEvaluator and also by |
---|
| 63 | the master-slave evaluation system to maintain some additional information |
---|
| 64 | about the Individual for purposes of Asynchronous Evolution. It's an |
---|
| 65 | internal class and shouldn't be fooled around with; it's public because |
---|
| 66 | the master-slave facility must also be able to use it. Ignore it. |
---|
| 67 | |
---|
| 68 | |
---|
| 69 | ec.steady.SteadyStateStatisticsForm |
---|
| 70 | |
---|
| 71 | Statistics objects which implement this interface will receive additional |
---|
| 72 | statistics hooks appropriate for the steady state loop (based largely on |
---|
| 73 | individuals being evaluated rather than based around generations). This |
---|
| 74 | is an optional interface and your Statistics object can always be used |
---|
| 75 | even if it doesn't implement this interface; it just won't receive the |
---|
| 76 | new method calls. |
---|
| 77 | |
---|
| 78 | |
---|
| 79 | ec.steady.SteadyStateExchangerForm |
---|
| 80 | |
---|
| 81 | All exchangers must implement the SteadyStateExchangerForm in order to be |
---|
| 82 | used with the steady state facility. This is a "gold star" interface which |
---|
| 83 | has no methods but merely is implemented by exchangers which have agreed |
---|
| 84 | to perform certain special tasks (see the code of the class). |
---|
| 85 | |
---|
| 86 | |
---|
| 87 | ec.steady.SteadyStateBSourceForm |
---|
| 88 | |
---|
| 89 | All breeding sources (BreedingPipelines, SelectionMethods) must implement |
---|
| 90 | this interface in order to be used with the steady state facility. The |
---|
| 91 | interface largely informs breeding sources that an individual has replaced |
---|
| 92 | another in the population Some breeding sources (such as |
---|
| 93 | FitnessProportionateSelection) must update their distributions each time |
---|
| 94 | this happens, which is quite expensive, and so they do not implement this |
---|
| 95 | interface. We suggest you use Tournament Selection, which is effective |
---|
| 96 | and fast. |
---|
| 97 | |
---|
| 98 | |
---|