feat: adiciona quadro de horários formatado com tabulate ao Modelo 2

This commit is contained in:
2026-06-07 20:41:17 -03:00
parent 1cab2bbe36
commit e478cc72e0
4 changed files with 223 additions and 44 deletions

View File

@@ -371,6 +371,82 @@ for i in aeroportos_malha:
gerou_vazio = True
if not gerou_vazio:
print(" Nenhum voo de reposicionamento vazio foi necessário! A malha já é circular/balanceada.")
# GERAR TABELA DE HORÁRIOS COM TABULATE E DATETIME
from tabulate import tabulate
import datetime
# 1. Construir a lista de todos os voos a serem realizados
voos_para_fazer = []
# Cópia para saber quantos voos de passageiros faltam alocar
D_copy = {k: v for k, v in D.items()}
for i in aeroportos_malha:
for j in aeroportos_malha:
total_voos = D[(i, j)] + int(Y[(i, j)].varValue)
for _ in range(total_voos):
if D_copy[(i, j)] > 0:
tipo = 'Passageiro'
D_copy[(i, j)] -= 1
else:
tipo = 'Vazio (Reposicionamento)'
voos_para_fazer.append({'origem': i, 'destino': j, 'tipo': tipo, 'tempo': tempos_voo[(i, j)]})
# 2. Simular a alocação sequencial de horários
tabela_horarios = []
aeronave_id = 1
while voos_para_fazer:
voo_atual = voos_para_fazer.pop(0)
hora_atual = datetime.datetime(2025, 1, 1, 0, 0, 0)
tempo_delta = datetime.timedelta(hours=voo_atual['tempo'])
hora_chegada = hora_atual + tempo_delta
tabela_horarios.append([
f"Aeronave {aeronave_id}",
voo_atual['origem'],
voo_atual['destino'],
voo_atual['tipo'],
hora_atual.strftime('%H:%M'),
hora_chegada.strftime('%H:%M'),
f"{voo_atual['tempo']:.2f} h"
])
hora_atual = hora_chegada
local_atual = voo_atual['destino']
# Continuar traçando o caminho para esta aeronave até que não caiba mais nas 24h
while True:
prox_voo = None
for idx, v in enumerate(voos_para_fazer):
if v['origem'] == local_atual:
if (hora_atual - datetime.datetime(2025, 1, 1, 0, 0, 0) + datetime.timedelta(hours=v['tempo'])).total_seconds() <= 24 * 3600:
prox_voo = voos_para_fazer.pop(idx)
break
if prox_voo:
tempo_delta = datetime.timedelta(hours=prox_voo['tempo'])
hora_chegada = hora_atual + tempo_delta
tabela_horarios.append([
f"Aeronave {aeronave_id}",
prox_voo['origem'],
prox_voo['destino'],
prox_voo['tipo'],
hora_atual.strftime('%H:%M'),
hora_chegada.strftime('%H:%M'),
f"{prox_voo['tempo']:.2f} h"
])
hora_atual = hora_chegada
local_atual = prox_voo['destino']
else:
break
aeronave_id += 1
print("\\n== QUADRO DE HORÁRIOS DIÁRIOS ==")
print(tabulate(tabela_horarios, headers=["Aeronave", "Origem", "Destino", "Tipo", "Partida", "Chegada", "Duração"], tablefmt="github"))
"""))
nb.cells = cells