Sistema inteligente multiagente desarrollado con JADE para la recomendación de destinos turísticos basado en consultas del usuario.
| Requisito del Enunciado | Implementación Específica | Evidencia en Código |
|---|---|---|
| 🔍 Agente de Percepción/Adquisición | Obtiene información externa mediante interacción con usuario y verificación de APIs | AgenteAdquisicion.java - Comportamiento VerificarDisponibilidadAPIBehaviour |
| 🧮 Agente con Cálculos Complejos | Algoritmo de scoring multi-criterio con cálculos inteligentes y ranking dinámico | AgenteProcesamiento.java - Clase ComparadorDestinos con lógica compleja |
| 📊 Agente de Visualización | Interfaz gráfica completa con funcionalidades interactivas (mapas, hoteles, vuelos) | AgenteVisualizacion.java - GUI completa con Swing |
| ⚙️ Comportamientos JADE | CyclicBehaviour, OneShotBehaviour, TickerBehaviour implementados | Múltiples clases internas en todos los agentes |
| 📞 Directory Facilitator | Registro y descubrimiento automático de servicios entre agentes | Métodos registrarServicios() y buscarAgente*() en todos los agentes |
| 📨 Mensajes ACL | Comunicación completa con performativas INFORM, REQUEST, FAILURE, REFUSE | Métodos enviarRespuesta() y comunicación inter-agentes |
| 🔒 Filtros Bloqueantes | MessageTemplate con block() en múltiples comportamientos | receive(mt) + block() en RecibirRespuestasBehaviour y otros |
- Algoritmo Multi-criterio: Scoring avanzado con calificación×12 + popularidad×0.3 + bonificaciones especiales
- Sistema de Caché Inteligente: CacheUtil con TTL (30 min) para optimización de rendimiento
- Integración API Externa: Cliente Foursquare Places con sistema robusto de reintentos
- Manejo de Concurrencia: AtomicBoolean para control de estado y prevención de condiciones de carrera
- Procesamiento Asíncrono: Múltiples comportamientos JADE coordinados para máxima eficiencia
Usuario → AgenteAdquisicion → AgenteProcesamiento → AgenteVisualizacion → Usuario
(REQUEST) (INFORM/FAILURE) (ResultadoConsulta)
-
🔍 Agente de Adquisición (
AgenteAdquisicion.java)- Fuente de Información Externa: Interacción directa con el usuario + verificación de APIs
- Comportamientos JADE:
VerificarDisponibilidadAPIBehaviour(TickerBehaviour)BuscarAgenteProcesamientoBehaviour(OneShotBehaviour)RecibirRespuestasBehaviour(CyclicBehaviour)
- Registro DF: Servicio "adquisicion-turistica"
-
🧮 Agente de Procesamiento (
AgenteProcesamiento.java)- Cálculos Complejos e Inteligencia:
- Algoritmo de scoring multi-dimensional con ponderaciones inteligentes
- Comparador personalizado (
ComparadorDestinos) para ranking óptimo - Sistema de caché inteligente con TTL (CacheUtil)
- Integración con API Foursquare para enriquecimiento de datos en tiempo real
- Comportamientos JADE:
RecibirConsultasBehaviour(CyclicBehaviour)- Procesamiento asíncrono con OneShotBehaviour dinámicos
- Registro DF: Servicio "procesamiento-turistico"
- Cálculos Complejos e Inteligencia:
-
📊 Agente de Visualización (
AgenteVisualizacion.java)- Interfaz de Usuario: GUI completa con Swing
- Funcionalidades: Visualización de resultados, enlaces a mapas, hoteles, vuelos
- Comportamientos JADE:
RecibirResultadosBehaviour(CyclicBehaviour)RecibirMensajesErrorBehaviour(CyclicBehaviour)
- Registro DF: Servicio "visualizacion-turistica"
- Performativas Utilizadas:
REQUEST(solicitud de procesamiento)INFORM(respuesta exitosa + envío de resultados)FAILURE(error en procesamiento)REFUSE(sistema ocupado)
- ConversationId: "consulta-turistica", "resultados-turisticos", "estado-api"
- Contenido: Strings simples + objetos serializables (
ResultadoConsulta)
// Ejemplo en AgenteProcesamiento.java - RecibirConsultasBehaviour
MessageTemplate mt = MessageTemplate.and(
MessageTemplate.MatchConversationId("consulta-turistica"),
MessageTemplate.MatchPerformative(ACLMessage.REQUEST));
ACLMessage msg = receive(mt);
if (msg == null) block(); // FILTRO BLOQUEANTE IMPLEMENTADO- Servicios Registrados:
- "adquisicion-turistica" → AgenteAdquisicion
- "procesamiento-turistico" → AgenteProcesamiento
- "visualizacion-turistica" → AgenteVisualizacion
- Descubrimiento Dinámico: Búsqueda automática de servicios en tiempo de ejecución
| Comportamiento | Agente | Propósito |
|---|---|---|
CyclicBehaviour |
Todos | Recepción continua de mensajes |
OneShotBehaviour |
Procesamiento | Búsqueda de servicios + procesamiento asíncrono |
TickerBehaviour |
Adquisición | Verificación periódica de APIs (cada 60s) |
- Java: JDK 21 o superior
- JADE Framework: 4.6.0 (incluido en
lib/jade.jar) - Librerías adicionales:
commons-codec-1.3.jar,json.jar - SO: Windows, Linux, macOS
Opción 1: Script automático (recomendado)
./run.bato hacer doble clic en run.bat para compilar y ejecutar automáticamente.
Opción 2: Línea de comandos manual
java -cp "lib/jade.jar;lib/commons-codec-1.3.jar;lib/json.jar;bin" es.upm.turistico.IniciarSistemaTuristicoOpción 3: IDE (Eclipse/IntelliJ)
- Importar proyecto
- Agregar JARs de
lib/al classpath - Ejecutar
IniciarSistemaTuristico.main()
- Se abre la consola JADE (plataforma multiagente)
- Aparece ventana de consulta del AgenteAdquisicion
- Los 3 agentes se registran en el Directory Facilitator
- Estado: "Conectado - API disponible" en la interfaz
- Inicio: Aparece ventana de consulta turística
- Consulta: Introduzca destino (ciudad/país) → Ej: "Madrid", "Tokyo", "Iran"
- Procesamiento: Sistema busca y procesa destinos con algoritmo inteligente
- Resultados: Lista ordenada por puntuación multi-criterio
- Interacción: Seleccione destinos para ver detalles y acciones (mapa, hoteles, vuelos)
- Búsqueda Inteligente: Algoritmo de scoring con múltiples factores
- Caché Optimizado: Resultados almacenados 30 minutos para consultas repetidas
- Integración Externa: Datos enriquecidos desde Foursquare API
- Acciones Rápidas: Enlaces directos a Google Maps, Booking.com, Skyscanner
ProyectoJade/
├── src/es/upm/turistico/
│ ├── IniciarSistemaTuristico.java # 🚀 Clase principal del sistema
│ ├── agentes/ # 🤖 Agentes JADE especializados
│ │ ├── AgenteAdquisicion.java # 🔍 Adquisición y verificación de datos
│ │ ├── AgenteProcesamiento.java # 🧮 Algoritmos inteligentes y cálculos
│ │ └── AgenteVisualizacion.java # 📊 Interfaz gráfica y resultados
│ ├── modelo/ # 📋 Modelo de datos del dominio
│ │ └── DestinoTuristico.java # 🏛️ Entidad destino turístico
│ ├── api/ # 🌐 Integración con servicios externos
│ │ └── FoursquareClient.java # 🗺️ Cliente API Foursquare Places
│ └── util/ # 🔧 Utilidades del sistema
│ └── CacheUtil.java # ⚡ Sistema de caché con TTL
├── lib/ # 📚 Bibliotecas externas
│ ├── jade.jar # JADE Framework 4.6.0
│ ├── commons-codec-1.3.jar # Codificación/decodificación
│ └── json.jar # Procesamiento JSON
├── run.bat # 🎯 Script de compilación y ejecución
├── plane.png # ✈️ Icono de la aplicación
├── autores.txt # 👥 Miembros del grupo
└── README.md # 📖 Documentación completa