Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Resolución de laberintos, Apuntes de Programación Informática

Explicación sobre la lógica de programación para la resolución de laberintos

Tipo: Apuntes

2017/2018

Subido el 08/01/2018

katherine-garcia
katherine-garcia 🇪🇨

1 documento

1 / 125

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Resolución de laberintos en StarCraft
empleando aprendizaje por refuerzo
Realizado por:
Juan Deltell Mendicute
Alberto Lorente Sánchez
Jesús Martínez Dotor
Trabajo de fin de grado del Grado en Ingeniería del Software
Facultad de Informática
Universidad Complutense de Madrid
Curso 2014/2015
Director:
Antonio Sánchez Ruiz-Granados
Departamento de Ingeniería de Software e Inteligencia Artificial
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Vista previa parcial del texto

¡Descarga Resolución de laberintos y más Apuntes en PDF de Programación Informática solo en Docsity!

Resolución de laberintos en StarCraft

empleando aprendizaje por refuerzo

Realizado por:

Juan Deltell Mendicute

Alberto Lorente Sánchez

Jesús Martínez Dotor

Trabajo de fin de grado del Grado en Ingeniería del Software

Facultad de Informática

Universidad Complutense de Madrid

Curso 2014/

Director:

Antonio Sánchez Ruiz-Granados

Departamento de Ingeniería de Software e Inteligencia Artificial

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.

VII

Índice

Índice de figuras ..................................................................................................... XI Resumen ................................................................................................................ XIII

VIII

XI

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

1.1 Motivació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.

1.3 Estructura del documento

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.

1.4 Organización del grupo de trabajo

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.