Librería de algoritmos genéticos en Python
Project description
GeneticOps
Una librería para algoritmos genéticos en Python, diseñada para ser modular, extensible y fácil de usar.
Descripción
GeneticOps proporciona una implementación completa y flexible de algoritmos genéticos, permitiendo su aplicación a una amplia variedad de problemas de optimización. La librería está diseñada siguiendo principios de modularidad y extensibilidad, facilitando la personalización de cada componente del algoritmo genético.
Características
- Modularidad: Todos los componentes (selección, cruce, mutación, etc.) son intercambiables.
- Extensibilidad: Fácil de extender con nuevos operadores y funcionalidades.
- Tipado estático: Uso de typing para mejorar la documentación y el desarrollo.
- Documentación completa: Docstrings detallados en estilo NumPy para todas las funciones.
- Visualización integrada: Funciones para visualizar la convergencia y los resultados.
- Ejemplos incluidos: Varios ejemplos de problemas clásicos resueltos con la librería.
Instalación
pip install geneticops
Uso básico
import numpy as np
from geneticops import (
AlgoritmoGenetico,
inicializar_poblacion_binaria,
seleccion_ruleta,
cruce_un_punto,
mutacion_bit_flip,
reemplazo_elitismo,
condicion_max_generaciones,
graficar_convergencia
)
# Definir una función de fitness
def fitness(individuo):
# Maximizar el número de unos
return np.sum(individuo)
# Crear instancia del algoritmo genético
ag = AlgoritmoGenetico(
tamano_poblacion=100,
longitud_individuo=10,
funcion_fitness=fitness,
funcion_inicializacion=inicializar_poblacion_binaria,
funcion_seleccion=seleccion_ruleta,
funcion_cruce=cruce_un_punto,
funcion_mutacion=mutacion_bit_flip,
funcion_reemplazo=reemplazo_elitismo,
condicion_parada=condicion_max_generaciones,
probabilidad_cruce=0.8,
probabilidad_mutacion=0.1,
elitismo=0.1,
max_generaciones=100,
tipo_genoma='binario'
)
# Ejecutar el algoritmo
mejor_individuo, mejor_fitness, info = ag.ejecutar()
# Visualizar resultados
print(f"Mejor individuo: {mejor_individuo}")
print(f"Fitness: {mejor_fitness}")
graficar_convergencia(info['historia_fitness'])
Componentes disponibles
Inicialización de población
inicializar_poblacion_binaria: Genomas binarios (0s y 1s)inicializar_poblacion_real: Genomas de valores realesinicializar_poblacion_permutacion: Genomas de permutación (para TSP)inicializar_poblacion_desde_semilla: Inicialización a partir de un individuo semilla
Selección
seleccion_ruleta: Selección proporcional al fitnessseleccion_torneo: Selección por torneosseleccion_ranking: Selección basada en rankingseleccion_truncamiento: Selección de los mejores individuosseleccion_estocastica_universal: Muestreo estocástico universal
Cruce
cruce_un_punto: Cruce en un punto (binario)cruce_dos_puntos: Cruce en dos puntos (binario)cruce_uniforme: Cruce uniforme (binario)cruce_aritmetico: Cruce aritmético (valores reales)cruce_sbx: Simulated Binary Crossover (valores reales)cruce_pmx: Partially Mapped Crossover (permutación)cruce_ox: Order Crossover (permutación)cruce_ciclo: Cycle Crossover (permutación)
Mutación
mutacion_bit_flip: Inversión de bits (binario)mutacion_uniforme: Valores aleatorios uniformes (real)mutacion_gaussiana: Ruido gaussiano (real)mutacion_swap: Intercambio de posiciones (permutación)mutacion_inversion: Inversión de segmento (permutación)mutacion_insertion: Inserción (permutación)mutacion_scramble: Barajado de segmento (permutación)mutacion_adaptativa: Mutación que se adapta según la fase del algoritmo
Reemplazo
reemplazo_generacional: Reemplazo completo con posible elitismoreemplazo_elitismo: Selección de los mejores de ambas poblacionesreemplazo_estado_estacionario: Reemplazo de algunos individuosreemplazo_torneo: Torneos entre individuos de ambas poblacionesreemplazo_aleatorio: Reemplazo aleatorioreemplazo_adaptativo: Estrategia adaptativa según la fase del algoritmo
Condiciones de parada
condicion_max_generaciones: Número máximo de generacionescondicion_convergencia: Convergencia en fitnesscondicion_fitness_objetivo: Alcanzar un valor objetivo de fitnesscondicion_tiempo_limite: Tiempo límite de ejecucióncondicion_estancamiento: Detección de estancamientocondicion_combinada: Combinación de múltiples condicionescondicion_personalizada: Condición definida por el usuario
Utilidades
graficar_convergencia: Visualización de la evolución del fitnessguardar_resultados: Guardar resultados en archivoscargar_mejor_individuo: Cargar individuo desde archivocalcular_estadisticas_poblacion: Estadísticas de la poblacióncalcular_diversidad_poblacion: Medida de diversidaddecodificar_binario_a_real: Convertir genoma binario a valores realescodificar_real_a_binario: Convertir valores reales a genoma binarioCacheDecorador: Decorador para cachear evaluaciones de fitness
Ejemplos
La librería incluye ejemplos de aplicación a problemas clásicos:
maximizar_funcion.py: Encontrar el máximo de una función.problema_mochila.py: Problema de la mochila (Knapsack Problem).viajero_comercio.py: Problema del viajante de comercio (TSP).
Publicación en PyPI
Para publicar la librería en PyPI:
# Instalar herramientas necesarias
pip install setuptools wheel twine
# Generar distribución
python setup.py sdist bdist_wheel
# Publicar en TestPyPI (opcional, para pruebas)
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
# Publicar en PyPI
twine upload dist/*
Requisitos
- Python 3.6+
- NumPy
- Matplotlib (para visualización)
Licencia
Este proyecto está bajo la licencia MIT. Ver el archivo LICENSE para más detalles.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file geneticops-0.1.0.tar.gz.
File metadata
- Download URL: geneticops-0.1.0.tar.gz
- Upload date:
- Size: 39.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6a1860af6afa9310f3d6bb4e694eed1fa0470eb05473df3f69c48bb9b667d425
|
|
| MD5 |
6bb934855112fd5ff5d40bf9576d5fa7
|
|
| BLAKE2b-256 |
ea4cd176757ef8c0796b236b91fcc84ae83d3f0699fce2aa7740f8d6cb31c81d
|
File details
Details for the file geneticops-0.1.0-py3-none-any.whl.
File metadata
- Download URL: geneticops-0.1.0-py3-none-any.whl
- Upload date:
- Size: 51.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d84aeed2acf3e2d34945644f076397ba8a1c6f0b2cb7b51a00db287b57f26761
|
|
| MD5 |
495fed2403b6faa28d7a17de0cefecaf
|
|
| BLAKE2b-256 |
1ebabec7b677a568fb41f7f2de5622d05947ef14e06efaa1c8cbd853fa5ecf04
|