Desarrollo de sistemas multiagentes

El tema de estudio del mes pasado era la implementación de sistemas multiagentes o SMA bajo la asesoría del profesor Luis Castillo.  Estuvo muy interesante ya que alcanzamos a hacer varias prácticas utilizando la infraestructura de Jade, un framework para Java.

Como práctica propia desarrollé un prototipo llamado Buscador de talento amigo que resultó hasta interesante.  Su objetivo es el de ayudarnos con algo que nos interesa bastante y frecuentemente: encontrar talento técnico para el desarrollo de nuestros proyectos, o visto desde el otro ángulo: buscar empleo.

La idea original era utilizar la base de datos de contactos de una red social real (Facebook o alguna OpenSocial), sin embargo revisando sus APIs y reglamentos es aparentemente inviable, ya que no permiten legalmente que se extraiga información de estas redes.   Por esto tuve que volver aún mas prototipo a mi prototipo y elaborar mi propia versión de una extremadamente simple red social llamada Mandarina Social donde los usuarios pudieran tener un perfil propio (nombres, profesión, rol e información de ubicación) y tener a otros usuarios como amigos.  El objetivo del sistema es aprovechar esta relación de FOAF.

En términos generales, el sistema le pregunta a un usuario de la red social: cómo es el perfil de las personas que necesita, es decir, que requiere que hayan estudiado: “ingeniería de sistemas“, “zootecnia“, etc; así como alguna información adicional: dónde está ubicada la red social, cuántos perfiles requiere, cuántos niveles de amistad desea verificar y cuánto tiempo desea que el SMA utilice en la búsqueda de talento.

Con esta información el sistema crea a un agente Atendedor quien se encargará de la interacción con el usuario final y que a su vez crea a agentes Buscadores que basados en el perfil del usuario que realiza el requerimiento empiezan a escudriñar a la red social en búsqueda del perfil especificado, saltando entre los contactos amigos del usuario y recursivamente entre los amigos de sus amigos.  Mandarina Social fue desarrollada basada en la especificación hCard de Microformats la cual estandariza ciertas etiquetas (clases CSS en realidad) para demarcar la información del perfil y de las listas de amigos, permitiendo posteriormente su extracción fácil utilizando XPath.  Este enfoque tiene un valor agregado, si se nota, se evita la necesidad de crear una interfaz web para los usuarios humanos y otra, probablemente XML, para el intercambio de datos entre aplicaciones.  Todo se resume en una única versión XHTML/hCard.

Al final de esta etapa de búsqueda se tiene una lista de contactos candidatos que fueron encontrados entre los contactos del usuario.  Los contactos de esta lista incluyen en su información de perfil los datos de su ubicación de la forma: Ciudad, Departamento, País.  Esta información es georreferenciada gracias al agente GeoLocalizador que utiliza al servicio web de Geonames para obtener la ubicación de latitud y longitud de cada uno de los candidatos.

Los candidatos georreferenciados son entregados a un agente Seleccionador quien deberá elegir cuales de los candidatos serán finalmente elegidos.  Esto lo hará basado en la cantidad de perfiles solicitados y un criterio de selección, el cual para este prototipo es la cercanía de los candidatos con respecto al usuario solicitante.  El cálculo de distancias entre candidatos y usuario solicitante es realizado por el agente CalculadorDeDistancias el cual desarrolla su función gracias a la librería JCoord.

Una vez el agente Seleccionador ha decidido cuales de los candidatos son los realmente elegidos, transmite este listado de regreso al agente Atendedor quien gracias al servicio de Google Maps elabora un mapa con las ubicaciones de los contactos con el perfil requerido.  Este mapa junto con el listado de los perfiles es mostrado al usuario como respuesta a su solicitud.

La descripción realizada hasta el momento se complementa con la presentación informal que creé para la muestra del prototipo en sociedad y que incluyo a continuación.

El desarrollo de este prototipo despertó mi curiosidad respecto a los SMA y me permitió darme cuenta que no son abstracciones tan complejas y extrañas como esperaba, mas que un paradigma diferente es una infraestructura que facilita la solución de ciertos tipos de problemas, infraestructura que uno mismo podría terminar desarrollando parcialmente en su propia aplicación pero que no es necesario ya que es provista como una base por la librería, en mi caso de estudio, Jade.  Obviamente existen muchas otras opciones diferentes a Jade, aún mas, dentro de ella hay muchos otros recursos diferentes de los aprovechados con este prototipo, como por ejemplo, la movilidad de agentes entre plataformas físicas gracias a que, según pude apreciar, está desarrollado sobre RMI.  A fin de cuentas, esta es apenas mi primera aproximación al mundo de los agentes.

A pesar de que el prototipo es completamente funcional estas son algunas de las cosas que podría mejorarle en un futuro.

  • Algunas secciones de código son suceptibles de ser optimizadas con refactorización.
  • Sería interesante confirmar la no viabilidad de acceso a las redes sociales reales y en caso se ser posible implementar interfaces para permitir el acceso a su información, en caso contrario, implementar una mejor versión de Mandarina Social.
  • Determinar y solucionar el porqué la manipulación de los datos XHTML de la red social utilizando a XPath genera algunas veces problemas sin motivos aparentes: Connection Reset.
  • Optimizar la distribución de tiempos de espera entre los agentes buscadores.
  • Mejorar la transmisión de mensajes entre agentes, en especial, los que indican condiciones de error.
  • Mejorar el manejo de condiciones de error y su recuperación ante estas o eventos inesperados.
  • Buscar otras formas de interacción con el usuario además de la ya muy conocida ventana de GUI.
  • Mostrar al usuario final través de la GUI los mensajes de estado de los agentes que actualmente se muestran a través de la consola.
  • Solucionar posibles problemas con la muerte (remoción) de los agentes de la plataforma.
  • Verificar el correcto funcionamiento de la concurrencia de solicitudes.

Probablemente mas adelante publique algunos artículos prácticos relacionados con lo aprendido sobre la librería Jade en este blog, alias mi caché mental.

Como para todo lo que aprendo y me emociona, espero por estos temas volver a pasar en un futuro cercano.

Leave a Reply

Your email address will not be published. Required fields are marked *