ec.de.README Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ecj Show documentation
Show all versions of ecj Show documentation
ECJ, A Java-based Evolutionary Computation Research System.
ECJ is a research EC system written in Java. It was designed to be highly flexible, with nearly all classes (and all of their settings) dynamically determined at runtime by a user-provided parameter file. All structures in the system are arranged to be easily modifiable. Even so, the system was designed with an eye toward efficiency.
ECJ is developed at George Mason University's ECLab Evolutionary Computation Laboratory. The software has nothing to do with its initials' namesake, Evolutionary Computation Journal. ECJ's sister project is MASON, a multi-agent simulation system which dovetails with ECJ nicely.
The newest version!
This package implements various Differential Evolution algorithms from
"Differential Evolution: A Practical Approach to Global Optimization"
by Kenneth Price, Rainer Storn, and Jouni Lampinen.
ECJ's implementation of Differential Evolution requires that the
user specify one of several Breeders, and also that you (optionally but
highly suggested) use a specific Evaluator.
The Breeder options implement various Differential Evolution Algorithms.
Options include:
breed = ec.de.DEBreeder
breed = ec.de.Best1BinDEBreeder
breed = ec.de.Rand1EitherOrDEBreeder
The Evaluator is ec.de.DEEvaluator:
eval = ec.de.DEEvaluator
The ec/app/ecsuite/de.params file contains an example.
ECJ's DE implementation (for now)
---------------------------------
ECJ implements Differential Evolution by largely by replacing the Breeder.
The various DE breeders work like this: for each individual i in the
population, construct a new individual using a function called
createIndividual(..., i, ...). Then replace the entire population with the
newly constructed individuals only if they are superior to the parents
from which they were derived. The "only if" part is implemented by DEEvaluator,
and if you don't use it, the children will directly replace their parents.
In DE, all individuals are DoubleVectorIndividuals.
DEBreeder has an additional method called crossover(...) which crosses the
original parent into the child. Some operators use this method, others
do not. You can override the method to perform your own custom kind of crossover;
the default does a uniform crossover, while guaranteeing that at least one
gene (chosen at random) from the child will be preserved.
The different breeders differ largely based on how
createIndividual(..., i, ...) is implemented. In all versions,
createIndividual(..., i, ...) begins by choosing three random individuals
r0, r1, and r2 which are different from one another and from i. Let j
be the new individual.
There are four parameters which may affect the operation below:
F: scaling factor for mutating individuals
CR: the probability, per-gene, of crossing over
F_NOISE: Bounds on random noise added to F
PF: Probability of picking one of two subalgorithms for mutation
The default version, implemented by
ec.de.DEBreeder
... creates a new individual as follows.
j[g] <-- r0[g] + F * (r1[g] - r2[g])
This is the "classic" DE algorithm
The next version, implemented by
ec.de.Best1BinDEBreeder
... works like this. We first determine the best individual in the
population. Then we say:
j[g] <-- best[g] + (F + random(-F_NOISE / 2, F_NOISE / 2)) * (r1[g] - r2[g])
The final version, implemented by
ec.de.Rand1EitherOrDEBreeder `
... works like this. First we flip a coin of probability PF. If it comes
up 'true', then we generate the individual as the classic form:
j[g] <-- r0[g] + F * (r1[g] - r2[g])
... else we generate the individual as:
j[g] <-- r0[g] + 0.5 * (F + 1) * (r1[g] + r2[g] - 2 * r0[g])
Don't like any of these? It should be fairly straightforward to copy an
existing one and modify it.
Note that DEBreeder is a subclass of Breeder and does NOT implement
multithreaded breeding: but DEEvaluator, as a subclass of SimpleEvaluator,
DOES implement multithreaded evaluation.
© 2015 - 2025 Weber Informatics LLC | Privacy Policy