Skip to content
SMOSTAFAH1Public

Latest commit

 

History

68 Commits

Folders and files

Repository files navigation

Sistema Multiagente de Recomendación Turística

Sistema inteligente multiagente desarrollado con JADE para la recomendación de destinos turísticos basado en consultas del usuario.

📋 Requisitos de la Asignatura - Cumplimiento Total

✅ Requisitos Obligatorios Implementados

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

🎯 INTELIGENCIA Y COMPLEJIDAD ADICIONAL

  • 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

🏗️ Arquitectura del Sistema

Flujo de Comunicación JADE

Usuario → AgenteAdquisicion → AgenteProcesamiento → AgenteVisualizacion → Usuario
         (REQUEST)           (INFORM/FAILURE)      (ResultadoConsulta)

Agentes Especializados

  1. 🔍 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"
  2. 🧮 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"
  3. 📊 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"

🔧 Características Técnicas - Cumplimiento JADE

📨 Comunicación ACL (Agent Communication Language)

  • 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)

🔒 Filtros de Mensajes Bloqueantes

// 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

📞 Directory Facilitator (DF)

  • 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

⚙️ Comportamientos JADE Implementados

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)

📦 Instalación y Ejecución

Requisitos del Sistema

  • 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

🚀 Opciones de Ejecución

Opción 1: Script automático (recomendado)

./run.bat

o 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.IniciarSistemaTuristico

Opción 3: IDE (Eclipse/IntelliJ)

  1. Importar proyecto
  2. Agregar JARs de lib/ al classpath
  3. Ejecutar IniciarSistemaTuristico.main()

✅ Verificación de Funcionamiento

  1. Se abre la consola JADE (plataforma multiagente)
  2. Aparece ventana de consulta del AgenteAdquisicion
  3. Los 3 agentes se registran en el Directory Facilitator
  4. Estado: "Conectado - API disponible" en la interfaz

🎮 Uso del Sistema

Flujo de Operación

  1. Inicio: Aparece ventana de consulta turística
  2. Consulta: Introduzca destino (ciudad/país) → Ej: "Madrid", "Tokyo", "Iran"
  3. Procesamiento: Sistema busca y procesa destinos con algoritmo inteligente
  4. Resultados: Lista ordenada por puntuación multi-criterio
  5. Interacción: Seleccione destinos para ver detalles y acciones (mapa, hoteles, vuelos)

Funcionalidades Avanzadas

  • 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

📁 Estructura del Proyecto

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

Releases

Packages

Contributors

Languages