👋 ¡Bienvenido a la aplicación!
Este sistema interactivo busca resolver de manera óptima la organización y logística de un calendario para una temporada completa de béisbol. Para lograrlo, implementamos una técnica de inteligencia artificial avanzada inspirada directamente en la evolución natural de las especies. 🌿
La programación genética consiste en crear, evaluar y modificar soluciones de forma automática a partir de una población inicial de programas. Esto se logra ejecutando operaciones bioinspiradas como la selección natural, el cruzamiento y la mutación. En este entorno, cada programa generado se estructura internamente como un árbol de expresión que representa una solución potencial para nuestro calendario.
El algoritmo evalúa continuamente cada árbol mediante un criterio estricto de calidad (función de aptitud o fitness) con la meta de heredar características clave y generar nuevos árboles cada vez más prometedores. 📈 ¡Este proceso se repite en un bucle evolutivo hasta hallar la solución óptima y más eficiente!
📖 Guía operativa del sistema
🔹 Instrucciones de inicio rápido
Para comenzar a interactuar de forma correcta con la demo, sigue estos pasos secuenciales:
- Crea un equipo, una liga y un torneo respectivo en tus paneles administrativos. Nota importante: el número total de equipos participantes debe ser par. 👥
- Una vez que tengas definidos los participantes, dirígete al panel de arriba, selecciona tu torneo activo y haz clic en el botón verde "Ejecutar optimización" para estructurar el calendario automatizado.
⚙️ Lógica interna y flujo algorítmico de la IA
¿Qué sucede internamente cuando el software se pone en marcha? Aquí te mostramos paso a paso el ciclo de vida evasivo basado en programación genética:
1. Configuración e hiperparámetros base
Se cargan las variables del panel que definirán las generaciones, el tamaño inicial de la población, así como las tasas de probabilidad asociadas al cruce y la mutación genómica.
2. Definición de operadores y bloques estructurales (gramática)
- Las primitivas: son las operaciones lógicas que un programa ejecuta para construir el árbol.
crear_juego(fecha, equipo_en_casa, equipo_de_visita, lista) -> lista
agregar_lista(lista, lista) -> lista
- Las terminales: representan los datos constantes o variables básicas estructuradas del torneo.
Fecha (listas maestros de días hábiles)
Equipo (tanto en condición de casa como de visita)
Lista (inicializador vacío)
- Las efímeras: son valores aleatorios puros que se introducen en nodos específicos para inyectar variabilidad matemática al sistema.
- Fecha aleatoria y equipo aleatorio.
3. Inicialización, ciclo evolutivo y convergencia
📍 Fase de ejecución en vivo: El sistema genera una población inicial aleatoria y convierte cada propuesta en una estructura jerárquica de árbol (syntax tree). ¡Aquí es donde ocurre la magia computacional! ✨
- Visualización y muestreo: Se procesa la población inicial y se genera el renderizado de los árboles mediante el generador de sintaxis.
- Evaluación de aptitud: Se calcula el valor de fitness de cada individuo en base a la distancia acumulada en kilómetros y el cumplimiento normativo.
- Selección natural: Se escogen los mejores individuos de la ronda anterior para actuar como padres biológicos de la nueva generación.
- Cruzamiento, mutación y herencia: Se crean nuevos individuos mezclando ramas de árboles destacados y aplicando mutaciones en nodos aleatorios.
- Bucle iterativo: Se repiten secuencialmente los pasos de evaluación, selección y reproducción hasta completar el total de generaciones configuradas en la interfaz.
- Resultados oficiales: El mejor individuo obtenido en la última iteración se valida y su estructura interna se almacena como el calendario definitivo del torneo de béisbol. 🏆🎉