Selector.java
package progen.kernel.evolution.selector;
import java.util.List;
import java.util.Map;
import progen.kernel.population.Individual;
import progen.kernel.population.Population;
/**
* Clase abstracta que define el comportamiento general de todos los selectores
* que estén disponibles en ProGen.
*
* @author jirsis
* @since 2.0
*
*/
public abstract class Selector {
/**
* Método de factoría para generar una instancia concreta de un selector
* pasado por parámetro.
*
* @param name
* Nombre del selector a instanciar.
* @param params
* Parámetros del selector.
* @return Instancia nueva del selector.
*/
public static Selector makeSelector(String name, Map<String, String> params) {
Selector selector = null;
try {
selector = (Selector) Class.forName("progen.kernel.evolution.selector." + name).newInstance();
selector.setParams(params);
} catch (InstantiationException e) {
throw new UnknownSelectorException(name, e);
} catch (IllegalAccessException e) {
throw new UnknownSelectorException(name, e);
} catch (ClassNotFoundException e) {
throw new UnknownSelectorException(name, e);
}
return selector;
}
/**
* Forma de definir los parámetros que pueda tener un selector concreto. Por
* defecto, se ignorarán todos, y será responsabilidad del selector concreto
* procesarlos según necesite algún valor de configuración extra.
*
* @param params
* Los parámetros específicos del selector.
*/
public void setParams(Map<String, String> params) {
// do nothing, by default
}
/**
* Se seleccionan de la población pasada por parámetro la cantidad de
* individuos definidos según los parámetros. Es importante clonar los
* individuos seleccionados, antes de añadirlos a la lista de retorno del
* método para evitar efectos no deseados en las generaciones posteriores,
* durante la ejecución del experimento.
*
* @param pop
* La población de la que seleccionar los individuos.
* @param howMany
* Cantidad de individuos que serán seleccionados al aplicar el
* selector.
* @return La colección de individuos seleccionados.
*/
public abstract List<Individual> select(Population pop, int howMany);
}