Blog para documentar el trabajo de programación realizado en la clase de Aprendizaje Automático del Tec de Monterrey, Campus Estado de México. Enero-Mayo 2010.

Wednesday, February 24, 2010

BogoTron

Aprendizaje Automático
Grupo 1
Alejandro Morales A01161376
Jonathan Valle A01161110
Rafael Santos A01161734
24 de febrero de 2010
Equipo 1: ./42
Actividad 2
Ambiente: BogoTron.
Breve descripción del medio ambiente
Tron es un juego de video basado en la película "Tron" (1982) muy parecido al juego "Snake". En Tron, se tiene un mapa y dos jugadores. Mientras los jugadores se mueven en el mapa, van dejando "estelas" que se convierten en paredes por lo que un jugador no puede volver a pasar por ningún lugar que cualquiera de los dos haya pasado con anterioridad. Conforme avanza el juego, el espacio de movilidad se reduce hasta que inevitablemente algún jugador choca con una pared.
El juego termina cuando uno o ambos jugadores chocan con alguna pared o los jugadores colisionan entre sí.

Para nuestro caso el ambiente es un mapa que puede variar de tamaño, las motos son representadas por un 1 (el otro jugador) y un 2 (nuestro bot), y las paredes y rastros de los jugadores se representan por un #.
Acción que va a aprender el agente
El agente debe aprender a jugar Tron y a generar estrategias que le permitan vencer a su oponente o que le permitan vivir por el mayor número de turnos posibles, por ejemplo, si hay dos caminos, debe aprender a elegir el que le dé un mayor espacio de movilidad para tener una mejor probabilidad de vivir.
Solución planteada al problema utilizando LMS
Selección de la experiencia de aprendizaje
La experiencia de aprendizaje que tenemos es que nuesto bot jugará contra los bots que vienen de ejemplo en el starter pack más un bot similar a él denominado dummy, también se le pondrá a jugar en los diversos mapas que vienen por default con el paquete, de esta forma recuperará datos valiosos de la forma de jugar de los diversos bots y de los diferentes mapas. Desafortunadamente no tenemos mas bots enemigos par ponerlo a jugar contra ellos y obtener una mucho mejor retroalimentación, ya que, dicho sea de paso, los bots de ejemplo son bastante tontos.
Selección de la función objetivo
Debido a que también se juega sobre un tablero, la fución objetivo es muy similar a las vistas en clase:
V: B -> R
en donde:
B es el estado del tablero
R los reales

V(b) se define como:
Si b es un estado final y nuestro bot ha ganado (Player Two Wins!): V(b) = 100
Si b es un estado final y nuestro bot ha perdido (Player One Wins!): V(b) = -100
Si b es un estado final y existe algún empate(Players collided. Draw! o Both players crashed. Draw!): V(b) = 0
Selección de la representación de la función objetivo
La retroalimentación que tenemos es indirecta, pues solo es posible determinar si se ha ganado o perdido hasta el final del juego.
Para representar la función objetivo se utilizará una representación polinomial.

evaluation=w0+w1*variables[1]+w2*variables[2]+w3*variables[3]+w4*variables[4]+w5*
variables[5]+w6*variables[6]+w7*variables[7]+w8*variables[8]

Donde wi son los pesos que se tiene asignados y en el arreglos variables se encuentran las variables que se mencionaran en el siguiente punto.
Selección del algoritmo de aproximación – LMS para este caso.
Selección de valores iniciales para los pesos y constante de aprendizaje:

Los valores iniciales para todas las variables fue de 0.5
La constante de aprendizaje propuesta es de 0.
06, pues se considera qeu es un equilibrio

Para resolver este problema decidimos utilizar 8 variables, las cuales son las siguientes:

*x1. Es la distancia o que tan lejos se ecuentra el enemigo en mi dirección
*x2. Numero de espacios libres que hay enfrente de donde me estoy dirigiendo
*x3. Numero de espacios libres que hay a los lados del último espacio revisado
*x4. Si el otro jugador esta directamente enfrente de mi
*x5. El enemigo se encuentra en la diagonal izquierda de mi posición
*x6. El enemigo se ecnuentra en la diagonal derecha de mi posición
*x7. El otro jugador se encuentra dos espacios enfrente de mi
*x8. Número de posibles movimientos que puedo hacer sin morir desde mi siguiente movimiento


Describir los patrones utilizados para el aprendizaje (3 ejemplos):

Los patrones utilizados no son muy representativos si es que los escribirmos, aquí. Solo se pegará una parte.

Ejemplo 1:
Este es el ejemplo de un mapa en el cual los dos inician en el centro.
TrainingData([0,5,10,0,0,0,0,15], , TrainingData([0,5,10,0,0,0,0,15], , TrainingData([0,5,10,0,0,0,0,15], , TrainingData([1,5,9,0,0,0,0,15], , TrainingData([0,5,10,0,0,0,0,15], , TrainingData([0,5,10,0,0,0,0,15],
Cada uno de los valores representa el valor que regresan las x explicadas en el paso anterior, como podemos ver, la última x representada por la cantidad de movimientos posibles se mantiene en 15 porque el mapa está prácticamente vacio,
TrainingData([0,5,7,0,0,0,0,10], , TrainingData([0,5,10,0,0,0,0,9], ,
Los datos anteriores corresponden a los últimos estados, y podemos observar que la cantidad de movimientos posibles se ve reducido y que los espacios libres al lado mio han disminuido.
Conclusiones

Durante la programación de Bogotron nos podemos dar cuenta como funciona el LMS, pues efectivamente hay un cambio entre la primera vez que se corre y las posteriores. Algo muy importante e interesante es notar como se comporta el bot una vez que se le coloca en un mapa completamente nuevo, pues cuando hacemos esto tiende a cometer muchas tonterias, pues efectivamente, al estar en una situación completamente nueva no tiene ni idea de que hacer.
Video:




No comments:

Post a Comment

Note: Only a member of this blog may post a comment.