Este proyecto implementa un sistema distribuido de gestión de taxis y usuarios. Los taxis se comunican con un servidor central usando el protocolo MQTT, mientras que los usuarios interactúan con el servidor mediante ZeroMQ. El sistema simula solicitudes de taxis y asigna los más cercanos a los usuarios.
- Servidor Central: Coordina las solicitudes de taxis y su asignación eficiente.
- Taxis: Simulan movimientos dentro de una cuadrícula y responden a solicitudes de usuarios.
- Usuarios: Generan solicitudes de taxis al servidor con posiciones específicas.
- Comunicaciones:
- MQTT: Usado por los taxis para reportar su posición y recibir asignaciones.
- ZeroMQ: Usado por los usuarios para solicitar taxis al servidor.
Antes de ejecutar el proyecto, asegúrate de tener instalados los siguientes componentes:
- Python 3.9+
- Librerías Python:
paho-mqttpyzmq
Puedes instalar las dependencias ejecutando:
pip install paho-mqtt pyzmq.
├── server.py # Código del servidor central
├── taxi.py # Código del proceso para taxis
├── users.py # Código para simular usuarios
├── coordenadas_Usuarios.txt # Archivo de coordenadas de usuarios
├── Interaccion.txt # Archivo generado con el estado del sistema
El servidor central coordina el sistema. Para ejecutarlo, utiliza el siguiente comando:
python3 server.py --cuadricula_N <N> --cuadricula_M <M> [--intervalo_guardado <segundos>]python3 server.py --cuadricula_N 50 --cuadricula_M 50 --intervalo_guardado 10--cuadricula_Ny--cuadricula_M: Dimensiones de la cuadrícula.--intervalo_guardado: Tiempo (en segundos) para guardar el estado del sistema (opcional, por defecto es 60).
Cada taxi se ejecuta como un proceso independiente. Usa el siguiente comando para iniciarlo:
python3 taxi.py --taxi_id <id> --cuadricula_N <N> --cuadricula_M <M> --init_x <x> --init_y <y> --velocidad <velocidad>python3 taxi.py --taxi_id 1 --cuadricula_N 50 --cuadricula_M 50 --init_x 5 --init_y 5 --velocidad 2--taxi_id: Identificador único del taxi.--cuadricula_Ny--cuadricula_M: Dimensiones de la cuadrícula.--init_xy--init_y: Posición inicial del taxi.--velocidad: Velocidad en km/h (valores permitidos: 1, 2 o 4).
Ejecuta el proceso para generar usuarios y enviar solicitudes al servidor:
python3 users.py --num_usuarios <Y> --cuadricula_N <N> --cuadricula_M <M> --coords <archivo> --server_address <address>python3 users.py --num_usuarios 3 --cuadricula_N 50 --cuadricula_M 50 --coords coordenadas_Usuarios.txt --server_address 192.168.0.9--num_usuarios: Número de usuarios a generar.--cuadricula_Ny--cuadricula_M: Dimensiones de la cuadrícula.--coords: Archivo con coordenadas de los usuarios.--server_address: Dirección IP del servidor ZeroMQ.
El archivo de coordenadas debe tener el siguiente formato:
x y tiempo_min
10 20 5
15 30 10
5 10 3
x: Coordenada inicial del usuario en el eje X.y: Coordenada inicial del usuario en el eje Y.tiempo_min: Tiempo (en minutos simulados) que el usuario esperará antes de solicitar un taxi.
El sistema genera un archivo Interaccion.txt que contiene:
- Registro de taxis y usuarios.
- Resumen de servicios exitosos y rechazados.
- Información sobre asignaciones y tiempos de respuesta.