Crossover

In genetic algorithms and evolutionary computation, crossover, also called recombination, is a genetic operator used to combine the genetic information of two parents to generate new offspring.

Recombination Interface

All recombination operations have following call interface: recombination(i1, i2) where i1 and i2 are the same type individuals that involved in recombination to produce an offspring. The recombination function returns pair of recombined individuals.

Note: Some of the selection algorithms implemented as function closures, in order to provide additional parameters for the specified above recombination interface.

Operations

List of the ES strategy recombination operations:

Evolutionary.averageMethod
average(ss::Vector{<:AbstractStrategy})

Returns the average value of the mutation parameter $\sigma$ of strategies ss.

source

List of the ES population recombination operations:

Evolutionary.averageMethod
average(population)

Returns an one offspring individual of a multi-parent recombination by averaging population.

source
Evolutionary.marriageFunction
marriage(population)

Returns an one offspring individual of a multi-parent recombination by random copying from population.

source

Binary crossovers:

Evolutionary.uniformFunction
uniform(v1, v2)

Uniform crossover between v1 and v2 individuals.

source
uniform(r = 1.0)

Returns an in-place real valued mutation function that performs the uniform distributed mutation [1].

The mutation operator randomly chooses a number $z$ in from the uniform distribution on the interval $[-r,r]$, the mutation range. The mutated individual is given by

  • $x_i^\prime = x_i + z_i$
source

Real valued crossovers:

Base.identityFunction
identity(v1, v2)

Returns the same parameter individuals v1 and v2 as an offspring pair.

source
Evolutionary.discreteFunction
discrete(v1, v2)

Returs a randomly assembled offspring and its inverse from the elements of parents v1 and v2.

source
Evolutionary.intermediateFunction
intermediate(d::Real=0.0)

Returns an extended intermediate recombination operation, see Recombination Interface, which generates offspring u and v as

  • $u_i = x_i + \alpha_i (y_i - x_i)$
  • $v_i = y_i + \alpha_i (x_i - y_i)$

where $\alpha_i$ is chosen uniform randomly in the interval $[-d;d+1]$.

source
Evolutionary.lineFunction
line(d::Real=0.0)

Returns a extended line recombination operation, see Recombination Interface, which generates offspring u and v as

  • $u_i = x_i + \alpha (y_i - x_i)$
  • $v_i = y_i + \alpha (x_i - y_i)$

where $\alpha$ is chosen uniform randomly in the interval $[-d;d+1]$.

source
Evolutionary.HXFunction
HX(x, y)

Heuristic crossover (HX) recombination operation[3] generates offspring u and v as

  • $u = x + r (x - y)$
  • $v = y + r (y - x)$

where $r$ is chosen uniform randomly in the interval $[0;1)$.

source

Permutation crossovers:

Tree (expression) crossovers:

References

  • 1H. Mühlenbein, D. Schlierkamp-Voosen, "Predictive Models for the Breeder Genetic Algorithm: I. Continuous Parameter Optimization". Evolutionary Computation, 1 (1), pp. 25-49, 1993.
  • 2K. V. Price and R. M. Storn and J. A. Lampinen, "Differential evolution: A practical approach to global optimization", Springer, 2005.
  • 3Z. Michalewicz, T. Logan, S. Swaminathan. "Evolutionary operators for continuous convex parameter spaces." Proceedings of the 3rd Annual conference on Evolutionary Programming, 1994.
  • 4K. Deep, M. Thakur, "A new crossover operator for real coded genetic algorithms", Applied Mathematics and Computation 188, 2007, 895–912
  • 5K. Deep, K. P. Singh, M. L. Kansal, and C. Mohan, "A real coded genetic algorithm for solving integer and mixed integer optimization problems.", Appl. Math. Comput. 212, 505-518, 2009