GenneticOperator.java

package progen.kernel.evolution;

import java.util.List;
import java.util.Map;

import progen.kernel.evolution.selector.NullSelector;
import progen.kernel.evolution.selector.Selector;
import progen.kernel.population.Individual;
import progen.kernel.population.Population;

/**
 * Clase que define los métodos de acceso a los distintos operadores genéticos
 * disponibles.
 * 
 * @author jirsis
 * @since 2.0
 * 
 */
public abstract class GenneticOperator {
  /** Probabilidad de que un operador genético sea usado. */
  private double probability;
  /** Selector de individuos para ejecutar el operador genético. */
  private Selector selector;

  /**
   * Constructor genérico de la clase.
   */
  public GenneticOperator() {
    probability = 0;
    selector = new NullSelector();
  }

  /**
   * Devuelve la probabilidad de uso del operador genético.
   * 
   * @return la probabilidad de uso.
   */
  public final double getProbability() {
    return probability;
  }

  /**
   * Define la probabilidad con la que será usado un operador genético.
   * 
   * @param probability
   *          La porbabilidad con la que será usado.
   */
  public final void setProbability(double probability) {
    this.probability = probability;
  }

  /**
   * Define el selector que utilizará el operador genético para escoger los
   * inidividuos.
   * 
   * @param name
   *          El nombre del selector.
   * @param params
   *          Parámetros de configuración del selector.
   */
  public final void setSelector(String name, Map<String, String> params) {
    selector = Selector.makeSelector(name, params);
  }
  
  public Selector getSelector() {
    return selector;
  }

  /**
   * Forma de aplicar el operador genético sobre una población concreta.
   * 
   * @param population
   *          La población sobre la que se aplicará el operador.
   * @return Conjunto de individuos nuevos tras la ejecución del operador.
   */
  public abstract List<Individual> evolve(Population population);

}