Package ec.de
Class DEBreeder
java.lang.Object
ec.Breeder
ec.de.DEBreeder
- All Implemented Interfaces:
Setup,Singleton,Serializable
- Direct Known Subclasses:
Best1BinDEBreeder,Rand1EitherOrDEBreeder
DEBreeder provides a straightforward Differential Evolution (DE) breeder
for the ECJ system. The code is derived from the "classic" DE algorithm, known as DE/rand/1/bin, found on page 140 of
"Differential Evolution: A Practical Approach to Global Optimization"
by Kenneth Price, Rainer Storn, and Jouni Lampinen.
DEBreeder requires that all individuals be DoubleVectorIndividuals.
In short, the algorithm is as follows. For each individual in the population, we produce a child by selecting three (different) individuals, none the original individual, called r0, r1, and r2. We then create an individal c, defined as c = r0 + F * (r1 - r2). Last, we cross over c with the original individual and produce a single child, using uniform crossover with gene-independent crossover probability "Cr".
This class should be used in conjunction with DEEvaluator, which allows the children to enter the population only if they're superior to their parents (the original individuals). If so, they replace their parents.
Parameters
| base.f 0.0 <= double <= 1.0 |
The "F" mutation scaling factor |
| base.cr 0.0 <= double <= 1.0 |
The "Cr" probability of crossing over genes |
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionint[]the best individuals in each population (required by some DE breeders).doubleProbability of crossover per genestatic final doubledoubleScaling factor for mutationstatic final Stringstatic final Stringstatic final Stringthe previous population is stored in order to have parents compete directly with their childrenintFields inherited from class ec.Breeder
sequentialBreeding -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbreedPopulation(EvolutionState state) Breeds state.population, returning a new population.createIndividual(EvolutionState state, int subpop, int index, int thread) crossover(EvolutionState state, DoubleVectorIndividual target, DoubleVectorIndividual child, int thread) Crosses over child with target, storing the result in child and returning it.voidprepareDEBreeder(EvolutionState state) voidsetup(EvolutionState state, Parameter base) Sets up the object by reading it from the parameters stored in state, built off of the parameter base base.booleanTests the Individual to see if its values are in range.Methods inherited from class ec.Breeder
shouldBreedSubpop
-
Field Details
-
CR_UNSPECIFIED
public static final double CR_UNSPECIFIED- See Also:
-
F
public double FScaling factor for mutation -
Cr
public double CrProbability of crossover per gene -
retries
public int retries -
P_F
- See Also:
-
P_Cr
- See Also:
-
P_OUT_OF_BOUNDS_RETRIES
- See Also:
-
previousPopulation
the previous population is stored in order to have parents compete directly with their children -
bestSoFarIndex
public int[] bestSoFarIndexthe best individuals in each population (required by some DE breeders). It's not required by DEBreeder's algorithm
-
-
Constructor Details
-
DEBreeder
public DEBreeder()
-
-
Method Details
-
setup
Description copied from interface:SetupSets up the object by reading it from the parameters stored in state, built off of the parameter base base. If an ancestor implements this method, be sure to call super.setup(state,base); before you do anything else. -
prepareDEBreeder
-
breedPopulation
Description copied from class:BreederBreeds state.population, returning a new population. In general, state.population should not be modified.- Specified by:
breedPopulationin classBreeder
-
valid
Tests the Individual to see if its values are in range. -
createIndividual
public DoubleVectorIndividual createIndividual(EvolutionState state, int subpop, int index, int thread) -
crossover
public DoubleVectorIndividual crossover(EvolutionState state, DoubleVectorIndividual target, DoubleVectorIndividual child, int thread) Crosses over child with target, storing the result in child and returning it. The default procedure copies each value from the target, with independent probability CROSSOVER, into the child. The crossover guarantees that at least one child value, chosen at random, will not be overwritten. Override this method to perform some other kind of crossover.
-