public class TournamentSelection extends SelectionMethod implements SteadyStateBSourceForm
Tournament selection works like this: first, size individuals are chosen at random from the population. Then of those individuals, the one with the best fitness is selected.
size can be any floating point value >= 1.0. If it is a non- integer value x then either a tournament of size ceil(x) is used (with probability x - floor(x)), else a tournament of size floor(x) is used.
Common sizes for size include: 2, popular in Genetic Algorithms circles, and 7, popularized in Genetic Programming by John Koza. If the size is 1, then individuals are picked entirely at random.
Tournament selection is so simple that it doesn't need to maintain a cache of any form, so many of the SelectionMethod methods just don't do anything at all.
Typical Number of Individuals Produced Per produce(...) call
Always 1.
Parameters
base.size double >= 1 |
(the tournament size) |
base.pick-worst bool = true or false (default) |
(should we pick the worst individual in the tournament instead of the best?) |
Default Base
select.tournament
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
P_PICKWORST |
static java.lang.String |
P_SIZE
size parameter
|
static java.lang.String |
P_TOURNAMENT
default base
|
boolean |
pickWorst
Do we pick the worst instead of the best?
|
double |
probabilityOfPickingSizePlusOne
Probablity of picking the size plus one
|
INDS_PRODUCED
NO_PROBABILITY, P_PROB, probability
Constructor and Description |
---|
TournamentSelection() |
Modifier and Type | Method and Description |
---|---|
boolean |
betterThan(Individual first,
Individual second,
int subpopulation,
EvolutionState state,
int thread)
Returns true if *first* is a better (fitter, whatever) individual than *second*.
|
Parameter |
defaultBase()
Returns the default base for this prototype.
|
int |
getRandomIndividual(int number,
int subpopulation,
EvolutionState state,
int thread)
Produces the index of a (typically uniformly distributed) randomly chosen individual
to fill the tournament.
|
int |
getTournamentSizeToUse(MersenneTwisterFast random)
Returns a tournament size to use, at random, based on base size and probability of picking the size plus one.
|
void |
individualReplaced(SteadyStateEvolutionState state,
int subpopulation,
int thread,
int individual)
Called whenever an individual has been replaced by another
in the population.
|
int |
produce(int subpopulation,
EvolutionState state,
int thread)
An alternative form of "produce" special to Selection Methods;
selects an individual from the given subpopulation and
returns its position in that subpopulation.
|
void |
setup(EvolutionState state,
Parameter base)
Sets up the BreedingPipeline.
|
void |
sourcesAreProperForm(SteadyStateEvolutionState state)
Issue an error (not a fatal -- we guarantee that callers
of this method will also call exitIfErrors) if any
of your sources, or their sources, etc., are not
of SteadyStateBSourceForm.
|
finishProducing, prepareToProduce, produce, produces, typicalIndsProduced
clone, getProbability, pickRandom, preparePipeline, setProbability, setupProbabilities
public static final java.lang.String P_TOURNAMENT
public static final java.lang.String P_PICKWORST
public static final java.lang.String P_SIZE
public double probabilityOfPickingSizePlusOne
public boolean pickWorst
public Parameter defaultBase()
Prototype
defaultBase
in interface Prototype
public void setup(EvolutionState state, Parameter base)
BreedingSource
The most common modification is to normalize it with some other set of probabilities, then set all of them up in increasing summation; this allows the use of the fast static BreedingSource-picking utility method, BreedingSource.pickRandom(...). In order to use this method, for example, if four breeding source probabilities are {0.3, 0.2, 0.1, 0.4}, then they should get normalized and summed by the outside owners as: {0.3, 0.5, 0.6, 1.0}.
setup
in interface Prototype
setup
in interface Setup
setup
in class BreedingSource
Prototype.setup(EvolutionState,Parameter)
public int getTournamentSizeToUse(MersenneTwisterFast random)
public int getRandomIndividual(int number, int subpopulation, EvolutionState state, int thread)
public boolean betterThan(Individual first, Individual second, int subpopulation, EvolutionState state, int thread)
public int produce(int subpopulation, EvolutionState state, int thread)
SelectionMethod
produce
in class SelectionMethod
public void individualReplaced(SteadyStateEvolutionState state, int subpopulation, int thread, int individual)
SteadyStateBSourceForm
individualReplaced
in interface SteadyStateBSourceForm
public void sourcesAreProperForm(SteadyStateEvolutionState state)
SteadyStateBSourceForm
sourcesAreProperForm
in interface SteadyStateBSourceForm