- C1 alterado: z[nid] <= 1 -> z[nid] == 1 para todas as missoes; toda missao deve ser coberta por exatamente 1 aeronave (sem missoes descobertas). - n_missoes padrao reduzido de 50 para 20 (n_evam de 5 para 4): garante factibilidade do MIP com Set Partitioning no envelope de 4 aeronaves. - Time limit padrao do solver CBC fixado em 120 s (era ilimitado): evita travamento ao tentar provar infeasibility. - Corrigido display "Not Solved": status de L1 preservado quando PuLP redefine mdl.status apos setObjective() em L2. - f0_cenario_insp_grande.json revisado: apenas 2803 com f0=595h em INSP 2A (F_max=600h, downtime=4 dias); demais matriculas com f0=0. - Gerado planejamento_insp_grande.html: Gantt exibe INSP 2A visivelmente; 20/20 missoes cobertas; CBC Optimal em < 15 s. - changelog.md e LOG.md atualizados com limitacoes detalhadas para contribuidores: escopo validado, bugs de display, riscos numericos do big-M com LRT < 5h e comportamento de 2811 ociosa. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
12 KiB
12 KiB
Changelog
Todas as versões significativas do Arara OAMRP devem ser registradas aqui. O LOG.md guarda o diário operacional detalhado; este arquivo resume mudanças por versão.
Formato:
## v<versão> — <Autor ou tag> — <YYYY-MM>
### Adicionado / Alterado / Corrigido / Removido
- Descrição objetiva.
v0.10 — VTO — 2026-06
Alterado
- Set Covering → Set Partitioning (C1): a restrição de cobertura de missões foi alterada de
Σ_k y_entrada ≤ 1(Set Covering — missão opcional) paraΣ_k y_entrada = 1(Set Partitioning — toda missão obrigatória). Isso reflete a premissa operacional de que cada missão deve ser realizada por exatamente uma aeronave, sem possibilidade de missões descobertas. A distinção anterior entre missões "hard" (EVAM) e "opcionais" foi eliminada. - Número padrão de missões sintéticas reduzido de 50 para 20 (
--n-missoes,n_evamde 5 para 4): Set Partitioning é mais restritivo e, com janelas de tempo fixas e restrições de inspeção simultâneas, 50 missões tornavam o MIP difícil de resolver ou inviável. Com 20 missões, a factibilidade é garantida na margem operacional de 4 aeronaves. - Time limit padrão do solver CBC fixado em 120 s (era ilimitado). O solver agora nunca trava indefinidamente; retorna a melhor solução encontrada dentro do prazo. O CLI mantém
--time-limitpara ajuste. - Correção de display do status do solver: PuLP redefinía
mdl.statuspara "Not Solved" ao reutilizar o modelo em L2 (apóssetObjective). O status de L1 é agora preservado quando L2 reporta 0, evitando exibição enganosa. - Cenário
f0_cenario_insp_grande.jsonrevisado: apenas a matrícula 2803 recebef0=595hpara INSP 2A (F_max=600h, downtime=4 dias), forçando a inspeção aparecer no Gantt. As demais matrículas partem comf0=0(plena disponibilidade), evitando que o problema se torne inviável por múltiplos relógios apertados simultaneamente.
Adicionado
db/processed/planejamento_insp_grande.html: visualização Gantt + mapa + tabela para o cenário com inspeção de 4 dias (INSP 2A — INSP CHECK 2A, 96 h de solo).
Limitações conhecidas (para contribuidores)
- Escopo validado restrito: Set Partitioning foi validado apenas para o cenário sintético com 20 missões, seed 42, 4 aeronaves e somente uma matrícula (2803) com LRT apertado. Fora desse envelope, o MIP pode ser infeasible ou ultrapassar o time limit sem solução.
- Missões sintéticas incluem bases fora da Amazônia (SBBR, SBGL, SBYS etc.) geradas aleatoriamente pelo seed. Para estudos de caso realistas, o gerador deve ser restrito ao conjunto de bases do Esquadrão Arara.
- Folga negativa no relatório: quando uma aeronave realiza inspeção dentro do horizonte, o campo
folgaexibido (LRT_ini − horas_celula_total) pode ser negativo porque não desconta o reset do relógio pós-inspeção. Isso é um bug de display; a restriçãoH ≤ F_maxestá correta no modelo. - LRT muito curto (< 5 h) pode gerar instabilidade numérica no big-M: o cenário foi configurado com LRT_ini=5 h para 2803, que está próximo do limiar onde o big-M deixa de ser eficaz. Valores menores podem permitir que o solver ignore a restrição por tolerância numérica (ε ≈ 1 e-4 do CBC).
- Aeronave 2811 fica ociosa neste cenário: o solver atribui todas as 20 missões a 3 aeronaves. Isso é matematicamente ótimo, mas pode não ser desejável operacionalmente. Considerar restrição de equilíbrio de carga em versões futuras.
- Status "Not Solved" após L2: a correção atual usa o status de L1 como proxy. Se L1 retornar apenas uma solução feasível (não ótima, por time limit), o modelo pode ser reportado como "Optimal" quando não é. Monitorar o campo
prio_otimapara validar.
v0.2 — VTO — 2026-06
Adicionado
- Diretório
software/com o primeiro protótiposoftware/oamrp_v1.py. - Modelo MIP compacto em PuLP para atribuição de aeronaves a missões opcionais.
- Regras de
.gitignorepara caches Python.
Alterado
- Estrutura de dados reorganizada para
db/raw/,db/pre_process/edb/processed/. - Documentação atualizada para refletir a separação entre dados (
db/) e modelos (software/). - Nome técnico do projeto padronizado como Arara OAMRP nos documentos principais.
v0.1 — VTO — 2026-06
Adicionado
- Repositório Git inicial.
- Estrutura de dados com
raw/,pre_process/eprocessed/. - Arquivo
README.mdna raiz com guia de uso do repositório. - Arquivo
CONTEXTO.mdcom orientações permanentes do projeto. - Arquivo
LOG.mdcom rastreabilidade operacional por data, hora e tag de autor. - Pré-processamento inicial do relatório de ciclo de inspeções do C-105 matrícula 2805.
- Saídas intermediárias em texto, JSON e CSV.
- Campos discretos para
zera_tso, letra, nível, duração, horas de voo, meses contínuos e pousos. - Documentação em
docs/about.md,docs/authors.mdedocs/changelog.md.
Alterado
- Projeto renomeado para
arara_oarmp. - Repositório remoto migrado para
https://git.ppgao.ita.br/vitorcesavc/arara_oarmp.git. - Documentação reorganizada para separar guia inicial, contexto, autoria, histórico de versão e log operacional.
Corrigido
- Interpretação da coluna
Zera TSO, que passou a ser tratada como coluna única. - Mapeamento dos níveis
B,PeOpara Base, Parque e Orgânico.
Observações
- O parser atual foi calibrado para o primeiro PDF processado.
- A grafia original do documento fonte foi preservada, inclusive ocorrências de
INPEÇÃO.
v0.3 - VTO - 2026-06
Adicionado
- Pre-processamento da
Planilha 2025.xlsxpara registro de voo limpo. - Saidas em CSV/XLSX sem mesclas e CSV OAMRP com
id,orig,dest,partida_utc,chegada_utc,prioridade. - Resumo JSON com contagens, campos faltantes e criterios de conversao.
Alterado
- Criado arquivo final
db/processed/registro_voo_2025.csv.
Observacoes
SEGMTOfoi preservado da planilha original; cruzamento de 00Z foi registrado em campo separado.- Colunas entre
REALeCOM2foram descartadas.
v0.3.1 - VTO - 2026-06
Alterado
- Registro de voo 2025 regenerado removendo a linha original 793, aeronave 2806.
- Consolidado passou para 1267 trechos e registro limpo para 1420 linhas.
- Documentacao atualizada em
README.md,docs/about.md,LOG.mde relatorio de validacao.
Observacoes
- A remocao foi aplicada no script de pre-processamento para manter reprodutibilidade.
v0.9 — VTO — 2026-06
Adicionado
- Flag
--escalana CLI: carrega missões reais da Escala de Voo Modelo 1 (CSV com separador;), com parser de data DD/MMM, horários UTC e prioridade derivada do código de missão (69TV→1, 50TT/05TF→3). BASES_COORDSexpandido de 10 para 26 bases (inclui SBMQ, SBOI, SBBR, SBGL, SBCY, SWEI, SWCA, SWKO, SBUY e outras rotas reais).- Cenários de f0 em JSON:
f0_cenario_esquadrao.json(dados realistas do esquadrão) ef0_cenario_insp_grande.json.
Corrigido
- Gantt: FAB 2800 (y=0) estava invisível — corrigido com
yaxis range=[-0.5, n-0.5]. - Gantt: barras não renderizavam (
shapes type="rect") — substituídas porgo.Scatter mode="lines"que renderiza garantido no eixo de datas. - Largura mínima de 2h por barra no Gantt para voos curtos ficarem visíveis.
Alterado
--time-limitdefault alterado de 60s para 300s (5 minutos).- Imports
timedeltaedateconsolidados no topo do módulo (era importado localmente em funções).
Resultado validado
Rodada --sintetico --n-missoes 30 --f0 f0_cenario_esquadrao.json → 30/30 Optimal; FAB 2809 com 1 inspeção (CHECK 300) visível no Gantt.
v0.8 — VTO — 2026-06
Adicionado
- Visualização combinada em HTML único: Gantt (Plotly) + mapa (Folium em iframe) + tabela de voos com filtros JS interativos.
- Título "Planejamento de Diagonal de Manutenção" no HTML gerado.
- Exportação de inspeções no CSV de resultado com timestamps UTC reais.
- Filtros na tabela: aeronave, status, prioridade, base e busca livre; ordenação por coluna.
- Flag
--time-limitna CLI do solver (padrão era 60s).
v0.7 — VTO — 2026-06
Corrigido
- Bug crítico de conservação de fluxo em nós de inspeção (
oamrp_v3.py): o solver criava unidades de fluxo fantasma nesses nós, fazendo o relatório exibir 50/50 enquanto o CSV real tinha apenas 16 missões cobertas. Corrigido adicionando C2 para nóstipo == "inspecao". - Bug de restrição C6 Fase 1 simplificada removida: somava horas totais sem respeitar resets de inspeção, tornando EVAMs 2809 e 2811 artificialmente ociosas. As variáveis
H[k,seq,nid]com reset já impõem o limite corretamente.
Adicionado
- Flag
--aleatoriona CLI: sorteiaf0entre 10% e 90% deF_maxpor aeronave e tipo de inspeção. - Tabela OFRAG em
db/processed/ofrag.csvcom 50 ordens sintéticas (prioridades 1–5, tipo de missão, OM). - Script
software/gerar_ofrag.pypara gerar ou regen a tabela OFRAG de forma reprodutível. - Flag
--ofragna CLI: carrega prioridades do CSV ao gerar missões sintéticas. - Visualização interativa
db/processed/mapa_rotas.htmlvia Folium, com uma camada por aeronave, missões não cumpridas tracejadas e popup com detalhes. - Script
software/visualizar_resultado.pypara gerar o mapa a partir do CSV de resultado.
Alterado
- Nomenclatura alinhada com Al-Thani (2016):
lrt_h→f_max;horas_iniciais→f0;orcamento_h()→lrt_inicial();horas_iniciais_aleatorias()→gerar_f0_aleatorio();carregar_horas_iniciais()→carregar_f0(); CLI--horas-iniciais→--f0. - Relatório imprime
F_max=,f0=eLRT_ini=para cada aeronave, alinhado com a formulação do artigo de referência.
Resultado validado
Rodada --sintetico --seed 42 --aleatorio --ofrag db/processed/ofrag.csv → 50/50 missões cumpridas, solver CBC Optimal, todas as 4 EVAMs com voos e ferry.
v0.6 - VTO - 2026-06
Adicionado
- Gerador de missões sintéticas cross-base (
gerar_missoes_sinteticas()): 50 missões entre 10 bases com durações calculadas via haversine ÷ velocidade C-105 (430 km/h); flag--sintetico,--n-missoes,--n-evamna CLI. - Fase 3: arcos de ferry em
construir_rede()— arcosinicio,missao_missao,missao_inspeinsp_missaoagora permitem bases distintas com tempo de ferry calculado automaticamente. - Ferry consome horas de célula no relógio de inspeção (C6:
carga = v.carga_h + a.horas_ferry). - Relatório imprime segmentos
[FERRY base1->base2 Xh]na linha do tempo de cada aeronave. - Resultado
db/processed/resultado_oamrp_sintetico.csvpara 50 missões sintéticas.
Alterado
- Dicionário
BASES_COORDScom coordenadas (lat, lon) das 10 bases operacionais do C-105.
v0.5 - VTO - 2026-06
Adicionado
- Modelo
software/oamrp_v3.py— reescrita do zero com rede espaço-tempo (No/Arco) e variável unificaday[k,arco]. - Fase 1 (C1–C6): fluxo de conservação, cobertura de missões, restrição de voo ativo, orçamento de horas por inspeção.
- Fase 2 (C7–C11): 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 disjuntivasoo. - Documento
HANDOFF_arara_oamrp.mdcom formulação matemática, decisões de calibração (Q1–Q5) e plano de build incremental. - Resultado
db/processed/resultado_oamrp_v3.csvpara 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_ide só entram na variávelydo aircraft correto. - Bug
NameError tat_hem C9b: substituído pela constante globalTAT_H. - Bug
AttributeErroremescrever_resultado: filtro porn.tipo == "missao"antes de acessarn.missao.
v0.4 - VTO - 2026-06
Adicionado
- Modelo
software/oamrp_v2.pypara 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,2809e2811, base inicial provisoriaSBMN, base de manutencaoSBMNe prioridade uniforme 1. - Primeira execucao retornou solucao otima com 50 de 61 missoes cumpridas.