Implementa OAMRP v3 com rede espaco-tempo e restricoes de inspecao (Fases 1-2)

Reescrita do zero em software/oamrp_v3.py: abstracao No/Arco, variavel
unificada y[k,arco], C1-C6 (Fase 1) e C7-C11 com relogio de horas,
downtime e disjuntivas de slot unico (Fase 2). TAT corrigido para 1,5h;
top-10 bases; EVAM obrigatoria; L2 = maximizar horas voadas.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Cesa-V
2026-06-15 23:29:44 -03:00
parent 11821eaa93
commit 328a066849
5 changed files with 1404 additions and 0 deletions

119
HANDOFF_arara_oamrp.md Normal file
View File

@@ -0,0 +1,119 @@
# HANDOFF — ARARA OAMRP (Aircraft Routing C-105 / FAB)
> Documento de transferência para o **Claude Code**.
> Projeto local: `arara_oamrp/`. Cole/abra este arquivo no Claude Code e siga as instruções de leitura antes de validar a formulação e gerar código.
---
## 0. Enquadramento do problema
Modelo de **Aircraft Routing** para o Esquadrão ARARA (C-105), no estilo **OAMRP** (Al-Thani et al., 2016): sequenciamento **compacto** em **rede espaço-tempo**.
**NÃO** é Set Partitioning + Column Generation (modelo civil Bazargan). Desvios deliberados em relação ao caso civil:
1. **Cobertura ≤ 1** (seleção de missões), não particionamento `= 1`.
2. **Objetivo de maximização** de cobertura ponderada por prioridade, não minimização de custo.
3. Possibilidade de subconjunto de missões **obrigatórias (hard)**.
**Stack:** Python + PuLP (CBC para começar) → HiGHS como evolução.
---
## 1. Calibração confirmada (respostas do Vitor)
| Item | Decisão |
|---|---|
| Frota | **4 aeronaves**, homogêneas (mesmo LRT, mesma performance) |
| Horizonte | **1 mês** |
| Discretização | **Estilo OAMRP** — eventos de voo com horários explícitos |
| TAT (turnaround) | **01h30** |
| Base de inspeção | Apenas **SBMN** (somente níveis **Base** e **Orgânico**; **Parque desconsiderado**) |
| Bases de operação | **10 bases da FAB** (derivar/confirmar a partir do CSV) |
| Traslado (ferry) | **Permitido** e **consome horas de célula** |
| Reset de horas | Inspeção **zera apenas aquela inspeção**; inspeções **não simultâneas** na mesma aeronave (podem ser sequenciais se requisitos cumpridos) |
| Prioridade | Escala **1 a 5** |
| Missões por dia | Uma cauda pode encadear **várias missões no mesmo dia** |
| Horas iniciais (f_k) | Criar **campos editáveis**; permitir **default aleatório** |
### Objetivo (lexicográfico)
- **L1 — Primário:** maximizar Σ (prioridade × missões cumpridas).
- **L2 — Secundário:** "entregar aeronave com menor LRT" *(ver Q3 — pendente de definição)*.
- **Restrição dura derivada do 6.1:** **no máximo 1 aeronave em inspeção ao mesmo tempo** → modelada como restrição de recurso (C11), não como objetivo.
---
## 2. Formulação matemática proposta (validar antes de codar)
### Conjuntos
- `K` — aeronaves (caudas), |K| = 4.
- `B` — bases (10). `B_insp ⊆ B = {SBMN}`.
- `M` — missões candidatas. `M_obr ⊆ M` — obrigatórias *(Q2)*.
- `T` — tipos de inspeção válidos *(Q1)*.
### Parâmetros
- `f⁰_{k,i}` — horas acumuladas iniciais da cauda `k` no relógio da inspeção `i` (editável / aleatório).
- `LRT_i` — intervalo (horas de célula) da inspeção `i`.
- `CAL_i` — limite calendárico (dias) da inspeção `i`.
- `DT_i` — tempo indisponível (downtime) da inspeção `i`.
- `h_m` — horas de voo da missão `m` (do CSV, por par O-D).
- `o_m, d_m` — origem/destino de `m`.
- `[e_m, l_m]` — janela de decolagem de `m`.
- `p_m ∈ {1..5}` — prioridade de `m`.
- `hferry_{b,b'}` — horas de traslado entre bases (do CSV/distância).
- `home_k` — base inicial da cauda `k`.
- `TAT = 1.5 h`.
### Variáveis de decisão
- `x_{k,m} ∈ {0,1}` — cauda `k` cumpre missão `m`.
- `y` — arcos de sequenciamento na rede espaço-tempo (missão→missão, ferry, inspeção) por cauda.
- `t_dep_{k,m}`, `t_arr_{k,m}` — tempos (contínuos).
- `z_{k,i}` (+ início `s_{k,i}`) — cauda `k` executa inspeção `i`.
- `F_{k,i}(·)` — estado de horas acumuladas no relógio `i` ao longo da rota (contínuo, zera na inspeção `i`).
### Restrições
- **C1 Cobertura:** Σ_k x_{k,m} ≤ 1 ∀m; **= 1** ∀m ∈ M_obr.
- **C2 Continuidade (fluxo):** cada cauda forma um caminho único ordenado no tempo, iniciando em `home_k`; grau de entrada = grau de saída nos nós.
- **C3 Continuidade espacial:** encadear `m→m'` exige `d_m = o_{m'}`, senão exige arco de **ferry**.
- **C4 Continuidade temporal + TAT:** `t_dep(próx) ≥ t_arr(ant) + TAT` (+ tempo de ferry, se houver reposicionamento).
- **C5 Janela:** `e_m ≤ t_dep_{k,m} ≤ l_m`.
- **C6 Orçamento de horas com reset:** ao longo da rota, horas acumuladas no relógio `i``LRT_i`; voo/ferry somam horas; inspeção `i` zera o relógio `i`.
- **C7 Limite calendárico:** dias desde o último reset de `i``CAL_i`.
- **C8 Local de inspeção:** inspeção `i` só ocorre com a cauda em `B_insp` (SBMN); a cauda precisa rotear até lá.
- **C9 Downtime:** durante `DT_i` a cauda fica indisponível; atividades seguintes começam após.
- **C10 Não-simultaneidade na mesma cauda:** duas inspeções da mesma cauda não se sobrepõem (podem ser back-to-back).
- **C11 Slot único de inspeção (recurso):** em qualquer instante, Σ_k [cauda em inspeção] ≤ 1.
### Função objetivo (lexicográfica)
1. **max** Σ_m p_m · (Σ_k x_{k,m})
2. **então** otimizar L2 *(Q3)*.
---
## 3. Plano incremental de construção
1. **Modelo base** — cobertura ponderada + orçamento de horas (C1C6).
2. **Inspeção com reset** em SBMN — C7C11 + downtime/calendário.
3. **Realismo militar** — prioridade hard (M_obr), voos de posicionamento, janelas.
4. **Replanejamento + visualização** — re-otimização e dashboard.
---
## 4. Instruções para o Claude Code (executar na pasta `arara_oamrp/`)
1. **Ler contexto:** abrir o arquivo de CONTEXTO/LOG e tudo em `docs/` para entender o estado atual.
2. **Auditar e podar:** o ChatGPT inseriu **acréscimos desnecessários** — revisar e remover o que fugir do OAMRP compacto, mas antes pergunte. Confirmar que **não** há resquício de Set Partitioning + Column Generation.
3. **Ler inspeções:** `relatorio_ciclo_inspecoes_c105_2805_2026-06-15` (JSON) → extrair, para cada inspeção válida *(Q1: seq 2,3,4,6,7,18,19,20,22,23)*, os campos `LRT_i` (horas), `CAL_i` (limite calendárico) e `DT_i` (tempo indisponível).
4. **Ler voos:** `db/processed/registro_voo_2025_consolidado.csv` → derivar as **10 bases**, as **horas de voo por par O-D** (`h_m`) e os tempos de **ferry**.
5. **Horas iniciais:** criar campos editáveis para `f⁰_{k,i}`, com opção de **default aleatório**.
6. **Validar a formulação** da Seção 2 com o Vitor antes de gerar PuLP. Construção **incremental**, confirmando cada etapa.
---
## 5. Pendências a resolver (perguntar ao Vitor no Claude Code)
- **Q1 — Inspeções válidas:** confirmar a lista de seq **{2, 3, 4, 6, 7, 18, 19, 20, 22, 23}**.
- **Q2 — Obrigatórias:** SAR/EVAM entram como **hard** (M_obr, cobertura = 1) ou apenas como prioridade 5? *(o dataset hoje só traz prioridade 15)*
- **Q3 — Objetivo secundário "entregar aeronave com menor LRT":** definir o sentido exato. Duas leituras possíveis:
- **(a)** minimizar a **folga de horas ao fim do horizonte** (usar bem as horas disponíveis: não deixar cauda ociosa com muita célula sobrando que poderia ter voado);
- **(b)** **priorizar o emprego** das caudas mais próximas da inspeção primeiro (consumir antes quem está mais perto do limite).
- **Q4 — Bases:** validar as 10 bases que o Claude Code propuser a partir do CSV.

4
LOG.md
View File

@@ -26,3 +26,7 @@ Legenda de autores:
| 2026-06-15 | 19:56 | VTO | Consolidou transicoes `ROTA` do registro de voo 2025 | `db/pre_process/registro_voo_2025/preprocess_planilha_2025.py`; `db/processed/registro_voo_2025_consolidado.csv` | `ROTA` tratado como marcador de transicao; 1421 linhas originais viraram 1268 trechos consolidados; 135 trechos com `ROTA` foram convertidos para origem/destino reais. | | 2026-06-15 | 19:56 | VTO | Consolidou transicoes `ROTA` do registro de voo 2025 | `db/pre_process/registro_voo_2025/preprocess_planilha_2025.py`; `db/processed/registro_voo_2025_consolidado.csv` | `ROTA` tratado como marcador de transicao; 1421 linhas originais viraram 1268 trechos consolidados; 135 trechos com `ROTA` foram convertidos para origem/destino reais. |
| 2026-06-15 | 19:56 | VTO | Validou o registro de voo 2025 consolidado | `db/pre_process/registro_voo_2025/validacao_registro_voo_2025.md`; `db/processed/registro_voo_2025_consolidado.csv` | Sem duplicidades, sem divergencias de duracao e sem sobreposicoes temporais; pendentes 1 registro sem OM, 1 trecho com pousos zero e 3 quebras de continuidade espacial. | | 2026-06-15 | 19:56 | VTO | Validou o registro de voo 2025 consolidado | `db/pre_process/registro_voo_2025/validacao_registro_voo_2025.md`; `db/processed/registro_voo_2025_consolidado.csv` | Sem duplicidades, sem divergencias de duracao e sem sobreposicoes temporais; pendentes 1 registro sem OM, 1 trecho com pousos zero e 3 quebras de continuidade espacial. |
| 2026-06-15 | 19:56 | VTO | Removeu registro isolado da aeronave 2806 | `db/pre_process/registro_voo_2025/preprocess_planilha_2025.py`; `db/processed/registro_voo_2025.csv`; `db/processed/registro_voo_2025_consolidado.csv` | Linha original 793 excluida dos artefatos processados; registro final passou para 1420 linhas e consolidado para 1267 trechos; nao ha mais registro sem OM. | | 2026-06-15 | 19:56 | VTO | Removeu registro isolado da aeronave 2806 | `db/pre_process/registro_voo_2025/preprocess_planilha_2025.py`; `db/processed/registro_voo_2025.csv`; `db/processed/registro_voo_2025_consolidado.csv` | Linha original 793 excluida dos artefatos processados; registro final passou para 1420 linhas e consolidado para 1267 trechos; nao ha mais registro sem OM. |
| 2026-06-15 | 19:56 | VTO | Criou modelo OAMRP v2 com dados reais de 2025 | `software/oamrp_v2.py`; `db/processed/resultado_oamrp_jan_2025.csv`; `README.md`; `docs/about.md`; `docs/changelog.md` | Rodada inicial de janeiro/2025 resolvida como otima pelo CBC; prioridade uniforme 1; base de manutencao SBMN; 50 de 61 missoes cumpridas. |
| 2026-06-15 | 21:00 | VTO | Criou modelo OAMRP v3 — Fase 1: rede espaço-tempo | `software/oamrp_v3.py`; `db/processed/resultado_oamrp_v3.csv` | Reescrita do zero com abstrações No/Arco e variável unificada y[k,arco]; C1C6; TAT=1,5h; f0_{k,i} editável; top-10 bases por frequência; missões EVAM hard; 50/50 missões cobertas em jan/2025. |
| 2026-06-15 | 22:00 | VTO | Calibrou inspeções válidas (Q1) e respondeu Q2Q4 | `software/oamrp_v3.py` | Removidas seq 18 e 23 do catálogo; EVAM marcado como M_obr (cobertura=1); L2 definido como minimizar folga de horas ao fim do horizonte; 10 bases por frequência. |
| 2026-06-15 | 22:30 | VTO | Implementou Fase 2: inspeções na rede espaço-tempo | `software/oamrp_v3.py` | Adicionados nós INSP_{k}_{seq} e arcos missao_insp/insp_missao; variáveis H_{k,i,nid} para rastreamento de horas com reset; C9 downtime; C11 slot único via disjuntivas. |

View File

@@ -0,0 +1,51 @@
status,aeronave,ordem,id,om,orig,dest,partida_utc,chegada_utc,dur_h,prioridade,periodo,aeronave_real_2025,linhas_origem
cumprida,2800,1,RV2025_OM1_E2_L5_C5,1,SBMN,SBMN,2025-01-02T14:30:00Z,2025-01-02T15:35:00Z,1.08,1,NOTURNO,2809,5
cumprida,2800,2,RV2025_OM5_E2_L13_C13,5,SBMN,SBMN,2025-01-07T14:15:00Z,2025-01-07T16:15:00Z,2.00,1,DIURNO,2803,13
cumprida,2803,1,RV2025_OM7_E1_L15_C15,7,SBMN,SBMN,2025-01-07T10:40:00Z,2025-01-07T12:30:00Z,1.83,1,DIURNO,2809,15
cumprida,2803,2,RV2025_OM8_E1_L17_C17,8,SBMN,SBMN,2025-01-08T10:35:00Z,2025-01-08T12:35:00Z,2.00,1,DIURNO,2803,17
cumprida,2803,3,RV2025_OM12_E4_L28_C29,12,SBMN,SBMN,2025-01-11T21:05:00Z,2025-01-12T00:00:00Z,2.92,1,DIURNO;NOTURNO,2809,28;29
cumprida,2803,4,RV2025_OM15_E1_L34_C34,15,SBMN,SBMN,2025-01-12T11:50:00Z,2025-01-12T13:30:00Z,1.67,1,DIURNO,2803,34
cumprida,2809,1,RV2025_OM1_E1_L4_C4,1,SBMN,SBMN,2025-01-02T11:55:00Z,2025-01-02T13:05:00Z,1.17,1,NOTURNO,2809,4
cumprida,2811,1,RV2025_OM3_E1_L8_C8,3,SBMN,SBMN,2025-01-03T14:45:00Z,2025-01-03T16:10:00Z,1.42,1,DIURNO,2809,8
cumprida,2811,2,RV2025_OM4_E2_L10_C10,4,SBMN,SBMN,2025-01-06T15:40:00Z,2025-01-06T16:45:00Z,1.08,1,DIURNO,2803,10
cumprida,2811,3,RV2025_OM9_E1_L20_C20,9,SBMN,SBMN,2025-01-09T12:30:00Z,2025-01-09T15:55:00Z,3.42,1,DIURNO,2803,20
cumprida,2811,4,RV2025_OM9_E3_L22_C22,9,SBMN,SBMN,2025-01-09T20:40:00Z,2025-01-09T22:15:00Z,1.58,1,DIURNO,2803,22
cumprida,2811,5,RV2025_OM14_E1_L32_C32,14,SBMN,SBMN,2025-01-12T16:55:00Z,2025-01-12T20:25:00Z,3.50,1,DIURNO,2809,32
cumprida,2811,6,RV2025_OM17_E1_L40_C40,17,SBMN,SBMN,2025-01-15T13:30:00Z,2025-01-15T14:25:00Z,0.92,1,DIURNO,2809,40
cumprida,2811,7,RV2025_OM17_E3_L42_C45,17,SBMN,SBMN,2025-01-15T22:50:00Z,2025-01-15T23:50:00Z,1.00,1,NOTURNO,2809,42;43;44;45
nao_cumprida,,,RV2025_OM2_E3_L6_C6,2,SBMN,SBMN,2025-01-02T17:00:00Z,2025-01-02T18:05:00Z,1.08,1,NOTURNO,2809,6
nao_cumprida,,,RV2025_OM2_E4_L7_C7,2,SBMN,SBMN,2025-01-02T20:00:00Z,2025-01-02T21:10:00Z,1.17,1,NOTURNO,2809,7
nao_cumprida,,,RV2025_OM5_E1_L11_C11,5,SBMN,SBMN,2025-01-06T19:10:00Z,2025-01-06T21:20:00Z,2.17,1,DIURNO,2803,11
nao_cumprida,,,RV2025_OM6_E1_L12_C12,6,SBMN,SBMN,2025-01-06T19:30:00Z,2025-01-06T21:25:00Z,1.92,1,DIURNO,2811,12
nao_cumprida,,,RV2025_OM6_E2_L14_C14,6,SBMN,SBMN,2025-01-07T11:20:00Z,2025-01-07T13:20:00Z,2.00,1,DIURNO,2811,14
nao_cumprida,,,RV2025_OM7_E2_L16_C16,7,SBMN,SBMN,2025-01-07T14:00:00Z,2025-01-07T15:45:00Z,1.75,1,DIURNO,2809,16
nao_cumprida,,,RV2025_OM8_E2_L18_C18,8,SBMN,SBMN,2025-01-08T14:00:00Z,2025-01-08T16:00:00Z,2.00,1,DIURNO,2803,18
nao_cumprida,,,RV2025_OM10_E1_L19_C19,10,SBMN,SBMN,2025-01-08T22:30:00Z,2025-01-08T23:15:00Z,0.75,1,NOTURNO,2803,19
nao_cumprida,,,RV2025_OM9_E2_L21_C21,9,SBMN,SBMN,2025-01-09T18:10:00Z,2025-01-09T20:00:00Z,1.83,1,DIURNO,2803,21
nao_cumprida,,,RV2025_OM11_E1_L23_C23,11,SBMN,SBMN,2025-01-10T12:10:00Z,2025-01-10T13:15:00Z,1.08,1,DIURNO,2803,23
nao_cumprida,,,RV2025_OM11_E2_L24_C24,11,SBMN,SBMN,2025-01-10T14:25:00Z,2025-01-10T15:25:00Z,1.00,1,DIURNO,2803,24
nao_cumprida,,,RV2025_OM13_E1_L30_C30,13,SBMN,SBMN,2025-01-12T12:20:00Z,2025-01-12T13:10:00Z,0.83,1,DIURNO,2809,30
nao_cumprida,,,RV2025_OM15_E2_L35_C35,15,SBMN,SBMN,2025-01-12T14:25:00Z,2025-01-12T16:00:00Z,1.58,1,DIURNO,2803,35
nao_cumprida,,,RV2025_OM13_E2_L31_C31,13,SBMN,SBMN,2025-01-12T14:40:00Z,2025-01-12T15:25:00Z,0.75,1,DIURNO,2809,31
nao_cumprida,,,RV2025_OM15_E3_L36_C36,15,SBMN,SBMN,2025-01-12T18:30:00Z,2025-01-12T20:35:00Z,2.08,1,DIURNO,2803,36
nao_cumprida,,,RV2025_OM14_E2_L33_C37,14,SBMN,SBMN,2025-01-12T22:45:00Z,2025-01-13T02:05:00Z,3.33,1,NOTURNO,2809,33;37
nao_cumprida,,,RV2025_OM16_E1_L38_C38,16,SBMN,SBMN,2025-01-15T12:00:00Z,2025-01-15T15:05:00Z,3.08,1,DIURNO,2803,38
nao_cumprida,,,RV2025_OM17_E2_L41_C41,17,SBMN,SBMN,2025-01-15T14:45:00Z,2025-01-15T15:40:00Z,0.92,1,DIURNO,2809,41
nao_cumprida,,,RV2025_OM16_E2_L39_C39,16,SBMN,SBMN,2025-01-15T17:35:00Z,2025-01-15T20:35:00Z,3.00,1,DIURNO,2803,39
nao_cumprida,,,RV2025_OM18_E1_L46_C46,18,SBMN,SBMN,2025-01-21T12:05:00Z,2025-01-21T13:40:00Z,1.58,1,DIURNO,2800,46
nao_cumprida,,,RV2025_OM18_E2_L47_C47,18,SBMN,SBMN,2025-01-21T14:45:00Z,2025-01-21T16:15:00Z,1.50,1,DIURNO,2800,47
nao_cumprida,,,RV2025_OM18_E3_L48_C48,18,SBMN,SBMN,2025-01-21T18:40:00Z,2025-01-21T20:40:00Z,2.00,1,DIURNO,2800,48
nao_cumprida,,,RV2025_OM19_E1_L49_C49,19,SBMN,SBMN,2025-01-22T14:55:00Z,2025-01-22T16:00:00Z,1.08,1,DIURNO,2800,49
nao_cumprida,,,RV2025_OM20_E1_L51_C51,20,SBMN,SBMN,2025-01-22T14:55:00Z,2025-01-22T16:00:00Z,1.08,1,DIURNO,2803,51
nao_cumprida,,,RV2025_OM21_E1_L53_C53,21,SBMN,SBMN,2025-01-22T14:55:00Z,2025-01-22T16:00:00Z,1.08,1,DIURNO,2809,53
nao_cumprida,,,RV2025_OM22_E1_L55_C55,22,SBMN,SBMN,2025-01-22T14:55:00Z,2025-01-22T15:55:00Z,1.00,1,DIURNO,2811,55
nao_cumprida,,,RV2025_OM19_E2_L50_C50,19,SBMN,SBMN,2025-01-22T20:50:00Z,2025-01-22T21:25:00Z,0.58,1,DIURNO,2800,50
nao_cumprida,,,RV2025_OM20_E2_L52_C52,20,SBMN,SBMN,2025-01-22T20:50:00Z,2025-01-22T21:25:00Z,0.58,1,DIURNO,2803,52
nao_cumprida,,,RV2025_OM21_E2_L54_C54,21,SBMN,SBMN,2025-01-22T20:50:00Z,2025-01-22T21:25:00Z,0.58,1,DIURNO,2809,54
nao_cumprida,,,RV2025_OM22_E2_L56_C56,22,SBMN,SBMN,2025-01-22T20:50:00Z,2025-01-22T21:25:00Z,0.58,1,DIURNO,2811,56
nao_cumprida,,,RV2025_OM27_E1_L68_C68,27,SBMN,SBMN,2025-01-28T12:05:00Z,2025-01-28T13:05:00Z,1.00,1,DIURNO,2803,68
nao_cumprida,,,RV2025_OM25_E1_L64_C64,25,SBMN,SBMN,2025-01-28T13:25:00Z,2025-01-28T14:30:00Z,1.08,1,DIURNO,2809,64
nao_cumprida,,,RV2025_OM27_E2_L69_C69,27,SBMN,SBMN,2025-01-28T14:35:00Z,2025-01-28T15:30:00Z,0.92,1,DIURNO,2803,69
nao_cumprida,,,RV2025_OM26_E1_L65_C70,26,SBMN,SBMN,2025-01-28T23:10:00Z,2025-01-29T00:50:00Z,1.67,1,NOTURNO,2809,65;66;67;70
nao_cumprida,,,RV2025_OM28_E1_L71_C71,28,SBMN,SBMN,2025-01-29T18:15:00Z,2025-01-29T19:25:00Z,1.17,1,DIURNO,2809,71
nao_cumprida,,,RV2025_OM29_E1_L72_C72,29,SBMN,SBMN,2025-01-29T22:50:00Z,2025-01-30T00:00:00Z,1.17,1,NOTURNO,2809,72
1 status aeronave ordem id om orig dest partida_utc chegada_utc dur_h prioridade periodo aeronave_real_2025 linhas_origem
2 cumprida 2800 1 RV2025_OM1_E2_L5_C5 1 SBMN SBMN 2025-01-02T14:30:00Z 2025-01-02T15:35:00Z 1.08 1 NOTURNO 2809 5
3 cumprida 2800 2 RV2025_OM5_E2_L13_C13 5 SBMN SBMN 2025-01-07T14:15:00Z 2025-01-07T16:15:00Z 2.00 1 DIURNO 2803 13
4 cumprida 2803 1 RV2025_OM7_E1_L15_C15 7 SBMN SBMN 2025-01-07T10:40:00Z 2025-01-07T12:30:00Z 1.83 1 DIURNO 2809 15
5 cumprida 2803 2 RV2025_OM8_E1_L17_C17 8 SBMN SBMN 2025-01-08T10:35:00Z 2025-01-08T12:35:00Z 2.00 1 DIURNO 2803 17
6 cumprida 2803 3 RV2025_OM12_E4_L28_C29 12 SBMN SBMN 2025-01-11T21:05:00Z 2025-01-12T00:00:00Z 2.92 1 DIURNO;NOTURNO 2809 28;29
7 cumprida 2803 4 RV2025_OM15_E1_L34_C34 15 SBMN SBMN 2025-01-12T11:50:00Z 2025-01-12T13:30:00Z 1.67 1 DIURNO 2803 34
8 cumprida 2809 1 RV2025_OM1_E1_L4_C4 1 SBMN SBMN 2025-01-02T11:55:00Z 2025-01-02T13:05:00Z 1.17 1 NOTURNO 2809 4
9 cumprida 2811 1 RV2025_OM3_E1_L8_C8 3 SBMN SBMN 2025-01-03T14:45:00Z 2025-01-03T16:10:00Z 1.42 1 DIURNO 2809 8
10 cumprida 2811 2 RV2025_OM4_E2_L10_C10 4 SBMN SBMN 2025-01-06T15:40:00Z 2025-01-06T16:45:00Z 1.08 1 DIURNO 2803 10
11 cumprida 2811 3 RV2025_OM9_E1_L20_C20 9 SBMN SBMN 2025-01-09T12:30:00Z 2025-01-09T15:55:00Z 3.42 1 DIURNO 2803 20
12 cumprida 2811 4 RV2025_OM9_E3_L22_C22 9 SBMN SBMN 2025-01-09T20:40:00Z 2025-01-09T22:15:00Z 1.58 1 DIURNO 2803 22
13 cumprida 2811 5 RV2025_OM14_E1_L32_C32 14 SBMN SBMN 2025-01-12T16:55:00Z 2025-01-12T20:25:00Z 3.50 1 DIURNO 2809 32
14 cumprida 2811 6 RV2025_OM17_E1_L40_C40 17 SBMN SBMN 2025-01-15T13:30:00Z 2025-01-15T14:25:00Z 0.92 1 DIURNO 2809 40
15 cumprida 2811 7 RV2025_OM17_E3_L42_C45 17 SBMN SBMN 2025-01-15T22:50:00Z 2025-01-15T23:50:00Z 1.00 1 NOTURNO 2809 42;43;44;45
16 nao_cumprida RV2025_OM2_E3_L6_C6 2 SBMN SBMN 2025-01-02T17:00:00Z 2025-01-02T18:05:00Z 1.08 1 NOTURNO 2809 6
17 nao_cumprida RV2025_OM2_E4_L7_C7 2 SBMN SBMN 2025-01-02T20:00:00Z 2025-01-02T21:10:00Z 1.17 1 NOTURNO 2809 7
18 nao_cumprida RV2025_OM5_E1_L11_C11 5 SBMN SBMN 2025-01-06T19:10:00Z 2025-01-06T21:20:00Z 2.17 1 DIURNO 2803 11
19 nao_cumprida RV2025_OM6_E1_L12_C12 6 SBMN SBMN 2025-01-06T19:30:00Z 2025-01-06T21:25:00Z 1.92 1 DIURNO 2811 12
20 nao_cumprida RV2025_OM6_E2_L14_C14 6 SBMN SBMN 2025-01-07T11:20:00Z 2025-01-07T13:20:00Z 2.00 1 DIURNO 2811 14
21 nao_cumprida RV2025_OM7_E2_L16_C16 7 SBMN SBMN 2025-01-07T14:00:00Z 2025-01-07T15:45:00Z 1.75 1 DIURNO 2809 16
22 nao_cumprida RV2025_OM8_E2_L18_C18 8 SBMN SBMN 2025-01-08T14:00:00Z 2025-01-08T16:00:00Z 2.00 1 DIURNO 2803 18
23 nao_cumprida RV2025_OM10_E1_L19_C19 10 SBMN SBMN 2025-01-08T22:30:00Z 2025-01-08T23:15:00Z 0.75 1 NOTURNO 2803 19
24 nao_cumprida RV2025_OM9_E2_L21_C21 9 SBMN SBMN 2025-01-09T18:10:00Z 2025-01-09T20:00:00Z 1.83 1 DIURNO 2803 21
25 nao_cumprida RV2025_OM11_E1_L23_C23 11 SBMN SBMN 2025-01-10T12:10:00Z 2025-01-10T13:15:00Z 1.08 1 DIURNO 2803 23
26 nao_cumprida RV2025_OM11_E2_L24_C24 11 SBMN SBMN 2025-01-10T14:25:00Z 2025-01-10T15:25:00Z 1.00 1 DIURNO 2803 24
27 nao_cumprida RV2025_OM13_E1_L30_C30 13 SBMN SBMN 2025-01-12T12:20:00Z 2025-01-12T13:10:00Z 0.83 1 DIURNO 2809 30
28 nao_cumprida RV2025_OM15_E2_L35_C35 15 SBMN SBMN 2025-01-12T14:25:00Z 2025-01-12T16:00:00Z 1.58 1 DIURNO 2803 35
29 nao_cumprida RV2025_OM13_E2_L31_C31 13 SBMN SBMN 2025-01-12T14:40:00Z 2025-01-12T15:25:00Z 0.75 1 DIURNO 2809 31
30 nao_cumprida RV2025_OM15_E3_L36_C36 15 SBMN SBMN 2025-01-12T18:30:00Z 2025-01-12T20:35:00Z 2.08 1 DIURNO 2803 36
31 nao_cumprida RV2025_OM14_E2_L33_C37 14 SBMN SBMN 2025-01-12T22:45:00Z 2025-01-13T02:05:00Z 3.33 1 NOTURNO 2809 33;37
32 nao_cumprida RV2025_OM16_E1_L38_C38 16 SBMN SBMN 2025-01-15T12:00:00Z 2025-01-15T15:05:00Z 3.08 1 DIURNO 2803 38
33 nao_cumprida RV2025_OM17_E2_L41_C41 17 SBMN SBMN 2025-01-15T14:45:00Z 2025-01-15T15:40:00Z 0.92 1 DIURNO 2809 41
34 nao_cumprida RV2025_OM16_E2_L39_C39 16 SBMN SBMN 2025-01-15T17:35:00Z 2025-01-15T20:35:00Z 3.00 1 DIURNO 2803 39
35 nao_cumprida RV2025_OM18_E1_L46_C46 18 SBMN SBMN 2025-01-21T12:05:00Z 2025-01-21T13:40:00Z 1.58 1 DIURNO 2800 46
36 nao_cumprida RV2025_OM18_E2_L47_C47 18 SBMN SBMN 2025-01-21T14:45:00Z 2025-01-21T16:15:00Z 1.50 1 DIURNO 2800 47
37 nao_cumprida RV2025_OM18_E3_L48_C48 18 SBMN SBMN 2025-01-21T18:40:00Z 2025-01-21T20:40:00Z 2.00 1 DIURNO 2800 48
38 nao_cumprida RV2025_OM19_E1_L49_C49 19 SBMN SBMN 2025-01-22T14:55:00Z 2025-01-22T16:00:00Z 1.08 1 DIURNO 2800 49
39 nao_cumprida RV2025_OM20_E1_L51_C51 20 SBMN SBMN 2025-01-22T14:55:00Z 2025-01-22T16:00:00Z 1.08 1 DIURNO 2803 51
40 nao_cumprida RV2025_OM21_E1_L53_C53 21 SBMN SBMN 2025-01-22T14:55:00Z 2025-01-22T16:00:00Z 1.08 1 DIURNO 2809 53
41 nao_cumprida RV2025_OM22_E1_L55_C55 22 SBMN SBMN 2025-01-22T14:55:00Z 2025-01-22T15:55:00Z 1.00 1 DIURNO 2811 55
42 nao_cumprida RV2025_OM19_E2_L50_C50 19 SBMN SBMN 2025-01-22T20:50:00Z 2025-01-22T21:25:00Z 0.58 1 DIURNO 2800 50
43 nao_cumprida RV2025_OM20_E2_L52_C52 20 SBMN SBMN 2025-01-22T20:50:00Z 2025-01-22T21:25:00Z 0.58 1 DIURNO 2803 52
44 nao_cumprida RV2025_OM21_E2_L54_C54 21 SBMN SBMN 2025-01-22T20:50:00Z 2025-01-22T21:25:00Z 0.58 1 DIURNO 2809 54
45 nao_cumprida RV2025_OM22_E2_L56_C56 22 SBMN SBMN 2025-01-22T20:50:00Z 2025-01-22T21:25:00Z 0.58 1 DIURNO 2811 56
46 nao_cumprida RV2025_OM27_E1_L68_C68 27 SBMN SBMN 2025-01-28T12:05:00Z 2025-01-28T13:05:00Z 1.00 1 DIURNO 2803 68
47 nao_cumprida RV2025_OM25_E1_L64_C64 25 SBMN SBMN 2025-01-28T13:25:00Z 2025-01-28T14:30:00Z 1.08 1 DIURNO 2809 64
48 nao_cumprida RV2025_OM27_E2_L69_C69 27 SBMN SBMN 2025-01-28T14:35:00Z 2025-01-28T15:30:00Z 0.92 1 DIURNO 2803 69
49 nao_cumprida RV2025_OM26_E1_L65_C70 26 SBMN SBMN 2025-01-28T23:10:00Z 2025-01-29T00:50:00Z 1.67 1 NOTURNO 2809 65;66;67;70
50 nao_cumprida RV2025_OM28_E1_L71_C71 28 SBMN SBMN 2025-01-29T18:15:00Z 2025-01-29T19:25:00Z 1.17 1 DIURNO 2809 71
51 nao_cumprida RV2025_OM29_E1_L72_C72 29 SBMN SBMN 2025-01-29T22:50:00Z 2025-01-30T00:00:00Z 1.17 1 NOTURNO 2809 72

View File

@@ -86,3 +86,38 @@ Formato:
### Observacoes ### Observacoes
- A remocao foi aplicada no script de pre-processamento para manter reprodutibilidade. - A remocao foi aplicada no script de pre-processamento para manter reprodutibilidade.
## v0.5 - VTO - 2026-06
### Adicionado
- Modelo `software/oamrp_v3.py` — reescrita do zero com rede espaço-tempo (No/Arco) e variável unificada `y[k,arco]`.
- Fase 1 (C1C6): fluxo de conservação, cobertura de missões, restrição de voo ativo, orçamento de horas por inspeção.
- Fase 2 (C7C11): nós e arcos de inspeção na rede; variáveis `H[k,i,nid]` para relógio de horas com reset; C9 downtime; C11 slot único via variáveis disjuntivas `oo`.
- Documento `HANDOFF_arara_oamrp.md` com formulação matemática, decisões de calibração (Q1Q5) e plano de build incremental.
- Resultado `db/processed/resultado_oamrp_v3.csv` para janeiro/2025.
### Alterado
- TAT corrigido para 1,5h (era 1,0h em v2).
- Top-10 bases por frequência no registro de voo 2025 (Q4).
- Missões EVAM marcadas como obrigatórias (Q2).
- Objetivo L2 definido como maximizar horas voadas (= minimizar folga ao fim do horizonte mensal) (Q3).
### Corrigido
- Bug de escopo de arco: arcos de início/fim agora carregam `aeronave_id` e só entram na variável `y` do aircraft correto.
- Bug `NameError tat_h` em C9b: substituído pela constante global `TAT_H`.
- Bug `AttributeError` em `escrever_resultado`: filtro por `n.tipo == "missao"` antes de acessar `n.missao`.
## v0.4 - VTO - 2026-06
### Adicionado
- Modelo `software/oamrp_v2.py` para rodar o OAMRP com o registro de voo 2025 consolidado.
- Resultado inicial `db/processed/resultado_oamrp_jan_2025.csv`.
### Observacoes
- Rodada padrao usa janeiro/2025, aeronaves reais `2800`, `2803`, `2809` e `2811`, base inicial provisoria `SBMN`, base de manutencao `SBMN` e prioridade uniforme 1.
- Primeira execucao retornou solucao otima com 50 de 61 missoes cumpridas.

1195
software/oamrp_v3.py Normal file

File diff suppressed because it is too large Load Diff