Lunar-Rover-MADRLTrabajo Fin de Máster. Matrícula de Honor.
Rovers lunares que aprenden a coordinarse sin chocar.
Un sistema de planificación de rutas multiagente con aprendizaje por refuerzo profundo, como alternativa a la planificación centralizada. Los rovers exploran, encuentran su mina, transportan el mineral y evitan obstáculos y entre sí, cada uno con su propia visión del entorno. Diseñé el simulador e implementé desde cero DDDQL y MAPPO.
- escenarios de prueba resueltos
- 8 de 8
- colisiones entre rovers
- 0
- pasos de entrenamiento
- 3,75 M
Hecho con Python, TensorFlow, Keras, Gymnasium y Pygame.
El problema
Para construir la primera Estación Internacional de Investigación Lunar, prevista para 2030, hará falta extraer mucho material en la propia Luna. Varios rovers tendrán que ir a sus minas, cargar el mineral y llevarlo a una mezcladora común. Planificar esas rutas desde la Tierra es lento y poco flexible: el terreno no se conoce entero, cada rover solo ve lo que tiene alrededor y los demás rovers son obstáculos que se mueven.
El objetivo del trabajo fue comprobar si los rovers podían aprender a resolverlo por sí mismos, cada uno con sus propias decisiones, gastando la menor energía posible y sin chocar nunca entre ellos.
El entorno: un simulador construido para aprender
No existía ningún entorno que se pareciera al problema, así que lo construí con Gymnasium, la biblioteca estándar de aprendizaje por refuerzo, y lo visualicé con Pygame.
- El mapa es una cuadrícula configurable con obstáculos pequeños, que se pueden superar gastando más energía, y grandes, que pueden dejar al rover inutilizado.
- En cada episodio cambian la posición de los obstáculos, los rovers, las minas y la mezcladora. Así el agente no memoriza un mapa: aprende a moverse en cualquiera.
- Cada rover tiene un rango de visión limitado y decide con lo que ve y con lo que recuerda. El control es descentralizado: no hay un cerebro central que decida por todos.
Durante el desarrollo, el propio entrenamiento reveló qué le faltaba al entorno. Añadí tres mejoras que fueron decisivas:
- Un mapa de visitas. Los rovers se quedaban atrapados explorando zonas ya vistas. Con un registro de las casillas visitadas aprendieron a buscar zonas nuevas.
- Recompensas intermedias. Al principio casi todas las recompensas eran negativas y el agente no aprendía nada. Una pequeña recompensa, inspirada en los campos de potencial artificial, le guía hacia su objetivo cuando lo tiene a la vista.
- Observaciones normalizadas. Cada rover solo distingue su propia mina, y el resto de minas y rovers le parecen iguales. Así todos comparten la misma experiencia y el modelo funciona con mapas de otro tamaño y con un número distinto de rovers.
Dos algoritmos, implementados desde cero
Implementé los dos algoritmos sin bibliotecas de aprendizaje por refuerzo, solo con NumPy, TensorFlow y Keras, para poder adaptarlos al problema.
- DDDQL (Double Dueling Deep Q-Learning). Separa la red que elige la acción de la que la evalúa, para no sobrestimar valores, y divide la red en el valor del estado y la ventaja de cada acción. Usa máscaras para descartar movimientos imposibles y una memoria de experiencias compartida por todos los rovers.
- MAPPO (Multi-Agent PPO). Un actor-crítico con entrenamiento centralizado y ejecución descentralizada, el enfoque de referencia en muchos problemas multiagente cooperativos.
Resultados
Entrené ambos modelos en mapas de 12 × 12 con tres rovers y una visión de tres casillas. La gráfica recoge la recompensa media por acción a lo largo del entrenamiento, con los datos reales que se guardaron en cada punto de control.
Ver los datos
| Pasos | DDDQL | MAPPO |
|---|---|---|
| 0,5 M | 8,6 | -7,1 |
| 1 M | 12,6 | -4,9 |
| 1,5 M | 13,3 | -4,4 |
| 2 M | 13,9 | -3,4 |
| 2,5 M | 14,5 | -2,8 |
| 3 M | 16,6 | -2,8 |
| 3,5 M | 14,4 | -2,2 |
| 4 M | – | -2,1 |
| 4,5 M | – | -2,6 |
| 5 M | – | -1 |
| 5,5 M | – | -0,7 |
| 6 M | – | -1,2 |
DDDQL aprende de forma clara: pasa de recompensas negativas a positivas y cada vez completa más episodios con menos pasos. MAPPO, en cambio, no consigue que la recompensa deje de ser negativa en 6 millones de pasos.
Después probé el modelo de DDDQL, ya sin exploración aleatoria, en cuatro mapas nuevos y en dos modos: sin conocer de antemano dónde están los objetivos y conociéndolos. Resolvió los 8 escenarios y no hubo ni una colisión. Este es el primer mapa en sus dos modos, redibujado con las rutas reales de la prueba:
Terreno
- Libre
- Obstáculo pequeño: se cruza con más gasto de energía
- Obstáculo grande: puede averiar el rover
Rovers
- Rover 1
- Rover 2
- Rover 3
- Salida
- Mina asignada
- Mezcladora, destino común
Sin conocer los objetivos, los rovers exploran de forma ordenada, primero hasta su mina y después hasta la mezcladora, sin volver a zonas ya visitadas. En cuanto los tienen a la vista, van directos. Si conocen sus posiciones desde el principio, se ahorran la exploración y el total baja de 83 a 41 pasos. Aun así, el rover 3 cruza un obstáculo grande para acortar camino, algo que el modelo todavía puede mejorar.
Lo que aprendí
- Off-policy frente a on-policy importa. DDDQL reutiliza miles de experiencias pasadas de todos los rovers. MAPPO solo aprende de su política actual, y con mapas que cambian en cada episodio eso no le bastó para converger. Elegir el algoritmo según cómo es el entorno es tan importante como ajustarlo.
- El entorno es la mitad del trabajo. Las tres mejoras del simulador tuvieron más impacto que cualquier hiperparámetro.
- Siguientes pasos. Dar a cada rover una «brújula» que indique la dirección de su objetivo sin revelar su posición exacta, entrenar durante más pasos y medir cómo escala el modelo con más rovers y mapas más grandes.