Pong AI es un proyecto académico desarrollado en C++ que tiene como objetivo crear un agente inteligente capaz de aprender a jugar el clásico videojuego Pong a través del entrenamiento con una red neuronal multicapa. A diferencia de soluciones que dependen de librerías externas, este proyecto implementa desde cero:
-
Una biblioteca algebraica genérica (Tensor<T, Rank>) similar a NumPy, que permite operar con tensores multidimensionales.
-
Un framework de redes neuronales minimalista, incluyendo capas densas, funciones de activación, cálculo de pérdida y optimización.
-
Un entorno de simulación simplificado (EnvGym) que modela las físicas básicas del juego Pong.
-
Un agente de decisión (PongAgent) que utiliza la red neuronal entrenada para actuar y mejorar en tiempo real.
Este proyecto no solo busca demostrar el aprendizaje por refuerzo en un entorno sencillo, sino también reforzar habilidades de diseño modular, patrones de software y programación genérica en C++20.
- Datos generales
- Requisitos e instalación
- Investigación teórica
- Diseño e implementación
- Ejecución
- Análisis del rendimiento
- Trabajo en equipo
- Conclusiones
- Bibliografía
- Licencia
-
Tema: Redes Neuronales en AI
-
Grupo:
Coderaiders
-
Integrantes:
- Alumno A – Benalcázar Ferro, José Ignacio (Responsable de investigación teórica)
- Alumno B – Luciani Dávila, Itzel Yadira Arellys (Desarrollo de la arquitectura)
- Alumno C – Cervantes Ordóñez, Jireh Eliseo (Implementación del modelo y Pruebas)
- Alumno D – Cabanillas Solis, Joseph Jossemy (Documentación y demo)
-
Compilador: GCC 11 o superior
-
Dependencias:
- CMake 3.18+
- Eigen 3.4
- [Otra librería opcional]
-
Instalación:
git clone https://github.com/ItzelLuci/projecto-final-coderaiders.git cd proyecto-final mkdir build && cd build cmake .. make
-
Objetivo: Explorar fundamentos y arquitecturas de redes neuronales a través del estudio de múltiples modelos y conceptos principales.
-
Contenido de ejemplo:
-
Historia y evolución de las NNs.
-
1943: McCulloch y Pitts crean el primer modelo de neurona artificial.
-
1958: Rosenblatt presenta el perceptrón, pero es limitado (no resuelve XOR).
-
1986: Se redescubre el algoritmo de retropropagación, permitiendo entrenar redes multicapa.
-
2010s: Surgen las redes profundas (deep learning), impulsadas por grandes datos y GPUs.
-
Hoy: Las NNs se aplican en visión, lenguaje, salud, juegos, etc.
-
-
Principales arquitecturas: MLP, CNN, RNN.
MLP (Multilayer Perceptron): Redes con varias capas densas, útiles en tareas generales de clasificación y regresión.
CNN (Convolutional Neural Network): Extraen características espaciales, ideales para imágenes y visión por computadora.
RNN (Recurrent Neural Network): Procesan datos secuenciales como texto o series de tiempo. LSTM y GRU mejoran su memoria.
-
Algoritmos de entrenamiento: backpropagation, optimizadores.
Backpropagation: Calcula cómo ajustar los pesos para reducir el error, usando derivadas y la regla de la cadena.
Optimización: Algoritmos que usan esos gradientes para mejorar la red.
- SGD: Método básico
- Adam: El más usado por su rapidez y adaptabilidad
- Otros: Momentum, RMSprop
-
- Patrones de diseño: ejemplo: Factory para capas, Strategy para optimizadores.
- Estructura de carpetas:
pong_ai/
├── docs/ # Documentación
│ ├── BIBLIOGRAFIA
│ └── README.md
├── include/
│ └── utec/
│ ├── agent/ # Agente Pong y entorno
│ │ ├── EnvGym.h
│ │ └── PongAgent.h
│ ├── algebra/ # Operaciones algebraicas
│ │ └── Tensor.h
│ └── nn/ # Red neuronal
│ ├── activation.h
│ ├── dense.h
│ ├── layer.h
│ ├── loss.h
│ └── neural_network.h
├── src/ # Implementación
│ └── utec/
│ └── agent/
│ ├── EnvGym.cpp
│ └── PongAgent.cpp
├── tests/ # Casos de prueba
│ ├── test_agent_env.cpp
│ ├── test_neural_network.cpp
│ └── test_tensor.cpp
└── main.cpp # Punto de entrada
-
Cómo ejecutar:
./build/neural_net_demo input.csv output.csv
-
Casos de prueba:
- Test unitario de capa densa.
- Test de función de activación ReLU.
- Test de convergencia en dataset de ejemplo.
Video de la Demo: https://youtu.be/0Ght-OM8mMA
Pasos:
- Preparar datos de entrenamiento (formato CSV).
- Ejecutar comando de entrenamiento.
- Evaluar resultados con script de validación.
- Análisis del rendimiento
Iteraciones: 1000 épocas Tiempo de entrenamiento: 20 segundos Precisión final: 70-80%
-
Ventajas: Buen rendimiento con datos reducidos (XOR) Red ligera y fácil de adaptar, adecuada para el contexto de entrenamiento en Pong
-
Desventajas: Entrenamientos con batch sizes altos generan tiempos de espera largos. En el entrenamiento on-policy, el aprendizaje es muy dependiente de la calidad de la recompensa.
-
Mejoras futuras: Implementar operaciones matemáticas como BLAS o Eigen para mejorar el rendimiento en contextos con mayor volumen de datos o mayor cantidad de parámetros. Implementar técnicas de regularización o exploración como epsilon-greedy para ejecutar un entrenamiento más generalizado y evitar así problemas de overfitting que empeoren la precisión del sistema al generalizar a datos nuevos dentro de contextos más complejos.
Tarea | Miembro | Rol |
---|---|---|
Investigación teórica | Alumno A | Documentar bases teóricas |
Diseño de la arquitectura | Alumno B | UML y esquemas de clases |
Implementación del modelo | Alumno C | Código C++ de la NN |
Pruebas y benchmarking | Alumno C | Generación de métricas |
Documentación y demo | Alumno D | Tutorial y video demo |
El proceso de propagación hacia adelante (forward pass) y retropropagación (backward pass) permite ajustar los pesos y sesgos de la red para optimizar su rendimiento.
Dividir el proyecto en módulos independientes es importante para garantizar un código escalable y fácil de mantener. Sin embargo, podríamos extender el código mediante patrones como Dependency Injection para desacoplar más cada capa.
-
Blog, G. (2020, 5 julio). The Evolution and Core Concepts of Deep Learning & Neural Networks. Analytics Vidhya. https://www.analyticsvidhya.com/blog/2016/08/evolution-core-concepts-deep-learning-neural-networks
-
David, D. S. (2024). Aplicación de deep learning para predicción de índices bursátiles extranjeros usando modelos multivariados recurrentes y convolucionales con mecanismos de atención. repositorio.uchile.cl. https://doi.org/10.58011/nymx-3240
Este proyecto usa la licencia MIT. Ver LICENSE para detalles.