AI Snake Lab
AI Snake Lab es un entorno interactivo de aprendizaje por refuerzo para experimentar con agentes de inteligencia artificial en el clásico juego Snake. Incluye una interfaz de terminal en vivo con Textual, una base de datos flexible de memoria de experiencias y definiciones modulares de modelos.

🚀 Características
- 🐍 Entorno clásico de Snake con tablero y reglas configurables.
- 🧠 Interfaz de agentes de IA compatible con arquitecturas lineales, RNN y CNN.
- 🎮 Simulador basado en Textual con visualización y métricas en vivo.
- 💾 Memoria de experiencias en SQLite para almacenar fotogramas, episodios y ejecuciones.
- 🧩 Metadatos de experimentos: modelos, hiperparámetros y versiones del mapa de estado.
- 📊 Gráficos integrados de tasa de hash, puntuaciones y progreso de aprendizaje.
🧰 Tecnologías
| Componente | Descripción |
|---|---|
| Python 3.11+ | Lenguaje principal |
| Textual | Framework de interfaz de terminal |
| SQLite3 | Almacenamiento de experiencias y experimentos |
| PyTorch (opcional) | Motor de aprendizaje profundo |
| Plotext / Matplotlib | Herramientas de visualización |
🔄 Entrenamiento dinámico
La opción Dynamic Training incrementa el número de entrenamientos prolongados al final de cada época. La función AIAgent:train_long_memory() se llama cada vez más veces a medida que crece la cantidad de épocas, hasta un máximo de MAX_ADAPTIVE_TRAINING_LOOPS, actualmente 16, según este cálculo:
if self.dynamic_training():
loops = max(
1, min(self.epoch() // 250, DAIAgent.MAX_DYNAMIC_TRAINING_LOOPS)
)
else:
loops = 1
while loops > 0:
loops -= 1
self.train_long_memory()
🧩 Epsilon N
La clase Epsilon N, inspirada por The Bitter Lesson de Richard Sutton, reemplaza al tradicional algoritmo Epsilon Greedy. Crea una instancia independiente de Epsilon Greedy para cada puntuación. Por ejemplo, cuando la IA tiene siete puntos, utiliza self._epsilons[7].
La siguiente captura muestra el gráfico de récords con Epsilon Greedy tradicional, de una sola instancia, y con entrenamiento dinámico activado. El algoritmo converge rápidamente, pero progresa de forma irregular. Los saltos repentinos indican que la exploración disminuye antes de que la IA domine cada fase del juego.

El siguiente gráfico utiliza Epsilon N sin entrenamiento dinámico. Mantener un epsilon independiente por puntuación prolonga la exploración a ese nivel. El resultado es una curva de récords más uniforme y casi lineal mientras el agente consolida lo aprendido.

En resumen, Epsilon Greedy tradicional mejora más lentamente y alcanza pronto una meseta. Epsilon N permite un avance más constante.
💻 Instalación
El proyecto está disponible en PyPI. Pueden instalarlo con pip.
Crear un entorno virtual
python3 -m venv snake_venv
. snake_venv/bin/activate
Instalar AI Snake Lab
Después de activar el entorno:
pip install ai-snake-lab
▶️ Ejecutar AI Snake Lab
Desde el entorno virtual:
ai-snake-lab
⚠️ Limitaciones
Como la simulación se ejecuta dentro de una interfaz Textual, cambiar el tamaño de la terminal o volver a dibujar los gráficos puede afectar ligeramente los tiempos. Por eso los récords pueden aparecer en diferentes partidas durante ejecuciones repetidas. Es un comportamiento esperado, no un error de la lógica de IA.
Si necesitan simulaciones totalmente reproducibles, escríbanme. Podría crear un modo sin interfaz gráfica, donde la simulación se ejecute en un proceso independiente de Textual.
🙏 Agradecimientos
El código original está basado en el tutorial de YouTube de Patrick Loeber, Python + PyTorch + Pygame Reinforcement Learning – Train an AI to Play Snake. Pueden consultar el código original en GitHub. ¡Muchas gracias, Patrick! ¡Eres increíble! Este proyecto es una adaptación de su solución con Pygame y Matplotlib.
También agradezco a Will McGugan y al equipo de Textual. Textual es fantástico. ¡Eso sí que es desarrollo rápido de aplicaciones! Migrar de Pygame y Matplotlib a Textual tomó menos de un día.
🌟 Inspiración
Crear un agente inteligente, dejarlo suelto y observar su comportamiento es fascinante. Es un poco como tener hijos, pero a una escala muchísimo menor, al menos por ahora. Ver jugar Snake a una IA resulta hipnótico. Siempre se me ocurren nuevas formas de mejorarla. Agradezco a Patrick Loeber por darme un proyecto tan divertido para explorar la inteligencia artificial.
He trabajado gran parte de mi carrera administrando sistemas Linux. Mi lugar cómodo es la línea de comandos. Nunca trabajé profesionalmente como programador y mucho menos como desarrollador frontend. Textual, para construir interfaces de terminal enriquecidas, encaja perfectamente conmigo. Cuando descubrí Dolphie, quedé impresionado: ¡gráficos integrados en tiempo real de métricas de MySQL!
También me inspira Richard S. Sutton. Sus ideas sobre el aprendizaje por refuerzo representan una revolución lenta. Su crítica a crear una IA específica para cada problema y luego declarar el trabajo terminado es acertada. Su visión de agentes capaces de aprender continuamente y de manera no lineal es una frontera hacia la inteligencia artificial general.
📚 Documentación técnica
- Sitio del proyecto
- Proyecto en GitHub
- Estructura de archivos
- Esquema de base de datos
- Organización y nombres de constantes
- Normas de commits de Git
- Estrategia de ramas de Git
- Registro de cambios
🔗 Enlaces
- Tutorial de Patrick Loeber
- Textual de Will McGugan, framework de desarrollo rápido
- Dolphie, panel de análisis para MySQL/MariaDB y ProxySQL
- Página de Richard Sutton
- Citas y materiales de Richard Sutton
- Gráficos para diagnosticar redes neuronales, George V Jose
- Análisis de curvas de aprendizaje, Mostafa Ibrahim