You are on page 1of 14

Actividad integradora 1

Unidad 2 – Diseño de Agentes

Segunda Parcial – Materia Inteligencia Artificial distribuida

Para realizar esta actividad es necesario que hayas revisado las diapositivas de la Unidad 1, también,
el archivo de texto 1-Agentes.docx, Ahí encontrarán los referentes teóricos que te permitirán
realizar esta actividad. El objetivo de esta actividad integradora es que domines la técnica de
programación de agentes en Java utilizando el FW de Jade y logres diferenciar entre un programa
escrito en programación orientada a objetos activos y la programación de Agentes en Java.

Entregables:

1. Un documento donde presentes el planteamiento solicitado


2. Un programa en lenguaje Java basado en el FW de Jade que solucione el problema
planteado

¿Qué hacer?

1) Lee con detenimiento la siguiente situación:

Se requiere diseñar un programa en lenguaje Java que implemente una aplicación heredando
de la clase Agent en Jade atributos y métodos para personalizar la ejecución de un Agente
denominado Smith. En una primera instancia permita que el Agente Smith despliegue un
mensaje de saludo al inicializarse y un mensaje de despedida al finalizar su ejecución. En una
segunda instancia deberá desplegar su AID y su posición.

 Construir la aplicación en NetBeans mediante el lenguaje Java utilizando el FW de Jade. Se


puede auxiliar de la consola de NetBeans para la visualización previa de los mensajes.
 Utilice el AMS de la consola de Jade para interacción con el Agente Smith, invocándola desde
la interfaz de NetBeans y desde la línea de comando de Windows.

a) Planteamiento teórico:
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 manifestar.
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 método de inicio (setup) y otro de fin (takeDown).
 El método protegido setup() sirve para inicializar el agente incluyendo instrucciones
que especificarán la ontología a utilizar y los comportamientos asociados al agente.
Se invoca al comenzar la ejecución del agente.
 El método protegido takeDown() sirve para liberar recursos antes de la eliminación del
agente. Este método es invocado cuando se realiza una llamada al método doDelete(),
que es el que realmente da por finalizada la ejecución del agente.
 Ambos métodos deben ser sobrescritos.

 En su implementación se define una clase interna por cada uno de los comportamientos
asociados al agente. Estos comportamientos se utilizan básicamente para el envío y recepción de
mensajes, aunque también se pueden utilizar para realizar otras tareas.

Podemos encontrar una descripción completa de la API de jade.core.Agent en el siguiente link:


http://jade.tilab.com/doc/api/jade/core/Agent.html.

import jade.core.Agent;

public class MiAgente extends Agent {


protected void setup(){ // inicialización de MiAgente }
protected void takeDown() { // liberación de recursos del agente }
}

La clase Agent:

 Es una superclase común que permite a los usuarios crear software de agentes.
 Suministra métodos que permiten ejecutar las tareas básicas de los agentes como:
 Pasar mensajes utilizando objetos ACLMessage, con correspondencia de patrones.
 Dar soporte al ciclo de vida de un agente.
 Planificar y ejecutar múltiples actividades concurrentemente.

Los programadores de aplicaciones basadas en agentes deben escribir sus propios agentes como
subclases de Agent, añadiendo tantos comportamientos específicos como sean necesarios y
explotando las capacidades de la clase Agent.

Ciclo de vida de un agente


Un agente está sujeto a un ciclo de vida en el que se definen los estados en los cuales se puede
encontrar el agente, así como los cambios que se pueden realizar entre los diferentes estados.
El ciclo de vida de un agente JADE sigue el ciclo propuesto por FIPA (http://www.fipa.org), es decir,
cumple con la propuesta del estándar de interoperabilidad entre agentes más aceptado.
Estados de un agente

Un agente puede estar en los siguientes estados:

 Iniciado: El objeto Agente está creado, pero todavía no se ha registrado en el AMS, no


tiene nombre ni dirección y tampoco se puede comunicar con otros agentes.
 Activo: El Agente está registrado en el AMS, tiene un nombre, una dirección y puede
acceder a todas las opciones de JADE.
 Suspendido: El Agente está parado. Su hilo de ejecución está detenido y no ejecuta
ningún Comportamiento.
 En espera: El Agente está bloqueado esperando por algo. Su hilo de ejecución está
dormido en un monitor de java y se despertará cuando se cumpla una cierta condición
(cuando reciba un mensaje).
 Desconocido: El Agente ha sido eliminado. El hilo de ejecución ha terminado y se ha
eliminado del registro del AMS.
 Tránsito: Un Agente móvil entra en este estado mientras está migrando a una nueva
localización. El sistema sigue guardando los mensajes en el buffer hasta que el agente
vuelve a estar activo.

Transiciones entre estados:

Un agente puede cambiar de un estado a otro a través de transiciones. Estas transiciones pueden
ser ejecutadas a través de métodos disponibles en la clase Agent y ser capturados por métodos que
se pueden sobrescribir. Para saber en qué estado se encuentra un agente se puede usar el
método getAgentState( ) de la clase Agent que devuelve un objeto de la clase AgentState
(http://jade.tilab.com/doc/api/jade/wrapper/AgentState.html), a continuación se describen
detalladamente:

public AgentState getAgentState()

Acción Descripción Método que Método que


realiza la acción captura la acción

Crear Creación o instalación de un nuevo agente. Constructor setup()

Invocar Invocación de un nuevo agente.

Suspender Pone un agente en estado suspendido. Puede ser iniciado doSuspend()


por el agente o por el AMS.

Reanudar Continúa con la ejecución de un agente que se encuentra


en estado suspendido. Sólo puede ser iniciado por el
AMS.
Esperar Pone un agente en estado de espera. Sólo puede ser doWait()
iniciado por el agente.

Despertar Continúa con la ejecución de un agente que se encuentra doWake()


en estado de espera. Sólo puede ser iniciado por el AMS.

Mover Pone un agente en otro contenedor cambiando su estado doMove() beforeMove() y


al de tránsito. Sólo puede ser iniciado por el agente. afterMove()

Ejecutar Continúa con la ejecución de un agente que se encuentra


en estado de tránsito. Sólo puede ser iniciado por el
AMS.

Destruir La terminación normal o forzosa de un agente. Sólo doDelete() takeDown()


puede ser iniciado por el AMS y no puede ser ignorado
por el agente.

Visión gráfica:
b) Procedimiento:

Creación de agentes

En el momento de crearse un agente se realizan varias tareas de forma automática:

1. Se llama al constructor del agente.


2. Se crea un identificador del agente (AID).
3. Se registra el agente en el AMS.
4. Se ejecuta el método setup(), que debe contener únicamente el código relativo a las tareas de
inicialización.

En el método setup() del agente además puede:

 Modificar el registro del AMS.


 Registrar el agente de forma explícita en el DF.
 Añadir las tareas/comportamientos/behaviors que ejecutará el agente.
 Etc.

El esqueleto de la creación de un agente es bastante simple. El siguiente código muestra un ejemplo


de creación de un agente que lo único que hace es visualizar el texto "El agente se ha iniciado.".

// Esqueleto de un agente JADE


import jade.core.Agent;

public class MiAgente extends Agent {


protected void setup() {
System.out.println("El agente se ha iniciado.");
}
}

Para trabajar con agentes en primera instancia deberá descargar el FW de Jade desde el siguiente
link: http://jade.tilab.com/download/jade/

Después de aceptar los términos y condiciones, descargue la versión .zip (jadeBin) y descomprímala
en el escritorio de Windows, encuentre el archivo Jade.jar y cópielo directamente en el escritorio para
que sea fácilmente accesible desde NetBeans para todos sus proyectos.
Descargue jadeBin:

Descomprima el archivo JADE-bin-4.5.0.zip en el escritorio para fácil acceso:


Ahora puede crear un nuevo proyecto con una Java Application en NetBeans que aproveche la
librería de jade.jar que contiene el framework (FW) de Jade, nómbrela MiPrimerAgente y deje a
NetBeans crear la clase principal y la carpeta /lib para las librerías porque ahí guardaremos
posteriormente nuestro archivo jade.jar:

Una vez creado el esqueleto de programa, borre el método main() del programa Java creado para
que quede su programa así, con una clase vacia:
Ahora es posible agregar la librería de Jade y configurar el path de Windows hacia esa librería y que
NetBeans pueda accesarla y compilarla correctamente, copie el archivo jade.jar a la carpeta /lib del
proyecto:

Configure el path en el apartado Propiedades del proyecto/Bibliotecas, pestañas Compilar y


Ejecutar:
Agregue el archivo jade.jar usando la opción Añadir JAR/Carpeta de la pestaña Compilar:

Repita el procedimiento para la carpeta Run:


Una vez que se ha configurado el path a nuestro archivo de librería, ahora es posible incorporar su
código a nuestro programa fuente, agregue la sentencia import jade.core.Agent para declarar la
clase de la que queremos importar sus objetos:

Inicialice los métodos setup() y takeDown() respectivos, para que nuestro agente de un mensaje de
bienvenida al iniciar su ejecución y de despedida al pasar al estado final, por tanto, extienda la clase
MiPrimerAgente para que herede de la clase Agent objetos, métodos y atributos y agregue lo
métodos de usuario setup() y takeDown():
Para ejecutar nuestro agente ahora que lo hemos creado necesitamos crear la instancia en nuestro
sistema operativo que sostendrá al agente, para ello en la ventana Propiedades de nuestro proyecto
definimos la clase que contiene la declaración de sentencias de nuestro agente, en este caso
MiPrimerAgente, del paquete miprimeragente, también ejecutamos la interfaz de usuario del AMS
para efectuar la supervisión del funcionamiento y comportamiento de nuestros agentes, finalmente
de un nombre al agente, en el caso de este ejemplo el agente se llamara Smith, esto debe hacerse
en el apartado Ejecutar:

Ejecute el programa y observe los elementos que componen el proyecto, también la pantalla de la
interfaz de usuario del RMS (Remote Management System) deberá ejecutarse, desde ahí podremos
consultar los movimientos de nuestros agentes:
Si desactivamos el Agente Smith mediante el estado de proceso Kill, se ejecutara el metodo
takeDown():

Aparecerá la cadena de texto que enviamos mediante takeDown(), finalice la sesión con sus Agentes
cerrando el RMS mediante el icono X:
Actividad: Agregue una foto de su práctica visualizando la segunda parte de
la especificación de usuario, despliegue el AID del agente, su nombre y su
posición:

Pon aquí el código fuente Java:

Segunda parte

Pon aquí las capturas de pantalla de la ejecución del programa:


Segunda parte

1) Cuando hayas terminado tu trabajo, sube este reporte debidamente llenado con tus evidencias
y participa en la actividad de presentación del proyecto según la fecha programada por tu
maestro, efectúa la demostración y presenta 5 diapositivas en plenaria explicando el
experimento y tus hallazgos al realizarlo, también efectúa una presentación en video
auxiliándote de tu teléfono celular, súbela a youtube y agrega el link a continuación como
evidencia, agrega una pantalla de presentación donde aparezca tu nombre, la carrera y
semestre, también toma fotografías e intégralas a este documento como evidencias:

Link: ___________________________________________________________________________
2) Integra tu desarrollo, en este documento (de preferencia en procesador de textos) y súbelo al
grupo de Facebook de la materia con el siguiente nombre:

Nombre_ISC2018_Agentes1

Competencias desarrolladas dentro de la planeación del programa de la materia:


 Domina la terminología y las técnicas de Inteligencia artificial
 Utiliza lenguajes de programación de alto nivel para desarrollar aplicaciones de control
en tiempo real
 Analiza problemas y deduce soluciones relacionadas con las aplicaciones de las áreas
de la Inteligencia Artificial en la vida cotidiana
 Genera desarrollos relacionados con teoría de juegos, sistemas expertos, agentes
inteligentes y aplicaciones relacionadas con el Internet de las cosas

Resultados del aprendizaje esperados:


 Sintetiza conocimiento mediante razonamiento lógico e implementa estructuras
computacionales que permitan a una computadora resolver
 problemas a partir de dichas estructuras computacionales reflejándolas en sistemas
expertos y agentes inteligentes.
 Explica los conceptos básicos sobre sensórica y los principales elementos que
integran un sistema de control que utiliza sensores y actuadores.
 Construye circuitos que involucren la lectura de diferentes sensores y la activación de
actuadores basado en los datos proporcionados por los sensores.
 Resuelve problemas de control, monitoreo a inspección mediante arreglos de visión
artificial.
 Redacta reporte técnico de prototipos implementados
 Presenta y defiende proyectos en plenaria.
 Demuestra que posee y practica competencias actitudinales, tales como: respeto,
tolerancia, colaboración, espíritu de logro, compromiso, puntualidad.

Conclusiones del aprendizaje en esta actividad:


Con el desarrollo de esta actividad podrás utilizar los conocimientos adquiridos en la unidad 1 para
adquirir habilidades en el diseño de sistemas basados en agente, también dominaras la terminología
propia del tema y dominaras la interfaz de usuario para interactuar con estos.