class stk.EvolutionaryAlgorithm(initial_population, fitness_calculator, mutator, crosser, generation_selector, mutation_selector, crossover_selector, fitness_normalizer=<stk._internal.ea.fitness_normalizers.null.NullFitnessNormalizer object>, key_maker=Inchi(), num_processes=None)[source]

Bases: Generic[T]

An abstract base class for evolutionary algorithms.


You might notice that the public methods of this abstract base class are implemented. This is purely for convenience, so that there is a default evolutionary algorithm implementation that users can use. However, feel free to override the default implementation when implementing subclasses.

If you do want to use the default implementation, here is a summary of the roles of the different components:


Subclass Implementation

The source code of this class can work as a good example. There is only one method that a subclass of EvolutionaryAlgorithm needs to implement, get_generations(), which yields Generation instances. These correspond to the generations of your evolutionary algorithm implementation.


There are a couple of tutorials on how to use the EvolutionaryAlgorithm, which can be found in the sidebar.

  • initial_population (list[T]) – The initial population the EA should use.

  • fitness_calculator (FitnessCalculator[T]) – Calculates fitness values.

  • mutator (MoleculeMutator[T]) – Carries out mutation operations.

  • crosser (MoleculeCrosser[T]) – Carries out crossover operations.

  • generation_selector (Selector[T]) – Selects the next generation.

  • mutation_selector (Selector[T]) – Selects molecules for mutation.

  • crossover_selector (Selector[T]) – Selects molecules for crossover.

  • fitness_normalizer (FitnessNormalizer[T]) – Normalizes fitness values.

  • key_maker (MoleculeKeyMaker) – Used to detect duplicate molecules in the EA. If two molecules in a generation return the same key, one of them is removed.

  • num_processes (int | None) – The number of parallel processes the EA should create. If None, all available cores will be used.



Yield the generations of the evolutionary algorithm.


Yield the generations of the evolutionary algorithm.


num_generations (int) – The number of generations which should be yielded. Note that the initial population counts as a generation.


A generation.

Return type: