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:
  - Serialized Form

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `boolean`
  `sequentialBreeding`
  The flag to let the coevolutionary system know that we're doing sequential breeding.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `Breeder()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `abstract Population`
  `breedPopulation(EvolutionState state)`
  Breeds state.population, returning a new population.
  `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).

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

  ### Methods inherited from interface ec.Setup

  `setup`

- ## 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).