Overview
Esta carpeta contiene una pequeña simulación de control de tráfico aéreo usando agentes SPADE (Python), adaptado de un ejemplo en JADE (Java).
Files
hostAgent.py: entrypoint — crea y arranca laTorrey NAvionagents.torreAgent.py: agente Torre, maneja la pista y responde a mensajes de los aviones.avionAgent.py: agente Avión, envía informes periódicos y solicita permiso para aterrizar.
Flujo / Lógica (resumen)
- El
HostAgentarrancaTorreAgent(JIDtorre@localhost) y NAvionAgent(ej.avion0@localhost,avion1@localhost, ...). - Cada
AvionAgenttiene 3 comportamientos principales:StatusTick(cada 1s): imprime estado (depuración).SendVolando(cada 5s): envía a la torre un mensaje conbody = "volando"(performative: inform).RequestLanding(cada 10s): envíabody = "aterrizar"(performative: propose).RecvBehav: recibe respuestas de la torre. Si la torre respondeaceptar, el avión iniciaLandingBehav.LandingBehav: simula el aterrizaje (espera 2s), envíabody = "liberar"a la torre y finaliza su agente.
TorreAgentprocesa mensajes y mantiene una banderapista_ocupada:- Si recibe
volandoresponderecibido. - Si recibe
aterrizary la pista está libre: respondeaceptary marcapista_ocupada=True. - Si recibe
aterrizary la pista está ocupada: responderechazo. - Si recibe
liberarofin: marca la pista como libre y respondeliberado.
- Si recibe
Cómo ejecutar (requisitos mínimos)
-
Requisitos:
- Python 3.8+ con virtualenv y la biblioteca
spadeinstalada dentro del entorno. - Un servidor XMPP accesible (local o remoto). SPADE necesita cuentas XMPP para los JIDs usados.
- Python 3.8+ con virtualenv y la biblioteca
-
Ejecutar (desde la carpeta
./aviones):
# activar tu entorno virtual (ejemplo en Windows PowerShell)
& C:/SPADE/cst/Scripts/Activate.ps1
# ejecutar el host (crea torre y aviones)
py hostAgent.pyConsejos y mejoras posibles
- Manejar
pista_ocupadacon más cuidado si se escala la simulación (locks o colas internas). - Reducir ruido por consola/eliminar
StatusTicksi se desea menos salida.
Estado actual del código
- Se corrigieron errores detectados inicialmente:
- No await en
add_behaviour()(no es awaitable). - La
Torreya no se detiene tras procesar un solo mensaje.
- No await en
- La simulación básica funciona: la torre concede permiso a un avión a la vez; éste aterriza y libera la pista; otros aviones reciben rechazo hasta que la pista se libera.