1.100 millones de pasos: la entropía cede y el pool de oponentes está listo
Estado actual
| Pasos de entrenamiento | 1,100 millones y subiendo (run hacia 1,500 M en curso) |
| Champion actual | champion_1099200556 |
| Último resultado | 179 victorias / 21 derrotas en 200 partidas contra el champion anterior |
| Entropía de la política | 3.94 (máximo teórico 4.50); empezó en 4.42 |
| Velocidad de entrenamiento | ~12.000 pasos/s con 20 workers, i7-12700H + RTX 8 GB |
| Nivel de juego | persigue, tira y defiende con criterio; todavía muy lejos de un humano bueno |
Lo siguiente en la cola, ya construido y probado: pool de oponentes (25% de los episodios contra champions anteriores congelados) y estados de arranque variados (40% kickoff, 45% estados reales de replays de profesionales, 15% física aleatoria) para que aparezcan aéreos, saves y recoveries sin programarlos a mano.
Cómo funciona
- Entorno: RLGym 2.0 + RocketSim 2.2, 1v1, observación
DefaultObsde 92 valores, 90 acciones discretas (LookupTableAction), una decisión cada 8 ticks (15 por segundo). - Recompensas: gol +10, gol en contra −10, toque 0.2, velocidad hacia el balón 0.05, velocidad del balón hacia la portería 0.18. Nada específico para saltos ni mecánicas: las mecánicas deben emerger, no programarse.
- Aprendizaje: PPO (
rlgym-ppo, fork vendorizado con una corrección en el cálculo de ventajas GAE), red 512×512, coeficiente de entropía 0.003, self-play. - Evaluación: partidas entre checkpoints congelados identificados por SHA-256, promoción a champion solo con victoria significativa en 100-200 partidas; auditoría de saltos reproducible; comparación contra replays de profesionales.
- Juego real: el bot corre en RLBot con la misma observación reconstruida desde el paquete del juego, muestreo estocástico y sincronía por ticks de física.
La corrección de GAE mencionada arriba es sobre esto. La ventaja de una transición se calcula acumulando residuos de diferencia temporal:
El bug estaba en cómo se conseguía : en vez del valor del estado que realmente sigue a cada transición, el backend original tomaba el valor de la transición siguiente en el buffer, que en un buffer con muchos episodios pegados casi nunca es el mismo estado.
Lo aprendido, en tres líneas
- Recortar la recompensa de toque no quita los saltos: costó 100 M de pasos sin ganar nada y el bot tocaba el balón un 25% menos. Revertido.
- El coeficiente de entropía era el freno: bajarlo de 0.01 a 0.003 hizo que la política se comprometiera en 100 M de pasos, con la mitad de saltos, el triple de tiempo en el suelo y 179-21 contra el champion anterior.
- Windows 11 manda el entrenamiento a los E-cores cuando hay una app en primer plano: fijar los procesos a los P-cores multiplicó la velocidad por 2.5. Ahora es automático.
Comparado contra 19 replays profesionales de RLCS (~368 M de pasos del bot en esa comparación), Egoist está en 10-15% de los toques y goles por segundo de un humano, pero 25-33% de su velocidad de auto/balón. Se mueve con energía real, pero convierte eso en contacto y goles muchas menos veces. Esto motivó subir el peso de ball_velocity_to_goal en el próximo hito de 500 M de pasos.