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).