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 | |
---|