- 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>
146 lines
5.3 KiB
Markdown
146 lines
5.3 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
# 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)
|
|
|
|
```bash
|
|
streamlit run app/dashboard.py
|
|
```
|
|
|
|
### Via script de linha de comando
|
|
|
|
```bash
|
|
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.
|