Eduardo Carlos 3607965c88 Add OARMP routing engine, dashboard and documentation
- Complete routing engine: ingest, optimizer (CG+B&B), maintenance
  monitor, metrics, pipeline, quality checks
- Streamlit dashboard with Input/Output tab structure, editable data
  editors, interactive Folium map with satellite layer and maintenance
  base highlights, FH stacked bar chart with TTM availability
- CSV data files: AERONAVES, CHECKS, AIRPORTS, ESCALA DE VOO
- README, CONTEXTO and CHANGELOG added
- Remove legacy pre_process scripts and raw binary files (PDFs/xlsx)
- Update .gitignore to exclude outputs/, data/, raw/*.pdf, raw/*.xlsx

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 11:52:34 -03:00
2026-06-15 15:31:46 -03:00
2026-06-15 15:24:39 -03:00

OARMP — Aircraft Routing & Maintenance Planning

Sistema de otimização de roteamento de aeronaves com planejamento integrado de manutenção, desenvolvido para o Curso de Especialização em Administração de Organizações (CEAO 809).

Visão geral

O OARMP resolve o problema de atribuição de aeronaves a fragmentos de voo (OFRAGs) respeitando as restrições de Time to Maintenance (TTM) de cada aeronave, minimizando as horas perdidas de TTM ao longo do planejamento.

Formulação matemática

Set Partitioning com Column Generation + Branch & Bound

Minimizar   Σ_r  c_r · x_r                          (perda total de TTM)
s.a.        Σ_{r: j∈r}  x_r  = 1   ∀ j ∈ OFRAGs   (cada OFRAG coberto exatamente uma vez)
            Σ_{r: a(r)=a} x_r ≤ 1  ∀ a ∈ Aeronaves (uma rota por aeronave)
            x_r ∈ {0, 1}

O subproblema de precificação (pricing) é resolvido por programação dinâmica (label-setting DP) sobre o DAG de OFRAGs ordenados por horário de partida.

Estrutura do projeto

arara_oarmp/
├── app/
│   └── dashboard.py          # Interface Streamlit (entrada de dados + resultados)
├── raw/                      # Dados de entrada (CSV)
│   ├── AERONAVES.csv
│   ├── CHECKS.csv
│   ├── AIRPORTS.csv
│   └── ESCALA DE VOO MODELO 1.csv
├── src/
│   └── routing_engine/
│       ├── config.py         # Parâmetros e caminhos
│       ├── ingest.py         # Leitura e normalização dos dados
│       ├── inspect_files.py  # Detecção automática de colunas (sinônimos)
│       ├── network_generator.py  # Grafo de adjacência entre OFRAGs
│       ├── optimizer.py      # CG + B&B (PuLP/CBC)
│       ├── maintenance_monitor.py  # Validação TTM e eventos de manutenção
│       ├── metrics.py        # Tabelas e sumários de saída
│       ├── pipeline.py       # Orquestração end-to-end
│       └── quality.py        # Verificações de qualidade dos dados
├── scripts/                  # Scripts auxiliares de inspeção e execução
├── outputs/                  # Resultados gerados pelo pipeline
│   ├── schedules/
│   └── exports/
├── requirements.txt
└── run_pipeline.bat

Instalação

# Criar ambiente virtual
python -m venv .venv
.venv\Scripts\activate        # Windows
# source .venv/bin/activate   # Linux/Mac

# Instalar dependências
pip install -r requirements.txt

Dependências principais

Pacote Uso
pulp Formulação e resolução do MIP (solver CBC)
pandas / numpy Manipulação de dados
streamlit Dashboard interativo
plotly Gráficos (Gantt, barras)
folium + streamlit-folium Mapa interativo de rotas
airportsdata Coordenadas geográficas de aeroportos por ICAO
networkx Grafo de adjacência entre OFRAGs

Execução

Via dashboard (recomendado)

streamlit run app/dashboard.py

Via script de linha de comando

python scripts/03_run_optimization_pipeline.py
# ou
run_pipeline.bat

Dados de entrada

Todos os arquivos ficam em raw/ com separador ;:

AERONAVES.csv

Campo Descrição
MATRICULA Indicativo da aeronave
MODELO Modelo (ex: C105)
FH TOTAIS Horas de voo totais acumuladas

CHECKS.csv

Campo Descrição
CHECKS Nome do check
FH Threshold cumulativo de FH para o check
TEMPO DE EXECUCAO (DIAS) Duração do check em dias
LOCAL DE EXECUCAO Código ICAO da base de manutenção

AIRPORTS.csv

Campo Descrição
AIRPORT_CODE Código ICAO
AIRPORT_NAME Nome do aeroporto
IS_MAINTENANCE_BASE 1 = base de manutenção

ESCALA DE VOO MODELO 1.csv

Escala de missões com colunas: DATA, ETAPA, DEP, ARR, HORA_DEP, HORA_ARR, TEMPO_VOO, SEGMTO, MISSAO, OFRAG.
Formato de data aceito: DD/MM/AAAA ou DD/mon (ex: 15/jan).

Dashboard — abas

Entrada (📥 Input)

  • Escala de Voo: tabela editável com adição/remoção de linhas
  • Aeronaves: frota com FH totais e TAT mínimo
  • Checks: thresholds e durações de manutenção
  • Bases de Manutenção: aeroportos habilitados para check

Saída (📤 Output)

  • Resumo: métricas gerais + diagrama de Gantt
  • Escala com Atribuição: escala original com aeronave atribuída por OFRAG
  • Manutenção e Aeronaves: eventos de manutenção, gráfico de FH por aeronave (FH iniciais + planejadas antes/após manutenção + TTM disponível)
  • Frota: utilização percentual do TTM por aeronave
  • Mapa: rotas por aeronave em mapa interativo (satélite Esri / CartoDB)

Conceitos-chave

OFRAG — Fragmento de voo: conjunto de etapas que sai e retorna à base de manutenção. Unidade de alocação do problema.

TTM (Time to Maintenance) — Horas de voo disponíveis até o próximo check obrigatório. Cada ciclo de check tem seu próprio TTM.

TTM Loss — Horas de TTM não utilizadas quando a manutenção é realizada antes de esgotar o ciclo (inevitável quando o próximo OFRAG excederia o limite).

TAT (Turnaround Time) — Tempo mínimo entre o pouso de um OFRAG e a decolagem do seguinte na mesma aeronave.

Description
No description provided
Readme 920 KiB
Languages
Python 98.8%
Batchfile 1.2%