Sunday, November 11, 2012

Reporte 4 [Clase]

Sistemas Multiagente

Para realizar este reporte se nos dieron 4 opciones JADE, SPADE, Madkit y Robocup, de las cuales se escogió hacerlo sobre uno de los lenguajes que mas llaman la atención por la versatilidad que presenta y su aplicación simple, esto debido a que es multiplataforma y existe en la mayoría de los equipos un JRE para poder correr dichas aplicaciones generadas en Java sin necesidad de instalar complementos adicionales (dependiendo el programador ya incluiría en su instalación los paquetes que requiera adicionales) .

JADE (Java Agent DEvelopment Framework) es un marco de trabajo aplicado plenamente en el lenguaje Java. Simplifica la implementación de sistemas multi-agente a través de un middleware que cumple con las especificaciones FIPA y a través de un conjunto de herramientas gráficas que soportan la depuración y fases de despliegue. La plataforma de agentes pueden ser distribuidos a través de máquinas (que ni siquiera necesitan compartir el mismo sistema operativo) y la configuración se puede controlar a través de una interfaz gráfica de usuario remoto . 

La configuración se puede cambiar incluso en tiempo de ejecución moviendo agentes de una máquina a otra, como y cuando sea necesario. JADE está completamente implementada en lenguaje Java y la exigencia mínima del sistema es la versión 1.4 de Java (el entorno de tiempo de ejecución o el JDK).

JADE es software libre y se distribuye por Telecom Italia , el titular del derecho de autor, en el software de código abierto bajo los términos de la LGPL (Lesser General Public License Version 2). Desde mayo de 2003, una Asociación JADE ha creado supervisiones para la gestión del proyecto JADE. Actualmente lista 5 miembros: Telecom Italia , Motorola , Whitestein Technologies AG, GmbH Profactor y France Telecom R & D .

JADE tiene una extensión denominada WADE (Workflows and Agents Development Environment) que es un sistema de workflow que permite crear procesos mediante un editor gráfico llamado WOLF.

El componente clave de la plataforma WADE es la clase Workflow Engine Agent que extiende la clase Agent básica de la biblioteca JADE incorporada en el flujo de trabajo,  es un motor pequeño y ligero. Además de los comportamientos JADE normales, un Workflow Engine Agent es por lo tanto capaz de ejecutar flujos de trabajo representadas de acuerdo con un formalismo WADE específico. Este formalismo se basa en el lenguaje Java: un flujo de trabajo WADE es en realidad una clase Java con una estructura bien definida. Este enfoque permite combinar la expresividad de la metáfora del flujo de trabajo con el poder de un lenguaje de programación como Java, y permite el uso de flujos de trabajo para la definición de sistema de lógica interna.


En principio WADE apoya el estilo de programación "editor de textos - programación" en el sentido de que no hay cosas ocultas que los desarrolladores no pueden controlar. Sin embargo, sobre todo teniendo en cuenta que una de las ventajas principales del enfoque de flujo de trabajo es la posibilidad de representar los procesos en una forma gráfica amigable, WADE viene con un entorno de desarrollo llamado WOLF que facilita la creación de WADE  o una aplicación basada en WADE. WOLF es un plug-in de Eclipse, y como consecuencia permite a los desarrolladores aprovechar WADE con todo el poder de la IDE de Eclipse más características adicionales específicas de WAD.


Ejemplo tomado del tutorial de WADE, Fracción de código

... 
public class AssemblerAgent extends WorkflowEngineAgent { 
  private AssemblerAgentGui myGui; 
  private DispatchingCapabilities dc = new DispatchingCapabilities(); 
  private List searcherAgents = new ArrayList();  
  private int index = 0; 
  /**
   * Agent initialization
   */

  protected void agentSpecificSetup() throws AgentInitializationException { 
    super.agentSpecificSetup(); 
// Create and show the gui
    myGui = new AssemblerAgentGui(this); 
    myGui.initGui(); 
    myGui.setVisible(true); 
    // Initialize the DispatchingCapabilities instance used 
    // to launch workflows
    dc.init(this);

    // Subscribe to the DF to keep the searchers list up to date
    ServiceDescription sd = new ServiceDescription(); 
    sd.setType("Searcher Agent"); 
    DFAgentDescription dfTemplate = new DFAgentDescription(); 
    dfTemplate.addServices(sd); 
    SearchConstraints sc = new SearchConstraints(); 
    sc.setMaxResults(new Long(-1)); 
    ACLMessage subscribe = DFService.createSubscriptionMessage( 
                           this,  
                           getDefaultDF(),  
                           dfTemplate,  
                           sc); 
    addBehaviour(new SubscriptionInitiator(this, subscribe) { 
      ... 
    } ); 
  } 
  ... 
  /** 
   * Select a suitable SearcherAgent 
   */ 



  public AID getSearcherAgent() { 
    if (searcherAgents.isEmpty()) { 
      throw new RuntimeException("No SearcherAgent available"); 
    } 
    if (index >=searcherAgents.size()) { 
      index = 0; 
    } 
    return (AID) searcherAgents.get(index++); 
  } 
  /**
   * The method invoked by the GUI when the user requests
   * the assembling of a toy
   */
  void assembleToy(final String type) { 
    ... 
  } 



Finalmente obtenemos de manera simple y llana la salida de este código, el cual posteriormente implementará la interfaz gráfica para definir las tareas visuales que se realizan.


El orden de las imágenes no necesariamente cumple con lo especificado en el código o en el reporte de cada uno de los pasos a seguir cuando utilizamos el tutorial; sin embargo es muy claro en la forma de trabajo que debemos seguir para obtener un resultado favorable; también es un hecho, el tutorial esta orientado a un ejemplo especifico, si nosotros deseamos interactuar con WADE a través de JADE podemos implementar por mencionar un ejemplo, la practica 4 utilizando estas herramientas si nuestro interés es aplicar el lenguaje Java en su conjunto con estas dos herramientas indispensables para un resultado sobresaliente en una aplicación sencilla.


También la empresa Oracle presenta una herramienta interesante que trabaja de manera similar, mas poderosa y mas orientada a las empresas de mayor peso, dejo aquí un demo de esa herramienta y como podemos, por mencionar el ejemplo de subastas, hacer una pequeña aplicación de esa subasta mediante JDeveloper. Les dejo este Link para que visiten y visualicen en tiempo real como trabaja esta herramienta. Hay opciones de paga que también permiten obtener un trabajo de mayor calidad y menores contratiempos basados en estas herramientas que se presentan en este reporte.

Video Demostrativo



Vídeo 1 en Youtube sobre el uso de Jade y Wade en Android.


Vídeo 2 Ejemplo sin utilizar la Interfaz Gráfica, solo a través de consola.


Vídeo 3 Ejemplo interactuando con la GUI de JADE directamente.


Paginas visitadas

http://jade.tilab.com/

http://jade.tilab.com/wade/index.html

Videos utilizados incrustados en este reporte desde su ubicación original para no afectar a sus autores. Videos personales incluidos en este reporte, utilizando la salida en consola para el reporte.

Imágenes utilizadas en este reporte:

E X P L O I T I N G I N T E R A C T I V E  
W O R K F L O W S  O N  A N D R O I D D E V I C E S
http://jade.tilab.com/wade/doc/tutorial/ExploitingInteractiveWorkflowsOnAndroidDevices.pdf


WA D E  T U TO R I A L  
DEFINING AGENT TASKS AS WORKFLOWS

http://jade.tilab.com/wade/doc/tutorial/WADE-Tutorial.pdf