org.apache.commons.math3.genetics
Class OnePointCrossover<T>

java.lang.Object
  extended by org.apache.commons.math3.genetics.OnePointCrossover<T>
Type Parameters:
T - generic type of the AbstractListChromosomes for crossover
All Implemented Interfaces:
CrossoverPolicy

public class OnePointCrossover<T>
extends java.lang.Object
implements CrossoverPolicy

One point crossover policy. 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:

 -C- denotes a crossover point
                   -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        (*)
      /------------\ /-----\              /------------\ /-----\
 c1 = (1 0 1 0 0 1  | 1 1 1)    X    c2 = (0 1 1 0 1 0  | 0 1 1)
 
This policy works only on AbstractListChromosome, and therefore it is parameterized by T. Moreover, the chromosomes must have same lengths.

Since:
2.0
Version:
$Id: OnePointCrossover.java 1416643 2012-12-03 19:37:14Z tn $

Constructor Summary
OnePointCrossover()
           
 
Method Summary
private  ChromosomePair crossover(AbstractListChromosome<T> first, AbstractListChromosome<T> second)
          Helper for crossover(Chromosome, Chromosome).
 ChromosomePair crossover(Chromosome first, Chromosome second)
          Performs one point crossover.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

OnePointCrossover

public OnePointCrossover()
Method Detail

crossover

public ChromosomePair crossover(Chromosome first,
                                Chromosome second)
                         throws DimensionMismatchException,
                                MathIllegalArgumentException
Performs one point crossover. 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:
 -C- denotes a crossover point
                   -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        (*)
      /------------\ /-----\              /------------\ /-----\
 c1 = (1 0 1 0 0 1  | 1 1 1)    X    c2 = (0 1 1 0 1 0  | 0 1 1)
 

Specified by:
crossover in interface CrossoverPolicy
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 of AbstractListChromosome
DimensionMismatchException - if the length of the two chromosomes is different

crossover

private ChromosomePair crossover(AbstractListChromosome<T> first,
                                 AbstractListChromosome<T> second)
                          throws DimensionMismatchException
Helper for crossover(Chromosome, Chromosome). Performs the actual crossover.

Parameters:
first - the first chromosome.
second - the second chromosome.
Returns:
the pair of new chromosomes that resulted from the crossover.
Throws:
DimensionMismatchException - if the length of the two chromosomes is different


Copyright (c) 2003-2013 Apache Software Foundation