Documentación de la Librería NathSan

Introducción

NathSan es una librería de algoritmos genéticos diseñada para realizar optimización y resolución de problemas mediante técnicas evolutivas. Permite usar diferentes métodos de selección, cruce, mutación y manejo de elitismo, brindando flexibilidad en la configuración de los experimentos.

Instalación

Para instalar la librería desde PyPI (entorno de pruebas), utiliza el siguiente comando:

!pip install -i https://test.pypi.org/simple/ NathSan==0.2

Uso Básico

Para comenzar a usar la librería, importa el paquete y crea una instancia de AlgoritmoGenetico:

import NathSan
from NathSan import AlgoritmoGenetico

algoritmo = AlgoritmoGenetico(tamano_poblacion=100, generaciones=50, valor_min=-10, valor_max=10, 
                              tasa_cruce=0.7, tasa_mutacion=0.01, tamano_elitismo=10)
mejor_individuo = algoritmo.ejecutar_algoritmo(metodo="ranking")  # Métodos: "elitismo", "simple", "ruleta", "ranking"
        

Funciones Principales

__init__()

Constructor de la clase AlgoritmoGenetico. Inicializa los parámetros necesarios para la ejecución del algoritmo.

ejecutar_algoritmo()

Ejecuta el proceso completo del algoritmo genético.

seleccion_ruleta()

Implementa la selección por ruleta, donde los individuos se seleccionan en función de su valor de fitness relativo.

Funcionamiento: Este método asigna a cada individuo una probabilidad de ser seleccionado proporcional a su valor de fitness. La "ruleta" se simula mediante la suma acumulativa de estas probabilidades y la selección se hace eligiendo un valor aleatorio en el rango total. Este enfoque permite que los individuos con mejor fitness tengan una mayor probabilidad de ser seleccionados, pero sin excluir a los de menor rendimiento por completo. Esto fomenta la diversidad y permite que los algoritmos exploren más el espacio de soluciones.

seleccion_ranking()

Selecciona los individuos en base a un ranking, asignando más posibilidades a los mejores clasificados.

Funcionamiento: Los individuos se ordenan de acuerdo con su fitness y se les asigna un rango en lugar de una probabilidad directa basada en su valor de fitness. La probabilidad de selección depende de su posición en el ranking. Este método es útil para evitar el dominio excesivo de individuos con fitness muy alto, promoviendo una mayor diversidad genética y una evolución más equilibrada en la población.

cruce_aritmetico()

Realiza un cruce aritmético entre dos individuos, combinando sus genes de manera ponderada.

Funcionamiento: El cruce aritmético genera un descendiente tomando una combinación lineal de los genes de los padres. Por ejemplo, si se tienen dos padres A y B, el descendiente se calcula como Hijo = α * A + (1 - α) * B, donde α es un coeficiente ponderado que varía entre 0 y 1. Esta técnica permite crear nuevas soluciones que heredan características de ambos padres y mantiene la continuidad de los valores de los genes.

mutacion()

Aplica mutación a un individuo, modificando un gen al azar dentro de los límites establecidos.

Funcionamiento: La mutación introduce variabilidad en la población al alterar un gen de un individuo de forma aleatoria. Esto se hace eligiendo un gen al azar y cambiando su valor por otro dentro de los límites permitidos (valor_min y valor_max). La mutación es esencial para evitar la convergencia prematura del algoritmo y explorar nuevas áreas del espacio de búsqueda.

Detalles de Funcionamiento

El algoritmo genético sigue los siguientes pasos:

  1. Inicialización: Se genera una población inicial de individuos aleatorios.
  2. Evaluación: Cada individuo se evalúa usando la función objetivo.
  3. Selección: Los individuos se seleccionan usando el método elegido (por ejemplo, ruleta o ranking).
  4. Cruce: Se combina a los padres seleccionados para crear descendencia.
  5. Mutación: Se aplica una mutación aleatoria a la descendencia.
  6. Reemplazo: La nueva generación reemplaza a la población anterior, aplicando elitismo si está habilitado.
Web hosting by Somee.com