Crossover Operators

Submodules

pygenalgo.operators.crossover.crossover_operator module

class pygenalgo.operators.crossover.crossover_operator.CrossoverOperator(crossover_probability: float)[source]

Bases: GeneticOperator

Description:

Provides the base class (interface) for a Crossover Operator.

crossover(parent1: Chromosome, parent2: Chromosome) tuple[Chromosome, Chromosome][source]

Abstract method that “reminds” the user that if they want to create a Crossover Class that inherits from here they should implement a crossover method.

Parameters:
  • parent1 – (Chromosome).

  • parent2 – (Chromosome).

Returns:

Nothing but raising an error.

pygenalgo.operators.crossover.meta_crossover module

class pygenalgo.operators.crossover.meta_crossover.MetaCrossover(crossover_probability: float = 0.9)[source]

Bases: CrossoverOperator

Description:

Meta-crossover, crosses the chromosomes by applying randomly all other crossovers (one at a time), with equal probability.

property all_counters: dict

Accessor (getter) of the application counter from all the internal crossovers. This is mostly to verify that everything is working as expected.

Returns:

a dictionary with the counter calls for all crossover methods.

crossover(parent1: Chromosome, parent2: Chromosome) tuple[Chromosome, Chromosome][source]

Perform the crossover operation on the two input parent chromosomes, by selecting randomly a predefined method.

Parameters:
  • parent1 – (Chromosome).

  • parent2 – (Chromosome).

Returns:

child1 and child2 (as Chromosomes).

reset_counter() None[source]

Sets ALL the counters to ‘zero’. We have to override the super().reset_counter() method, because we have to call explicitly the reset_counter on all the internal operators.

Returns:

None.

pygenalgo.operators.crossover.multi_point_crossover module

class pygenalgo.operators.crossover.multi_point_crossover.MultiPointCrossover(crossover_probability: float = 0.9, n_points: int = 2)[source]

Bases: CrossoverOperator

Description:

Multipoint crossover creates two children chromosomes (offsprings), by taking two parent chromosomes and cutting them at randomly chosen, sites (loci).

It produces faster mixing, compared with single-point crossover.

crossover(parent1: Chromosome, parent2: Chromosome) tuple[Chromosome, Chromosome][source]

Perform the crossover operation on the two input parent chromosomes, using multiple cutting points (num_loci).

NOTE: the number of loci is held in the ‘_items’ variable.

Parameters:
  • parent1 – (Chromosome).

  • parent2 – (Chromosome).

Returns:

child1 and child2 (as Chromosomes).

pygenalgo.operators.crossover.order_crossover module

class pygenalgo.operators.crossover.order_crossover.OrderCrossover(crossover_probability: float = 0.9)[source]

Bases: CrossoverOperator

Description:

Order crossover (OX1) creates two children chromosomes, by ensuring that the original genome (from both parents) isn’t repeated, thus creating invalid offsprings.

It is used predominantly in combinatorial problems.

crossover(parent1: Chromosome, parent2: Chromosome) tuple[Chromosome, Chromosome][source]

Perform the crossover operation on the two input parent chromosomes.

Parameters:
  • parent1 – (Chromosome).

  • parent2 – (Chromosome).

Returns:

child1 and child2 (as Chromosomes).

pygenalgo.operators.crossover.partially_mapped_crossover module

class pygenalgo.operators.crossover.partially_mapped_crossover.PartiallyMappedCrossover(crossover_probability: float = 0.9)[source]

Bases: CrossoverOperator

Description:

Partially Mapped Crossover (PMX) creates two children chromosomes, by ensuring that the original genome, from both parents, isn’t repeated, thus creating invalid offsprings.

It is used predominantly in combinatorial problems.

crossover(parent1: Chromosome, parent2: Chromosome) tuple[Chromosome, Chromosome][source]

Perform the crossover operation on the two input parent chromosomes.

Parameters:
  • parent1 – (Chromosome).

  • parent2 – (Chromosome).

Returns:

child1 and child2 (as Chromosomes).

pygenalgo.operators.crossover.position_based_crossover module

class pygenalgo.operators.crossover.position_based_crossover.PositionBasedCrossover(crossover_probability: float = 0.9)[source]

Bases: CrossoverOperator

Description:

Position based crossover (POS) creates two children chromosomes, by ensuring that the original genome (from both parents) isn’t repeated, thus creating invalid offsprings.

It is used predominantly in combinatorial problems.

crossover(parent1: Chromosome, parent2: Chromosome) tuple[Chromosome, Chromosome][source]

Perform the crossover operation on the two input parent chromosomes.

Parameters:
  • parent1 – (Chromosome).

  • parent2 – (Chromosome).

Returns:

child1 and child2 (as Chromosomes).

pygenalgo.operators.crossover.single_point_crossover module

class pygenalgo.operators.crossover.single_point_crossover.SinglePointCrossover(crossover_probability: float = 0.9)[source]

Bases: CrossoverOperator

Description:

Single-point crossover creates two children chromosomes (offsprings), by taking two parent chromosomes and cutting them at some, randomly chosen, site (locus).

It produces very slow mixing, compared with multipoint or uniform crossover.

crossover(parent1: Chromosome, parent2: Chromosome) tuple[Chromosome, Chromosome][source]

Perform the crossover operation on the two input parent chromosomes.

Parameters:
  • parent1 – (Chromosome).

  • parent2 – (Chromosome).

Returns:

child1 and child2 (as Chromosomes).

pygenalgo.operators.crossover.uniform_crossover module

class pygenalgo.operators.crossover.uniform_crossover.UniformCrossover(crossover_probability: float = 0.9)[source]

Bases: CrossoverOperator

Description:

Uniform crossover creates two children chromosomes (offsprings), by taking two parent chromosomes and swap their genes in every other location.

It produces fast mixing, compared with single-point crossover.

crossover(parent1: Chromosome, parent2: Chromosome) tuple[Chromosome, Chromosome][source]

Perform the crossover operation on the two input parent chromosomes.

Parameters:
  • parent1 – (Chromosome).

  • parent2 – (Chromosome).

Returns:

child1 and child2 (as Chromosomes).

pygenalgo.operators.crossover.blend_crossover module

class pygenalgo.operators.crossover.blend_crossover.BlendCrossover(crossover_probability: float = 0.9, p_alpha: float = 0.5, lower_val: float | None = None, upper_val: float | None = None)[source]

Bases: CrossoverOperator

Description:

Blend-a crossover (BLX-a) creates two children chromosomes (offsprings) by uniformly picking values that lie between two points that contain the two parents but may extend equally on either side determined by a user specified parameter ‘a’.

NB: Used only for real coded genomes.

crossover(parent1: Chromosome, parent2: Chromosome) tuple[Chromosome, Chromosome][source]

Perform the crossover operation on the two input parent chromosomes.

Parameters:
  • parent1 – (Chromosome).

  • parent2 – (Chromosome).

Returns:

child1 and child2 (as Chromosomes).

Module contents