org.apache.commons.math3.genetics

## Class GeneticAlgorithm

- java.lang.Object
- - org.apache.commons.math3.genetics.GeneticAlgorithm

    public class GeneticAlgorithm
    extends java.lang.Object

Implementation of a genetic algorithm. All factors that govern the operation of the algorithm can be configured for a specific problem.

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

### Field Summary

Fields
`private CrossoverPolicy` `crossoverPolicy` the crossover policy used by the algorithm.
`private double` `crossoverRate` the rate of crossover for the algorithm.
`private int` `generationsEvolved` the number of generations evolved to reach `StoppingCondition` in the last run.
`private MutationPolicy` `mutationPolicy` the mutation policy used by the algorithm.
`private double` `mutationRate` the rate of mutation for the algorithm.
`private static RandomGenerator` `randomGenerator` Static random number generator shared by GA implementation classes.
`private SelectionPolicy` `selectionPolicy` the selection policy used by the algorithm.

### Constructor Summary

Constructors
Constructor and Description
`GeneticAlgorithm(CrossoverPolicy crossoverPolicy, double crossoverRate, MutationPolicy mutationPolicy, double mutationRate, SelectionPolicy selectionPolicy)` Create a new genetic algorithm.

### Method Summary

Methods
`Population` `evolve(Population initial, StoppingCondition condition)` Evolve the given population.
`CrossoverPolicy` `getCrossoverPolicy()` Returns the crossover policy.
`double` `getCrossoverRate()` Returns the crossover rate.
`int` `getGenerationsEvolved()` Returns the number of generations evolved to reach `StoppingCondition` in the last run.
`MutationPolicy` `getMutationPolicy()` Returns the mutation policy.
`double` `getMutationRate()` Returns the mutation rate.
`static RandomGenerator` `getRandomGenerator()` Returns the (static) random generator.
`SelectionPolicy` `getSelectionPolicy()` Returns the selection policy.
`Population` `nextGeneration(Population current)` Evolve the given population into the next generation.
`static void` `setRandomGenerator(RandomGenerator random)` Set the (static) random generator.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### randomGenerator

    private static RandomGenerator randomGenerator

Static random number generator shared by GA implementation classes. Set the randomGenerator seed to get reproducible results. Use `setRandomGenerator(RandomGenerator)` to supply an alternative to the default JDK-provided PRNG.

#### crossoverPolicy

    private final CrossoverPolicy crossoverPolicy

the crossover policy used by the algorithm.

#### crossoverRate

    private final double crossoverRate

the rate of crossover for the algorithm.

#### mutationPolicy

    private final MutationPolicy mutationPolicy

the mutation policy used by the algorithm.

#### mutationRate

    private final double mutationRate

the rate of mutation for the algorithm.

#### selectionPolicy

    private final SelectionPolicy selectionPolicy

the selection policy used by the algorithm.

#### generationsEvolved

    private int generationsEvolved

the number of generations evolved to reach `StoppingCondition` in the last run.

### Constructor Detail

#### GeneticAlgorithm

    public GeneticAlgorithm(CrossoverPolicy crossoverPolicy,
                    double crossoverRate,
                    MutationPolicy mutationPolicy,
                    double mutationRate,
                    SelectionPolicy selectionPolicy)
                     throws OutOfRangeException

Create a new genetic algorithm.

Parameters:
  `crossoverPolicy` - The `CrossoverPolicy`
  `crossoverRate` - The crossover rate as a percentage (0-1 inclusive)
  `mutationPolicy` - The `MutationPolicy`
  `mutationRate` - The mutation rate as a percentage (0-1 inclusive)
  `selectionPolicy` - The `SelectionPolicy`
Throws:
  `OutOfRangeException` - if the crossover or mutation rate is outside the [0, 1] range

### Method Detail

#### setRandomGenerator

    public static void setRandomGenerator(RandomGenerator random)

Set the (static) random generator.

Parameters:
  `random` - random generator

#### getRandomGenerator

    public static RandomGenerator getRandomGenerator()

Returns the (static) random generator.

Returns:
  the static random generator shared by GA implementation classes

#### evolve

    public Population evolve(Population initial,
                    StoppingCondition condition)

Evolve the given population. Evolution stops when the stopping condition is satisfied. Updates the `generationsEvolved` property with the number of generations evolved before the StoppingCondition is satisfied.

Parameters:
  `initial` - the initial, seed population.
  `condition` - the stopping condition used to stop evolution.
Returns:
  the population that satisfies the stopping condition.

#### nextGeneration

    public Population nextGeneration(Population current)

Evolve the given population into the next generation.

1. Get nextGeneration population to fill from `current` generation, using its nextGeneration method
2. Loop until new generation is filled:

- Apply configured SelectionPolicy to select a pair of parents from `current`
- With probability = `getCrossoverRate()`, apply configured `CrossoverPolicy` to parents
- With probability = `getMutationRate()`, apply configured `MutationPolicy` to each of the offspring
- Add offspring individually to nextGeneration, space permitting

3. Return nextGeneration

Parameters:
  `current` - the current population.
Returns:
  the population for the next generation.

#### getCrossoverPolicy

    public CrossoverPolicy getCrossoverPolicy()

Returns the crossover policy.

Returns:
  crossover policy

#### getCrossoverRate

    public double getCrossoverRate()

Returns the crossover rate.

Returns:
  crossover rate

#### getMutationPolicy

    public MutationPolicy getMutationPolicy()

Returns the mutation policy.

Returns:
  mutation policy

#### getMutationRate

    public double getMutationRate()

Returns the mutation rate.

Returns:
  mutation rate

#### getSelectionPolicy

    public SelectionPolicy getSelectionPolicy()

Returns the selection policy.

Returns:
  selection policy

#### getGenerationsEvolved

    public int getGenerationsEvolved()

Returns the number of generations evolved to reach `StoppingCondition` in the last run.

Returns:
  number of generations evolved
Since:
  2.1