Skip to content

brian1062/Sistema-de-Agencia-de-Viaje-Concurrente

Repository files navigation

Sistema de Agencia de Viajes con Redes de Petri

Este proyecto implementa un sistema de agencia de viajes utilizando Redes de Petri para modelar y controlar procesos concurrentes. El sistema gestiona el flujo de clientes, el manejo de reservas y la asignación de recursos de manera segura para múltiples hilos.

Descripción General

El sistema modela una agencia de viajes con las siguientes características:

  • Gestión de entrada y cola de clientes
  • Manejo concurrente de reservas por múltiples agentes
  • Administración y sincronización de recursos
  • Políticas configurables para balance de carga
  • Semántica temporal para temporización realista de procesos

Arquitectura del Sistema

El modelo de Red de Petri incluye:

  • 15 plazas que representan diferentes estados y recursos
  • 12 transiciones que modelan varios eventos y acciones
  • Múltiples hilos concurrentes que gestionan diferentes segmentos del sistema
  • Implementación de monitor thread-safe
  • Toma de decisiones basada en políticas para la asignación de recursos

Autores

Requisitos

  • Java 21
  • Gradle 8.5+

Compilación del Proyecto

# Clonar el repositorio
git clone https://github.com/brian1062/Sistema-de-Agencia-de-Viaje-Concurrente.git

# Navegar al directorio del proyecto
cd Sistema-de-Agencia-de-Viaje-Concurrente

# Compilar el proyecto
./gradlew build

Ejecución del Sistema

./gradlew run

Al ejecutar el sistema, puedes elegir entre tres políticas:

  1. Política Balanceada (distribución 50/50)
  2. Política Priorizada (distribuciones 75/25 y 80/20)
  3. Política FCFS (First-Come-First-Served)

Características

Implementación de Políticas

  • Política Balanceada: Asegura una distribución equitativa entre agentes y resultados de reservas (aceptadas/rechazadas).
  • Política Priorizada: Implementa distribución ponderada (75/25 para agentes, 80/20 para resultados)
  • Política FCFS: Implementación estándar de First-Come-First-Served

Pruebas

# Ejecutar pruebas con informe de cobertura
./gradlew test

# Ver informe de cobertura
open build/reports/jacoco/test/html/index.html

Herramientas de Análisis

El proyecto incluye un script Python (regex.py) para analizar secuencias de transiciones y verificar invariantes. Para ejecutar el análisis:

python3 regex.py

Contribuir

  1. Haz un fork del repositorio
  2. Crea tu rama de característica (git checkout -b feature/NuevaCaracteristica)
  3. Haz commit de tus cambios (git commit -m 'Agrega alguna NuevaCaracteristica')
  4. Haz push a la rama (git push origin feature/NuevaCaracteristica)
  5. Abre un Pull Request

Licencia

Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para más detalles.

About

Trabajo practico final, materia "Programacion Concurrente" Ingenieria en Computacion

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •