public class VectorSpecies extends Species
VectorSpecies supports the following recombination methods:
Note that BitVectorIndividuals (which use VectorSpecies) and GeneVectorIndividuals (which use GeneVectorSpecies, a subclass of VectorSpecies) do not support Line or Intermediate Recombination.
Also note that for LongVectorIndividuals, there are certain values that will never be created by line and intermediate recombination, because the recombination is calculated using doubles and then rounded to the nearest long. For large enough values (but still smaller than the maximum long), the difference between one double and the next is greater than one.
VectorSpecies has three wasy to determine the initial size of the individual:
If the algorithm used is the geometric distribution, the VectorSpecies starts at a minimum size and continues flipping a coin with a certain "resize probability", increasing the size each time, until the coin comes up tails (fails). The chunk size must be 1 in this case.
If the algorithm used is the uniform distribution, the VectorSpecies picks a random size between a provided minimum and maximum size, inclusive. The chunk size must be 1 in this case.
If the size is fixed, then you can also provide a "chunk size" which constrains the locations in which crossover can be performed (only along chunk boundaries). The genome size must be a multiple of the chunk size in this case.
VectorSpecies also contains a number of parameters guiding how the individual crosses over and mutates.
Per-Gene and Per-Segment Specification. VectorSpecies and its subclasses specify a lot of parameters, notably mutation and initialization parameters, in one of three ways. We will use the mutation-probability parameter as an example.
base.mutation-probability
base.max-gene
Note: you must provide these values even if you don't use them, as they're used as defaults by #2 and #3 below.
base.num-segments
The segments then may be defined by either start or end indices of genes. This is controlled by specifying the value of:
base.segment-type
...which can assume the value of start or end, with start being the default. The indices are defined using Java array style, i.e. the first gene has the index of 0, and the last gene has the index of genome-size - 1.
Using this method, each segment is specified byj...
base.segment.j.start
base.segment.j.mutation-probability
if segment-type value was chosen as start or by:
base.segment.j.end
base.segment.j.mutation-probability
if segment-type value is equal to end.
base.mutation-probability.i
Any settings for #3 override #2, and both override #1.
The only parameter which can be specified this way in VectorSpecies is at present mutation-probability. However a number of parameters are specified this way in subclasses.
Parameters
base.genome-size int >= 1 or one of: geometric, uniform |
(size of the genome, or if 'geometric' or 'uniform', the algorithm used to size the initial genome) |
base.chunk-size 1 <= int <= genome-size (default=1) |
(the chunk size for crossover (crossover will only occur on chunk boundaries)) |
base.geometric-prob 0.0 <= double < 1.0 |
(the coin-flip probability for increasing the initial size using the geometric distribution) |
base.min-initial-size int >= 0 |
(the minimum initial size of the genome) |
base.max-initial-size int >= min-initial-size |
(the maximum initial size of the genome) |
base.crossover-type string, one of: one, two, any |
(default crossover type (one-point, one-point-nonempty, two-point, two-point-nonempty, any-point (uniform), line, or intermediate) |
base.crossover-prob 0.0 >= double >= 1.0 |
(probability that a gene will get crossed over during any-point (uniform) or simulated binary crossover) |
base.line-extension double >= 0.0 |
(for line and intermediate recombination, how far along the line or outside of the hypercube children can be. If this value is zero, all children must be within the hypercube.) |
base.mutation-prob or | |
base.segment.segment-number.mutation-prob or | |
base.mutation-prob.gene-number 0.0 <= double <= 1.0 |
(probability that a gene will get mutated over default mutation) |
Default Base
vector.species
Modifier and Type | Field and Description |
---|---|
static int |
C_ANY_POINT |
static int |
C_GEOMETRIC |
static int |
C_INTERMED_RECOMB |
static int |
C_LINE_RECOMB |
static int |
C_NONE |
static int |
C_ONE_POINT |
static int |
C_ONE_POINT_NO_NOP |
static int |
C_SIMULATED_BINARY |
static int |
C_TWO_POINT |
static int |
C_TWO_POINT_NO_NOP |
static int |
C_UNIFORM |
int |
chunksize
How big of chunks should we define for crossover?
|
int |
crossoverDistributionIndex
What should the SBX distribution index be?
|
double |
crossoverProbability
Probability that a gene will cross over -- ONLY used in V_ANY_POINT crossover
|
int |
crossoverType
What kind of crossover do we have?
|
protected int[] |
duplicateRetries
How often do we retry until we get a non-duplicate gene?
|
boolean |
dynamicInitialSize
Was the initial size determined dynamically?
|
double |
genomeIncreaseProbability
With what probability would our genome be at least 1 larger than it is now during initialization?
|
int |
genomeResizeAlgorithm
How should we reset the genome?
|
int |
genomeSize
How big of a genome should we create on initialization?
|
double |
lineDistance
How far along the long a child can be located for line or intermediate recombination
|
int |
maxInitialSize
What's the largest legal genome?
|
int |
minInitialSize
What's the smallest legal genome?
|
protected double[] |
mutationProbability
Probability that a gene will mutate, per gene.
|
static java.lang.String |
P_CHUNKSIZE |
static java.lang.String |
P_CROSSOVER_DISTRIBUTION_INDEX |
static java.lang.String |
P_CROSSOVERPROB |
static java.lang.String |
P_CROSSOVERTYPE |
static java.lang.String |
P_DUPLICATE_RETRIES |
static java.lang.String |
P_GENOMESIZE |
static java.lang.String |
P_GEOMETRIC_PROBABILITY |
static java.lang.String |
P_LINEDISTANCE |
static java.lang.String |
P_MUTATIONPROB |
static java.lang.String |
P_NUM_SEGMENTS |
static java.lang.String |
P_SEGMENT |
static java.lang.String |
P_SEGMENT_END |
static java.lang.String |
P_SEGMENT_START |
static java.lang.String |
P_SEGMENT_TYPE |
static java.lang.String |
P_UNIFORM_MAX |
static java.lang.String |
P_UNIFORM_MIN |
static java.lang.String |
P_VECTORSPECIES |
static java.lang.String |
V_ANY_POINT |
static java.lang.String |
V_GEOMETRIC |
static java.lang.String |
V_INTERMED_RECOMB |
static java.lang.String |
V_LINE_RECOMB |
static java.lang.String |
V_ONE_POINT |
static java.lang.String |
V_ONE_POINT_NO_NOP |
static java.lang.String |
V_SIMULATED_BINARY |
static java.lang.String |
V_TWO_POINT |
static java.lang.String |
V_TWO_POINT_NO_NOP |
static java.lang.String |
V_UNIFORM |
f_prototype, i_prototype, P_FITNESS, P_INDIVIDUAL, P_PIPE, pipe_prototype
Constructor and Description |
---|
VectorSpecies() |
Modifier and Type | Method and Description |
---|---|
protected int |
contains(boolean[] array,
boolean val)
Utility method: returns the first array slot which contains the given value, else -1.
|
protected int |
contains(double[] array,
double val)
Utility method: returns the first array slot which contains the given value, else -1.
|
protected int |
contains(int[] array,
int val)
Utility method: returns the first array slot which contains the given value, else -1.
|
protected int |
contains(long[] array,
long val)
Utility method: returns the first array slot which contains the given value, else -1.
|
Parameter |
defaultBase()
Returns the default base for this prototype.
|
int |
duplicateRetries(int gene) |
protected boolean[] |
fill(boolean[] array,
boolean val)
Utility method: fills the array with the given value and returns it.
|
protected double[] |
fill(double[] array,
double val)
Utility method: fills the array with the given value and returns it.
|
protected int[] |
fill(int[] array,
int val)
Utility method: fills the array with the given value and returns it.
|
protected long[] |
fill(long[] array,
long val)
Utility method: fills the array with the given value and returns it.
|
protected void |
initializeGenomeSegmentsByEndIndices(EvolutionState state,
Parameter base,
Parameter def,
int numSegments)
Looks up genome segments using end indices.
|
protected void |
initializeGenomeSegmentsByStartIndices(EvolutionState state,
Parameter base,
Parameter def,
int numSegments)
Looks up genome segments using start indices.
|
protected void |
loadParametersForGene(EvolutionState state,
int index,
Parameter base,
Parameter def,
java.lang.String postfix)
Called when VectorSpecies is setting up per-gene and per-segment parameters.
|
double |
mutationProbability(int gene) |
Individual |
newIndividual(EvolutionState state,
int thread)
Provides a brand-new individual to fill in a population.
|
void |
setup(EvolutionState state,
Parameter base)
The default version of setup(...) loads requested pipelines and calls setup(...) on them and normalizes their probabilities.
|
protected void |
setupGenome(EvolutionState state,
Parameter base) |
buildMisc, clone, newIndividual, newIndividual
public static final java.lang.String P_VECTORSPECIES
public static final java.lang.String P_CROSSOVERTYPE
public static final java.lang.String P_CHUNKSIZE
public static final java.lang.String V_ONE_POINT
public static final java.lang.String V_ONE_POINT_NO_NOP
public static final java.lang.String V_TWO_POINT
public static final java.lang.String V_TWO_POINT_NO_NOP
public static final java.lang.String V_ANY_POINT
public static final java.lang.String V_LINE_RECOMB
public static final java.lang.String V_INTERMED_RECOMB
public static final java.lang.String V_SIMULATED_BINARY
public static final java.lang.String P_CROSSOVER_DISTRIBUTION_INDEX
public static final java.lang.String P_MUTATIONPROB
public static final java.lang.String P_CROSSOVERPROB
public static final java.lang.String P_GENOMESIZE
public static final java.lang.String P_LINEDISTANCE
public static final java.lang.String V_GEOMETRIC
public static final java.lang.String P_GEOMETRIC_PROBABILITY
public static final java.lang.String V_UNIFORM
public static final java.lang.String P_UNIFORM_MIN
public static final java.lang.String P_UNIFORM_MAX
public static final java.lang.String P_NUM_SEGMENTS
public static final java.lang.String P_SEGMENT_TYPE
public static final java.lang.String P_SEGMENT_START
public static final java.lang.String P_SEGMENT_END
public static final java.lang.String P_SEGMENT
public static final java.lang.String P_DUPLICATE_RETRIES
public static final int C_ONE_POINT
public static final int C_ONE_POINT_NO_NOP
public static final int C_TWO_POINT
public static final int C_TWO_POINT_NO_NOP
public static final int C_ANY_POINT
public static final int C_LINE_RECOMB
public static final int C_INTERMED_RECOMB
public static final int C_SIMULATED_BINARY
public static final int C_NONE
public static final int C_GEOMETRIC
public static final int C_UNIFORM
protected int[] duplicateRetries
protected double[] mutationProbability
public double crossoverProbability
public int crossoverType
public int genomeSize
public int crossoverDistributionIndex
public int genomeResizeAlgorithm
public int minInitialSize
public int maxInitialSize
public double genomeIncreaseProbability
public int chunksize
public double lineDistance
public boolean dynamicInitialSize
public double mutationProbability(int gene)
public int duplicateRetries(int gene)
public Parameter defaultBase()
Prototype
protected void setupGenome(EvolutionState state, Parameter base)
public void setup(EvolutionState state, Parameter base)
Species
protected void loadParametersForGene(EvolutionState state, int index, Parameter base, Parameter def, java.lang.String postfix)
If you override this method, be sure to call super(...) at some point, ideally first.
protected void initializeGenomeSegmentsByStartIndices(EvolutionState state, Parameter base, Parameter def, int numSegments)
protected void initializeGenomeSegmentsByEndIndices(EvolutionState state, Parameter base, Parameter def, int numSegments)
public Individual newIndividual(EvolutionState state, int thread)
Species
newIndividual
in class Species
protected long[] fill(long[] array, long val)
protected int[] fill(int[] array, int val)
protected boolean[] fill(boolean[] array, boolean val)
protected double[] fill(double[] array, double val)
protected int contains(boolean[] array, boolean val)
protected int contains(long[] array, long val)
protected int contains(int[] array, int val)
protected int contains(double[] array, double val)