Compare commits

...

3 Commits

Author SHA1 Message Date
Cesa-V
fe2ba12e49 Inclui @vitorcesavc nos autores (README e docs/authors.md)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 18:03:31 -03:00
Cesa-V
b368201d5d Documenta historico v1/v2/v3 no README com fases, limitacoes e nomenclatura
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-16 11:14:57 -03:00
Cesa-V
e71a0f2518 Atualiza README para v0.10: Set Partitioning, cenario insp grande e tabela de parametros
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-16 11:11:23 -03:00
2 changed files with 85 additions and 48 deletions

123
README.md
View File

@@ -45,7 +45,7 @@ arara_oarmp/
Usamos tags curtas para identificar quem fez cada alteração relevante:
- `VTO`: Vitor Cesa.
- `VTO`: Vitor Cesa ([@vitorcesavc](https://git.ppgao.ita.br/vitorcesavc)).
- `GNR`: Generoso.
- `JOM`: João Marcos.
@@ -144,70 +144,107 @@ git push
- Preferir nomes de arquivo descritivos, com tipo do documento, aeronave, matrícula e data quando possível.
- Registrar no `LOG.md` qualquer decisão que afete os dados.
## Estado atual
## Estado atual (v0.10)
O modelo ativo é `software/oamrp_v3.py`, que implementa o OAMRP sobre uma rede espaço-tempo com arcos de ferry, múltiplos tipos de inspeção e prioridades de missão via OFRAG.
O modelo ativo é `software/oamrp_v3.py`, que implementa o OAMRP sobre uma rede espaço-tempo com arcos de ferry, múltiplos tipos de inspeção e Set Partitioning para cobertura de missões.
Última rodada validada (2026-06-16): 50/50 missões sintéticas cumpridas, solver CBC Optimal, 4 EVAMs operacionais.
**Última rodada validada (2026-06-16, commit `a34ed6b`):**
- 20/20 missões sintéticas cobertas, solver CBC Optimal em < 15 s
- Cenário com INSP 2A (4 dias em solo) visível no Gantt da matrícula 2803
- Set Partitioning: toda missão coberta por exatamente 1 aeronave
Arquivos principais do modelo:
### Formulação de cobertura
O modelo usa **Set Partitioning** (`z[m] = 1` para toda missão `m`): cada missão deve ser atribuída a exatamente uma aeronave. Versões anteriores usavam Set Covering (`z[m] ≤ 1`), que permitia missões descobertas. A transição foi documentada em `docs/changelog.md` (v0.10).
> **Atenção para contribuidores:** Set Partitioning foi validado apenas para o cenário sintético padrão (20 missões, seed 42, 4 aeronaves, somente 2803 com LRT apertado). Com mais missões ou múltiplas aeronaves com LRT < 5 h simultâneas, o MIP pode ser infeasível ou ultrapassar o time limit. Consulte as limitações detalhadas em `docs/changelog.md`.
### Arquivos principais
```text
software/oamrp_v3.py — modelo MIP principal
software/gerar_ofrag.py — gerador da tabela OFRAG
software/visualizar_resultado.py — mapa Folium interativo
db/processed/ofrag.csv — ordens de missão com prioridades 15
db/processed/resultado_oamrp_sintetico.csv — resultado da última rodada
db/processed/mapa_rotas.html — mapa interativo de rotas
software/oamrp_v3.py — modelo MIP principal (Fases 13 + Set Partitioning)
software/gerar_ofrag.py — gerador da tabela OFRAG
software/visualizar_resultado.py Gantt + mapa + tabela interativa
db/processed/ofrag.csv — ordens de missão com prioridades 15
db/processed/f0_cenario_insp_grande.json — f0 calibrado para forçar INSP 2A em 2803
db/processed/resultado_oamrp_v3.csv — resultado da última rodada
db/processed/planejamento_insp_grande.html — Gantt com inspeção de 4 dias visível
```
Para rodar:
### Como rodar
Cenário padrão (inspeção grande visível no Gantt):
```powershell
python software/oamrp_v3.py --sintetico --seed 42 --aleatorio --ofrag db/processed/ofrag.csv
python software/visualizar_resultado.py
python software/oamrp_v3.py --sintetico --seed 42 --f0 db/processed/f0_cenario_insp_grande.json --time-limit 60
python software/visualizar_resultado.py --resultado db/processed/resultado_oamrp_v3.csv --saida db/processed/planejamento_insp_grande.html
```
Pré-processamentos disponíveis:
Parâmetros relevantes do modelo:
```text
db/raw/relatorio_ciclo_inspecoes_c105_2805_2026-06-15.pdf — ciclo de inspeções C-105/2805
db/processed/registro_voo_2025.csv — registro de voo 2025 limpo (1420 trechos)
db/processed/registro_voo_2025_consolidado.csv — consolidado para roteamento
```
## Atualizacao - registro de voo 2025
| Parâmetro | Padrão | Descrição |
|---|---|---|
| `--sintetico` | | Usa missões sintéticas cross-base em vez do CSV real |
| `--n-missoes` | 20 | Número de missões sintéticas |
| `--seed` | 42 | Semente aleatória (reprodutibilidade) |
| `--f0` | | JSON com horas acumuladas iniciais por aeronave/inspeção |
| `--time-limit` | 300 | Limite de tempo do solver CBC (segundos) |
| `--aleatorio` | | Sorteia f0 aleatório entre 10%90% de F_max |
A `Planilha 2025.xlsx` foi pre-processada a partir de `db/raw/` sem alterar o arquivo original.
---
Arquivos gerados:
## Histórico dos modelos
```text
db/pre_process/registro_voo_2025/preprocess_planilha_2025.py
db/pre_process/registro_voo_2025/registro_voo_2025_limpo.csv
db/pre_process/registro_voo_2025/registro_voo_2025_limpo.xlsx
db/pre_process/registro_voo_2025/registro_voo_2025_consolidado.csv
db/pre_process/registro_voo_2025/missoes_oamrp_2025.csv
db/pre_process/registro_voo_2025/missoes_oamrp_2025_consolidado.csv
db/pre_process/registro_voo_2025/resumo_registro_voo_2025.json
db/pre_process/registro_voo_2025/validacao_registro_voo_2025.md
db/processed/registro_voo_2025.csv
db/processed/registro_voo_2025_consolidado.csv
```
### v1 — Protótipo inicial (`software/oamrp_v1.py`)
O consolidado trata `ROTA` como marcador de transicao, nao como localidade operacional, e remove a linha original 793 da aeronave 2806 dos artefatos processados.
Primeiro protótipo do modelo MIP em PuLP. Estrutura simples de atribuição aeronave-missão sem rede espaço-tempo, sem inspeções e sem ferry. Serviu para validar a configuração do ambiente e a integração com o solver CBC.
## Modelo OAMRP v2
- **Formulação:** atribuição direta, variáveis binárias por (aeronave, missão)
- **Restrições:** cobertura básica e continuidade de base
- **Sem:** janelas de tempo, inspeções, ferry, prioridades
- **Status:** protótipo histórico, não usar em produção
O arquivo `software/oamrp_v2.py` executa a primeira rodada do modelo com dados reais consolidados de 2025. Por padrao, ele usa janeiro/2025, as aeronaves `2800`, `2803`, `2809` e `2811`, e grava:
---
```text
db/processed/resultado_oamrp_jan_2025.csv
```
### v2 — Dados reais de 2025 (`software/oamrp_v2.py`)
Para executar:
Primeira rodada com dados reais do registro de voo de janeiro/2025, pré-processados a partir da planilha original. Introduziu janelas de tempo (decolagem e chegada do CSV), TAT entre missões e prioridade uniforme.
- **Dados de entrada:** `db/processed/registro_voo_2025_consolidado.csv` (1 267 trechos, 1 420 linhas originais)
- **Resultado:** 50 de 61 missões cumpridas em janeiro/2025 (`db/processed/resultado_oamrp_jan_2025.csv`)
- **Limitação identificada:** os dados reais de jan/2025 eram predominantemente voos locais SBMNSBMN, não exercitando roteamento cross-base nem inspeções
```powershell
python software/oamrp_v2.py
```
A rodada inicial de janeiro/2025 foi resolvida como otima pelo CBC, com 50 de 61 missoes cumpridas.
---
### v3 — Rede espaço-tempo completa (`software/oamrp_v3.py`) ← **modelo ativo**
Reescrita completa baseada em Al-Thani, Ben Ahmed & Haouari (2016). Introduziu a formulação por rede espaço-tempo com nós No e arcos Arco, inspeções com relógio de horas acumuladas e reset, arcos de ferry entre bases e missões sintéticas cross-base para validação de roteamento.
**Fases implementadas:**
| Fase | Restrições | Descrição |
|---|---|---|
| 1 | C1C6 | Rede espaço-tempo, cobertura (Set Partitioning), conservação de fluxo, TAT |
| 2 | C7C11 | Nós de inspeção, relógio H[k,i,n] com reset, downtime, slot único |
| 3 | Ferry | Arcos de ferry entre quaisquer bases (haversine ÷ 430 km/h), consome horas de célula |
**Nomenclatura alinhada com Al-Thani (2016):**
- `F_max` batente fixo (intervalo máximo legal entre manutenções, ex: 300 h)
- `f0` horas acumuladas no início do horizonte (estado inicial da aeronave)
- `LRT = F_max f0` tempo legal restante (decresce com o voo)
- `H[k, seq, nid]` acumulado em tempo real, rastreado na rede (equivale a u_j do artigo)
**Missões sintéticas:** como os dados reais de 2025 não exercitavam roteamento, o modelo usa um gerador sintético cross-base (`--sintetico`) com distâncias reais (haversine) e velocidade de cruzeiro do C-105 (430 km/h).
**Pré-processamentos disponíveis:**
```text
db/raw/relatorio_ciclo_inspecoes_c105_2805_2026-06-15.pdf — ciclo de inspeções C-105/2805
db/processed/registro_voo_2025.csv — registro de voo 2025 limpo (1 420 trechos)
db/processed/registro_voo_2025_consolidado.csv — consolidado para roteamento
```

View File

@@ -2,11 +2,11 @@
## Colaboradores
| Tag | Nome | Papel inicial |
| --- | --- | --- |
| `VTO` | Vitor Cesa | Organização do repositório, estrutura inicial, pré-processamento e documentação |
| `GNR` | Generoso | Colaborador |
| `JOM` | João Marcos | Colaborador e origem inicial do relatório de inspeções |
| Tag | Nome | Gitea | Papel inicial |
| --- | --- | --- | --- |
| `VTO` | Vitor Cesa | [@vitorcesavc](https://git.ppgao.ita.br/vitorcesavc) | Organização do repositório, estrutura inicial, pré-processamento e documentação |
| `GNR` | Generoso | — | Colaborador |
| `JOM` | João Marcos | — | Colaborador e origem inicial do relatório de inspeções |
## Instituição e contexto