This directory contains some simple utility breeding pipelines.  These
pipelines don't make modifications of individuals, so if you're looking
for crossover or mutation etc., you'll need to check in other packages
more specifically designed for your representation.

ec.breed.ReproductionPipeline
	Requests an individual from its sole source pipeline, then
	makes a copy of it and returns the copy.  Largely used in the
	genetic programming package.

ec.breed.RepeatPipeline
	Requests an individual from its sole source pipeline a single
	time, then repeatedly makes that copy and returns the copy.

ec.breed.MultiBreedingPipeline
	When asked to create one or more children, selects from among
	some N source pipelines attached to it, requests indivdiuals
	from the chosen source, copies them, and returns them.  The
	selection procedure is probabilistic, based on the 'probability'
	values stored in each of the sources (in fact,
	MultiBreedingPipeline is the reason those probability values exist.
	This is historical: we probably should have stored them in
	the MultiBreedingPipeline instead!  Might change in the future.)

ec.breed.ForceBreedingPipeline
	When asked to create some N children, this repeatedly requests from
	its sole source some M<=N children at a time (you specify the M)
	until it gets the N children asked for.  This is useful for various
	minor tricks, such as forcing Crossover to only produce one individual.

ec.breed.BufferedBreedingPipeline
	When asked to create some N children, this makes a large request
	from its sole source to create some M >= N children at a time
	(you specify the M).  It then returns N of these children, storing
	away the other M - N ones.  When asked again to create some more 
	children, it reaches into this storage and provides some of them.
	When the storage is depleted, it creates another M children.  This
	is useful for certain minor tricks: for example, enabling you to cross
	over two individuals, then cross them over *again*.  We'd do that by
	attaching the same BufferedBreedingPipeline (with M=2) to _both_
	sources of a CrossoverPipeline (use the "same" options).  The
	BufferedBreedingPipeline then has another CrossoverPipeline as its
	source.  When the top CrossoverPipeline asked for its first child
	to cross over, the BufferedBreedingPipeline would demand two children
	from the subsidiary CrossoverPipeline (already crossed over), then
	provide one of them.  When the second child is requested, the remaining
	child would be provided. 

ec.breed.GenerationSwitchPipeline
	This pipeline takes two sources.  If the generation is less than G,
	then the pipeline provides copies of individuals from source 0.  Else
	it provides copies of individuals from source 1.
