Class NPointCrossover<T>
java.lang.Object
org.apache.commons.math3.genetics.NPointCrossover<T>
- Type Parameters:
T- generic type of theAbstractListChromosomes for crossover
- All Implemented Interfaces:
CrossoverPolicy
N-point crossover policy. For each iteration a random crossover point is
selected and the first part from each parent is copied to the corresponding
child, and the second parts are copied crosswise.
Example (2-point crossover):
-C- denotes a crossover point
-C- -C- -C- -C-
p1 = (1 0 | 1 0 0 1 | 0 1 1) X p2 = (0 1 | 1 0 1 0 | 1 1 1)
\----/ \-------/ \-----/ \----/ \--------/ \-----/
|| (*) || || (**) ||
VV (**) VV VV (*) VV
/----\ /--------\ /-----\ /----\ /--------\ /-----\
c1 = (1 0 | 1 0 1 0 | 0 1 1) X c2 = (0 1 | 1 0 0 1 | 0 1 1)
This policy works only on AbstractListChromosome, and therefore it
is parameterized by T. Moreover, the chromosomes must have same lengths.- Since:
- 3.1
-
Constructor Summary
ConstructorsConstructorDescriptionNPointCrossover(int crossoverPoints) Creates a newNPointCrossoverpolicy using the given number of points. -
Method Summary
Modifier and TypeMethodDescriptioncrossover(Chromosome first, Chromosome second) Performs a N-point crossover.intReturns the number of crossover points used by thisCrossoverPolicy.
-
Constructor Details
-
NPointCrossover
Creates a newNPointCrossoverpolicy using the given number of points.Note: the number of crossover points must be <
chromosome length - 1. This condition can only be checked at runtime, as the chromosome length is not known in advance.- Parameters:
crossoverPoints- the number of crossover points- Throws:
NotStrictlyPositiveException- if the number ofcrossoverPointsis not strictly positive
-
-
Method Details
-
getCrossoverPoints
public int getCrossoverPoints()Returns the number of crossover points used by thisCrossoverPolicy.- Returns:
- the number of crossover points
-
crossover
public ChromosomePair crossover(Chromosome first, Chromosome second) throws DimensionMismatchException, MathIllegalArgumentException Performs a N-point crossover. N random crossover points are selected and are used to divide the parent chromosomes into segments. The segments are copied in alternate order from the two parents to the corresponding child chromosomes. Example (2-point crossover):-C- denotes a crossover point -C- -C- -C- -C- p1 = (1 0 | 1 0 0 1 | 0 1 1) X p2 = (0 1 | 1 0 1 0 | 1 1 1) \----/ \-------/ \-----/ \----/ \--------/ \-----/ || (*) || || (**) || VV (**) VV VV (*) VV /----\ /--------\ /-----\ /----\ /--------\ /-----\ c1 = (1 0 | 1 0 1 0 | 0 1 1) X c2 = (0 1 | 1 0 0 1 | 0 1 1)- Specified by:
crossoverin interfaceCrossoverPolicy- Parameters:
first- first parent (p1)second- second parent (p2)- Returns:
- pair of two children (c1,c2)
- Throws:
MathIllegalArgumentException- iff one of the chromosomes is not an instance ofAbstractListChromosomeDimensionMismatchException- if the length of the two chromosomes is different
-