Package ec

Class Breeder

java.lang.Object
ec.Breeder
All Implemented Interfaces:
Setup, Singleton, Serializable
Direct Known Subclasses:
AMALGAMBreeder, CMAESBreeder, DEBreeder, DOVSBreeder, MuCommaLambdaBreeder, NEATBreeder, PBILBreeder, PSOBreeder, SimpleBreeder

public abstract class Breeder extends Object implements Singleton
A Breeder is a singleton object which is responsible for the breeding process during the course of an evolutionary run. Only one Breeder is created in a run, and is stored in the EvolutionState object.

Breeders typically do their work by applying a Species' BreedingPipelines on subpopulations of that species to produce new individuals for those subpopulations.

Breeders may be multithreaded. The number of threads they may spawn (excepting a parent "gathering" thread) is governed by the EvolutionState's breedthreads value.

Be careful about spawning threads -- this system has no few synchronized methods for efficiency's sake, so you must either divvy up breeding in a thread-safe fashion and assume that all individuals in the current population are read-only (which you may assume for a generational breeder which needs to return a whole new population each generation), or otherwise you must obtain the appropriate locks on individuals in the population and other objects as necessary.

See Also:
  • Field Details

    • sequentialBreeding

      public boolean sequentialBreeding
      The flag to let the coevolutionary system know that we're doing sequential breeding. You shouldn't play with this flag unless you're SimpleBreeder -- keep it at false otherwise.
  • Constructor Details

    • Breeder

      public Breeder()
  • Method Details

    • breedPopulation

      public abstract Population breedPopulation(EvolutionState state)
      Breeds state.population, returning a new population. In general, state.population should not be modified.
    • shouldBreedSubpop

      public boolean shouldBreedSubpop(EvolutionState state, int subpop, int threadnum)
      Returns true if we're doing sequential breeding and it's the subpopulation's turn (round robin, one subpopulation per generation). See SimpleBreeder for more information. By default this method just returns TRUE (which should be fine in most cases).