sábado, 17 de noviembre de 2012

Practica 4 - Sistema Multi Agente "ContractNet"

Descripción.



Un sistema multiagente (SMA) es un sistema compuesto por múltiples agentes inteligentes que interactúan entre ellos. Los sistemas multiagente pueden ser utilizados para resolver problemas que son difíciles o imposibles de resolver para un agente individual o un sistema monolítico.

Características.


Los agentes en un sistema multiagente tienen varias características importantes:
  • Autonomía: los agentes son al menos parcialmente autónomos.
  • Visión local: ningún agente tiene una visión global del sistema, o el sistema es demasiado complejo para un agente para hacer un uso práctico de esos conocimientos.
  • Descentralización: no hay un agente de control designado (o el sistema se reduciría a un sistema monolítico).

Normalmente la investigación de sistemas multiagente se refiere a agentes de software. Sin embargo, los agentes en un sistema multiagente también podrían ser robots, seres humanos o equipos humanos.

Problematica.


Utilizando la metodología de Contract Net, daremos solución a un grupo de "personas" que requieren enviar un paquete, para esto contaran con una cierta cantidad de empresas de mensajería localizadas a distancias variadas de cada una de las personas, que manejan precios y tiempos de entrega distintos lo cual le dará a la persona una mejor opción para el envio de su paquete.


"Lluvia de ideas"



Desarrolo.


Lo primero que el equipo decidió fue darle un orden de importancia a las necesidades del agente contratante, las cuales fueron:
  1. Cercanía de la oficina de correo.
  2. Tiempo de entrega del paquete.
  3. Mejor oferta de acuerdo a un "presupuesto".
Cada oficina de correo (cuatro en total) es un agente que estará "ofertando" cada uno de los puntos anteriores en el orden descrito.A todos los agentes se les asignó una posición (x,y) para a partir de la distancia euclidiana determinar las oficinas más cercanas; el tiempo de entrega del paquete se determinó en días y la oferta de acuerdo al presupuesto está dada en pesos.

Como nota, los datos utilizados para la posición de el contratante están dados de manera aleatoria al igual que el tiempo de entrega y los diferentes presupuestos, aunque cabe aclarar que son solo cifras significativas y no tienen parecido con la realidad.

Código.


El código mostrado a continuación es la clase de los agentes de las oficinas de correo.


El siguiente código es la clase que simula el agente contratante(cliente).




Esta ultima clase es la que se encarga de filtrar las ofertas, se puede decir que es la parte inteligente del agente contratante.



El código completo se puede obtener aquí.

Resultado.

Los resultados de esta practica fueron satisfactorios, ya que como se puede observar en el video de la ejecución del programa, éste realiza su cometido y nos da la mejor oferta de los agentes. 

Aún y cuando los resultados fueron buenos,el equipo cree que se pudo haber hecho mejor debido a que en un principio se había decidido realizar la práctica con python y SPADE pero por falta de tiempo se decidió utilizar simplemente java y tratar de hacer una implementación muy sencilla y casi "hardcodeada" de los sistemas multiagentes.

Video.




Conclusiones.

El uso de sistemas multiagente, puede ser de gran ayuda en la practica ya que permite obtener una aproximación a mejores resultados en base a ofertas y demandas tanto por parte de empresas como de clientes.

En el caso de ContractNet es incluso posible llevarlo a la practica profesional o laboral, siendo de mucha ayuda en la oferta de productos como por ejemplo, realizando cotizaciones de seguros de auto de varias compañías, dando las mejores opciones al cliente.

Podría ser ventajoso el uso de estas aplicaciones en robots que, en base a comunicación entre ellos, tomen la mejor opción para realizar algún tipo de tarea.





domingo, 4 de noviembre de 2012

Reportes de Clase



Unidad 1: Algoritmos Adaptativos


El código simula un ventilador que funciona en un rango de 16º como minimo para el nivel mas frio y 35º como maximo para el nivel mas caliente, se auto-ajusta con el paso de las horas en 1 dia , teniendo en cuenta que la hora con la temperatura mas alta es a las 2:00 pm .






Parte del Código:






Unidad 2: Red Compleja

Red compleja representada por su matriz de adyacencias y genera la distribución de grado y la densidad de la red.







Parte del Código:



Grafica de distribución de grado




Unidad 3: Perceptron

 Para este reporte se modifico el código original escrito para un "nand" y se cambio sus principales variables: los pesos iniciales, la tasa de aprendizaje y el umbral. Para que realice la función de un "and" como se muestra a continuacion:


código original:



código modificado:

Unidad 4: Plataformas para sistemas multiagentes

JADE
Java Agent DEvelopment Framework, o JADE, es una plataforma software para el desarrollo de agentes, implementada en JavaLa plataforma JADE soporta la coordinación de múltiples agentes FIPA y proporciona una implementación estándar del lenguaje de comunicación FIPA-ACL.

Programar un agente JADE consiste en:
  • Definir una clase Java que representa al agente (la cual debe heredar de la clase jade.core.Agent).
  • Implementar los comportamientos que va a manisfestar.

Un agente JADE cumple las siguientes características:

  • Tiene un nombre único en el entorno de ejecución.
  • Se implementa como un único hilo de ejecución (single-threaded).
  • Tiene un metodo de inicio (setup) y otro de fin (takeDown).
  • En su implementación se define una clase interna por cada uno de los comportamientos asociados al agente. 


SPADE



("Smart Python multi-Agent Development Environment") es una plataforma libre de sistemas multi-agente desarrollada en Python y basada en la tecnología de mensajería instantánea XMPP

Algunas de las características más notables de la plataforma SPADE son: soporte de organizaciones virtuales, notificación de presencia, compatible con FIPA e independencia del lenguaje y la plataforma.


Las principales características de la plataforma SPADE son:
  • Soporte del estándar FIPA mediante el protocolo de mensajería instantánea XMPP (Agentes AMS y DF incluídos)
  • Notificación de presencia entre agentes.
  • Organizaciones Virtuales basadas en el protocolo de multi-conferencia MUC.
  • Comunicación P2P entre agentes.
  • Invocación remota de servicios entre agentes usando el estándar XML-RPC.
  • Procesadores de lenguajes de contenido en SL0 y RDF.
  • Modelo de agente BDI basado en Conocimiento, Deseos e Intenciones.
  • Modelo de comportamientos: Cíclicos, Periódicos, Timeout, una ejecución, máquina de estados finita y basado en eventos.
  • Soporte de comunicación con otras plataformas mediante diversos protocolos de transporte: JADE (via HTTP o XMPP) y SIMBA.
  • Publicación y subscripción de eventos mediante el estándar PubSub.
  • Interfaz gráfica basada en web.



MADkit



MadKit es una plataforma para la implementación de Sistemas Multi-Agentes. Esta basada sobre el modelo AGR de Ferber y Gutknecht. AGR en un modelo organizacional basado sobre los principios de Agente, Grupo y Rol.

Es una plataforma multi-agente para desarrollar y ejecutar aplicaciones basadas en un paradigma orientado a la organización. Este paradigma utiliza a los grupos y los roles como base para construir aplicaciones complejas. MADKit no está asociado a ninguna arquitectura de agentes en particular, permitiendo a los usuarios de esta plataforma implementar libremente sus propias arquitecturas.



ROBOcup





La Robo Copa es una iniciativa internacional para promover los avances en Inteligencia Artificial y Robótica, proveyendo un problema estándar para realizar investigación: el fútbol soccer. Para lograr que un grupo de robots sea capaz de jugar al fútbol en forma autónoma, inteligente y coordinada se requiere desarrollar e integrar una amplia gama de técnicas y algoritmos de Inteligencia Artificial.

El problema de la Robo Copa es sumamente interesante y complejo ya que hay múltiples robots moviéndose a gran velocidad en tiempo real en un ambiente altamente dinámico e incierto. Algunas de las técnicas de Inteligencia Artificial utilizadas son por ejemplo: el diseño de agentes autónomos, algoritmos de coordinación y colaboración multiagente, de razonamiento y aprendizaje automático en tiempo real y robótica entre muchas otras. La Robo Copa no sólo tiene que ver con la investigación y desarrollo del “hardware” de los robots, también tiene que ver con el “software” de su inteligencia, usando algoritmos y técnicas de Inteligencia Artificial y Sistemas Inteligentes.

Existen diferentes ligas en la Robo Copa dependiendo de las características de los robots o agentes de software y los partidos a jugar:

Liga de Simulación

En esta liga dos equipos de 11 agentes de software juegan fútbol en un campo virtual dentro de una computadora. E

Liga de Robots Pequeños (f-180)

En esta liga juegan equipo de 5 robots de no más de 18 cm. de diámetro en una cancha un poco más grande que una mesa de ping-pong. 

Liga de Robots Medianos (f-2000)

En esta liga juegan equipos de 4 robots con un balón de fútbol en un campo de 12x8 metros. El control de los robots es totalmente distribuido, todos los sensores de los robots deben ir a bordo y pueden utilizar comunicación inalámbrica.

Loga de Robots en 4 patas (Aibo)

En esta liga juegan equipos de 4 robots AIBO (unos perritos robóticos fabricados por Sony) en una cancha de 3x5 metros. Los robots también usan red inalámbrica para comunicarse. 

Liga Humanoides

La liga de humanoides es una de las ligas que mas ha progresado y la mas cercana hacia el objetivo del 2050 de RoboCup. En esta liga, robots autónomos con un cuerpo similar al humano así como percepciones similares a las humanas, juegan futbol entre ellos. Los robots son divididos en dos categorías de tamaño: "KidSize" (30-60 cm de alto) y "TeenSize" (100-160 cm de alto). 

Liga de Plataforma Estándar (Nao)

En esta liga todos los equipos utilizan robots idénticos (Nao robot). Por tal motivo los equipos se concentran únicamnete en el desarrollo del programa controlador del robot. 




Bibliografia:

















martes, 16 de octubre de 2012

Practica 3 - Clasificación/Reconocimiento de patrones.

Introducción


Para la práctica #3 se plantea el crear un programa de reconocimiento de patrones en base a siluetas de números, con lo cual pretendemos obtener una respuesta del sistema que nos ayude a identificar a cual número corresponde la silueta, teniendo como opciones del 0 al 9.

Objetivo


Desarrollar un sistema de software que reconozca patrones en base a imagenes de números.

Justificación


Pretendemos obtener un sistema que reconozca partes de un número. Con lo anterior obtendremos un sistema capaz de apoyar al reconocimiento de siluetas de números basado en partes del mismo, o fotografias que muestren el número como tal.

Desarrollo.

Para la realización de esta práctica se utilizó la librería opencv y el lenguaje de programación python. Se utilizo opencv debido a las herramientas que ofrece para el manejo y análisis de imágenes,videos,etc. 
Al estar realizando la práctica, lo primero que se hizo fue documentarse sobre las funciones que tiene la librería y que es capaz de realizarse con ellas, así como buscar información relacionada a redes neuronales y algoritmos para el reconocimiento de patrones.
Se llego a un acuerdo de utilizar un algoritmo llamado K-nearest neighbor debido a que opencv viene con él ya implementado. Se decidió utilizar este algoritmo debido a su fácil comprensión con el punto negativo que por ser un algoritmo tan simple, el utilizarlo genera demasiado uso de memoria de la computadora.

Código.

El programa se divide en tres partes importantes que son: crear los vectores que usa el algoritmo,entrenar a la red con el algoritmo y finalmente las pruebas.

En la función para crear los vectores con las imágenes para entrenar a la red,se tiene el siguiente código:

El segmento de código con el cual se entrena a la red es el siguiente:
Por ultimo,el código con el cual se realizan las pruebas es el siguiente:


El código completo se encuentra aquí.

Resultados.


Los resultados de la práctica fueron parcialmente satisfactorios. La parte satisfactoria es que la red se pudo entrenar y se pudieron hacer las pruebas correspondientes, pero los resultados de los reconocimientos no fueron para nada cercanos a lo que se pretendía. 

Lo primero que se trató hacer,fue modificar el valor de la k de manera arbitraria (porque no hay manera correcta de dar un valor a ésta) del algoritmo para ver los efectos de ésta sobre los resultados de las búsquedas  y aunque si se ven ligeras diferencias siguen sin ser reconocidos los patrones de manera correcta.

Otro factor que se cree es de crucial importancia,es la cantidad de muestras que se le dieron a la red. Se cree que son muy pocas para poder que la red esté entrenada de manera correcta,debido a que según lo que se investigó para que el algoritmo tenga un muy buen desempeño se necesita entrenar a la red con una cantidad cercana al infinito.

Video.




Conclusiones


El uso de herramientas para la detección de patrones como openCV es de mucha ayuda en este tipo de actividades, ya que cuentan con las librerías necesarias y muy simplificadas, así como el echo de que existen infinidad de proyectos en la red que pueden ayudar con la creación de nuevos proyectos.

El entrenamiento de redes neuronal puede llegar a ser laborioso, ya que es dificil saber con exactitud la cantidad de datos que requiere una red neuronal para obtener una deteccion de patrones satisfactoria, seria adecuado crear una investigación mas a fondo en este tema en base a los resultados que se pretenden obtener, ya que puede variar mucho de un tipo de  patron a otro. 
Así mismo, el uso de redes neuronales bien entrenadas puede facilitar mucho el uso de sistemas computacionales a personas con algún tipo de deficiencia creando un sistema muy amigable de cara al usuario.

Una buen ejemplo son los programas que, en base a algo dibujado en una pantalla (principalmente táctil, con stylus, como en los celulares), transforman los gráficos en texto, apoyando en mucho a la inserción de texto escrito por cualquier persona.

Referencias.

martes, 11 de septiembre de 2012

Practica 2 - Autómata Celular

Practica #2 

Objetivos:



Programar un sistema adaptativo relacionado con cómputo evolutivo o sistemas 

complejos.(automata celular)

Elaborar un reporte donde describas tu trabajo y los resultados a los que llegaste

jueves, 23 de agosto de 2012

Proyecto Clase - AdaptaVOX


Descripción.

Como requisito de evaluación en la materia de Sistemas Adaptativos, se solicitó la creación de un programa, el cual implemente soluciones eficaces en base a parámetros de entrada, dando como resultado salidas o "respuestas" en base a la lógica del programa.

Los requisitos son los siguientes:

  • Herramientas a Utilizar.
  • Planeación inicial.
  • Roles de los integrantes.
En el siguiente documento se encuentra la Primera presentación del proyecto, posteriormente se seguirán subiendo las otras entregas y un video final para mostrar su funcionamiento.


Descarga de la presentación en PDF.
  1. Primera Presentación.

martes, 14 de agosto de 2012

Practica 1 - Semáforos

Nombre de la practica : Semáforos.
Fecha de inicio: 13 - Agosto - 2012
Fecha tentativa de entrega: 18 - Septiembre - 2012


Descripción: Como parte del aprendizaje en el desarrollo de Sistemas
Adaptativos se creara un programa, el cual representará la función de los semáforos en un cruce de vehículos.

Para la primera parte de la practica se desarrollaran los siguientes conceptos:


  • Diseño del cruce.
  • Posibles conflictos en base al diseño del cruce.
  • Diseño de la solución.
  • Código.



POSIBLES CONFLICTOS EN BASE AL DISEÑO DEL CRUCE

  • Tiempos estimados muy bajos para la afluencia de vehículos (por carril).
  • Tiempos estimado muy altos para la afluencia de  vehículos  (por carril).
  • Posibles conflictos en colisiones al estar dos semáforos en verde.
DISEÑO DE LA SOLUCIÓN
  • Se pretende utilizar una metodología que se utiliza normalmente en las ciudades con una gran afluencia de vehículos. La metodología consiste en tener sensores en cada uno de los sentidos del crucero y dar prioridad a los que muestran mayor afluencia de vehículos adaptándose a las necesidades de cada carril. Se da prioridad al sentido con mayor cantidad de vehículos y a partir de él, se monitorea la afluencia de los demás carriles para lograr una mejor fluidez. Dependiendo de si hay vehículos en el sentido, se dará verde en el semáforo y si no, pasará al siguiente sentido.

AVANCE DEL CODIGO

En el siguiente codigo se observa el hilo principal donde se muestran los parametros del semáforo (Verde, Amarillo, Rojo), da los tiempos en base a un "tiempo inicial" entre el cambio de un color del semaforo a otro y quita carros en relación al "tiempo asignado fijo" en base a el tiempo que tarda un solo vehiculo en "salir del carril".