Skip to content

AlejoTechEngineer/JADE-Multiagent-Lab

Repository files navigation

🤖 JADE Multiagent Lab — Laboratorio No. 1

Sistemas Multiagente y Percepción Computacional
Fundación Universitaria Internacional de La Rioja — Ingeniería Informática
Autor: Alejandro De Mendoza Tovar · Mayo 2026



📋 Descripción

Implementación completa de un sistema multiagente sobre la plataforma JADE 4.6.0 (Java Agent DEvelopment Framework), desarrollado como Laboratorio No. 1 de la asignatura Sistemas Multiagente y Percepción Computacional. El proyecto abarca desde la instalación y configuración de JADE hasta el desarrollo, ejecución y terminación controlada de 6 agentes autónomos con comportamientos diferenciados.

El sistema demuestra los principios fundamentales de los sistemas multiagente: autonomía, comunicación ACL, descubrimiento de servicios (DF), ciclo de vida de agentes y terminación controlada mediante patrones de diseño correctos para entornos JADE/FIPA.


Arquitectura

flowchart TD
    A[LanzadorJADE.java - Punto de Entrada] --> B[JADE Platform - Contenedor de Agentes]
    B --> C[AgenteHola - OneShotBehaviour]
    B --> D[AgenteContador - TickerBehaviour 2s x5]
    B --> E[AgenteCalculadora - CyclicBehaviour + ACL]
    B --> F[AgentePingPong x2 - CyclicBehaviour 30 iter]
    B --> G[AgenteMonitor - TickerBehaviour 5s x5]
    G --> H[DF Directory Facilitator - Servicio de Registro]
    E --> I[ACL REQUEST / INFORM - Mensajes entre Agentes]
    F --> I
Loading

🏗️ Arquitectura del Sistema

ProyectoAlejandroDeMendozaJADE/
├── src/
│   └── agentes/
│       ├── LanzadorJADE.java        ← Punto de entrada — inicializa JADE y despliega agentes
│       ├── AgenteHola.java          ← OneShotBehaviour
│       ├── AgenteContador.java      ← TickerBehaviour (5 ticks × 2s)
│       ├── AgenteCalculadora.java   ← CyclicBehaviour + mensajes ACL REQUEST/INFORM
│       ├── AgentePingPong.java      ← CyclicBehaviour + OneShotBehaviour (30 iteraciones)
│       └── AgenteMonitor.java       ← TickerBehaviour + DF registration (5 búsquedas × 5s)
├── lib/
│   └── jade.jar                     ← JADE 4.6.0 runtime (no incluido — ver instalación)
└── README.md

Diagrama de interacción

LanzadorJADE
    │
    ├──► AgenteHola          [OneShotBehaviour]     → Ejecuta 1 vez → finaliza
    ├──► AgenteContador      [TickerBehaviour/2s]   → 5 ticks → doDelete()
    ├──► AgenteCalculadora   [CyclicBehaviour]      → Escucha REQUEST → responde INFORM
    ├──► agente-ping ──ACL PING/PONG──► agente-pong [CyclicBehaviour] → 30 iter → doDelete()
    └──► AgenteMonitor       [TickerBehaviour/5s]   → 5 búsquedas DF → doDelete()
                                  │
                             [DF Service]
                             Registra: "servicio-monitor"
                             Busca: todos los agentes registrados

🤖 Agentes Implementados

Agente Behaviour Descripción Terminación
AgenteHola OneShotBehaviour Imprime nombre local y AID completo al iniciarse Automática tras 1 ejecución
AgenteContador TickerBehaviour (2s) Cuenta del 1 al 5 imprimiendo cada tick doDelete() al tick #5
AgenteCalculadora CyclicBehaviour Recibe operaciones matemáticas vía ACLMessage.REQUEST y responde con ACLMessage.INFORM Sin límite — servicio activo
AgentePingPong (×2) CyclicBehaviour + OneShotBehaviour Dos instancias (ping/pong) intercambian mensajes ACL INFORM con contenido PING/PONG doDelete() a las 30 iteraciones
AgenteMonitor TickerBehaviour (5s) Se registra en el DF y realiza búsquedas periódicas de agentes activos doDelete() a las 5 búsquedas

⚙️ Requisitos

Componente Versión Notas
Java JDK 8+ (probado con 17.0.12 LTS) Mínimo Java 5 según documentación JADE
JADE 4.6.0 Descargar jadeAll desde jade.tilab.com
Apache NetBeans 28 (o cualquier IDE Java) Configurar jade.jar en Classpath
Sistema Operativo Windows 10/11, Linux, macOS Multiplataforma JVM

🚀 Instalación y Ejecución

1. Descargar JADE

http://jade.tilab.com/download/jade/

Descargar jadeAll-4.6.0.zip → extraer en C:\jade\ → el JAR queda en:

C:\jade\JADE-all-4.6.0\JADE-bin-4.6.0\jade\lib\jade.jar

2. Clonar el repositorio

git clone https://github.com/AlejoTechEngineer/jade-multiagent-lab.git
cd jade-multiagent-lab

3. Configurar en NetBeans

  1. Abrir el proyecto ProyectoAlejandroDeMendozaJADE en NetBeans
  2. Clic derecho → Properties → Libraries → Compile → Add JAR/Folder
  3. Seleccionar jade.jar de la ruta de instalación
  4. Verificar que Main Class sea agentes.LanzadorJADE

4. Ejecutar desde NetBeans

F6 (Run Project)

La GUI del RMA de JADE se abre automáticamente. El sistema ejecuta todos los agentes y finaliza solo en aproximadamente 35 segundos.

5. Ejecutar desde línea de comandos

java -cp "ruta/jade.jar;ruta/build/classes" agentes.LanzadorJADE

📡 Comunicación ACL — Protocolo de Mensajes

El sistema implementa dos patrones de comunicación ACL (FIPA Agent Communication Language):

PingPong — Comunicación bidireccional directa

agente-ping  ──[INFORM: "PING"]──►  agente-pong
agente-ping  ◄──[INFORM: "PONG"]──  agente-pong
             (30 iteraciones → doDelete())

Calculadora — Patrón Request/Inform

[Emisor]  ──[REQUEST: "10 + 5"]──►  AgenteCalculadora
[Emisor]  ◄──[INFORM: "Resultado: 15.0"]──  AgenteCalculadora

Operaciones soportadas: + - * / (formato: número operador número)


🏛️ Servicios de Directorio (DF)

El AgenteMonitor implementa el patrón de registro y descubrimiento de servicios FIPA:

// Registro en el DF
DFAgentDescription dfd = new DFAgentDescription();
ServiceDescription sd = new ServiceDescription();
sd.setType("monitor");
sd.setName("servicio-monitor");
dfd.addServices(sd);
DFService.register(this, dfd);

// Búsqueda en el DF
DFAgentDescription[] resultado = DFService.search(myAgent, new DFAgentDescription());

🔁 Patrón de Terminación Controlada

Todos los agentes con comportamientos cíclicos implementan el patrón correcto de terminación en JADE:

private int iteraciones = 0;
private static final int MAX_ITERACIONES = 30;

// Dentro del behaviour:
iteraciones++;
if (iteraciones >= MAX_ITERACIONES) {
    myAgent.doDelete(); // Notifica al AMS → ejecuta takeDown()
    return;             // Evita continuar el ciclo tras doDelete()
}

⚠️ Nunca usar System.exit() para terminar agentes JADE. El método doDelete() garantiza que el AMS actualice sus registros y que takeDown() ejecute la lógica de limpieza (desregistro del DF, liberación de recursos).


📊 Output de Ejecución Esperado

Agent container Main-Container@172.22.80.1 is ready.
Todos los agentes han sido iniciados.
Agente agente-hola iniciado.
[AgenteHola] Hola! Soy el agente: agente-hola
[AgenteHola] Mi direccion AID es: agente-hola@172.22.80.1:1099/JADE
[AgenteHola] Tarea completada. Me despido.
Agente agente-contador iniciado.
[AgenteMonitor] Registrado en el DF correctamente.
[AgentePingPong] agente-ping envio: PING
[AgentePingPong] agente-pong recibio: PING (iteracion 1/30)
[AgentePingPong] agente-ping recibio: PONG (iteracion 1/30)
...
[AgentePingPong] agente-pong recibio: PING (iteracion 30/30)
[AgentePingPong] agente-pong alcanzo el limite. Finalizando.
[AgentePingPong] Agente agente-pong finalizado tras 30 iteraciones.
[AgenteContador] Tick #1 ... Tick #5
[AgenteContador] Limite alcanzado. Finalizando.
[AgenteMonitor] Buscando agentes en la plataforma... (1/5)
...
[AgenteMonitor] Limite alcanzado. Finalizando.
[AgenteMonitor] Desregistrado del DF.

📚 Referencias

  • Bellifemine, F., Caire, G., & Greenwood, D. — Developing Multi-Agent Systems with JADE. Wiley.
  • Wooldridge, M. — An Introduction to MultiAgent Systems. Wiley.
  • Russell, S. & Norvig, P. — Artificial Intelligence: A Modern Approach. Pearson.
  • JADE Official Documentation
  • FIPA ACL Specifications

👨‍💻 Autor

Alejandro De Mendoza Tovar
Ingeniero Informático
Fundación Universitaria Internacional de La Rioja — Bogotá D.C.
GitHub: @AlejoTechEngineer


Laboratorio No. 1 — Sistemas Multiagente y Percepción Computacional — Mayo 2026

About

Sistema multiagente JADE 4.6.0 con 6 agentes autónomos: ACL REQUEST/INFORM, DF registration, OneShotBehaviour, TickerBehaviour y CyclicBehaviour. Lab. 1, Sistemas Multiagente, UNIR.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages