"""Executa a validacao 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 validacao 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=== Validacao 2025 concluida ===") 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"Relatorio: {arquivo}") print(f"Solver: {resultado['status_solver']['mensagem']}") print("\nMetricas:") print(resultado["metricas"].to_string(index=False)) if __name__ == "__main__": main()