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.

Tuesday, May 11, 2010

Biokterii Reinforcement Learning

Breve descripción del medio ambiente

Una vez más nos encontramos en el ambiente que hemos denominado como Biokterii. El medio ambiente consiste en el interior de un cuerpo de un ser vivo, donde un virus debe aprender a realizar ciertas acciones con las células que irán apareciendo dependiendo del color de las mismas. Existen tres tipos de células, las de color rojo son consideradas como objetivos o Target, las células de color azul son consideradas comida o Food y por último las células de color verde son las equivalentes a los glóbulos blancos y son consideradas enemigos o Enemy.

Descripción detallada de la actividad o acción que va a aprender tu agente

El agente aprenderá, utilizando aprendizaje por refuerzo, a realizar ciertas acciones dependiendo del tipo de célula que aparezca. El virus cuenta con tres acciones, atacar, comer y defenderse y además cuenta con cuatro estados dependiendo su nivel de vida: alto, medio, bajo y muerto. Cuando el virus se encuentra en el estado alto puede atacar o comer, cuando se encuentra en el estado medio puede comer o defenderse, cuando esta en el estado bajo puede comer o defenderse y cuando esta muerto no puede realizar ninguna acción. Lo ideal es el que el virus aprenda a tomar las decisiones correctas que le permitan sobrevivir en el ambiente la mayor cantidad de tiempo posible y destruyendo la mayor cantidad posible de células.

Selección de la experiencia de aprendizaje
El virus aprenderá a realizar ciertas acciones (atacar, comer, defenderse) dependiendo de su estado. El objetivo es que permanezca vivo y destruya la mayor cantidad de células posibles.
Las acciones y los estados posibles son modelados con la siguiente tabla.
Estado
Acción
A
Nuevo estado
Alto Atacar Rojo Alto
Alto Comer Rojo Medio
Medio Comer Rojo Medio
Medio Defender Rojo Bajo
Bajo Comer Rojo Bajo
Bajo Defender Rojo Bajo
Alto Atacar Azul Bajo
Alto Comer Azul Alto
Medio Comer Azul Alto
Medio Defender Azul Medio
Bajo Comer Azul Medio
Bajo Defender Azul X
Alto Atacar Verde Medio
Alto Comer Verde Bajo
Medio Comer Verde Bajo
Medio Defender Verde Alto
Bajo Comer Verde X
Bajo Defender Verde Medio


Selección de las recompensas
La forma resumida de explicar las recompensas es que todas las recompensas son 0 excepto cuando estando en un:

* Estado Alto ataca una célula roja = +100

* Estado Alto come una célula azul = +50
* Estado Medio come una célula azul = +100
* Estado Medio se defiende de una célula verde = +50
* Estado Bajo se defiende de una célula azul = -100
* Estado Bajo se come una célula verde = -100


Posibles acciones de tu agente en el medio
Las acciones del virus dependen del estado en que se encuentre, definiéndolo de una manera más formal, son las siguientes:
V(Alto) = {atacar, comer}
V(Medio) = {comer, defenderse}
V(Bajo) = {comer, defenderse}
V(Muerto) = {}

Estados posibles que puede sensar tu agente en el medio (descripción de los estados)
El virus puede saber el color de la célula que se encuentra en el ambiente y su cantidad de vida. Todas las células se pueden comer, atacar o defender, sin embargo los resultados varían dependiendo del color de la misma.
Estados: Alto, Medio, Bajo.
Alto. En este estado el virus se encuentra a su máxima capacidad, puede realizar las accionede de atacar o comer.
Medio. Es cuando el virus ha sufrido algún daño, puede realizar las acciones de comer o defenderse.
Bajo. Cuando el virus ha sufrido serios daños, sólo puede comer o defenderse, pero se encuentra a un paso de la muerte.
Muerte (X). Es cuando el virus ya pasó a mejor vida por tomar malas decisiones.
Descripción de la estrategia de exploración/explotación para el aprendizaje.
Para lograr un equilibrio entre la exploración y explotación se está siguiendo una política implementada por nosotros, dicha política consiste en usar el nivel de explotación de acuerdo al porcentaje que se encuentra la tabla Q. Es decir, al principio, cuando la tabla Q está vacía, siempre se elige una acción al azar, después cuando la tabla Q se encuentra justo medio llene, existe el 50% de probabilidad de que elija una acción al azar o una dictada por el uso de las recompensas de la tabla Q. Cuando la tabla se encuentra completamente llena siempre elige una acción basada en lo que aprendió.

Ejemplo de tres estados distintos del medio ambiente, con las respectivas acciones que pueden ser realizadas desde dicho estado y las recompensas que se le otorgan al agente al tomar las acciones.

Ejemplo 1
El virus se encuentra en estado Alto y aparece una célula Roja (las células rojas son definidas en nuestro ambiente como objetivos o Target). Al encontrarse en estado alto sólo puede realizar las acciones de atacar o comer, cada acción depende del color de la célula con la que va a interactuar. Si al principio la tabla Q se encuentra vacia se realizará una acción al azar, sin embargo lo ideal es que ataque a la célula roja pues es la única acción que le da una recompensa inmediata de 100 puntos; la otra acción posible que es comer la célula roja no le da absolutamente ninguna recompensa.


Ejemplo 2
Vamos a suponer que nuestro virus se encuentra en un estado Medio y aparece una célula Azul (las células azules son consideradas como comida o Food). Al encontrarse en un estado Medio el virus puede comer o defenderse, en este caso, el virus recibe una recompensa de 100 puntos si es que se come la célula azul y ninguna recompensa si es que se defiende de el.


Ejemplo 3
Para este caso el virus se encuentra en un estado Bajo y aparece una célula Verde (las células verdes son los glóbulos blancos o los Enemy). Al econtrarse en estado Bajo el virus puede comer o defenderse. Si el virus decide defenderse no recibe ningún punto, pero si el virus decide comerse a la célula verde recibirá una penalización de -100 puntos.


Explicar cuándo es que tu agente va aprendiendo y cuándo utiliza lo aprendido para tomar decisiones en el medio.
El agente va aprendiendo cada episodio, (dicho episodio se termina cada que el virus realiza una acción y en este momento es cuando se le da un refuerzo) utilizando el algoritmo de Q learning y llenando la tabla correspondiente, después de varias iteraciones el virus es capaz de tomar las decisiones correctas para poder sobrevivir en el ambiente dependiendo de la célula a la que se enfrenta. Como se menciono anteriormente se implementó una politica, la cual permite que conforme se va llenando la tabla Q mayor sea la probabilidad de elegir una acción basado en lo que se ha aprendido. Como se explicó anteriormente, se trata de una relación directa entre el porcentaje de celdas llenas y la probabilidad de que se siga lo aprendido, al estar vacia la tabla se elegirán siempre acciones al azar, al estar el 50% llena habrá 50% de probabilidad de que se elija una acción al azar o de que se siga lo aprendido y cuando la tabla se encuentra llena la probabilidad de que se seleccione una acción basada en lo aprendido es de 1.

Conclusiones después de la programación

Este ha sido uno de los problemas más difíciles a los que nos hemos enfrentado en este curso, sobre todo en la parte del planteamiento del problema, pues para evitar que fuera trivial queriamos implementar acciones y estados que elevaban exponencialmente la complejidad del mismo. Al final y después de dos días de plantearlo logramos llegar a una solución que no era del todo sencilla y que lograba un aceptable grado de dificultad. Tambien dicho problema se nos complicó un poco debido a que sólo enconntrabamos ejemplos de laberintos por todas partes y tal vez sentimos que nos falto estudiar otros ejemplos en clase.

Video

Monday, May 10, 2010

QLearning - Equipo 3

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














Thursday, May 6, 2010

Q-Learning, Aprendizaje por Refuerzo

Medio Ambiente:
Nuestro medio ambiente será como un tipo calabozo con forma de laberinto (el cuál será dinámico), constará de una entrada y dos tipos de agentes principales: buscador (agente verde) y guardián (agente rojo). También dentro del calabozo se encuentra un objeto que el buscador debe obtener (cuadro azul obscuro).

El objetivo del buscador será evitar a los guardias el mayor tiempo posible y a la vez, donde los callejones sin salida influirán a veces si es atrapado o no. El buscador debe encontrar el objetivo para de esta manera “ganar”.
En cuanto el agente buscador es atrapado por alguno de los guardianes, este regresa al inicio. También al encontrar el objetivo el buscador regresara a la entrada.

Actividad que aprende:
En este caso el agente aprenderá a moverse dentro del medio ambiente intentando acercarse lo más posible al objetivo.

Experiencia de Aprendizaje:
En este caso se utilizó el algoritmo de Q-Learning para que el agente buscador aprenda a encontrar su camino al objetivo (cuadro azul obscuro). El calabozo está situado en un cuadro de 40x40 donde el agente y los guardianes solo se mueven en los números impares, esto es coordenadas impares. Dado al tamaño el aprendizaje puede ser muy lento de acuerdo a los episodios seleccionados. Para esto se utiliza una variable entera, si esta es 1 quiere decir que el buscador obtuvo el objetivo, si es 2, significa que el buscador fue atrapado por uno de los guardias. Esto marca los episodios del aprendizaje.




Recompensas:
Las recompensas elegidas fueron las siguientes:
Si el movimiento elegido deja al buscador en la posición del objetivo, su recompensa es 100.
Si el movimiento elegido deja al buscador en la posición de un guardia, su recompensa es de -100.
Si no es ninguno de los casos anteriores se utiliza la fórmula para el cálculo de las recompensas:
Q‘(s,a) <- r + gamma*max(Q (delta(s,a), a’))

Posibles acciones:
Las acciones están decididas de acuerdo a la posición actual del buscador. Para esto se creó una función que toma como argumento la posición (x, y) actual y determina de acuerdo a los choques que pueda tener las posibles direcciones que puede tomar el buscador. Estas acciones son almacenadas como números del 1 al 4, donde cada número representa una de las 4 direcciones que puede tomar para moverse, restringido por las paredes.

Estados:
Los estados están definidos por la posición actual del personaje, (x, y). Por lo que cada coordenada posible es un estado diferente. Cada par de coordenadas (x, y) están asignadas a un identificador, para facilitar la búsqueda de este estado.

Exploración:
A la constante gamma se le dio un valor de 0.6 para los cálculos, por lo que se lleva una exploración, sin embargo el espacio de estados es tan grande que muchas veces simplemente se la pasa explorando si no ha llegado al objetivo varias veces, o si el objetivo está muy lejos.

Ejemplos de estados:
Estado: 0 (21,21) (El estado inicial): En este caso hay paredes tanto arriba como abajo por lo que su acción es moverse a la izquierda o derecha.
Acción: 3, esto indica que se va a mover a la derecha.

Estado 10: (35, 15) Suponiendo que en este caso no hay paredes alrededor, puede decidir cualquier dirección.
Acciones posibles: [1, 2, 3, 4]
Acción tomada = 4, moverse a la izquierda.

Evaluación:
Para que el buscador se acerque al objetivo la mayoría de las veces, al asignar una recompensa de 100 al movimiento que lo llevo a tal estado, se utiliza una función para elegir un nuevo movimiento de acuerdo a las recompensas conocidas.
Si todas las recompensas son 0 para ese estado, entonces se toma una dirección aleatoria.
Si existe alguna que no es 0, entonces se toma la primera mayor recompensa (en caso de que haya múltiples con el mismo valor), es decir:
Acciones posibles: [1, 2. 3]
Recompensas:
1 -> 20
2-> 0
3-> 20

Movimiento/Acción tomada = 1.

Acciones posibles: [1, 2. 3]
Recompensas:
1 -> 0
2-> 0
3-> 0

Movimiento/Acción tomada = Movimiento aleatorio entre 1 y 3.

Acciones posibles: [1, 2. 3]
Recompensas:
1 -> -100
2-> 0
3-> 0

Movimiento/Acción tomada = 2.

Corridas:




Conclusiones:
Existen algunos pequeños errores, que más que nada se deben al medio ambiente y la velocidad con la que se actualiza. A veces interfiriendo por completo en el programa ya que le da una evaluación al encontrar el objetivo y el buscador deja de moverse, o arrojando números completamente exagerados, por cuestiones de la velocidad a la que se actualizan los datos.
En cuanto a la programación del algoritmo se puede observar en la segunda imagen, que al actualizar las recompensas se puede ver que si va aprendiendo que acción es la que debe tomar en ese caso. Sin embargo fue un problema el tener que tratar con un espacio de estados tan grande y a la vez con las restricciones de las paredes. Aunque si es un poco tedioso toda la exploración que hace a veces, sin embargo fue un algoritmo interesante de implementar en este ambiente.


Friday, April 30, 2010

Medio Ambiente:
Nuestro medio ambiente será como un tipo calabozo con forma de laberinto (el cuál será dinámico), constará de una entrada y dos tipos de agentes principales: buscador y guardián

El objetivo del buscador será evitar a los guardias el mayor tiempo posible y a la vez, donde los callejones sin salida influirán a veces si es atrapado o no.
En cuanto el agente buscador es atrapado por alguno de los guardianes, este regresa al inicio.

Actividad que aprende:
En este caso el agente aprenderá a moverse dentro del medio ambiente intentando no ser atrapado por los guardianes. Para esto se utiliza una red neuronal que se entrena.

Patrones de Entrada:
Los patrones de entrada en este caso, se generan mediante iteraciones.
Los patrones cuentan con los siguientes datos:
a) [0, 1] Un valor booleano de si hay o no centinelas en su rango de visión.
b) [1 ,2, 3, 4] El valor de la dirección tomada para el movimiento.
c) [0, 1] Un valor booleano que determina si encontró un callejón sin salida o no en su camino.
d) [0, 1] Una evaluación de si la acción fue buena o mala.
Se escogieron estos valores ya que son los más importantes en este ambiente para poder moverse en el medio y cumplir la meta que se quiere aprender.



Patrones de Salida:
La salida que se genera es un arreglo de 4 atributos cuyo valor es 0 o 1, de tal forma que el siguiente movimiento del buscador será decidido por el índice o “bandera” que este prendida en el patrón de salida.
Ejemplo de patrón de salida:
[0, 0, 1, 0] -> El cual indicaría que el movimiento deberá tomar un valor de 3 (“Muévete a la derecha”)

Red Neuronal:
En este caso, dado que lo que se quiere evaluar es algo complejo, se decidió utilizar una red neuronal multicapas utilizando un algoritmo de Backpropagation.

La red cuenta con 3 capas
• Entrada: Esta capa cuenta con 4 neuronas, de las cuales cada una toma uno de los atributos de los patrones de entrada.
• Secreta: Esta capa consta de 2 neuronas, se decidió de esta forma para facilitar un poco la implementación y reducir un poco los cálculos.
• Salida: Esta capa cuenta con 4 neuronas, para las cuales cada una sirve como bandera para elegir el siguiente movimiento, dependiendo de que neurona se active es el movimiento elegido.
En la red se utiliza un factor de aprendizaje de 0.3 ya que es un valor pequeño y un tanto “estándar”: ya que queremos que el aprendizaje sea preciso en cuanto a las salidas.
En este caso no se utilizo momento.
El número de iteraciones elegido para entrenar a la red fue de 1500 ya que al ser movimientos aleatorios al principio, es de interés que tenga una exploración del ambiente bastante grande para poder hacer la red neuronal más precisa


Ejemplos de corridas:


En la imagen se puede observar del lado izquierdo las entradas que va generando, y del lado derecho la salida que se debería dar, pero dado a que solo se está entrenando apenas la red, los valores de salida no son realmente acertados. Si se ven por ejemplo la primera línea:
Patrón de entrada: [0, 0, 4, 1]
Salida: [0, 0, 1, 0] Mientras que la salida esperada sería [0, 0, 0, 1]




Después de que ha terminado las iteraciones de entrenamiento podemos ver, que de acuerdo al patrón de entrada, ahora si nos envía la salida esperada:
Ejemplo de la primera línea:
Entrada: [0, 0, 4, 1]
Valor esperado: [0, 0, 0, 1]

Como se observa en la imagen, el valor obtenido es igual al esperado, por lo que la red aprendió efectivamente.

Conclusiones:
Las redes neuronales son bastante útiles para problemas como el presentado ya que sus cálculos y división en las salidas nos permite una evaluación y un aprendizaje más preciso asignando una dirección a cada salida. También es importante notar que la velocidad de los cálculos es importante, y en este caso es lo suficientemente rápida para un programa que se actualiza en tiempo real, lo que hace una red neuronal muy viable para este tipo de problemas.
La parte más difícil para este proyecto se podría considerar la codificación de entradas y salidas del medio ambiente, ya que todos los cálculos internos son automáticos del algoritmo.

Biokterii Neural

Breve descripción del medio ambiente.
El medio consiste en el interior de un cuerpo de un ser vivo en el que un virus debe aprender a reconocer células a partir de la observación de sus características. Existen tres zonas diferentes de clasificación de células, unas de ellas son comestibles o de tipo Food, otras son aquellas que pueden atacar al virus o Enemy, por último nos encontramos con las células objetivo o de tipo Target. El virus deberá aprender, después de una muestra de 15 células, a determinar el tipo de las células que irán apareciendo, actuar en consecuencia y así poder sobrevivir dentro del cuerpo del ser vivo.

Descripción detallada de la actividad o acción que va a aprender tu agente.
El virus debe aprender a reconocer las células que irá encontrando dentro del cuerpo, para esto se basa en sus características físicas, es decir, su color, su forma, la dirección en la que rota, la figura que tiene la célula en su interior y el color de esta figura interna. Como ya se mencionó en un principio, se cuenta con 15 células que formarán parte del entrenamiento, que el usuario puede acomodar en cualquiera de las tres categorías: Target, Enemy o Food. Es muy importante mencionar que dependiendo como el usuario haga esta clasificación, será la forma en que la neurona aprenderá a clasificar las diferentes células que irán apareciendo en el ambiente, ya que el usuario crea interactivamente el training set.

Solución planteada al problema utilizando Redes Neuronales. Describe con detalle cada elemento del planteamiento:
Cada célula tiene 5 propiedades: Forma exterior color exterior, forma y color interior y rotación. De cada una se tiene un arreglo de bits que indican el tipo de característica que representa a cada célula, que se codifica concatenando los 5 arreglos de bits en un arreglo más grande que los contiene a todos. Cada bit alimenta a un nodo diferente en la capa de entrada. Dependiendo de la clasificación del usuario, es la forma en la que se entrena la red.

Se utilizó la biblioteca PyBrain para la construcción de las redes neuronales.

i. Patrones de aprendizaje para alimentar a la red.

OuterShape: ["Simple","CircleStroke","CircleFill","Square","DoubleSquare"]
InnerShape: ["None","CircleStroke","CircleFill","SquareStroke","SquareFill"]
OuterColor: ["Red","Green","Blue"]
InnerColor: ["Red", "Green", "Blue", "Black"]
Rotation: ["Left", "Right"]

OuterShape= [0,0,0,0,1]
InnerShape= [0,0,0,0,1]
OuterColor= [0,1,0]
InnerColor= [1,0,0,0]
Rotation= [1,0]

Clasificación (elegida por el usuario): ["Target","Enemy","Food"]
Clasificación = [0,1,0]

---------------------------------------------------------------------------------
Patrón de aprendizaje: ([0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,0,1,0] , [0,1,0])
---------------------------------------------------------------------------------

Se alimentarán tantos patrones como células iniciales existan en el medio ambiente, seleccionando el 25% de ellas para pruebas durante el entrenamiento.

ii. Codificación de la salida de la red.

La red devuelve un arreglo de 3 datos que representan la probabilidad de ser clasificado como cada uno de los posibles tipos: objetivo enemigo y comida.

Se elige el tipo que tenga el número más alto de los tres para clasificar.

Ejemplo, la salida:

[0.0032896,0.2387263,0.87382436]

Clasifica a la célula como "Comida" pues el elemento más alto es el tercero, que representa la posibilidad de ser "Comida".

iii. Tipo de red neuronal a ser utilizada.

La red neuronal está formada por 3 capas, la primera es una capa lineal, la segunda sigmoidal y la tercera lineal, de tal forma que existe una conexión completa de los nodos entre cada capa llevando de los 19 parámetros de entrada originales a las 3 salidas deseadas.

iv. Numero de capas (entrada, intermedias, salida) y número de neuronas en cada capa.

v. Parámetros de la red (tasa de aprendizaje, momento, iteraciones).

Se utilizó una tasa de aprendizaje de 0.3 y un momento de 0.1.

Se realizan iteraciones hasta que converge la red o hasta que se cumplan 1000 iteraciones.

Video

Conclusiones
Una de las características observadas a lo largo de la programación del problema fue la importancia que tiene el training set para la solución del mismo. En particular, las redes neuronales requieren de mucho entrenamiento, lo cual implica tener un training set muy grande y diverso. Si no existiera suficiente entrenamiento la red sería muy suceptible al ruido, por lo que funcionan mejor learning rates más bajos, de tal forma que aprenda detalles más finos del training set. La red neuronal, sin embargo, requiere mucho más tiempo de entrenamiento que otros algoritmos como el ID3, por lo que su implementación no sería adecuada para generarse en un ambiente que requiera de cambios en tiempo real.

Actividad: Redes Neuronales

Descripción del medio ambiente

En una playa, están naciendo varias tortugas, y para sobrevivir, deben de llegar al mar lo más rápido posible, sin embargo, puede que haya depredadores cerca queriendo alimentarse de ellas, lo que las hace más vulnerables. Las tortugas nacen a cierta distancia del mar, además de nacer con cierta velocidad propia y cierta resistencia a los ataques de los depredadores.

Descripción de la actividad que aprenderá el agente

Dadas las características de cada tortuga (su distancia al mar, si hay o no depredador cerca, su velocidad y su resistencia), el agente debe de decidir si una tortuga se salva sin ayuda de nadie, si es necesaria la intervención humana para salvarla o si es imposible salvarla.

Descripción detallada de los patrones

Un patrón está formado de la siguiente manera:

{ Distancia, Depredador, Velocidad, Resistencia} ¿Se salva?

Donde:

Distancia mide si se encuentra entre 0-5 metros, 5-10 metros o más de 10 metros. Se eligió así para evitar que los patrones fueran continuos y se eligieron esos rangos porque creemos que son distancias que pueden hacer diferencia entre si la tortuga vive o no.

Depredador mide solamente si hay o no un depredador cerca de la tortuga, donde cerca se define dentro del área de sobrevivencia de la tortuga, que son de alrededor de 5 metros a la redonda. Nuevamente, creemos que este radio es el que puede hacer la diferencia entre si la tortuga sobrevive o no.

Velocidad, mide qué tan rápido se mueve la tortuga, y cae dentro de: Lento, Normal o Rápido.

Resistencia, mide que tanto la tortuga puede resistir a los ataques de los depredadores, y esta puede ser Alta, Media y Baja. Estos últimos dos atributos se discretizaron para poder trabajar con ellos y se escogieron ya que una tortuga rápida puede llegar al mar pese a estar lejos o viceversa, y ocurre similar con la resistencia.
Cada uno de los valores de entrada, están codificados en 0.1, 0.5 ó 0.9 según sea bajo, mediano o alto.

¿Se salva? Es un valor ternario (también entre 0.1,0.5 o 0.9) que identifica si la tortuga se salva sola, si hay que salvarla o si no hay forma alguna de salvarla.

Red Neuronal

Para poder lograr que la red aprendiese cuando y cuando no salvar a la tortuga, programamos una red neuronal estocástica con valores decimales entre 0 y 1.

Existen cinco valores de entrada, la primera corresponde al valor 1.0 (para pasar el threshold) y las siguientes cuatro corresponden a los cuatro valores de entrada de la red, organizados, como ya se explicó entre 0.1, 0.5 y 0.9.

Se cuenta con una capa oculta de tres neuronas ya que es el valor que se recomienda para redes pequeñas.

De salida sólo se tiene una neurona, que identifica de igual forma 0.1, 0.5 o 0.9 según sea la salida. No fue necesario poner tres neuronas cada una para identificar un tipo de clase ya que sí logró clasificar los ejemplos con una sola neurona.

Para entrenar la red, se utilizó una tasa de aprendizaje de 0.35, ya que un valor más alto causaba que los ejemplos de validación se alejaran más del resultado, lo cual atribuimos al overfitting, y un valor más pequeño hacía demasiado tardada el aprendizaje.

No se utilizó ningún momento porque no fue necesario implementarse para lograr que la red clasificara correctamente los ejemplos de salida.Se utilizaron 15 ejemplos de entrenamiento y cinco ejemplos de validación, aunque para terminar el programa, se decidió que cuando el error en los ejemplos de entrenamiento fuera menor a 0.1, este se detuviera.

Los resultados con los ejemplos de validación son los siguientes:

Antes del entrenamiento

0.9 0.1 0.1 0.9 à Salida esperada: 0.1 à Salida del programa: 0.4973

0.1 0.1 0.9 0.5 à Salida esperada: 0.1 à Salida del programa: 0.4933

0.5 0.5 0.9 0.9 àSalida esperada: 0.5 à Salida del programa: 0.4976

0.9 0.5 0.1 0.1 à Salida esperada: 0.9 à Salida del programa: 0.4838

0.5 0.5 0.5 0.1 à Salida esperada: 0.5 à Salida del programa: 0.4943

Después del entrenamiento

0.9 0.1 0.1 0.9 à Salida esperada: 0.1 à Salida del programa: 0.1932

0.1 0.1 0.9 0.5 à Salida esperada: 0.1 à Salida del programa: 0.0587

0.5 0.5 0.9 0.9 àSalida esperada: 0.5 à Salida del programa: 0.3205

0.9 0.5 0.1 0.1 à Salida esperada: 0.9 à Salida del programa: 0.6738

0.5 0.5 0.5 0.1 à Salida esperada: 0.5 à Salida del programa: 0.5100

Tomando en cuenta que un valor pertenece a la clase siempre que el valor este entre 0.15 arriba o abajo del valor esperado, este clasifica correctamente, todos los patrones fueron clasificados.



Conclusiones

En conclusión, creemos que las redes neuronales son bastante difíciles de implementar, debido a que hay que estar probando con diferentes valores de capas intermedias, además de poner el número de neuronas correctas en cada capa, para lo cual, la única forma de saberlo es probarlo sobre la propia red. También hay que tener cuidado con la codificación de los datos de entrada y de los datos de salida, porque es posible que no llegue a generalizar si los valores de salida son muy cercanos.

Fuera de eso, fue muy entretenido generar la red e implementarla, aunque llegó a ser complejo por toda la cantidad de datos e información que hay que tomar en cuenta para lograr una correcta generalización.

Preferimos desarrollar una red neuronal a un algoritmo como ID3 ya que en ocasiones ID3 puede no tener un ejemplo para cierto patrón, en cambio una red tratará de dar el que más se acerque de acuerdo a los ejemplos de entrenamiento.

Thursday, April 8, 2010

Actividad de Programación 3: Algoritmo ID3

Medio Ambiente:
Nuestro medio ambiente será como un tipo calabozo con forma de laberinto (el cuál será dinámico), constará de una entrada y una salida Y tres tipos de agentes principales: buscador, guardián y espía. El agente buscador se encargará de buscar un objeto y huir hacia la salida, evitando lo más que pueda al agente guardián. El agente guardián se encargará de hacer rondas en el calabozo en diferentes zonas (mientras las va conociendo y aprendiendo) y en cuanto encuentre al agente buscador, seguirlo para capturarlo. El agente espía se encargará de ayudar al agente buscador para encontrar el objeto verdadero, indicándole dónde hay atajos e interfiriendo en las comunicaciones de los agentes guardianes (solo en el caso que exista más de un agente guardián). Puede que existan más buscadores y de ésta forma los agentes guardianes se confundirán.

En caso de que solo existiera una entrada, se tendría que conseguir el objeto único que podrá convertir la entrada en la salida, para esto, nuestro agente tendría que recordar el camino por el que vino, siempre tratando de evitar al agente guardia.

Existirán agentes guardias, los cuales estarán recorriendo todo el calabozo para conocer el terreno y estar haciendo guardia en algunas de las zonas del mismo. Dentro del calabozo existen diversos objetos, de los cuales hay uno que es el que le abrirá la puerta a la salida, pero hay objetos falsos, copias, que tratarán de confundir al agente buscador.

Actividad que aprende:
En este caso el agente aprenderá a moverse dentro del medio ambiente intentando no ser atrapado por los centinelas. Utilizando el algoritmo de ID3 este aprende en qué dirección moverse de acuerdo a la retroalimentación obtenida.



Patrones:
Los patrones de entrenamiento en este caso, se generan por 30 segundos a partir de que el programa corre. Los patrones cuentan con los siguientes datos:
a) [0, 1] Un valor booleano de si hay o no centinelas en su rango de visión.
b) [1 ,2, 3, 4] El valor de la dirección tomada para el movimiento.
c) [0, 1] Un valor booleano que determina si encontró un callejón sin salida o no en su camino.
d) [0, 1] Una evaluación de si la acción fue buena o mala.
Se escogieron estos valores ya que son los más importantes en este ambiente para poder moverse en el medio y cumplir la meta que se quiere aprender. Además de que son valores fáciles de evaluar para la utilización del algoritmo.

Los patrones se irán almacenando en un arreglo bidimensional.

Solución ID3:
i) Algoritmo utilizado:
a. ID3: Ya que fue interesante la implementación de este en el medio ambiente y porque es sencillo de comprender.
ii)
a. Aprendizaje: El número de patrones realmente no está definido ya que está delimitado por tiempo, en este caso se generan patrones, cada que el agente se mueve y que se repinta la pantalla durante 30 segundos. Terminando el lapso de 30 segundos el movimiento se determina de acuerdo al algoritmo.
b. Validación: En este caso no se utilizan patrones de validación ya que nosotros no tenemos control sobre el movimiento del agente, simplemente al ser movimientos aleatorios, el programa utiliza el árbol generado con los patrones de entrenamiento para ir evaluando paso por paso el movimiento del agente, en el caso de tener una retroalimentación buena sigue el camino, en caso de tener una retroalimentación mala, se mueve en dirección contraria.
c. Ejemplos:
iii) Este programa si funciona en tiempo real, ya que por eso se está corriendo por tiempo, durante un tiempo se entrena y todo lo que resta del tiempo está generando movimientos a partir de lo que aprendió con ID3 cada paso o movimiento que hace.
iv) No cuenta con overfitting ya que el movimiento del agente es aleatorio, entonces puede darse el caso de que muchos casos no estén considerados dentro del lapso de tiempo que se asignó para generar patrones de entrenamiento.
v) Mejorar el funcionamiento podría ser agregando más valores a los patrones de entrenamiento ya que en la forma que está ahorita sería una forma simple, pero en un ambiente más complicado podría llegar a no funcionar bien con tan pocos valores o patrones. También se podría aumentar el tiempo que genera patrones de entrenamiento.

Conclusiones:
Esta actividad nos ayudo a comprender mejor la forma en que se lleva a cabo la relación entre el árbol de decisiones generado por ID3 y el medio ambiente, llegando así a un aprendizaje. A la vez pudimos ver que no es un algoritmo muy complejo de programar, sino su dificultad está en adaptarse a un medio diferente por todas las variables que hay que tomar en cuenta, a la vez de que se deben decidir los patrones.
Probablemente la parte de la decisión de que valores utilizar para los patrones fue el más difícil ya que de esto dependía el funcionamiento completo del algoritmo.

Actividad ID3

Descripción del medio ambiente

En una playa, están naciendo varias tortugas, y para sobrevivir, deben de llegar al mar lo más rápido posible, sin embargo, puede que haya depredadores cerca queriendo alimentarse de ellas, lo que las hace más vulnerables. Las tortugas nacen a cierta distancia del mar, además de nacer con cierta velocidad propia y cierta resistencia a los ataques de los depredadores.

Descripción de la actividad que aprenderá el agente

Dadas las características de cada tortuga (su distancia al mar, si hay o no depredador cerca, su velocidad y su resistencia), el agente debe de decidir si una tortuga se salva sin ayuda de nadie, si es necesaria la intervención humana para salvarla o si es imposible salvarla.

Descripción detallada de los patrones

Un patrón está formado de la siguiente manera:

{ Distancia, Depredador, Velocidad, Resistencia} à ¿Se salva?

Donde:

Distancia mide si se encuentra entre 0-5 metros, 5-10 metros o más de 10 metros. Se eligió así para evitar que los patrones fueran continuos y se eligieron esos rangos porque creemos que son distancias que pueden hacer diferencia entre si la tortuga vive o no.

Depredador mide solamente si hay o no un depredador cerca de la tortuga, donde cerca se define dentro del área de sobrevivencia de la tortuga, que son de alrededor de 5 metros a la redonda. Nuevamente, creemos que este radio es el que puede hacer la diferencia entre si la tortuga sobrevive o no.

Velocidad, mide qué tan rápido se mueve la tortuga, y cae dentro de: Lento, Normal o Rápido.

Resistencia, mide que tanto la tortuga puede resistir a los ataques de los depredadores, y esta puede ser Alta, Media y Baja. Estos últimos dos atributos se discretizaron para poder trabajar con ellos y se escogieron ya que una tortuga rápida puede llegar al mar pese a estar lejos o viceversa, y ocurre similar con la resistencia.


Solución al problema

Elegimos utilizar ID3 porque es el que más se adapta a los patrones que creamos. Aunque utilizamos ciertos límites para no utilizar datos continuos, no utilizamos la poda del árbol que C4.5 ofrece, ya que consideramos el árbol generado no es tan grande como para necesitar la poda.

En cuanto a los patrones, debido a que sólo hay 54 patrones distintos para aprender, decidimos usar un conjunto de 20 patrones, 15 para aprendizaje y 5 para validación con el propósito de darle al programa una gran variedad de patrones distintos sin llegar a darle todos los existentes.

Ejemplos de patrones:

{5-10m, Hay depredador, Lento, Baja} à Muere

{0-5m, No hay depredador, Rápido, Alta} à Sobrevive solo

El programa es lo suficientemente rápido para ser utilizado en tiempo real, aunque debería de ser alimentado con datos reales obtenidos con la práctica y al momento de ser utilizado, que sea por alguien lo suficientemente rápido para crear los patrones.

Creemos que el programa no tiene overfitting porque no encontramos otro árbol que fuera más específico que el que nos dio el programa, además de que el porcentaje de patrones dados es considerablemente alto comparado con la totalidad.

El programa podría mejorarse si las diferentes posibilidades en las características fueran más específicas, de esa forma existirían más posibles patrones y el resultado podría ser más preciso.


Conclusiones

En conclusión, creemos que los programas de ID3 son buenos para clasificar patrones cuyas hipótesis pueden ser organizadas en forma de árbol, siempre y cuando no existan datos continuos. En cuanto a la programación, fue un poco más difícil que programas anteriores debido más que nada a la implementación dinámica del árbol.

Tuesday, April 6, 2010

Actividad de programación ID3 Biokterii

Breve descripción del medio ambiente.

El medio consiste una vez más en el interior de un cuerpo de un ser vivo (por tradición podemos decir que de un gato) en el que un virus debe aprender a reconocer a los diferentes tipos de células que existen dentro del dicho cuerpo. Existen tres tipos diferentes de células, unas de ellas son comestibles o de tipo Food, otras son aquellas que pueden atacar al virus o Enemy, por último nos encontramos con las células objetivo o de tipo Target. El virus deberá aprender, después de una muestra de 15 células, a determinar el tipo de las células que irán apareciendo y así poder sobrevivir dentro del cuerpo.

Descripción detallada de la actividad o acción que va a aprender tu agente.

El virus debe aprender a reconocer las células que irá encontrando dentro del cuerpo, para esto se basa en sus características físicas, es decir, su color, su forma, la dirección en la que rota y la figura que tiene la célula en su interior. Al comienzo se cuenta con una entrenamiento de 15 células, que el usuario puede acomodar en cualquiera de las tres categorías: Target, Enemy o Food. Es muy importante mencionar que dependiendo como el usuario haga esta clasificación, será la forma en que se realice el árbol de decisión.

Descripción detallada de los patrones obtenidos del medio ambiente para el entrenamiento. Explicar la razón por la que se escogieron cada uno de los atributos del patrón.

Como se mencionó anteriormente, el virus se basa en las características físicas de las células para poder determinar su tipo. Siendo más específicos, las características son las siguientes:
Color: rojo, azul o verde
Forma externa: círculo, círculo con una bolita, círculo con una bolita llena, cuadrado o doble cuadrado
Giro: derecha o izquierda
Forma interna: ninguna, círculo lleno, círculo vacío, cuadrado lleno o cuadrado vacío

La razón por la que se eligieron estos atributos fue porque esas son las características que definimos para la célula. Al ser nuestro programa más interactivo, el usuario puede clasificar los diferentes tipos de células como mejor le parezca, basándose en las características que su intuición le diga. Claro está, que si dicha clasificación se hace de forma aleatoria y sin seguir un patrón es posible que no se obtenga una buena clasificación o los resultados deseados.


Solución planteada

La solución planteada es realizar un árbol con ID3 basándose en las características ya mencionadas

Video



Conclusiones

ID3 es muy interesante y realmente es como mágica la forma en que logra hacer las clasificaciones, la codificación tuvo algunas complicaciones pues en la clase vimos el método intuitivo para poder hacer la clasificación y no el método formal, así que eso tomó un poco de tiempo al momento de realizar el programa. Sin embargo el problema se prestó mucho para una buena realización del mismo, pues las características eran muy definidas y los valores eran totalmente discretos.

Tuesday, March 2, 2010

Gato 3D con LMS

Gato 3D

Descripción del medio ambiente.

Hay tres tableros de gato formando un cubo. Cada panel vertical y horizontal es un gato de modo que hay más formas de ganar. Existen 27 espacios donde se puede tirar. El ambiente es accesible, no determinista, no episódico, estático y discreto.

Actividades que aprende el agente.

El objetivo del agente ganar a su oponente. El agente es autónomo y reacciona según los tiros del otro jugador, va aprendiendo a jugar hasta ser capaz de ganar.

El agente aprenderá a bloquear tiros y a tirar de manera que tenga oportunidad de ganar.

1. Bloquear tiros. A partir de la estrategia del usuario el agente aprenderá que posición del tablero utilizar para su siguiente jugada para así impedir que el otro jugador gane.

2. Tirar. De acuerdo al desempeño del jugador el agente elige la mejor jugada posible.

Solución utilizando el Algoritmo LMS

· Experiencia de aprendizaje

El agente juega contra un agente reactivo. La retroalimentación es indirecta ya que depende del resultado final de la partida. La selección de estados la hace el agente y al final se infiere el resultado a través del medio ambiente. La distribución de ejemplos es muy similar a los reales.

· Función objetivo

Tirar: Tablero →ℜ

V: T→ℜ

V (b) = 10 cuando ganó

V (b) = -10 cuando perdió

V (b) = V (mejor estado alcanzable)

· Representación de la función objetivo

X1 = número de espacios peligrosos (si el oponente tira ahí gana)

X2 = número de espacios beneficiosos (si el agente tira ahí junta 2 en línea y tiene posibilidades de ganar)

X3 = número de espacios ganadores (si el agente tira ahí gana)

V (b) = w0 + w1x1 + w2x2 + w3x3

W0, W1, W2, W3 son pesos a aprender.

· Selección del algoritmo de aproximación

Se usará LMS.

Los valores iniciales de pesos W0, W1, W2, W3 son elegidos al azar y van de 0 a 1 y la constante de aprendizaje η fue elegida al azar entre 0.4 y 0.9.

Los patrones utilizados para el aprendizaje son la representación de los espacios que existen en el tablero. Los primeros nueve representan la cara superior del cubo, los siguientes nueve el gato horizontal en la mitad del cubo y los últimos nueve el gato en la cara inferior.

Conclusiones después de la programación

Implementar LMS tuvo ciertas complicaciones ya que hay que ser cuidadosos en las variables que obtienen información del sistema, de hacer falta una o de no calcularlas correctamente, puede llegar a no aprender correctamente. También, es necesario hacer que el programa sea entrenado contra muchos y diferentes escenarios para que sepa qué hacer bajo diferentes situaciones

Friday, February 26, 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: