




























































































Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Explicación sobre la lógica de programación para la resolución de laberintos
Tipo: Apuntes
1 / 125
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!





























































































Director:
Este documento está preparado para ser imprimido a doble cara.
Toda la documentación y material no compilable se publican bajo una licencia CC BY-SA: Creative Commons, Attribution-ShareAlike 4.0 International [1].
El código desarrollado se encuentra en el siguiente repositorio público de GitHub [2]: https://github.com/TFG-RL- StarCraft /TFG StarCraft Dicho código se publica bajo una licencia libre GPLv3: GNU General Public License versión 3 [3].
StarCraft ® es una marca comercial o una marca registrada de Blizzard Entertainment, Inc ., en EE. UU. y/o en otros países. Las marcas, iconos e imágenes empleados en esta memoria son propiedad de sus respectivos propietarios, y se utilizan únicamente con fines académicos.
A nuestras familias y novias, por aguantarnos.
Índice
Índice de figuras ..................................................................................................... XI Resumen ................................................................................................................ XIII
VIII
XIII
Resumen
Desde los orígenes de la informática se ha intentado dotar de mayor autonomía a los sistemas informáticos, desarrollando algoritmos capaces de aprender y adaptarse a los cambios en su entorno. En el campo de los videojuegos, esta inteligencia artificial (IA) suele quedar limitada a comportamientos previamente definidos por un diseñador, dando lugar a jugadores no humanos carentes de toda autonomía. Por otro lado, el aprendizaje automático y los algoritmos de aprendizaje por refuerzo son técnicas prometedoras que nos ofrecen la posibilidad de crear agentes que aprendan por sí mismos. Además, a pesar de que se están empezando a introducir en el desarrollo de videojuegos, aún no han sido ampliamente exploradas en este campo. En concreto, el algoritmo Q-Learning nos ofrece una buena base para desarrollar sistemas basados en este tipo de aprendizaje. En este proyecto intentaremos desarrollar una aplicación que mediante este algoritmo sea capaz de aprender a hacer ciertas actividades por sí mismo en el entorno del juego de estrategia en tiempo real (RTS, del inglés Real-Time Strategy Games ) StarCraft. En concreto, lo emplearemos para la resolución de laberintos de forma autónoma, es decir, sin proporcionarle conocimiento previo al agente sobre la estructura del laberinto. Para ello iremos moviendo a una unidad del juego por un laberinto que podrá contener trampas, y mediante aprendizaje por refuerzo lograremos que dicha unidad sea capaz de encontrar la salida por sí misma. Mostraremos experimentos con distintas estrategias de aprendizaje, usando distintas recompensas, y al final explicaremos cuáles han funcionado mejor. Además desarrollaremos un framework reutilizable para este tipo de aprendizaje basado en el algoritmo Q-Learning , que emplearemos para resolver nuestro problema y podrá servir como base para futuros desarrollos.
Palabras Clave: aprendizaje por refuerzo, Q-Learning , framework , StarCraft , juegos de estrategia en tiempo real, laberinto.
Capítulo 1. Introducción
Trabajo de fin de grado 2014/2015 1
Capítulo 1. Introducción
Find a bug in a program, and fix it, and the program will work today. Show the program how to find and fix a bug, and the program will work forever. Oliver G. Selfridge
En el pasado, instruir a un sistema informático para realizar una tarea requería definir un algoritmo para esa tarea y luego programarlo detalladamente. Esto conllevaba que tenía que haber un programador pendiente en todo momento para actualizar cualquier parte del código en el caso en que se encontrase un error o se introdujese una actualización [4], aparte de que se debía encontrar un algoritmo concreto por cada problema planteado. En la actualidad, los sistemas informáticos pueden aprender a resolver un problema de forma autónoma a través de ejemplos de entrenamiento o por analogía a una tarea similar previamente resuelta [4]. También pueden mejorar significativamente su comportamiento o adquirir nuevas habilidades mediante prueba y error. Hay muchas maneras de llevar esto a cabo, y una de ellas es aprendizaje por refuerzo. De entre todos los problemas que se pueden resolver mediante aprendizaje por refuerzo, hemos decidido enfocar nuestro trabajo en el mundo de los videojuegos, y emplear un juego de estrategia en tiempo real: StarCraft. De esta manera tenemos un dominio lo suficientemente complejo para realizar pruebas, pero a la vez bastante controlado. Asimismo nos hemos centrado en el movimiento de unidades en este juego, y en el problema concreto de hacer que una unidad aprenda a salir de un laberinto por sí sola.
Capítulo 1. Introducción
Trabajo de fin de grado 2014/2015 3
Desarrollo de un framework reutilizable basado en el algoritmo Q-Learning. Este framework debe proporcionar un entorno de desarrollo fácil y rápido para el uso de Q-Learning en distintos dominios. El diseño del mismo se basará en los patrones y directrices empleados en Ingeniería del Software.
Por último, y como objetivo transversal, queremos contribuir con nuestro trabajo a la comunidad de software libre, liberando el código y la documentación de todo nuestro proyecto.
La estructura de este documento se corresponde con las distintas fases que hemos seguido en nuestro proyecto.
El capítulo 3 explica las bases del aprendizaje automático y aprendizaje por refuerzo, centrándonos en el algoritmo Q-Learning , que es el que hemos implementado. En la segunda parte del capítulo describimos el videojuego StarCraft , que es el dominio sobre el que hemos realizado las pruebas. También hablamos acerca de la tecnología que permite crear los bots y controlar las unidades del juego.
El capítulo 4 describe la arquitectura general de nuestro proyecto y explica en profundidad el framework basado en Q-Learning que hemos desarrollado, llamado “ Teseo Q-Learning Framework ”. En una segunda parte describimos las herramientas desarrolladas y/o empleado en el diseño de los experimentos y análisis de datos.
En el capítulo 5, debido a la complejidad de ejecutar multitud de pruebas en StarCraft , vamos a realizar experimentos en un dominio lógico desarrollado por nosotros. En estos experimentos vamos a calcular los parámetros del algoritmo más eficientes, además de hacer pruebas con distintas estrategias de recompensa.
Resolución de laberintos en StarCraft empleando aprendizaje por refuerzo
4 Trabajo de fin de grado 2014/
En el capítulo 6 realizamos experimentos con los valores obtenidos en el capítulo anterior, pero esta vez en el dominio de StarCraft. Analizamos los resultados obtenidos y los comparamos con los resultados del dominio simplificado del capítulo anterior.
En el capítulo 7 y 8 explicamos las conclusiones finales de nuestro estudio y proponemos posibles líneas de trabajo futuro. En el capítulo 7 en castellano y en el 8 en inglés.
Por último, en el capítulo 9 explicamos las diferentes aportaciones individuales de los componentes del equipo al proyecto.
Para el desarrollo de este proyecto hemos seguido una organización descentralizada, repartiendo la toma de decisiones a todos los componentes del grupo. Esto ha sido posible por el pequeño tamaño del grupo, y a la realización de reuniones semanales con el tutor. Durante estas reuniones exponíamos el trabajo realizado durante la semana y comentábamos los problemas encontrados, así como posibles soluciones para los mismos. Por último, planteábamos los objetivos para la próxima semana. Todas las tareas que se debían realizar fueron anotadas en la herramienta de gestión colaborativa Trello [5], donde íbamos organizando las tareas en: hechas, haciendo y pendientes de hacer.
Para el desarrollo del código hemos utilizado GitHub [2] como repositorio, empleando la herramienta de control de versiones Git [6]. Hemos mantenido una rama master , y diversas ramas de desarrollo para modificaciones. Cabe destacar que hemos basado el desarrollo en torno a pequeños prototipos de menor a mayor complejidad, pudiéndonos enfrentar a tecnologías que no conocíamos.
Para la documentación hemos usado Google Docs [7] y Drive [8] para poder compartir y editar de manera colaborativa.