Free cookie consent management tool by TermsFeed Policy Generator

source: branches/OKBJavaConnector/ECJClient/src/ec/de/README @ 9598

Last change on this file since 9598 was 6152, checked in by bfarka, 14 years ago

added ecj and custom statistics to communicate with the okb services #1441

File size: 3.2 KB
Line 
1This package implements various Differential Evolution algorithms from
2"Differential Evolution: A Practical Approach to Global Optimization"
3by Kenneth Price, Rainer Storn, and Jouni Lampinen. 
4
5ECJ's implementation of Differential Evolution requires that the
6user specify one of several Breeders, and also that you (optionally but
7highly suggested) use a specific Evaluator.
8
9The Breeder options implement various Differential Evolution Algorithms.
10Options include:
11
12breed =   ec.de.DEBreeder
13breed =   ec.de.Best1BinDEBreeder
14breed =   ec.de.Rand1EitherOrDEBreeder
15
16The Evaluator is ec.de.DEEvaluator:
17
18eval =          ec.de.DEEvaluator
19
20The ec/app/ecsuite/de.params file contains an example.
21
22
23ECJ's DE implementation (for now)
24---------------------------------
25
26ECJ implements Differential Evolution by largely by replacing the Breeder.
27The various DE breeders work like this: for each individual i in the
28population, construct a new individual using a function called
29createIndividual(..., i, ...).  Then replace the entire population with the
30newly constructed individuals only if they are superior to the parents
31from which they were derived.  The "only if" part is implemented by DEEvaluator,
32and if you don't use it, the children will directly replace their parents.
33
34In DE, all individuals are DoubleVectorIndividuals.
35
36DEBreeder has an additional method called crossover(...) which crosses the
37original parent into the child.  Some operators use this method, others
38do not.  You can override the method to perform your own custom kind of crossover;
39the default does a uniform crossover, while guaranteeing that at least one
40gene (chosen at random) from the child will be preserved.
41
42The different breeders differ largely based on how
43createIndividual(..., i, ...) is implemented.  In all versions,
44createIndividual(..., i, ...) begins by choosing three random individuals
45r0, r1, and r2 which are different from one another and from i.  Let j
46be the new individual.
47
48There are four parameters which may affect the operation below:
49
50F:          scaling factor for mutating individuals
51CR:         the probability, per-gene, of crossing over
52F_NOISE:    Bounds on random noise added to F
53PF:         Probability of picking one of two subalgorithms for mutation
54
55
56The default version, implemented by
57
58  ec.de.DEBreeder
59
60... creates a new individual as follows.
61
62j[g] <-- r0[g] + F * (r1[g] - r2[g])
63
64This is the "classic" DE algorithm
65
66
67The next version, implemented by
68
69        ec.de.Best1BinDEBreeder
70
71... works like this.  We first determine the best individual in the
72population.  Then we say:
73
74j[g] <-- best[g] + (F + random(-F_NOISE / 2, F_NOISE / 2)) * (r1[g] - r2[g])
75
76
77The final version, implemented by
78
79  ec.de.Rand1EitherOrDEBreeder  ` 
80
81... works like this.  First we flip a coin of probability PF.  If it comes
82up 'true', then we generate the individual as the classic form:
83
84j[g] <-- r0[g] + F * (r1[g] - r2[g])
85
86... else we generate the individual as:
87
88j[g] <-- r0[g] + 0.5 * (F + 1) * (r1[g] + r2[g] - 2 * r0[g])
89
90
91Don't like any of these?  It should be fairly straightforward to copy an
92existing one and modify it.   
93
94Note that DEBreeder is a subclass of Breeder and does NOT implement
95multithreaded breeding: but DEEvaluator, as a subclass of SimpleEvaluator,
96DOES implement multithreaded evaluation.
Note: See TracBrowser for help on using the repository browser.