org.apache.commons.math3.genetics

## Class GeneticAlgorithm

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

-     public class GeneticAlgorithm
      extends 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
    Modifier and Type | Field and Description
    --- | ---
    `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
    Modifier and Type | Method and Description
    --- | ---
    `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

Copyright (c) 2003-2013 Apache Software Foundation