58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
"""Executa a validação retrospectiva com voos de 2025."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
BASE_DIR = Path(__file__).resolve().parents[1]
|
|
sys.path.insert(0, str(BASE_DIR))
|
|
|
|
from src.planejador_missao.validacao import (
|
|
carregar_voos_2025,
|
|
criar_modelo_voos_2025,
|
|
otimizar_equalizacao_50,
|
|
salvar_relatorio_validacao,
|
|
)
|
|
|
|
|
|
def main() -> None:
|
|
parser = argparse.ArgumentParser(description="Valida o planejador com voos historicos de 2025.")
|
|
parser.add_argument("--meta", type=float, default=50.0, help="Meta de horas usada na equalizacao.")
|
|
parser.add_argument("--tempo-limite", type=float, default=180.0, help="Tempo limite do resolvedor MILP, em segundos.")
|
|
parser.add_argument("--gap", type=float, default=0.05, help="Gap relativo aceitavel para encerrar o MILP.")
|
|
args = parser.parse_args()
|
|
|
|
entrada = BASE_DIR / "dados" / "validacao" / "voos_2025.csv"
|
|
criar_modelo_voos_2025(entrada)
|
|
|
|
voos = carregar_voos_2025(entrada)
|
|
if voos.empty:
|
|
print("Base de validação ainda vazia.")
|
|
print(f"Preencha o arquivo: {entrada}")
|
|
print("Colunas esperadas: data,aeronave,tipo_escala,tripulante,funcao,oi,horas_voadas,sbv")
|
|
return
|
|
|
|
resultado = otimizar_equalizacao_50(
|
|
BASE_DIR,
|
|
voos,
|
|
meta_horas=args.meta,
|
|
tempo_limite_segundos=args.tempo_limite,
|
|
gap_relativo=args.gap,
|
|
)
|
|
arquivo = salvar_relatorio_validacao(BASE_DIR, resultado, meta_horas=args.meta)
|
|
|
|
print("\n=== Validação 2025 concluída ===")
|
|
print(f"Meta de equalizacao: {args.meta:g} horas")
|
|
print(f"Voos/slots avaliados: {len(resultado['slots'])}")
|
|
print(f"Tripulantes comparados: {len(resultado['comparativo'])}")
|
|
print(f"Relatório: {arquivo}")
|
|
print(f"Solver: {resultado['status_solver']['mensagem']}")
|
|
print("\nMétricas:")
|
|
print(resultado["metricas"].to_string(index=False))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|