Módulo PySAG.selection
Módulo de Selección para Algoritmos Genéticos.
Este módulo proporciona varios métodos de selección que pueden ser utilizados en algoritmos genéticos. Todas las funciones están optimizadas con Numba para mejorar el rendimiento y cuentan con validación de entradas y manejo de excepciones robusto.
- Funciones de Selección Disponibles:
- selection_roulette_wheel:
Selección proporcional al fitness (ruleta).
- selection_tournament:
Selección por torneo entre un subconjunto de individuos.
- selection_rank:
Selección basada en el ranking de fitness de los individuos.
- selection_stochastic_universal_sampling (SUS):
Variante de la ruleta que reduce el azar en la asignación de cupos.
- selection_random:
Selección aleatoria simple de individuos.
- PySAG.selection.selection_random(population, fitness_values, num_parents, **kwargs)[fuente]
Selección Aleatoria Simple.
Selecciona “num_parents” individuos de la población de forma completamente aleatoria, con reemplazo. No considera los valores de fitness.
- Parámetros:
population (List[ndarray[tuple[int, ...], dtype[float64]]]) – Lista de individuos (arrays de NumPy).
fitness_values (ndarray[tuple[int, ...], dtype[float64]]) – Array de NumPy con los valores de fitness (no utilizado).
num_parents (int) – Número de padres a seleccionar.
**kwargs (Any) – Argumentos adicionales (no utilizados en esta función).
- Devuelve:
Lista de individuos seleccionados como padres.
- Muestra:
TypeValidationError – Si los tipos de los parámetros son incorrectos.
ValueError – Si la población está vacía o las longitudes no coinciden.
RangeError – Si num_parents es inválido.
SelectionError – Si ocurre un error inesperado durante la selección.
- Tipo del valor devuelto:
Ejemplo
>>> import numpy as np >>> pop = [np.array([1,2]), np.array([3,4]), np.array([5,6]), np.array([7,8])] >>> fit = np.array([0.1, 0.4, 0.3, 0.2]) # Fitness no se usa >>> parents = selection_random(pop, fit, 3) >>> len(parents) 3
- PySAG.selection.selection_rank(population, fitness_values, num_parents, **kwargs)[fuente]
Selección por Rango.
Los individuos son ordenados según su fitness y se les asigna un rango. La probabilidad de selección es proporcional a este rango (mayor rango, mayor probabilidad). Este método puede evitar la dominancia prematura de individuos con fitness muy alto.
- Parámetros:
population (List[ndarray[tuple[int, ...], dtype[float64]]]) – Lista de individuos (arrays de NumPy).
fitness_values (ndarray[tuple[int, ...], dtype[float64]]) – Array de NumPy con los valores de fitness.
num_parents (int) – Número de padres a seleccionar.
**kwargs (Any) – Argumentos adicionales (no utilizados en esta función).
- Devuelve:
Lista de individuos seleccionados como padres.
- Muestra:
TypeValidationError – Si los tipos de los parámetros son incorrectos.
ValueError – Si la población está vacía o las longitudes no coinciden.
RangeError – Si num_parents es inválido.
SelectionError – Si ocurre un error inesperado durante la selección.
- Tipo del valor devuelto:
Ejemplo
>>> import numpy as np >>> pop = [np.array([1,2]), np.array([3,4]), np.array([5,6]), np.array([7,8])] >>> fit = np.array([10, 40, 30, 20]) # Ranks: 10 (1), 20 (2), 30 (3), 40 (4) >>> parents = selection_rank(pop, fit, 2) >>> len(parents) 2
- PySAG.selection.selection_roulette_wheel(population, fitness_values, num_parents, **kwargs)[fuente]
Selección por ruleta.
Los individuos son seleccionados con una probabilidad proporcional a su fitness. Se asume que todos los valores de fitness son no negativos.
- Parámetros:
population (List[ndarray[tuple[int, ...], dtype[float64]]]) – Lista de individuos (arrays de NumPy) que componen la población.
fitness_values (ndarray[tuple[int, ...], dtype[float64]]) – Array de NumPy con los valores de fitness de cada individuo. Deben ser no negativos.
num_parents (int) – Número de padres a seleccionar.
**kwargs (Any) – Argumentos adicionales (no utilizados en esta función).
- Devuelve:
Lista de individuos seleccionados como padres.
- Muestra:
TypeValidationError – Si los tipos de los parámetros son incorrectos.
ValueError – Si la población está vacía, las longitudes no coinciden, o si algún valor de fitness es negativo.
RangeError – Si num_parents es inválido.
SelectionError – Si ocurre un error inesperado durante la selección.
- Tipo del valor devuelto:
Ejemplo
>>> import numpy as np >>> pop = [np.array([1,2]), np.array([3,4]), np.array([5,6]), np.array([7,8])] >>> fit = np.array([0.1, 0.4, 0.3, 0.2]) >>> parents = selection_roulette_wheel(pop, fit, 2) >>> len(parents) 2 >>> isinstance(parents[0], np.ndarray) True
- PySAG.selection.selection_stochastic_universal_sampling(population, fitness_values, num_parents, **kwargs)[fuente]
Selección por Muestreo Universal Estocástico (SUS).
Es una técnica de selección que minimiza el factor de suerte inherente en la selección por ruleta. Utiliza un único giro de una «ruleta» con N punteros equidistantes para seleccionar N individuos. Esto asegura que el número de veces que un individuo es seleccionado es más cercano a su proporción esperada. Se asume que todos los valores de fitness son no negativos.
- Parámetros:
population (List[ndarray[tuple[int, ...], dtype[float64]]]) – Lista de individuos (arrays de NumPy).
fitness_values (ndarray[tuple[int, ...], dtype[float64]]) – Array de NumPy con los valores de fitness.
negativos. (Deben ser no)
num_parents (int) – Número de padres a seleccionar.
**kwargs (Any) – Argumentos adicionales (no utilizados en esta función).
- Devuelve:
Lista de individuos seleccionados como padres.
- Muestra:
TypeValidationError – Si los tipos de los parámetros son incorrectos.
ValueError – Si la población está vacía, las longitudes no coinciden, o si algún valor de fitness es negativo.
RangeError – Si num_parents es inválido.
SelectionError – Si ocurre un error inesperado durante la selección.
- Tipo del valor devuelto:
Ejemplo
>>> import numpy as np >>> pop = [np.array([1,2]), np.array([3,4]), np.array([5,6]), np.array([7,8])] >>> fit = np.array([0.1, 0.4, 0.3, 0.2]) >>> parents = selection_stochastic_universal_sampling(pop, fit, 2) >>> len(parents) 2
- PySAG.selection.selection_tournament(population, fitness_values, num_parents, tournament_size=3, **kwargs)[fuente]
Selección por torneo.
Se eligen “tournament_size” individuos al azar, y el mejor de ellos (mayor fitness) se convierte en padre. Este proceso se repite “num_parents” veces.
- Parámetros:
population (List[ndarray[tuple[int, ...], dtype[float64]]]) – Lista de individuos (arrays de NumPy).
fitness_values (ndarray[tuple[int, ...], dtype[float64]]) – Array de NumPy con los valores de fitness.
num_parents (int) – Número de padres a seleccionar.
tournament_size (int) – Número de individuos que participan en cada torneo. Por defecto es 3.
**kwargs (Any) – Argumentos adicionales (no utilizados en esta función).
- Devuelve:
Lista de individuos seleccionados como padres.
- Muestra:
TypeValidationError – Si los tipos de los parámetros son incorrectos.
ValueError – Si la población tiene menos individuos que tournament_size.
RangeError – Si num_parents o tournament_size son inválidos.
SelectionError – Si ocurre un error inesperado durante la selección.
- Tipo del valor devuelto:
Ejemplo
>>> import numpy as np >>> pop = [np.array([1,2]), np.array([3,4]), np.array([5,6]), np.array([7,8])] >>> fit = np.array([10, 40, 30, 20]) >>> parents = selection_tournament(pop, fit, 2, tournament_size=2) >>> len(parents) 2