Todos los proyectos
Núm. 6
PackFlow
Carga 3D de camiones con aprendizaje por refuerzo
- Mi rol
- Autor único
- Periodo
- Jun – jul 2026
El problema
Cargar un camión de reparto no es solo meter cajas: hay que respetar el peso máximo, no aplastar lo frágil y dejar cerca de la puerta lo que se entrega primero. Quise ver si un agente de aprendizaje por refuerzo puede aprender a cargar mejor que una regla simple cuando no cabe todo.
Qué construí
Soy el único autor del repositorio: 7 commits, del 24 de junio al 14 de julio de 2026.
- Un entorno de Gymnasium en vóxeles: un camión de 12 × 6 × 8 y una cola de paquetes. Cada acción es una posición con una de 6 rotaciones, más la opción de saltar el paquete. La máscara de acciones solo permite colocaciones que caben, no chocan, quedan apoyadas en al menos el 80% de su base y no rebasan el peso máximo.
- Una recompensa que suma el volumen colocado y el respeto al orden de entrega, y resta el daño a los paquetes frágiles y el volumen que quedó fuera. Los paquetes generados suman entre ~110% y 130% de la capacidad, así que el agente tiene que decidir qué dejar.
- Métricas de violaciones del orden de descarga y de daño, pensadas para comparar políticas.
- El entrenamiento con MaskablePPO y un extractor propio: una CNN 3D para la ocupación del camión y un MLP para la cola. El currículo tiene 5 fases, de 4 a 20 paquetes, y cada fase reutiliza los pesos de la anterior.
- Una API FastAPI con un endpoint que devuelve la solución completa y un WebSocket que transmite la carga paso a paso. Si no encuentra un checkpoint de PPO, usa un baseline greedy que toma la primera colocación válida.
- Una consola en React con react-three-fiber que anima el camión con escenarios predefinidos.
- 11 tests de pytest sobre el entorno.
Arquitectura
Resultados
Todavía no hay resultados medidos. El repositorio no tiene checkpoint ni registros de entrenamiento, así que no puedo afirmar que el agente supere al baseline greedy. Lo que sí funciona hoy es el entorno con sus 11 tests, la API con el greedy de respaldo y la visualización.
Límites conocidos
- Falta la parte central: entrenar el currículo completo y comparar contra el greedy en volumen cargado, orden de entrega y daño.
- El baseline greedy es débil, porque toma la primera colocación válida. Para una comparación justa hace falta además una heurística más fuerte.
- El README de la raíz es una copia del README del frontend, hay
__pycache__versionado y una carpeta duplicadapackflow/packflow/api. No hay CI.