/* Copyright 2006 by Sean Luke and George Mason University Licensed under the Academic Free License version 3.0 See the file "LICENSE" for more information */ package ec.parsimony; import ec.*; import ec.util.*; import ec.steadystate.*; import ec.select.*; /* * LexicographicTournamentSelection.java * * Created: Mon Aug 30 19:27:15 1999 * By: Liviu Panait & Sean Luke */ /** * Does a simple tournament selection, limited to the subpopulation it's * working in at the time. * *
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. If two individuals have the * same fitness, the one with smaller size is prefered. * * The default tournament size is 7. * *
Typical Number of Individuals Produced Per produce(...) call
Always 1.
Parameters
base.size int >= 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.lexicographic-tournament
*
* @author Sean Luke
* @version 1.0
*/
public class LexicographicTournamentSelection extends TournamentSelection
{
/** default base */
public static final String P_TOURNAMENT = "lexicographic-tournament";
public Parameter defaultBase()
{
return SelectDefaults.base().push(P_TOURNAMENT);
}
public boolean betterThan(Individual first, Individual second, int subpopulation, EvolutionState state, int thread)
{
return (first.fitness.betterThan(second.fitness) ||
(first.fitness.equivalentTo(second.fitness) && first.size() < second.size()));
}
}