57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
"""Geracao das colunas candidatas viaveis.
|
|
|
|
Entradas:
|
|
Bases preparadas por 03_preparar_dados.py.
|
|
|
|
Saidas:
|
|
DataFrame em que cada linha representa uma escala possivel: rota acionada,
|
|
missao 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 parametros informados nas bases."""
|
|
from src.planejador_missao.candidates import gerar_colunas
|
|
|
|
parametros = bases["parametros"]
|
|
# Cada coluna candidata equivale a uma variavel x_j do MILP.
|
|
# As regras de dupla, qualificacao, instrucao e indisponibilidade sao
|
|
# aplicadas antes do solver para reduzir o modelo a alternativas viaveis.
|
|
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()
|