Sistemas Multiagente y Percepción Computacional
Fundación Universitaria Internacional de La Rioja — Ingeniería Informática
Autor: Alejandro De Mendoza Tovar · Mayo 2026
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.
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
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
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
| 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 |
| 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 |
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
git clone https://github.com/AlejoTechEngineer/jade-multiagent-lab.git
cd jade-multiagent-lab- Abrir el proyecto
ProyectoAlejandroDeMendozaJADEen NetBeans - Clic derecho → Properties → Libraries → Compile → Add JAR/Folder
- Seleccionar
jade.jarde la ruta de instalación - Verificar que Main Class sea
agentes.LanzadorJADE
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.
java -cp "ruta/jade.jar;ruta/build/classes" agentes.LanzadorJADEEl sistema implementa dos patrones de comunicación ACL (FIPA Agent Communication Language):
agente-ping ──[INFORM: "PING"]──► agente-pong
agente-ping ◄──[INFORM: "PONG"]── agente-pong
(30 iteraciones → doDelete())
[Emisor] ──[REQUEST: "10 + 5"]──► AgenteCalculadora
[Emisor] ◄──[INFORM: "Resultado: 15.0"]── AgenteCalculadora
Operaciones soportadas: + - * / (formato: número operador número)
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());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 usarSystem.exit()para terminar agentes JADE. El métododoDelete()garantiza que el AMS actualice sus registros y quetakeDown()ejecute la lógica de limpieza (desregistro del DF, liberación de recursos).
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.
- 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
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