Subpopulation is a group which is basically an array of Individuals.
There is always one or more Subpopulations in the Population. Each
Subpopulation has a Species, which governs the formation of the Individuals
in that Subpopulation. Subpopulations also contain a Fitness prototype
which is cloned to form Fitness objects for individuals in the subpopulation.

An initial subpopulation is populated with new random individuals
using the populate(...) method. This method typically populates
by filling the array with individuals created using the Subpopulations'
species' emptyClone() method, though you might override this to create
them with other means, by loading from text files for example.

In a multithreaded area of a run, Subpopulations should be considered
immutable. That is, once they are created, they should not be modified,
nor anything they contain. This protocol helps ensure read-safety under
multithreading race conditions.

Parameters

base.sizeint >= 1

(total number of individuals in the subpopulation)

base.speciesclassname, inherits and != ec.Species

(the class of the subpopulations' Species)

base.fitnessclassname, inherits and != ec.Fitness

(the class for the prototypical Fitness for individuals in this subpopulation)

base.fileString

(pathname of file from which the population is to be loaded. If not defined, or empty, then the population will be initialized at random in the standard manner)

base.duplicate-retriesint >= 0

(during initialization, when we produce an individual which already exists in the subpopulation, the number of times we try to replace it with something unique. Ignored if we're loading from a file.)

Constructor Detail

Subpopulation

Method Detail

defaultBase

emptyClone

Returns an instance of Subpopulation just like it had been before it was
populated with individuals. You may need to override this if you override
Subpopulation. IMPORTANT NOTE: if the size of the array in
Subpopulation has been changed, then the clone will take on the new array
size. This helps some evolution strategies.

truncate

public void truncate(int toThis)

Truncates the Subpopulation to a new size. The Subpopulation is truncated such that
the higher indexed individuals may be deleted.

clear

public void clear()

Sets all Individuals in the Subpopulation to null, preparing it to be reused.

setup

Sets up the object by reading it from the parameters stored
in state, built off of the parameter base base.
If an ancestor implements this method, be sure to call
super.setup(state,base); before you do anything else.

readSubpopulation

Reads a subpopulation from the format generated by printSubpopulation(....). If the number of individuals is not identical, the individuals array will
be deleted and replaced with a new array, and a warning will be generated as individuals will have to be created using newIndividual(...) rather
than readIndividual(...).

readSubpopulation

Reads a subpopulation in binary form, from the format generated by writeSubpopulation(...). If the number of individuals is not identical, the individuals array will
be deleted and replaced with a new array, and a warning will be generated as individuals will have to be created using newIndividual(...) rather
than readIndividual(...)