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 String |
P_PICKWORST |
static String |
P_SIZE
size parameter
|
static 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
|
(package private) int |
size
Base size of the tournament; this may change.
|
INDS_PRODUCEDNO_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, typicalIndsProducedclone, getProbability, pickRandom, preparePipeline, setProbability, setupProbabilitiespublic static final String P_TOURNAMENT
public static final String P_PICKWORST
public static final String P_SIZE
int size
public double probabilityOfPickingSizePlusOne
public boolean pickWorst
public Parameter defaultBase()
PrototypedefaultBase in interface Prototypepublic void setup(EvolutionState state, Parameter base)
BreedingSourceThe 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 Prototypesetup in interface Setupsetup in class BreedingSourcePrototype.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)
SelectionMethodproduce in class SelectionMethodpublic void individualReplaced(SteadyStateEvolutionState state, int subpopulation, int thread, int individual)
SteadyStateBSourceFormindividualReplaced in interface SteadyStateBSourceFormpublic void sourcesAreProperForm(SteadyStateEvolutionState state)
SteadyStateBSourceFormsourcesAreProperForm in interface SteadyStateBSourceFormCopyright © 2014 Evolutionary Computation Laboratory at George Mason University. All rights reserved.