/*
 * This file is part of JGAP.
 *
 * JGAP offers a dual license model containing the LGPL as well as the MPL.
 *
 * For licensing information please see the file license.txt included with JGAP
 * or have a look at the top of class org.jgap.Chromosome which representatively
 * includes the JGAP license policy applicable for any file delivered with JGAP.
 */
package org.jgap;

import java.io.*;

/**
 * Natural selectors are responsible for actually selecting a specified number
 * of Chromosome specimens from a population, using the fitness values as a
 * guide. Usually fitness is treated as a statistic probability of survival,
 * not as the sole determining factor. Therefore, Chromosomes with higher
 * fitness values are more likely to survive than those with lesser fitness
 * values, but it's not guaranteed.
 *
 * @author Neil Rotstan
 * @author Klaus Meffert
 * @since 2.0
 */
public interface INaturalSelector
    extends Serializable {
  /** String containing the CVS revision. Read out via reflection!*/
  final static String CVS_REVISION = "$Revision: 1.13 $";

  /**
   * Select a given number of Chromosomes from the pool that will move on
   * to the next generation population. This selection should be guided by
   * the fitness values, but fitness should be treated as a statistical
   * probability of survival, not as the sole determining factor. In other
   * words, Chromosomes with higher fitness values should be more likely to
   * be selected than those with lower fitness values, but it should not be
   * guaranteed.
   *
   * @param a_howManyToSelect the number of Chromosomes to select
   * @param a_from_population the population the Chromosomes will be
   * selected from
   * @param a_to_population the population the Chromosomes will be added to
   *
   * @author Neil Rotstan
   * @author Klaus Meffert
   * @since 2.0 (since 1.0 with different return type)
   */
  void select(int a_howManyToSelect, Population a_from_population,
              Population a_to_population);

  /**
   * Empty out the working pool of Chromosomes. This will be invoked after
   * each evolution cycle so that the natural selector can be reused for
   * the next one.
   *
   * @author Neil Rotstan
   * @since 1.0
   */
  void empty();

  /**
   * @return true: The implementation of the NaturalSelector only returns
   * unique Chromosome's (example: BestChromosomesSelector). false: Also
   * doublettes could be returned (example: WeightedRouletteSelector).
   *
   * @author Klaus Meffert
   * @since 2.0
   */
  boolean returnsUniqueChromosomes();
}

 

Ads help maintain this website.