Ir a los controles
LEIAStreet Fighter RL

Street Fighter II: Special Champion Edition

Agente Rainbow DQN

SELECCIONA CPU

Rival del Agente Rainbow DQN
NIVEL CPU
© CAPCOM
↑ Demo

· control de Ryu

Agente Rainbow DQN

street_fighter

Participantes · LEIAFelipe Pacheco Zamorano · Diego Perea León · Santiago Saldaña Subías

Modelo de aprendizaje por refuerzo con y entrenamiento distribuido en Street Fighter II′: Special Champion Edition.

Una aprende a controlar a Ryu contra los doce rivales de la , en ocho dificultades de Sega Genesis. El proyecto explora cómo representar un combate, aprender secuencias de ataque y sostener una estrategia ante rivales cada vez más difíciles.

Fecha del proyecto
Modelo utilizado
· ·

01Qué observa la política

El extractor lee variables de la y las : vida de ambos combatientes, posición relativa, distancia a la pared, proyectiles, velocidades, orientación y códigos de movimiento. La pantalla permite seguir el combate; las entradas de la red son esas variables numéricas.

Se extraen 23 valores por estado. Los identificadores de ambos personajes se convierten en vectores de 16 categorías: cada estado pasa a 53 valores y se apilan cuatro, para un total de 212. Esa historia reciente ayuda a distinguir un desplazamiento, un salto y un proyectil que avanza. La dificultad seleccionada no se añade como una entrada de la política.

FIGURA 1 / DEL EMULADOR A LA RED
  1. RAMEstado interno del combate
  2. 23 valoresVariables normalizadas
  3. 53 / estadoIdentidades one-hot
  4. 212 valores4 estados recientes
23 − 2 identificadores + 32 indicadores = 53 valores por estado. Al apilar cuatro estados, la red recibe información sobre cómo cambia el combate en el tiempo.

02Qué puede hacer

La red elige entre 72 acciones. Las primeras 63 combinan nueve direcciones —incluida la neutral— con siete opciones de ataque: ningún botón, tres intensidades de puñetazo y tres de patada. Una se mantiene durante cuatro .

Las otras nueve son : Hadouken ligero/fuerte, Shoryuken ligero/fuerte, Tatsumaki ligero/medio, saltos hacia delante/atrás y una secuencia de bloqueo. Las secuencias se definieron a mano; la política aprende cuándo seleccionarlas. Ejecutan dos o tres primitivas y se reflejan cuando el rival cambia de lado.

FIGURA 2 / UNA ACCIÓN, TRES PRIMITIVAS
Rival a la
↓Abajo · 4 frames
↘Abajo + adelante · 4 frames
→ + HPAdelante + puño fuerte · 4 frames
La red aprende cuándo lanzar el Hadouken. La secuencia de botones se define previamente y se orienta hacia el rival.

03Cómo calcula una acción

La red contiene 1,077,131 . Una transforma la entrada mediante dos capas de 256 unidades con . Después, la arquitectura separa el valor del estado y la ventaja de cada acción.

En lugar de asignar solo un número a cada acción, las ramas producen 51 del . La combinación da 72 . Su promedio es el ; durante la evaluación el agente elige el mayor.

FIGURA 3 / RED DUELING DISTRIBUCIONAL
212Observación
256 → 256Tronco compartido · ReLU
V(s, i)51 valores del estado
A(s, a, i)72 × 51 ventajas
Bloques morados: parámetros que se ajustan durante el entrenamiento.
θ(s, a, i) = V(s, i) + A(s, a, i) − mediaa A(s, a, i)
Q(s, a) = media de los 51 θ(s, a, i) · acción = Q(s, a)
s es el estado, a una acción e i uno de los 51 cuantiles. La resta de la ventaja media permite separar ambas ramas. El promedio resume el retorno esperado de cada acción; la distribución conserva información que un único valor no muestra.
FIGURA 4 / TRES ACCIONES ANTE UNA ENTRADA REALCuantiles predichos del retorno de Hadouken fuerte, Neutral y Shoryuken fuerte para una observación congelada del checkpoint 3291.
Hadouken fuerteQ 59.13NeutralQ 56.04Shoryuken fuerteQ 49.26
Predicciones del modelo ante un estado real de combate contra Sagat en nivel 1. Hadouken fuerte tiene el mayor Q entre las 72 acciones. Estas curvas estiman recompensas futuras, no probabilidades de victoria.

04Qué aprende y por qué se llama Rainbow

El proyecto combina mejoras de con . Usa regresión de cuantiles en la parte distribucional, y exploración en lugar de . Esa elección evita fijar de antemano un para la escala de retornos de este juego.

La red online elige la acción siguiente; una red objetivo estima su valor para construir el objetivo de aprendizaje.
Comparte la representación del combate y separa lo favorable del estado de la ventaja de cada decisión.
Reutiliza experiencias y muestrea con más frecuencia las que presentan errores de predicción grandes, compensando el sesgo del muestreo.
Combina varias recompensas antes de estimar lo que falta por recibir. Aquí se combinan tres pasos con un .
Ajusta la distribución del retorno de cada acción. Los 51 puntos son estimaciones aprendidas, no una distribución de botones aleatorios.
Se actualiza con menos frecuencia que la online, para que los objetivos no cambien a la misma velocidad que la política.

El entrenamiento modifica los . El extractor de RAM, la codificación de personajes, las primitivas y las secuencias de macros permanecen definidos por el entorno. Una vez entrenado, el agente usa esos pesos para decidir durante el combate.

La señal de recompensa

La recompensa combina daño causado/recibido, resultado del round, coste de tiempo y de posición. Ganar aporta una recompensa positiva; perder o empatar añade una penalización. El agente también recibe señales durante el round. El componente posicional utiliza el cambio descontado de un potencial de distancia.

05Cómo se distribuyó el entrenamiento

separa recolectar experiencia de entrenar. Cada corre emuladores, explora con su propia ε y envía . Un central mantiene el replay, muestrea y actualiza la red en . Después publica nuevos pesos para los actores.

FIGURA 5 / EXPERIENCIA Y PESOS
  1. ActoresEmuladores · distintas ε
  2. Replay centralTransiciones priorizadas
  3. LearnerLotes y en GPU
  4. PesosNuevas instantáneas a los actores
La experiencia viaja hacia el learner; los pesos actualizados vuelven a los actores. Así, distintos combates contribuyen al aprendizaje de una misma política.

El amplió la distribución de dificultades: primero niveles bajos y después los ocho niveles, con más experiencia en los altos y una mezcla que conservó los bajos. El agente sigue encontrando rivales sencillos mientras aprende a enfrentar los más exigentes.

El replay permite aprender de experiencias anteriores: cada actualización toma un lote de transiciones, compara las predicciones con las recompensas observadas y ajusta los pesos de la red.

06Un año de evolución

  1. Septiembre–octubre 2025

    Los primeros agentes aprendían mirando la pantalla

    El equipo inició los experimentos con gym-retro y . Las imágenes se convertían a escala de grises, se reducían a 84 × 84 píxeles y se apilaban cuatro frames. Una aprendía a elegir combinaciones de botones; se exploraban recompensas por daño y victoria, y ajustes de .

  2. Marzo–abril 2026

    De píxeles a variables del combate

    El equipo construyó un entorno sobre BizHawk que conecta el juego con el entrenamiento en Python. El agente pasó a observar vida, posiciones, velocidades y proyectiles mediante la memoria del juego. Esta representación hizo explícita la información necesaria para aprender; el entrenamiento por curriculum introdujo rivales y dificultades de forma gradual.

  3. Mayo–junio 2026

    Más formas de entrenar y comparar

    Se ampliaron los espacios de acciones, el curriculum automático y las herramientas para observar decisiones. También se incorporaron pruebas entre agentes y una estructura de liga para explorar entrenamiento con oponentes aprendidos. PPO fue la base del desarrollo de esta etapa.

  4. Agosto 2026

    Comparar estrategias evolutivas y aprendizaje distribucional

    Se estudiaron políticas y una variante de Rainbow DQN con regresión de cuantiles. La evaluación comenzó a variar los arranques y a introducir ruido en las acciones, para distinguir una estrategia que repite una secuencia de otra que responde a cambios del combate. Se revisó también la señal de recompensa para que ganar y perder produjeran incentivos correctos.

  5. Agosto 2026

    Entrenamiento distribuido y peleas completas

    permitió reunir experiencia de varios emuladores. Se añadieron macroacciones y se amplió el entrenamiento a los ocho niveles de CPU. La evaluación pasó de un round de apertura a peleas al mejor de tres, donde el agente necesita mantener su desempeño después de los cambios entre rounds.

Las etapas exploran representaciones y métodos distintos. Los primeros agentes basados en imágenes y las pruebas de liga forman parte de la historia; los benchmarks siguientes corresponden a las políticas evaluadas sobre variables de memoria frente a la CPU.

07Resultados

La dificultad de la , la duración de la prueba y la variación del arranque cambian lo que se está midiendo. Por eso ganar el primer y ganar una producen porcentajes diferentes.

Rainbow DQN · modelo 3291 · qué significa cada resultado
PruebaVictoriasResultadoQué mide
Peleas completas · nivel 8323 / 36089.7%Ganar dos rounds antes que el rival. 30 peleas por cada CPU.
Primer round · nivel 890 / 9693.8%Ganar solo el round de apertura en la dificultad máxima.
Primer round · niveles 1–8758 / 76898.7%Promedio con la misma cantidad de en cada dificultad.
Primer round · niveles 1–496 / 96 por nivel100% observadoNinguna derrota en esos bancos; no significa ganar cualquier partida posible.

Estas pruebas utilizan los doce rivales, de hasta 30 pasos y ningún ruido añadido a las acciones. El promedio sobre ocho niveles incluye CPU más sencillas: no equivale al resultado de la dificultad máxima.

Comparación entre modelos · nivel 1

Se compararon dos políticas , tres variantes evolutivas y dos etapas de Ape-X sobre los mismos doce estados iniciales. Se aplicaron tres condiciones: , desfase aleatorio del arranque y .

FIGURA 6 / MODELOS CON VARIACIÓN EN EL ARRANQUEComparación de rounds con desfase: PPO 39.7M 67/72, PPO 31M 58/72, ES escalar 46/72, ES one-hot 54/72, ES perturbado 57/72, Ape-X 90k 66/72, Ape-X 511 96/96.
Victorias sobre rounds de apertura. Las barras muestran para los episodios de cada banco; no miden variación entre entrenamientos independientes.
Rounds de apertura ganados · porcentaje y conteo
Modelo
90.6%87 / 9693.1%67 / 7295.8%69 / 72
74.0%71 / 9680.6%58 / 7281.9%59 / 72
83.3% †20 / 2463.9%46 / 7276.4%55 / 72
75.0% †18 / 2475.0%54 / 7265.3%47 / 72
83.3% †20 / 2479.2%57 / 7256.9%41 / 72
100.0% †24 / 2491.7%66 / 7295.8%69 / 72
100.0% †24 / 24100.0%96 / 96100.0%96 / 96

Cómo leer el 100%

† Con las de DQN y OpenES y un arranque fijo, las repeticiones pueden producir exactamente la misma pelea. Ese 100% describe las secuencias del banco; repetirlas no añade partidas independientes. El desfase y el ruido cambian las condiciones para comprobar cuánto depende el agente de esa secuencia.

Un 100% con desfase significa que no hubo derrotas en la muestra observada. Sigue siendo un conjunto limitado de estados y perturbaciones, con arranques que pueden repetirse. Los intervalos tampoco recogen todas las fuentes de incertidumbre. En esta comparación PPO elige acciones de forma ; DQN y OpenES eligen su acción de mayor puntuación. Los presupuestos de entrenamiento son diferentes.

Dificultad · modelo 3291

Primer round · 12 rivales × 8 episodios en cada nivel
Nivel de VictoriasPorcentaje
196 / 96100.0%
296 / 96100.0%
396 / 96100.0%
496 / 96100.0%
595 / 9699.0%
695 / 9699.0%
794 / 9697.9%
890 / 9693.8%
Evolución de Rainbow DQN por dificultad

Tres del mismo agente, evaluados con desfase en los mismos bancos. Los paneles comparan los modelos 511, 1212 y 3291 en niveles 1–6, y los modelos 1212 y 3291 en niveles 7–8.

Porcentaje de rounds ganados: modelos 511, 1212 y 3291 en niveles 1 a 6, y modelos 1212 y 3291 en niveles 7 y 8.

3291 identifica una instantánea de pesos del entrenamiento; no es un número de generación. Cada celda resume 96 episodios de primer round.

Peleas completas · dificultad máxima

Ganar una pelea requiere dos victorias de round. El resultado de 323/360 es 89.7%, con un de 86.2–92.5%. La mayor parte de las derrotas se concentra en Balrog, Guile y E. Honda: 35 de las 37 pérdidas.

FIGURA 7 / PELEAS COMPLETAS POR RIVAL · NIVEL 8Peleas ganadas en nivel 8: Balrog 16/30, Guile 19/30, E. Honda 20/30, M. Bison 28/30 y los ocho rivales restantes 30/30 cada uno.
30 peleas por rival, al mejor de tres, con desfase inicial y sin ruido añadido. Un 30/30 significa que ese rival no ganó en esta muestra, no que el agente sea invencible.
Conteos e intervalos por rival
RivalVictoriasPorcentaje
Balrog16 / 3053.3%36.1–69.8%
Blanka30 / 30100.0%88.6–100.0%
Chun-Li30 / 30100.0%88.6–100.0%
Dhalsim30 / 30100.0%88.6–100.0%
E. Honda20 / 3066.7%48.8–80.8%
Guile19 / 3063.3%45.5–78.1%
Ken30 / 30100.0%88.6–100.0%
M. Bison28 / 3093.3%78.7–98.2%
Ryu30 / 30100.0%88.6–100.0%
Sagat30 / 30100.0%88.6–100.0%
Vega30 / 30100.0%88.6–100.0%
Zangief30 / 30100.0%88.6–100.0%

Alcance

Los resultados corresponden a Ryu frente a la CPU de Street Fighter II′: Special Champion Edition, usando variables de memoria y macros definidas previamente. No establecen desempeño contra humanos ni con otros personajes, ediciones o estados iniciales fuera del banco evaluado.