Resumen: En este documento se detallan los pasos mínimos necesarios para comprobar que dos agentes de tipo Agente-DPS-Node, se comunican correctamente y pueden acceder y modificar la Memoria de Trabajo desde la Shell-Asíncrona o desde el intérprete de comandos JADE-Shell. Para que estos agentes puedan comunicarse adecuadamente, deben pertenecer a réplicas de una misma aplicación. Por ese motivo es importante, antes de acometer el paso.2, haber realizado el Paso.1 con éxito y contar así, con la estructura base creada para la aplicación Avalon.

Palabras clave:

Protocolo de Comunicaciones entre agentes, Shell-Asíncrona, Paso de Hechos entre Agentes.


Detalle de procesos



1. Objetivo: Desplegar dos de los Agentes de la aplicación Avalon, ambos conectados a sendos motores de tipo CLIPS y empleando el modo-depuración. Estos dos agentes presentan los nombres: Analizador200 / Analizador204 y, pertenecen a la réplica de la aplicación orientada a agentes Avalon.

Proceso:

  1. Lanzar la plataforma JADE sobre el puerto 4455. (como ejemplo de comprobación)
  2. Lanzar el agente (Analizador200) en modo depuración sobre el puerto 4455 en la dirección 127.0.0.1.
  3. Lanzar el segundo agente (Analizador204) en modo depuración sobre el puerto 4455 en la dirección 127.0.0.1.

    RESUMEN: Estos son los pasos previos seguidos en la práctica.1:
    ---------------------------------------------------------------
    
    
    $ export CLASSPATH=./*:lib/*:
    $ java framework new Avalon
    $ cd Avalon
    $ java generate -n=Analizador200,Analizador204  -t=node
    $ java launcher platform   localhost 4455 &
    $ java launcher stage-node localhost Analizador204 CLIPS  4455 &
    $ java launcher stage-node localhost Analizador200 CLIPS  4455 &
    



2. Objetivo: Establecer el nivel-de-ejecución de los Agentes en valor = 5. De esa forma, se activan todas las escuchas y los mensajes pueden ser emitidos y capturados de sus Bandejas de entradas.

Proceso:

  1. Activar el nivel de ejecución a 5 en ambos agentes. Ese es, el modo-normal de ejecución.

    $  Hacer  click en botón superior [n-5] del Agente.
    $  O bien, desde consola de JADE-Shell del Agente, ejecutar: **init(5);**
    



3. Objetivo: Cargar Hechos en la memoria de trabajo de un agente, y en la memoria de trabajo del segundo agente de manera remota. Utilizar para ello la Shell Asíncrona y el Selector de Agentes que pertenecen a la aplicación Avalon.

Proceso:

  1. Acceder a la Shell Asíncrona del primer Agente.
  2. Comprobar el estado de la Base de conocimientos. (facts)
  3. Insertar un nuevo Hecho. (assert …)
  4. Seleccionar el Agente remoto, donde remitir un Hecho hacia su Memoria de Trabajo.
  5. Insertar un nuevo Hecho en la Memoria de Trabajo del otro agente. (assert …)
  6. Comprobar que se han insertado dicho Hecho en la Memoria remota del otro agente.

TicketBoard

    Acceder a la Shell Asíncrona en la pestaña de **Analizador204**
    
    (facts)                       Presionar  [Ctrl + Mayus. +  Enter] 
    (assert  (velocidad 0.0))     Presionar  [Ctrl + Mayus. +  Enter]
    (facts)                       Presionar  [Ctrl + Mayus. +  Enter]



    Sin cambiar de agente **Analizador204**, seleccinar el nombre del Agente
    **Analizar200** de la lista de agentes de la aplicación.

    Introducir en la Shell-Asíncrona.


    (assert (aceleracion 3.0))     Presionar  [Ctrl + Mayus. +  Enter]


    Ir hacia la ventana del agente **Analizador200**
    Acceder a la Shell Asíncrona en la pestaña de **Analizador20**
     
    (facts)                       Presionar  [Ctrl + Mayus. +  Enter]

TicketBoard


  • Con esto se ha comprobado que, los Hechos, y de igual forma las Reglas, pueden ser transmitidos desde unos Agentes-DPS hacia otros de la misma aplicación.


Utilizando sólo el intérprete JADE-Shell


4. Objetivo: Cargar Hechos en la memoria de trabajo del propio agente o, en la memoria de trabajo de otro agente. Y utilizar para ello sólo el intérpete JADE-Shell del agente en modo de depuración.

Proceso:

  1. Acceder a la JADE-Shell del Agente origen de las solicitudes.
  2. Construir el mensaje.
  3. Construir el comportamiento e incorporarlo al Agente.
  4. Comprobar resultados en la Memoria de Trabajo del Agente remoto.
  • Acceder al intérprete JADE-Shell incorporado en el agente, en modo-depuración.
  • Utilizar por ejemplo, el agente: Analizador204

Construcción del mensaje:

    [psNode]://Analizador204/config/$ > 


     $ >  hecho   = "(assert  (area  5,88789))";
     $ >  msgREPL = myAgent .makeReplMessage( "Analizador200", hecho );

TicketBoard

    -------------------------------------------------
     DETALLE del contenido del mensaje msgREPL
    -------------------------------------------------
    <(REQUEST
       :sender  ( agent-identifier :name Analizador204@127.0.0.1:4455/JADE  
                  :addresses (sequence http://zorba:7778/acc ))
       :receiver  (set ( agent-identifier :name Analizador200@127.0.0.1:4455/JADE ) )
       :content  "((action (agent-identifier :name Analizador200@127.0.0.1:4455/JADE) 
                     (repl :compiler CLIPS 
                           :content @seeEnvelope_Comments 
                           :language CLIPS 
                           :resultType String 
                           :results waiting... 
                           :sentence KGFzc2VydCAgKGFyZWEgIDUsODg3ODkpKQ==)))" 
       :encoding  fipa.acl.rep.string.std  
       :language  fipa-sl  
       :ontology  Expert-Systems  
       :protocol  fipa-request
       :X-psAction Repl 
       :X-psSender Analizador204 
       :X-psReceiver Analizador200 
    )>
  • Construir el comportamiento (Behaviour) e incorporarlo al Agente.

      [psNode]://Analizador204/config/$ > ...
      
       $ >   b = new N2NREInitiator( myAgent, msgREPL );
    
       $ >   b .setBehaviourName( "etiqueta" );
    
       $ >   myAgent .addBehaviour( b );
    
  • Comprobar resultados en la Memoria de Trabajo del Agente remoto.

  • Desde la pestaña de Shell-Asíncrona del agente Analizador200, comprobar que los hechos solicitados han sido insertados en la Memoria de Trabajo del agente (facts).

      (facts)                       Presionar  [Ctrl + Mayus. +  Enter]
    

TicketBoard

    Se observa el resultado:
    ---------------------------
    f-0..
    f-1...
    f-3   (area  5,88789)
    ...
  • Con esto se ha comprobado de nuevo que, los Hechos, y de igual forma las Reglas, pueden ser transmitidos desde unos Agentes-DPS hacia las Memorias de Trabajo de otros si ambos agentes pertenece a una misma aplicación.


Cómo encomendar tareas de cálculo a otros Agentes-DPS


5. Objetivo: Solicitar a un Agente-DPS tipo Node, realizar tareas de cálculo y recibir los resultados.

Proceso:

  1. Especializar al Analizador200, en el cálculo de Sudokus de 2x2, 3x3, 4x4 y 5x5 celdas de tamaño.
  2. Desde otro agente, encomendar la ejecución de un Caso de cálculo al agente Analizador200.

Proceso de especialización

5.1 Modificar archivo node.properties del agente Analizador200:

  • Modificar el estado de la variable: ps.node.behaviour-acpb = 0 e igualar a 1. (Línea 17).

  • Salvar los cambios: presionando en botón [Save].

  • Inicializar el agente: presionando en botón [n-6 !].

  • CRÍTICO: a continuación, presionarel botón [n-5] para que el agente Analizador200 alcance su nivel de ejecución normal, o de lo contrario, no responderá a peticiones remotas. Ese nivel, es el nivel normal de ejecución cuando el agente se ejecuta en producción sobre JADE.

TicketBoard

  • IMPORTANTE: Véase siguiente imagen. En ella se observa, en la esquina inferior derecha, la salida de consola del sistema devuelta por la Plataforma JADE cuando se presiona el botón [n-6!] de re-inicialización del agente. En dicha salida de Log, se informa que: el Agente Analizador200 a ejecutado el comportamiento acpb (Acrónimo de: Agent-Capabilities). (Véase última línea).

  • El Script acpb puede localizarse en el editor del Agente (parte superior central de la imagen) en el archivo bhv.acpb.bsh. Dicho archivo es una secuencia de comandos (script) que especializa al agente Analizador200 y le que permite afrontar la resolución de problemas, en este caso, la resolución de problemas de tipo sudoku 2x2, 3x3, 4x4 y 5x5 celdas.

TicketBoard

Proceso de encomienda de tareas

5.2 Acceder a la Shell-Asíncrona del agente Analizador204:

  • Seleccionar en la lista de agentes de la aplicación al agente Analizador200.

  • Cargar un archivo de propuesta de resolución sencillo, e.g. grid3x3-p2.clp.

  • Solicitar su resolución al agente remoto Analizador200.

      (load nodes/Analizador200/engine/grid3x3-p2.clp)
    
      (reset)
    
      (run)
    
  • Cargar a continuación un archivo de propuesta complejo, e.g. grid4x4-p4.clp.

  • Solicitar su resolución al agente remoto Analizador200.

      (reset)
    
      (load nodes/Analizador200/engine/grid4x4-p4.clp)
    
      (reset)
    
      (run)
    

TicketBoard

  • Observar tiempos consumidos por el agente Analizador200. (Nota: realizar scrolling hacia arriba en la ventana de recopilación de respuestas del motor de inferencia).

      ---------------------------------------------------------------
       DETALLE de la respuesta (en formato humano) del agente remoto
      ---------------------------------------------------------------
    
      [Analizador200] Agree and queue that REQUEST to its Engine!
        
                                 +-------------------------+
      --------------------------/ Response from:[Analizador200]
      | [n2ni022] INFORM-IF       [sept. 07, 07:45:00.287]
      |                        Delta-Time:[0.607 seconds.]
      -----------------------------------------------------+
      Returns: java.lang.Boolean
      Value  : true
      Results: 
    
    
      The puzzle is: 
      ... etc.
    


Procesos de depuración

5.3 Cómo realizar un análisis pormenorizado de las actividades del Analizador204

  • Con el procedimiento anterior, se comprueba cómo encomendar procesos de resolución de problemas a agentes especializados y cómo se pueden recibir respuesta de sus conclusiones. Para obtener una descripción más amplia y pormenorizada de cúal ha sido el proceso interno, puede activarse en el archivo del agente Analizador200 el modo Verbose. Para ello:
  1. Modifique el archivo node.properties del Analizador200 variable ps.node.agent.verbose.mode = 1, e igualar a “1”.
  2. Re-inicializar Analizador200 con botón [n-6!] y a continuación [n-5] para re-establecer a nivel de ejecución normal.
  3. Repetir los últimos cuatro pasos desde la Shell-Asíncrona del agente Analizador204, esto es:

     (reset)
     (load nodes/Analizador200/engine/grid3x3-p2.clp)
     (reset)
     (run)
    
  • Y observar a continuación el volcado en el Log del sistema generado por JADE, en función de las actuaciones que ha llevado a cabo el agente Analizador200 para resolver y responder a las cuestiones planteadas.

  • NOTA: Destacar finalmente, que al activar también el modo Verbose en el agente Analizador204 –desde donde se están realizando las peticiones–, se obtendrá una imágen completa del diálogo entre ambos agentes para alcanzar la petición, recepción, elaboración de la respuesta, respuesta y recepción. Todos esos actos comunicativos y la secuencia armónica de los mismos, son llevados a cabo por Comportamientos que implementan el modelo de comunicación racional entre agentes. (Véase, FIPA Communicative Act Library Specification).

  • Este será, el mecanismo habitual utilizado por los Desarrolladores, para comprobar y depurar el comportamiento de los agentes, durante la implementación de Aplicaciones orientadas a agentes.

TicketBoard


Bibliografía