Files
Escalante-Pastor/scripts/04_gerar_colunas_candidatas.py
2026-06-26 18:15:55 -03:00

57 lines
1.8 KiB
Python

"""Geração das colunas candidatas viáveis.
Entradas:
Bases preparadas por 03_preparar_dados.py.
Saidas:
DataFrame em que cada linha representa uma escala possível: rota acionada,
missão local ou sobreaviso, com dupla, aeronave, score, custo e metadados.
Papel no pipeline:
Materializa o espaco de decisoes do MILP. A compatibilidade de aeronave,
indisponibilidade, qualificacao e regra de instrucao ja sao filtradas aqui.
"""
from __future__ import annotations
import importlib
preparar = importlib.import_module("03_preparar_dados")
io_utils = importlib.import_module("02_io_utils")
def gerar_colunas_do_dia(bases: dict):
"""Gera colunas candidatas para a data e parâmetros informados nas bases."""
from src.planejador_missao.candidates import gerar_colunas
parametros = bases["parametros"]
# Cada coluna candidata equivale a uma variável x_j do MILP.
# As regras de dupla, qualificacao, instrucao e indisponibilidade sao
# aplicadas antes do solver para reduzir o modelo a alternativas viáveis.
return gerar_colunas(
parametros["data_planejamento"],
bases["rotas"],
bases["aeronaves"],
bases["cadastro"],
bases["indisponibilidades"],
bases["progresso"],
bases["catalogo"],
bases["disponiveis"],
parametros["criterio_missao"],
parametros["criterio_sbv"],
)
def main() -> None:
"""Executa diagnostico da geracao de colunas."""
logger = io_utils.configurar_logger("gerar_colunas")
bases = preparar.carregar_bases()
colunas = gerar_colunas_do_dia(bases)
logger.info("Colunas candidatas geradas: %s", len(colunas))
if colunas.empty:
logger.warning("Nenhuma coluna candidata viavel foi gerada.")
if __name__ == "__main__":
main()