QLearning - Aprendizaje por refuerzo
Bárbara Cervantes 1161223
Gerardo Basurto 1013754
Félix Horta 1162183
Descripción del medio ambiente
Un "ghost" desea explorar un ambiente desconocido en busqueda de enemigos. Los enemigos se encuentran dispersos en el ambiente de forma no uniforme. El heroe se encarga de explorar aleatoriamente el ambiente aprendiendo de las batallas. A través de la experiencia aprende a correr y cuando confrontar una batalla para salir victorioso. El ambiente considera el estado actual del heroe y el estado actual de su enemigo justo al comenzar una batalla.
Descripción de la actividad que aprenderá el agente
El heroe ( agente ) debe ser capaz de reconocer las batallas que puede ganar. Asi como el momento en el cual retirarse de una batalla. Su misión es cazar enemigos, no obstante para hacer su misión debe permanecer con vida. El agente en consecuencia, aprende a tomar las acciones adecuadas dependiendo al estado actual de la batalla. El agente posee dos acciones :
- Atacar ( confrontar al enemigo )
- Huir ( dejar la batalla y regresar al punto seguro del mapa )
Descripción detallada de los patrones
Un patrón está formado de la siguiente manera:
{ EstadoHeroe, EstadoEnemigo } -> Acción
Donde:
EstadoHeroe. Clasifica el estado del heroe dependiendo a su salud actual. Puesto que su salud consiste en valores continuos al inicio de la partida se generan randos para determinar y catalogar en que estado se encuentra. Su salud puede estar:
- Alta (0)
- Media (1)
- Baja (2)
- Muerto (3)
EstadoEnemigo. De la misma manera que el estado heroe clasifica el estado del enemigo en base a su salud en dicho instante.
Q-Learning. Diseño del Ambiente.
Para realizar aprendizaje por refuerzo utilizando Q-Learning se definió en principio la matriz de estados posibles en el ambiente. La matriz del ambiente es la siguiente:
mAmbient[0].initState(QLearning::high,QLearning::high);
mAmbient[1].initState(QLearning::high,QLearning::low);
mAmbient[2].initState(QLearning::high,QLearning::normal);
mAmbient[3].initState(QLearning::high,QLearning::dead);
mAmbient[4].initState(QLearning::normal,QLearning::high);
mAmbient[5].initState(QLearning::normal,QLearning::low);
mAmbient[6].initState(QLearning::normal,QLearning::normal);
mAmbient[7].initState(QLearning::normal,QLearning::dead);
mAmbient[8].initState(QLearning::low,QLearning::high);
mAmbient[9].initState(QLearning::low,QLearning::low);
mAmbient[10].initState(QLearning::low,QLearning::normal);
mAmbient[11].initState(QLearning::low,QLearning::dead);
mAmbient[12].initState(QLearning::dead,QLearning::high);
mAmbient[13].initState(QLearning::dead,QLearning::low);
mAmbient[14].initState(QLearning::dead,QLearning::normal);
mAmbient[15].initState(QLearning::dead,QLearning::dead);
Donde:
- Se poseen 16 estados, que es la combinación de 4x4 de acuerdo a los 4 posibles estados que pueden tomar las unidades.
- Dado el arreglo estático de estados en el ambiente, es posible dejar a la aplicación correr y solo realizar una nueva acción cuando se detecta un cambio en el estado del ambiente. Este ultimo punto reduce considerablemente el poder computacional necesario. Otorgando un enfoque basado en eventos, detectando unicamente cuando el estado del ambiente ha cambiado; descartando asimismo toda la información inecesaria para el aprendizaje.
Matriz de recompensa.
Se diseño una matriz de recompensa para cada estados de la siguiente forma:
mRewards[0] = 0; // punish this state
mRewards[1] = 10;
mRewards[2] = 12;
mRewards[3] = 100; // High - Dead
mRewards[4] = 20;
mRewards[5] = 10;
mRewards[6] = 10;
mRewards[7] = 85; // Normal - Dead
mRewards[8] = 30; // low - h
mRewards[9] = 20; // low - med
mRewards[10] = 10; // low - low
mRewards[11] = 70; // Low - Dead
mRewards[12] = 0; // punished states
mRewards[13] = 0;
mRewards[14] = 0;
mRewards[15] = 0;
Donde:
- Cada entrada define la recompensa por el estado correspondiente. Todos los estados poseen cierto grado de recompensa excepto los estados negativos.
- Para castigar los estados en los cuales el agente muere, se les otorgó una recompensa de 0. Los estados con mayor recompensa son aquellos en los que el jugador sobrevive y derrota a su enemigo.
- Estados intermedios obtienen una ligera recompensa para incentivar el "huir" de partidas peligrosas, asegurando la sobreviviencia del agente.
Conclusiones
El entrenamiento funciona adecuadamente para el agente. El agente es capaz de reconocer distintos tipos de enemigos y generar entrenamientos especificos para cada nuevo tipo de enemigo con el cual se le presenta. Asimismo conforme explora el ambiente y las distintas modificaciones sobre las cuales puede darse una batalla comienza a generar un robusto entrenamiento que le permite sobrevivir una gran mayoria de las batallas enfrentadas.
Cabe señalar que curiosamente, el agente aprende rapidamente que para "permanecer vivo" cuando tiene poca salud es conveniente no combatir en lo absoluto. Con esto, el agente huye de todas las batallas cuando sabe que seguramente fallecera de llevar la batalla a cabo. Por esta razón, llega un momento en el cual si el agente esta a punto de fallecer comienza a huir de todas las batallas.
Mediante la implementación de QLearning en starcraft demostramos que es posible implementar un algoritmo de aprendizaje en tiempo real para un videojuego de estrategia en donde un agente es capaz de sensar el medio y aprender de las decisiones tomadas en el pasado. Esto abre una interesante puerta para nuevas aplicaciones de aprendizaje por refuerzo. Concluimos que aprendizaje por refuerzo es una muy poderosa herramienta que puede ser utilizada para una amplia gama de aplicaciones distintas, las posibilidades son tan grandes como nuestra capacidad de abstraer el aprendizaje y modelar nuevos ambientes sobre los cuales se puede realizar.
Videos
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.