Está en la página 1de 10

Probando VizDoom

Robótica

Arturo Navarro Riveros

Renato Chavez Urday

CCOMP10-1

2021

“El alumno declara haber realizado el presente trabajo de


acuerdo a las normas de la Universidad Católica San Pablo”
Introducción:

ViZDoom permite desarrollar bots de IA que juegan a Doom usando solo la información
visual (el búfer de pantalla). Está destinado principalmente a la investigación en aprendizaje
visual automático y, en particular, al aprendizaje por refuerzo profundo.

- Multiplataforma (Linux, macOS, Windows)


- API para Python, C ++ y Julia (gracias a Jun Tian), y también Lua y Java para
versiones anteriores
- Escenarios personalizados fáciles de crear (editores visuales, lenguaje de
programación y ejemplos disponibles)
- Modos asíncronos y sincronizados para un jugador y multijugador
- Rápido (hasta 7000 fps en modo de sincronización, de un solo subproceso)
- Ligero (pocos MB)
- Parámetros de renderización y resolución personalizables
- Acceso al búfer de profundidad (visión 3D)
- Objetos de juego de etiquetado automático visibles en el marco
- Acceso al búfer de audio (gracias a Shashank Hegde)
- Acceso a la lista de actores / objetos y geometría del mapa
- Renderizado fuera de la pantalla
- Grabación de episodios
- Escala de tiempo en modo asíncrono

ViZDoom API es amigable con el aprendizaje por refuerzo (adecuado también para
aprender de demostración, aprendizaje de aprendizaje o aprendizaje a través del
aprendizaje de refuerzo inverso, etc.).

Implementación:

Instalamos las librerias necesarias:


Primero importamos vizdoom junto con pytorch y las librerías necesarias para ejecutar
nuestro código:

Configuramos los parámetros de aprendizaje:


Inicializamos pytorch
Implementamos nuestro modelo:
Inicializamos el juego, Entrenamos el modelo que declaramos, reiniciamos el juego y al final
renderizamos el juego:

Para ambos experimentos se ha utilizado la herramienta Colab de Google con 12.69 Gb de


memoria, CPU Intel Xeon de 2.3 GHz y GPU Nvidia K80 / T4 de 0.8 GHz y 12 Gb de
memoria

Modelo
El modelo seguido es el de Double Deep Q Learning, con política e-greedy Para calcular los
valores Q, se emplea el aprendizaje temporal diferencial donde se busca optimizar el error
de mínimos cuadrados:

donde yiDQN es:


El modelo de optimización es gradiente descendente estocástico con la siguiente fórmula:

Se utiliza estrategia de repetición de experiencias, que sirven de conjunto de datos de


entrada para el entrenamiento de la red y son alimentados en pequeños lotes (batches)
escogidos de manera aleatoria.

Primer escenario: Eliminación de un único enemigo


En este escenario se premia con 101 la eliminación de un Cacodemon de un disparo, dando
una recompensa de 100 por eliminarlo y -1 por cada acción empleada. Tras 300 acciones el
episodio termina si es que no se ha matado al enemigo antes.

Se han ejecutado 5 épocas de entrenamiento cada una con 100 episodios. Los resultados
son los siguientes:

Época Recompensa Tiempo Memoria Uso GPU Uso CPU


promedio (minutos)

1 -126.0 3.77 19.8% 4.02% 98.83%

2 12.7 3.29 19.8% 4.07% 99.69%

3 60.6 2.91 19.8% 4.07% 99.07%


4 70.5 2.85 19.8% 3.47% 99.57%

5 71.7 2.83 19.83% 3.67% 99.19%

Tras el entrenamiento se ejecutaron 10 episodios de prueba obteniendo los siguientes


puntajes:
Total score: 70.0
Total score: 82.0
Total score: 82.0
Total score: 82.0
Total score: 33.0
Total score: 75.0
Total score: 82.0
Total score: 94.0
Total score: 70.0
Total score: 94.0

En general mantuvo puntajes altos por lo que se puede concluir que aprendió correctamente
a eliminar al enemigo.

Segundo escenario: Recolección de medikits

Se premia al agente por cada tic (acción) con la cual permanece vivo sobre un charco de
ácido. Para sobrevivir puede recoger medikits ubicados aleatoriamente. El episodio termina
después de 2100 tics. Al morir se recibe una penalidad de 100 puntos y termina el episodio.

Al igual que el escenario anterior se ejecutan 5 épocas con 100 episodios cada una con los
siguientes resultados:
Época Supervivencia Tiempo Memoria Uso GPU Uso CPU
promedio (minutos)

1 478.2 5.70 20.3% 3.93% 99.90%

2 435.3 5.44 20.3% 3.80% 98.91%

3 359.1 5.19 20.3% 4.02% 99.84%

4 386.7 6.31 20.3% 3.87% 98.73%

5 460.0 5.88 20.3% 4.13% 99.43%

Tras el entrenamiento se ejecutaron 10 episodios de prueba obteniendo los siguientes


puntajes:

Total score: 471.0


Total score: 408.0
Total score: 790.0
Total score: 727.0
Total score: 1836.0
Total score: 283.0
Total score: 278.0
Total score: 344.0
Total score: 376.0
Total score: 1459.0

El promedio de supervivencia general está alrededor de 700 tics, por lo que el robot logra
sobrevivir más de la mitad del episodio en general.

Conclusiones

- El modelo propuesto logra entrenar al agente para desempeñar tareas específicas.


- A un mayor número de épocas y episodios, más se estabiliza el tipo de juego del
agente y llega a mejores puntajes.
- En la sobrevivencia, no se puede apreciar un patrón, pues los resultados por
episodios son muy variados, pero en la media, consigue sobrevivir más de la mitad
del tiempo, por lo que el entrenamiento fue exitoso.
- Vizdoom está basado en Zdoom, y provee una gran funcionalidad en el juego para
probar con agentes.
- La importancia de este tipo de aplicaciones radica en su apoyo en desarrollo de la
IA, tanto así que existen competencias en Vizdoom para analizar qué modelos
lograron mejores resultados que los otros.
- La estrategia seguida de repetición de experiencias tuvo un buen desempeño en el
experimento, porque se acoplaban a las características del modelo, y del juego.
- Como trabajo futuro se debería aumentar el entrenamiento y mejorar el modelo para
conseguir mejores resultados, y quizás aplicarlo a otros tipos de juegos basados en
experiencia y aprendizaje.

También podría gustarte