Thursday, April 23, 2009

Huerto Nueronal de Tomates

Breve descripción del medio ambiente.

En esta etapa de desarrollo, el medio ambiente es un mundo virtual en dos dimensiones, representando una cancha de futbol pero con las porterías en las esquinas. El juego cuenta con dos equipos, Rojos y Azules, ambos controlados por agentes. Cada escenario cuenta con dos bases en los extremos del mismo en donde los personajes podrán anotar puntos.

Descripción detallada de la acción a aprender por el agente.

La acción que realizaran los agentes en esta etapa del proyecto, será, por medio del uso de redes neuronales, y es el comportamiento que deben de seguir los agentes que tienen la pelota y se disponen a anotar. El agente tiene que visualizar a su alrededor para ver por dónde (zonas) vienen atacando los enemigos. Una vez identificado esto, debe huir del peligro pero teniendo en cuenta que se debe anotar un punto, por lo que debe intentar esquivar a los enemigos, o bien llevarlos a donde hay compañeros que lo defiendan, para después dirigirse a la meta.

Solución planteada usando Redes Neuronales:

Los patrones de aprendizaje que se alimentan a la red son la existencia de enemigos en zonas aledañas al agente que lleva la bandera. Se ha dividido el área alrededor del agente de la siguiente manera:

Zona 1 Zona 2 Zona 3
Zona 4 Zona 5 (posicion del jugador) Zona 6
Zona 7 Zona 8 Zona 9

La entrada de la red neuronal es entonces, la existencia de algún enemigo en alguna de las zonas 1 a 9 a excepción de la 5. Adicionalmente se alimenta también la distancia a la que están de la zona 5, por lo que sí es una distancia muy cercana a la zona 5, el agente decide cambiar de dirección para evitar estar en el rango de ataque de los enemigos.

La salida de la red es un número que indica la zona a la que se debe mover el agente en el siguiente movimiento. Es un entero y se utiliza para la función de movimiento por zonas.

La red es multicapas y en total se utilizan 3 capas, las cuales son:

Entrada (8 neuronas)

Intermedia ( 3 neuronas)

Salida (1 neurona)

Y se usaron los siguientes parámetros en la red:

Tasa de aprendizaje: 0.3

Momentum: 0.3

Iteraciones: Se itera durante una jugada completa (mientras el agente tiene la pelota e intenta anotar), estas iteraciones son variables.

Conclusiones después de la programación

La implementación de la red neuronal si hace mucha diferencia en el desarrollo del juego, dando ventaja a estos agentes ya que además de darles mayor variedad de comportamiento, también les dio ciertas estrategias, como cuando quien lleva la pelota se ve acorralado y no tiene modo de avanzar a la portería, decide regresar a donde están sus compañeros, los cuales ayudan a eliminar a los enemigos para dejar el paso libre para que el agente anote. Esta estrategia no era algo que se tuviera planeado, simplemente se le dio la forma en cómo debía actuar ante ciertos parámetros y solo la formo.

Tuesday, April 21, 2009

Fase 3 - Proyectos

Breve Descripción del ambiente:
Para este proyecto decidimos dejar por un momento el ambiente que habíamos realizado en las entregas pasadas. Para esta ocasión nos enfocamos únicamente en el desarrollo de una aplicación que pudiera reconocer distintas figuras. Para esta aplicación se ha contemplado un tablero de 3 x 3.

Descripción detallada de la actividad:
La red neuronal se encargará de reconocer distintas figuras. Se ha escogido que la red pueda identificar la siguiente figura:

1 1 1
0 1 0
0 0 0

Esta figura puede estar en las siguientes posiciones acorde al tablero de 3 x 3 (Esto incluye sus posiciones inversas):

1 1 1 0 0 0 1 0 0
0 1 0 1 1 1 1 1 0
0 0 0 0 1 0 1 0 0

0 1 0
0 1 1
0 1 0


Solución Planteada Utilizando Redes Neuronales:

Se ha definido una red de 9 nodos de entrada, 3 nodos en la capa oculta y un nodo de salida.
La red cuenta con 9 nodos de entrada, debido a que cada entrada será una casilla del tablero. Para identificar la casilla con el nodo de entrada se ha definido cada casilla con un número.

1 2 3
4 5 6
7 8 9

La salida proveerá un valor cercano a 1, cuando sea la figura correcta. Si la figura tiende ser diferente, la salida proveerá un valor cercano a 0.
La red recibirá un archivo de texto, en donde vendrá la información de la red neuronal, así como los ejemplos de entrenamiento.

Datos de la red:
Nodos de entrada: 9
Nodos en capa oculta: 3
Nodos de salida: 1
Taza de aprendizaje: .7
Momento: .4
Error: .001

Por el momento manejamos un total de 14 ejemplos de entrenamiento, los cuales tienen el siguiente formato:
Los primeros 9 valores indican las entradas. El primer valor corresponde al primer cuadrante, el segundo valor, al segundo cuadrante y así sucesivamente.
Después de estos valores, viene una barra para indicar que los siguientes números son el valor de la salida.

Ejemplo de valor de entrenamiento:
1: 0 0 0 0 1 0 1 1 1 | 1

El ejemplo anterior nos indica que el tablero tiene la siguiente configuración:

0 0 0
0 1 0
1 1 1

Se cargará esta información a la red neuronal y se hará correr. La red realizará las iteraciones necesarias hasta obtener un error menor al que se le ha establecido en el archivo de texto. Una vez finalizada esta tarea, el programa nos da un archivo con los datos de la red, así como los pesos finales entre los nodos de la capa de entrada, oculta y de salida.
Posteriormente se correrá el programa consultas.exe. El programa pedirá que se ingrese el archivo de configuración (el archivo que contiene los pesos finales). Posteriormente, indicará que se ingrese el archivo que contiene la consulta.

Conclusiones:
Al finalizar la aplicación y probarla pudimos observar que si estaba dando los valores esperados. Estaba reconociendo a la figura dada con valores muy cercanos a 1. Si se le mostraba otra figura (un cuadrado de 2 x 2, por ejemplo), nos regresaba un valor cercano de .012 aproximadamente, mientras que si se mostraba cualquier otra figura (una casilla marcada nada más, por ejemplo), regresaba un valor aún mucho menor (.0001).

Monday, April 20, 2009

Chutas ProyectoFase 3 - Red Neuronal

El programa utiliza las clases en Java de un agente Nao en Webots y clases adicionales que especifican la red neuronal. Luego de realizarse pruebas a través de una lista de valores de entrenamiento el Nao deberá analizar sus decisiones a través de la red neuronal y decidir que patada utilizar.

• Patrones de aprendizaje a alimentar a la red.

La red se alimentará de valores flotantes que especificarán la posición de tiro del robot Nao. Estos valores representan a las entradas de la red neuronal. Desde esta posición el Nao va a calcular que patada deberá utilizar.

• Codificación de la salida de la red.

La codificación corresponde a un valor entero entre 1 y 4 que indicará la patada a ejecutarse y que representa el valor de salida de la red neuronal. Cada patada tendrá una fuerza diferente, la idea es que cuando esté cerca del arco la patada sea más débil y cuando esté más lejos, el Nao aprenda a patear más fuerte.

• Tipo de red neuronal a ser utilizada.

Una red neuronal con el método de Backpropagation y 3 capas.

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

Existen 3 capas: 1 neurona en la capa de entrada, 4 neuronas en la capa intermedia y 1 neurona en la capa final.

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

La tasa de aprendizaje la toma la red como una variable constante en la inicialización. Se recomienda para buenos aprendizajes tasas menores a .3. Las iteraciones corresponden al número de entrenamientos que se envían en la inicialización.


Conclusiones después de la programación.

Al tener más experiencia en los simuladores el proyecto se facilitó en la parte de la integración del algoritmo con el sistema, sin embargo el entender las redes neuronales y su aplicación en la resolución del problema fue la parte más tardada y difícil de implementar. Tuvimos para esto que estudiar la teoría y los conceptos básicos lo que nos llevo luego a mejorar nuestro conocimiento sobre este tema de la inteligencia artificial y verlos en acción a través de la aplicación. Regresamos a la plataforma de Webots para facilitar la integración de las clases externas de la red neuronal. Estas clases fueron desarrolladas independientemente para luego ser integradas, y de esta forma agilizar el desarrollo de esta etapa del proyecto.

liga para el video:

Video Fase 3 Kawabonga

Video Kawabonga

Fase III - Red neuronal

Medio ambiente

Nuestro medio ambiente básicamente sigue siendo el mismo. Un programa ahora basado en redes neuronales, que simula las quinielas que se llevan a cabo a fin de apostar en los partidos de basketball de la temporada regular de la NBA, donde los equipos juegan al menos unas 3 veces cada semana. El medio ambiente ha sido programado en el lenguaje C++ y es una aplicación de escritorio con visualización en consola. En esta ocasión, a través del concepto del perceptrón, hemos aplicado el conocimiento generado a través de redes neuronales para enseñar a la computadora a predecir el resultado final de un partido de basketball.

Actividad de aprendizaje

El propósito del agente inteligente, es aprender de acuerdo a los pesos de las estadísticas con que será alimentado, a tomar en cuenta y actualizar estos pesos de manera que se pueda realizar una mejor apuesta por un equipo, es decir, que al recibir una entrada estadística de los resultados de los partidos que ya han sido jugados, utilice la función estocástica de back propagation para regresar un valor entre 0.0 y 1.0, lo cuál indicará si un equipo tiene mayores probabilidades de ganar o perder un partido. Los pesos que se le dan a cada estadística (puntos, asistencias, rebotes, faltas, etc.), se ajustan a medida que los equipos juegan y de esta forma se predice de mejor manera qué equipo tiene una mayor posibilidad de ganar para los siguientes encuentros.
Un aspecto importante a considerar es que la máquina al aprender se beneficia más de los equipos que son en cierta manera más consistentes, ya que le permite aprender de entrenamientos que son más representativos de la realidad.

Solución

I. PATRONES DE APRENDIZAJE
Los patrones de aprendizaje serán las estadísticas de partidos jugados con anterioridad. De estos partidos, se tomarán principalmente 14 diferencias entre los equipos que lo disputaron. Estas estadísticas son compuestas por el porcentaje de los puntos obtenidos, el porcentaje de tiros encestados, rebotes, asistencias, entre otros.
Un ejemplo de estos patrones de aprendizaje sería el de los puntos obtenidos. Si Chicago promedia 6 puntos más de diferencia que Cleveland, entonces la entrada de la red neuronal serían estos 6 puntos de diferencia entre estos equipos. Lo mismo sucederá con las 14 entradas.

II. CODIFICACIÓN DE LA SALIDA DE RED
Tal como lo mencionamos anteriormente, la salida que esperamos de esta red neuronal es muy simple. Se trata de un valor flotante entre 0.0 y 1.0, el cuál indicará, según a qué se aproxime más, si un equipo ganaría o perdería dependiendo de lo que determine la red para el caso de ambos equipos.

III. TIPO DE RED NEURONAL
Se trata de una red neuronal estocástica que utiliza back propagation como método de actualización.

IV. CAPAS DE LA RED NEURONAL
Se trata de una red de 3 capas: Input, Hidden y Output
La capa Input ha sido explicada anteriormente. Se trata de 14 entradas de las estadísticas de actuación de los equipos que se medirán.
Dentro de la capa Hidden, se encuentran 8 perceptrones y esta capa utiliza la función sigmoide para calcular el resultado.
Por último, la capa Output, se trata de un solo perceptrón que recolecta la información de la capa oculta para dar un resultado final, ntre 0.0 y 1.0, el cuál indicará a qué equipo se debe apostar. Esta última capa, al igual que la intermedia, utiliza la función sigmoide vista en clase.

V. PARÁMETROS DE LA RED
El código de la red neuronal contiene los parámetros que esta obtendrá:

struct perceptron
{
float valor;
float delta;
float * pesosOut;
int tipo;
};

struct capa
{
perceptron * elementos;
int numeroPerceptrones;
int numeroCapa;
int capaSiguiente;
int capaAnterior;
};

Conclusiones
Una red neuronal tiene la peculiaridad de tomar en cuenta muchas entradas y tener una capar intermedia capaz de conectarlas para obtener datos más precisos de cómo estas entradas se interrelacionan para obtener un resultado. Encontramos que las redes neuronales son excelentes para tratar datos complejos y extensos, como lo son las estadísticas. El problema principal que encontramos fue precisamente el alimentar a esta red con tantos datos.

Kawabonga! Fase 3

a. Breve descripción del medio ambiente.
El Internet es un sistema global de redes interconectadas que intercambian datos. El ambiente en particular son páginas web escritas en (x)HTML y que utilizan el protocolo HTTP para transferir datos de una computadora llamada Servidor a otra llamada cliente.

b. Descripción detallada de la actividad o acción que va a aprender tu red neuronal.
Contamos con un web crawler el cual visitará e indexará diversas páginas web, así como un motor de búsqueda para hacer consultas sobre los resultados.
El motor de búsqueda toma en cuenta diversos parámetros para hacer el ranking de los resultados (número de veces que aparece el término buscado, lugar en el que aparece, número de sitios externos que enlazan a la página, etcétera). Uno de estos parámetros es el resultado de una red neuronal.
La red neuronal aprenderá a identificar el conjunto de URLs indexadas más relevantes para el conjunto de palabras buscadas.

c. Solución planteada al problema utilizando Redes Neuronales. Describe con detalle cada elemento del planteamiento:
i. Patrones de aprendizaje a alimentar a la red.
La entrada consiste de la lista de todas las palabras que se han buscado. Aquéllas que no forman parte de la búsqueda actual tendrán valor de cero, y aquéllas que sí forman parte tendrán valor de uno.

Por ejemplo, si se han buscado n palabras hasta el momento y se realiza una búsqueda de "p0 p2", la entrada sería:
{(p0, 1), (p1, 0), (p2, 1), ... , (pn, 0)}

ii. Codificación de la salida de la red.
La salida de la red, consiste de la lista de todas las URLs que han sido indexadas hasta el momento. Cada URL contará además con un valor de relevancia de uno o menos uno. Donde valores positivos denotan mayor relevancia.

Ejemplo:
{(URL1, -1), (URL2, 1), (URL3, 1), ... , (URLn, -1)}

iii. Tipo de red neuronal a ser utilizada.
Perceptron

iv. Numero de capas (entrada, intermedias, salida) y número de neuronas en cada capa.
3 capas, con q neuronas en la capa 1 y 2 e i neuronas en la capa 3. Donde:
q = Número de palabras que han sido buscadas.
i = Número de URLs que han sido indexadas.

v. Parámetros de la red (tasa de aprendizaje, momento, iteraciones).
Tasa de aprendizaje = 0.1
Momento = 0.2
Iteraciones = Variable, depende del usuario. El backpropagation se da en base a los resultados que el usuario elija.

d. Conclusiones después de la programación.
Después de haber programado la red neuronal nos dimos cuenta de que aunque es más compleja que los algoritmos de las iteraciones anteriores sus resultados son mejores, otra ventaja es que el resultado de su entrenamiento es más sencillo de manejar y ocupa menos espacio. Por otra parte, una desventaja es que debido a su 'arquitectura de caja negra' es imposible saber como se obtuvieron los resultados, además de que no existen reglas específicas para determinar algunas constantes (como la tasa de aprendizaje y el momento).

Monday, March 2, 2009

Fase II (LMS) y un pequeño giro al proyecto

Bueno, pues creo que sobra decir que nuestro pequeño proyecto de naves autómatas inteligentes asesinas se convirtió en uno de apuestas de partidos de la NBA. Habiéndo dicho esto, procedemos a desentrañar nuestro proyecto de la siguiente manera:

Medio ambiente

Nuestro medio ambiente es un programa que simula las quinielas que se llevan a cabo a fin de apostar en los partidos de basketball de la temporada regular de la NBA, donde los equipos juegan al menos unas 3 veces cada semana. El medio ambiente ha sido programado en el lenguaje C++ y es una aplicación de escritorio con visualización en consola.
Básicamente el medio te da la opción de entrenar por medio del algoritmo LMS o de apostar por los partidos de una fecha que no se ha jugado.


Actividad de aprendizaje

El propósito del agente inteligente, es aprender qué estadísticas tomar en cuenta a fin de hacer una mejor apuesta por un equipo, es decir, que al monitorear las actividades de la temporada regular y el comportamiento de los equipos, observa y aprende qué factores son los más importantes para llevar a un equipo a la victoria.
Los pesos que se le dan a cada estadística (puntos, asistencias, rebotes, faltas, etc.), se ajustan a medida que los equipos juegan y de esta forma se predice de mejor manera qué equipo tiene una mayor posibilidad de ganar para los siguientes encuentros.
Un aspecto importante a considerar es que la máquina al aprender se beneficia más de los equipos que son en cierta manera más consistentes, ya que le permite aprender de entrenamientos que son más representativos de la realidad.


Solución

a. Selección de experiencia de aprendizaje
Tarea (T): Apostar convenientemente en los partidos de basket ball de la NBA
Medida de desempeño (P): % de apuestas ganadas y de dinero obtenido
Experiencia de entrenamiento (E): Apuestas con cierto grado de incertidumbre
Retroalimentación: indirecta
Ejemplos de entrenamiento: Partidos calendarizados ya jugados.
Distribución de ejemplos de prueba: Partidos calendarizados por jugar.

b. Selección de la función objetivo
Función meta: Escoger apuesta (V): B → M
B: Conjunto de estadísticas reales
M: Conjunto de posibles ganadores donde:
Equipo al que apuesto gana V(b) = 100
Equipo al que apuesto pierde V(b) = -100

c. Representación de la función objetivo
Función polinomial: w0 + w1x1 + w2x2 + . . . + w13x13 + w14x14
Donde:
x1 = % Puntos por partido
x2 = % Tiros de campo
x3 = % Tiros de 3 puntos
x4 = % Tiros libres
x5 = % Asistencias
x6 = % Rebotes ofensivos
x7 = % Rebotes defensivos
x8 = % Robos de balón
x9 = % Turnovers (contraataques)
x10 = % Faltas
x11 = % Bloqueos
x12 = % Tiros de campo anotados
x13 = % Tiros de 3 puntos anotados
x14 = % Tiros libres anotados
Y donde:
{w0, w1, w2 . . . w13, w14} = Pesos a aprender, inicializados en 0.5

d. Selección de algoritmo de aproximación
Ejemplos de entrenamiento [b, VEnt (b)]
Algoritmo LMS (Least Mean Square)
Calcula los pesos de la siguiente manera:
wi → wi + ŋ ( VEnt (b) – V’(b) ) xi

Ejemplo:
pesos[j] += COEFN*(calificacion[n]-valorF)*(diferenciaPuntos[n][j]);

Donde:
ŋ = COEFN = .001 (Constante que ayuda a calcular pesos)


Conclusiones

El algoritmo LMS ha funcionado correctamente al actualizar los pesos de manera efectiva. Un ejemplo es que ha dado un menor peso a factores menos importantes como las faltas, las cuáles muchas veces no afectan al resultado de los partidos, mientras que ha asignado un mayor peso a factores como los tiros de campo anotados por partido, dónde estos si representan un factor clave para la victoria de un equipo.
Otra de las conclusiones que sacamos, es que a fin de que las apuestas fueran más certeras, es necesario que los valores reales de los equipos sean más consistentes. Por ejemplo, equipos que siempre juegan de la misma manera, tienen una mayor representatividad a la hora de poner a prueba el programa, ya que sus pesos fueron calculados de una manera más fidedigna. Existen otros equipos menos consistentes los cuales podrían jugar muy bien un partido y en otro perder de manera muy marcada. Estos equipos también alimentan al sistema y lo hacen más susceptible a fallas, sin embargo, al final el agente determina basado en su aprendizaje, a quién debemos apostar, y acierta al hacerlo muchas veces.
También cabe mencionar que entre más se alimente al sistema con ejemplos de entrenamiento, más puede este definir un posible ganador. A la fecha lo hemos alimentado con 4 semanas y aún así ya tiene una conclusión bastante fuerte y acertada de qué factores son los que más influyen en los equipos en particular.

Fase 2 - Proyecto

Aqui les dejamos una breve descripción de nuestro avance dos del proyecto. Haber que les pareció, esperamos sus comentarios. Cualquier duda ya saben hahaha.


Breve descripción del medio ambiente.
Para este avance del proyecto, desarrollamos un ambiente representado por una matriz de 23 por 23. En principio está llena de ceros, excepto por la parte donde inician los elementos “nano”. La posición inicial, se encuentra aproximadamente en la mitad de la matriz y los elementos “nano” son representados por unos. Entonces, las figuras están formadas por unos, de acuerdo a los movimientos posibles para los elementos “nano”.

Descripción detallada de la acción a aprender por el agente.
Lo que el agente en principio debe de aprender es a formar una figura, en este caso la figura final propuesta es una silla. Para la implementación de este aprendizaje, se utilizarán una cantidad de reglas determinadas por el ambiente, estas son las que determinaran que figura se puede realizar. En términos generales, las reglas determinan que cada elemento “nano” no puede moverse si rompe en dos la estructura base, y cada elemento sólo puede moverse uniéndose a los otros elementos adyacentes. Finalmente cada movimiento asertivo con respecto a la figura final le dará razón al aprendizaje.

Solución planteada usando LMS
Actividad T: Aprender a realizar una figura, en este caso una silla.
Desempeño P: Número de aciertos de acuerdo a la figura final o a aprender.
Experiencia de entrenamiento E: El mejor movimiento posible a elegir a partir de las piezas con movimiento libre.
Feedback: Directo.
El agente tiene como opción varios tipos de movimientos, con base en estos, él elige el adecuado que resulte más certero a la figura inicial. Todo esto sin afectar los elementos ya posicionados correctamente en el espacio.
Entrenar con varias figuras, para aprender nuevos patrones. Todo esto con base en los movimientos posibles.

Función objetivo:
V: B - > R
V(b) = 50 -> Completó la figura final
V(b) = -50 -> No completó la figura final

V(b) = ^V(b)
x1 = Número de verticales
x2 = Distancia de la figura con respecto a su posición final (número de casillas).
x3 = Número de coincidencias entre las horizontales y las verticales.

V^(b) = w¬0 + x1w1 + x2w2 + x3w3 + x4w4

Los pesos dentro de la función objetivo se van ajustando con respecto al resultado que regresa la función experto. La selección de esta función esta basada en el hecho de que entre más acercado esté al resultado final mejores resultados de aprendizaje va a tener el agente, lo que influye directamente en la implementación para tener un aprendizaje rápido y eficaz para formar la figura determinada como la final.

Conclusiones después de la programación
Los resultados fueron interesantes. Cuando iniciamos la etapa de programación, no teníamos idea si de verdad el agente iba a aprender. Ya una vez programado, vimos de manera rápida como el agente aprendía e iba ajustando los pesos. Esto lo empezó a hacer con respecto a la función que el experto ofrecía así como el resultado del número de elementos que estaban bien de acuerdo a la figura final. Por este motivo, el agente aprendía muy rápido a realizar la figura. Aunque no se desarrolló de manera específica, se dejó abierta la parte de que aprendiera más de una sola figura, por lo que sólo se tendrían que guardar los elementos ya aprendidos, para generar nuevas figuras e incluso letras, sólo guardando las figuras ya aprendidas y utilizando el mismo algoritmo.

Friday, February 27, 2009

Kawabonga! video Fase 2

Hola
este es el video de la fase 2.

LMS en Webots con Naos

Breve descripción del medio ambiente. 

El medio ambiente se desarrolla a partir del simulador 3D Simspark, el cual es el simulador oficial para las competencias dentro de la Robocup Standard League y contiene todas las reglas para oficiales para llevar a cabo partidos de fútbol con los robots bípedos llamados Nao. El simulador contiene diferentes elementos básicos que definen las dimensiones de la cancha, así como la ubicación de las porterías y la pelota. Además incluye a diferentes Naos para ambos equipos y con la posibilidad de especializar sus acciones para que sean porteros, defensas o delanteros. El objetivo final primordial para cada jugador de cada equipo será meter la bola en el arco contrario y así realizar un gol para aumentar en un punto el marcador de su equipo.

Para la realización de la fase 2 del proyecto en la implementación de los algoritmos del recocido simulado y LMS de aprendizaje, hemos utilizado el simulador Webots para Windows, el cual contiene características similares a las del Simspark pero posee una interfaz más útil para el desarrollo de nuestras pruebas.

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

La acción que el agente, en nuestro caso un robot Nao, va a aprender suena relativamente sencilla: en qué posición de la cancha es adecuado disparar a la portería contraria para anotar un gol, tomando en cuenta algunas otras variables como si algún robot enemigo podría bloquearle el tiro.

El Nao a través de su cámara integrada lo primero que hará será observar a su alrededor para detectar el medio en el que se encuentra en ese momento para poder dictaminar bien los resultados. En principio siempre pateará la bola sin importar qué haya o no haya enfrente ni cómo esté posicionado en la cancha, con esto se irán ajustando los pesos que posteriormente influirán en la toma de la decisión más adecuada. Lo ideal a aprender se va a basar en qué posición está en el campo, en qué ángulo se encuentra con respecto a la portería para analizar si debe girar un poco y también tomará en cuenta los robots contrarios.

Solución planteada al problema utilizando el Algoritmos LMS. 

1) Selección de la experiencia de aprendizaje 

La experiencia de aprendizaje será Directa; es decir, por cada vez que el robot haga un disparo (sin importar si este va a portería o no), se le dirá si hizo bien o hizo mal. Con esto se obtiene un resultado inmediato que nos dirá con precisión cuál fue su último movimiento y si fue correcto o incorrecto. Utilizar este tipo de aprendizaje nos ayudará a dar una respuesta con precisión, además de que no será necesario terminar una corrida completa (en este caso un partido de 10 min) para poder determinar si el robot ha aprendido o no.

2) Selección de la función objetivo 

La función objetivo tendrá en cuenta 4 variables como ya se había mencionado. Éstas son:

· X1 = Posición del robot sobre la cancha.
· X2 = Existe un rival enfrente que pueda taparle el disparo.
· X3 = Ángulo del robot con respecto a la portería.
· X4 = Ángulo del robot con respecto a la pelota.

El resultado final será tomado con base en la función:

    V(b) ->
Si el robot pateó la bola y consiguió meter gol V(b) = 100;
Si el robot pateó la bola y no consiguió meter gol V(b) = -100;
Si no es ninguno de estos estados finales se manda llamar la función
V^(b) = W­0 + X1W1 + X2W2 + X3W3 + X4W4
Esta función recalculará los pesos para que en la siguiente iteración el robot ya sepa distinguir un poco mejor qué variables debe tomar más en cuenta para acertar en el resultado final.

3) Selección de la representación de la función objetivo

Seleccionamos la función objetivo basándonos en la capacidad del robot a hacer distintas actividades, o en las restricciones del mismo. La función es muy sencilla, si anota gol con un disparo (tomando en cuenta todas las variables ya establecidas), se le otorga un valor de 100, con esto se le dice que lo que hizo está bien, por el contrario, si dispara y no anota gol (por cualquier motivo) se le otorgará un valor de -100.

Conclusiones después de la programación. 

Después de haber tenido un arduo trabajo programando los Naos en Java con la plataforma Webots, nos dimos cuenta que simular un robot no es programar cualquier otra cosa. Los robots son totalmente dinámicos y obtienen sus valores tratando de imitar el pensamiento y sentidos humanos, lo que complica aún más su buen desempeño. 

La implementación del algoritmo LMS no fue sencilla ya que necesitamos manejar muchos datos en concordancia con el comportamiento del Nao, y por esta razón en algunos casos como para obtener la ubicación del Nao en la cancha tuvimos que desarrollar e implementar nuevas funciones que no incluían la simulación.

Algoritmo LMS - Oriam y su Huerto de Tomates

Breve descripción del medio ambiente.
En esta etapa de desarrollo, el medio ambiente es un mundo virtual en dos dimensiones, representando una cancha de futbol pero con las porterías en las esquinas. El juego cuenta con dos equipos, Rojos y Azules, ambos controlados por agentes. Cada escenario cuenta con dos bases en los extremos del mismo en donde los personajes podrán anotar puntos.

Descripción detallada de la acción a aprender por el agente.
 La acción que deben aprender los agentes es bloquear un ataque del equipo contrario. Los agentes deben ser capaces de observar el estado de su ambiente en el momento que el equipo contrario este atacando y aprender que acciones son las mejores dependiendo de la situación que este ocurriendo en ese momento, es decir, en el momento en que el equipo contrario tome la pelota, los agentes deben poder analizar el número de enemigos que protegen la pelota, el número de amigos que atacan a quien lleva la pelota y el número de amigos que atacan a quienes protegen la pelota e ir aprendiendo dependiendo de que tan bueno han resultado estos estados y adaptando las acciones que realizan al atacar, como atacar a quienes protegen la pelota, atacar a quien lleva la pelota, o bien incrementar su velocidad para llegar a la zona de tiro.

Solución planteada usando LMS
 Actividad T: Bloquear Ataques
 Desempeño P: % de ataques bloqueados
 Experiencia de entrenamiento E: partidos jugados contra si mismo.
 Feedback: indirecto.
 El agente selecciona una serie de estados y al final el ambiente le da un resultado.
 Entrenar contra si mismo.
 Función objetivo:
  V: B -> R
  V(b) = 6 -> Bloquear un ataque
  V(b) = 3 -> Mata a algún agente que no tenga la pelota
  V(b) = -3 -> Muere al intentar bloquear un ataque
  V(b) = -6 ->El equipo contrario anota
  V(b) = ^V(b)
  X1 = # de enemigos protegiendo a quien lleva la pelota
  X2 = # de amigos atacando a quien lleva la pelota
 X3 = # de amigos atacando a los enemigos que protegen a quien lleva la pelota
  ^V(b) = W0 + W1X1+ W2X2 + W3X3
  Wi <- Wi + n*(Vtrain(b) - ^V(b))*Xi   n = 0.1 Conclusiones después de la programación
 Fue interesante ver como cada agente cuando esta realizando la acción y al mismo tiempo aprendiendo como realizarla mejor según la retroalimentación que recibe, ya que cambia totalmente la forma en la que se desarrolla el juego, y aunque realmente no estamos enseñando a atacar, como se defiende mejor en cualquier zona, logra en todos los casos ganar los juegos. Creo que lo más difícil del algoritmo es realmente entender como aplicarlo al problema, ya que nos costo mucho ver cuales podrían ser los factores que realmente afectan y como decirle al agente si el estado es bueno o malo. Al final las funciones no resultaron complicadas, pero el darnos cuenta de cómo plantearlo fue lo más complicado.




Link:

http://www.youtube.com/watch?v=HQ_Q_Kd0fQI

Kawabonga! Fase 2

a. Breve descripción del medio ambiente.
El Internet es un sistema global de redes interconectadas que intercambian datos.
El ambiente en particular son los blogs que son web escritas en (x)HTML y que utilizan el protocolo HTTP para transferir datos de una computadora llamada Servidor a otra llamada cliente.

b. Breve descripción de la actividad o acción que va a aprender tu agente.
Un blog es un conjunto de palabras tanto en los post como en títulos.
Dentro del algoritmo, cada blog es representado por una tabla asociativa de palabras y el numero de veces que aparece esa palabra en ese blog (un count).
Categorizamos o agrupamos dos o más blogs de acuerdo a la distancia (similaridad entre los counts de las palabras). Si dos blogs hablan de un mismo tema es probable que utilicen las mismas palabras. El algoritmo deberá aprender la importancia que tienen las similaridades y diferencias entre las palabras de los títulos, posts y tags para determinar la categoría a la que pertenecen los blogs.

c. Solución planteada al problema utilizando el Algoritmos LMS.
1. Selección de la experiencia de aprendizaje
Feedback: No supervisado, el propósito es encontrar regularidades y patrones en el input.
Control de ejemplos: El programa elegirá la secuencia de estados y al final dar un resultado
2. Selección de la función objetivo
V(B)=1 si ha categorizado correctamente
V(B)=0 si ha categorizado incorrectamente
V(B)=V'(B), en otro caso
3. Selección de la representación de la función objetivo
V'(b) = w0 + (w1x1 - w2x2)/w5x5 + (w3x3 - w4x4)/w6x6 + (w7x7 - w8x8)/w9x9
x1 = Palabras similares dentro de posts entre dos blogs (distancia/acercamiento entre las palabras similares)
x2 = Palabras distintas dentro de posts entre dos blogs (distancia/alejamiento entre las palabras distintas)
x3 = Tags Iguales
x4 = Tags Distintas
x5 = Total de Palabras dentro de posts
x6 = Total de Tags dentro de posts
x7 = Palabras similares en título
x8 = Palabras diferentes en titulo
x9 = Palabras totales en titulos
4. Selección del algoritmo de aproximación – LMS para este caso.

d. Conclusiones después de la programación
Después de programarlo nos dimos cuenta, que tras varias corridas del algoritmo, la categorización se fue volviendo más exacta conforme se ajustaban los pesos, sin embargo creemos que el uso de este algoritmo no es la mejor solución para el tipo de aprendizaje que queremos lograr.

Friday, January 30, 2009

Fase 1 - Proyecto

1. Descripción detallada del medio ambiente.

El medio ambiente de nuestro proyecto está definido por el espacio directo donde los cubos o figuras(representando los átomos). Los cubos, tienen movimientos regidos por reglas, y los movimientos son adyacentes a los demás cubos con base en su posición actual. Es importante recalcar que los cubos pueden moverse de manera diferente para generar la figura final. En eso se basa el dilema de nuestro proyecto.

2. Plataforma en la que se programara el medio ambiente y lenguaje de programación a ser utilizado.

Con el desarrollo del proyecto aún no se ha determinado el lenguaje y la plataforma en la que se hará. Sin embargo, algunos de nuestras ideas dirigen nuestra atención al lenguaje Java o Phyton.

3. ¿Qué actividades o acciones puede aprender tu agente en ese medio?

De las cosas que el agente aprendería sería el desarrollo de figuras, es decir que aprenda a generar figuras. Posiblemente también será la de aprender algún tipo de movimientos a través del movimiento mismo de las moléculas sobre si mismas.



Chutas: Proyecto Fase 1

1. Descripción detallada del medio ambiente.

El medio ambiente estará creado gracias al simulador de 3D Simspartk, el cual se encuentra conformado por diferentes elementos, para empezar todos los robots estarán dentro de un terreno de juego con dimensiones previamente definidas y delimitado por líneas de las que los robots deben estar totalmente concientes. Habrá una portería de en cada extremo a lo largo y una pelota que la tendrán que meter existirán otros robots, enemigos y compañeros, con los que se tiene que interactuar, una pelota que en este caso el objetivo principal sería llevarla a la portería contraria y anotar gol.

2. Plataforma en que se desarrollara y lenguaje de programación a utilizar.

Debido a que el simulador Simspark corre unicamente en Linux, utilizaremos alguna distribución de este sistema operativo para desarrollar el proyecto, y en cuanto al lenguaje de programación, utilizaremos c++ debido a que este lenguaje es mas rapido que otros como java, y además de esto, nos serviria para el caso de que algun dia queramos migrar el codigo a los Naos reales, ya que estos se programan unicamente en C++ y en URBI.


3. Aprendizaje Automatico. ¿Qué actividades o acciones puede aprender tu agente en ese medio? Describe al menos 2 lo más detallado posible incluyendo ejemplos.

El agente del Nao tiene como objetivo además de realizar las funciones básicas de un partido de fútbol, el mantenerse estable y ordenado con respecto a sus limitaciones físicas y a las de su equipo. El aprendizaje será importante para que sea impredecible con respecto a sus contrincantes y para que tome las mejores decisiones. Por esta razón hemos identificado diferentes áreas en donde el Nao deba aprender para mejorar su rendimiento según sus objetivos:

  • 1) El aprender que jugadas son más efectivas.
Analizando las jugadas propias con respecto a los resultados exitosos, es importante que el Nao reconozca y aprenda que movimientos le brindó mayor desempeño en el partido. Este tipo de aprendizaje es favorable por dos razones, primero, es fácil de implementar y de analizar, y segundo, toma en cuenta indirectamente las jugadas contrarias siempre y cuando el jugador contrario no implemente el mismo tipo de aprendizaje.

  • 2) El aprender jugadas del otro equipo.
Algo más complejo sería que analice y aprenda las jugadas del equipo contrario para tomar decisiones sobre las jugadas propias. Este tipo de aprendizaje podría llegar a ser muy complejo analizando el comportamiento completo del equipo contrario, o también midiendo cosas básicas como la velocidad del contrincante que lleven a decidir sobre la propia velocidad de Nao.

Web Crawler + Applicacion Web

Un web crawler es un programa que navega de manera automática y sistemática por las páginas web, con el fin mostrar una relación entre palabras y URLs.
  1. Descripción detallada del medio ambiente.

    El Internet es un sistema global de redes interconectadas que intercambian datos.

    El ambiente en particular son lás páginas web escritas en (x)HTML y que utilizan el protocolo HTTP para transferir datos de una computadora llamada Servidor a otra llamada cliente.

  2. Plataforma en la que se programara el medio ambiente y lenguaje de programación a ser utilizado.

    Utilizaremos Python para hacer los prototipos del Web Crawler debido a que es un lenguaje que permite representar de manera sencilla los algoritmos además de contar con un gran numero de librerías y herramientas que facilitan la programación, como lo son avanzados profilers y debuggers.

    Para la aplicación tenemos pensado utilizar LAMP (Linux, Apache, MySQL y P*) para hacer la aplicación que presentara los resultados y hará las búsquedas en las bases de datos.

  3. Actividades o Acciones a Aprender:

    • Como ordenar las páginas de acuerdo a su importancia: Ajustar una función de relevancia para discriminar entre páginas "basura" y páginas útiles.

    • Como hacer recomendaciones a los usuarios: El crawler deberá aprender términos relecionados con lo buscado para poder hacer sugerencias sobre sitios similares.

PARTE 1 PROYECTO APRENDIZAJE AUTOMATICO

1. Medio Ambiente

Hemos decidido programar un videojuego, por lo tanto el ambiente encerrará distintas variables y retroalimentación para los agentes involucrados. Hemos pensado en algunas alternativas. Hasta ahora, nos inclinamos por un juego de aviones en el que existirán enemigos, obstáculos e interacción entre los varios agentes.

2. Plataforma y Lenguaje

La plataforma será parte de la realización del proyecto. Se programará en C++ con la librería de OpenGL, para poder aplicar también lo aprendido en Gráficas Computacionales. Dentro de esta plataforma, se debe decidir qué variables del entorno interactuarán con el ambiente.

3. Aprendizaje

Los agentes serán las naves enemigas, las cuáles deberán aprender tanto de su medio ambiente como de las entradas del usuario a través de la manipulación de su nave como del medio ambiente.

Dentro de este contexto, existen algunas cosas básicas que los agentes deben aprender.

Evitar perder: Evadir obstáculos, reacción ante situaciones adversas, refuerzos negativos al recibir daño, etc.

Procurar ganar: Movimientos del usuario para predecir estrategias de ataque, colaboración con otros agentes, métodos de ataque (distintas armas), etc.

También se puede pensar en que los agentes pueden aprender técnicas más especializadas a través de su experiencia. Por ejemplo, podrían observar que al disparar a una roca, los fragmentos de esta pueden alcanzar a su oponente, causando daño. Esto constituiría un aprendizaje avanzado, ya que pone de manifiesto el conocimiento del agente en cuanto al medio, los demás actuadores y la interacción entre ellos.

Selección de medio ambiente - Oriam y su huerto de tomates

1. Descripción detallada del medio ambiente.

El medio ambiente será un mundo virtual en 3D diseñado por nosotros, dentro de un videojuego, el medio ambiente contará con plataformas, desniveles y una topología que será distinta en la mayor parte de sus puntos.

El juego se pretende que tenga equipos, uno será controlado por los usuarios y uno por los agentes que programemos, cada escenario contará con dos bases en los extremos del mismo en donde los personajes podrán anotar puntos.

Finalmente, el medio ambiente contara con lugares que dañaran la vida del jugador, incluso matándolo, por lo que los personajes deberán aprender de su medio. De igual manera habrá lugares inaccesibles para los personajes.


2. Plataforma en la que se programara el medio ambiente y lenguaje de programación a ser utilizado.

La plataforma que utilizaremos será la que desarrollemos y utilizaremos el lenguaje de programación C++ con las librerías de OpenGL. Estamos considerando el uso de Python, pero por el momento esa opción queda como tentativa.

3. ¿Qué actividades o acciones puede aprender tu agente en ese medio?

Por tratarse de un videojuego, el agente tiene una gran variedad de cosas que puede aprender, por ejemplo puede aprender los patrones de ataque o de defensa del jugador, los lugares en los que más frecuentemente se encuentra o como atacarlo de formas diferentes para que sea siempre impredecible.

Como aprendizaje básico, debe ser capaz de aprender las estrategias del contrario, si son de ataque, ya sea directamente o en equipo, debe ser capaz de esquivar o contrarrestar, si son de defensa debe ser capaz de buscar puntos vulnerables.

Monday, January 26, 2009

Instrucciones del blog

Este es el blog de Aprendizaje Automático TC3020. El objetivo es que vayan documentando su proyecto final y que vayan compartiendo con sus compañeros su trabajo.

Por favor, cuando suban una actividad, pongan en el titulo el titulo de la actividad y en la etiqueta pongan su numero de equipo y nombre. En este caso, yo estoy poniendo el titulo de "Instrucciones del blog" y la etiqueta "0-Jorge".

Si desean usar más etiquetas para clasificar mejor su contribución, por favor háganlo.

Cualquier pregunta, por favor mándenme un correo electrónico, preguntenme en clase, o simplemente den de alta un post y yo lo contesto.

Gracias.