feat: adiciona quadro de horários formatado com tabulate ao Modelo 2
This commit is contained in:
76
create_nb.py
76
create_nb.py
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user