Files
fleet-assignment/README.md

4.8 KiB

Fleet Assignment Optimization - Força Aérea Brasileira

Integrantes do Grupo

  • 1T Lago
  • 1T Figueiredo
  • 1T Fialho

Sobre o Projeto

O presente trabalho aborda o problema clássico de Fleet Assignment (Alocação de Frota) aplicado ao contexto do transporte logístico aéreo militar.

O sistema foi desenvolvido como uma aplicação interativa (Dashboard Web) acoplada a um modelo matemático avançado. O objetivo é designar de forma ótima os diferentes modelos de aeronaves de transporte (C-97, C-95M, C-105, KC-390, KC-30, C-99A, C-98 e C-98A) de seus respectivos Esquadrões para atender à matriz de passageiros solicitada.

A arquitetura equilibra a maximização do atendimento de passageiros com a minimização dos custos logísticos (consumo de combustível em litros e penalidades de pernoite em bases externas), tudo isso balizado por limites de alcance, velocidades, tamanho físico das frotas disponíveis nas bases (Emissores) e capacidade de passageiros de cada aeronave.

O Modelo Matemático

O núcleo de otimização foi construído utilizando Programação Linear Inteira Mista (MILP) processada pelo solver SCIP (implementado com Google OR-Tools). A modelagem contempla:

  • Função Objetivo: \min \sum_{t} \sum_{r} (c_{r} \cdot x_{r,t}) + \sum_{t} \sum_{d} (M \cdot s_{d,t}) O algoritmo minimiza o custo total de combustível das missões (c_r), somado à grande penalidade (M) associada às variáveis de folga (s_{d,t}), forçando a malha a alocar missões para não deixar passageiros para trás, sempre que exequível.
  • Restrições Principais:
    • Atendimento de Demanda: \sum (\text{cap}_{m} \cdot x) + s \ge \text{PAX}
    • Bloqueio Temporal de Frota: Se uma aeronave realizar uma missão que exige pernoite fora de sua base, o modelo garante o "bloqueio" desse ativo nos dias subsequentes da janela temporal (T), impossibilitando a clonagem da aeronave.
    • Limites de Estoque: As decolagens originadas de uma localidade jamais podem exceder a propriedade física do \text{MaxFleet} distribuída para o esquadrão emissor.

Resultados Obtidos

A ferramenta é capaz de rodar a otimização global e extrair métricas gerenciais comparativas:

  • Baseline Fuel (Não-Otimizado): O sistema isola qual seria o consumo nominal caso as demandas fossem atendidas de modo bruto.
  • Optimized Fuel Consumption: Retorna o custo de combustível estrito gerado pelo motor SCIP.
  • Total Savings: Revela à chefia o percentual quantitativo de economia gerada pela roteirização matemática contra o plano base.
  • Visão Tática: A malha de voos diária pode ser "escrutinada" visualmente por meio de um Mapa Interativo renderizado sobre CartoDB / OpenStreetMap, evidenciando as decisões de despacho por código ICAO.

📂 Arquitetura do Projeto

O projeto foi estruturado utilizando padrões modernos de software:

/
├── app/
│   └── dashboard.py          # Interface Streamlit Interativa
├── raw/                      # Dados brutos fixos e mapas geo-referenciados
├── src/
│   └── fleet_assignment/     # Cérebro Matemático
│       ├── config.py         # Constantes Globais
│       ├── ingest.py         # Leitura, tratamento e merge
│       └── optimizer.py      # Motor MILP (SCIP / OR-Tools)
├── outputs/                  # Banco de dados temporário e CSVs finais
├── README.md
├── pyproject.toml
└── uv.lock

🛠️ Guia de Instalação e Execução

1. Instalar o Python (3.12+)

Abra seu terminal/prompt e utilize o gerenciador de pacotes nativo do seu Sistema Operacional:

  • Windows (Winget): winget install Python.Python.3.12
  • Ubuntu/Debian (APT): sudo apt update && sudo apt install python3 python3-pip python3-venv
  • Fedora (DNF): sudo dnf install python3
  • Arch Linux (Pacman): sudo pacman -S python
  • macOS (Homebrew): brew install python

2. Instalar o Gerenciador uv

O projeto adota o uv (gerenciador de ambiente e dependências ultrarrápido em Rust):

  • macOS / Linux:
    curl -LsSf https://astral.sh/uv/install.sh | sh
    
  • Windows (PowerShell):
    powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
    

3. Configurar Ambiente e Executar

Abra o terminal na pasta raiz deste projeto (onde este README.md e o arquivo pyproject.toml se encontram) e siga os passos abaixo:

  1. Sincronizar Dependências (Instalar tudo e criar a VENV automaticamente):
    rtk uv sync
    
  2. Ligar o Servidor Web e a Interface:
    rtk uv run streamlit run app/dashboard.py
    

Acesso: Assim que o servidor subir, o Python acionará automaticamente a abertura de uma nova guia no seu navegador web padrão acessando o painel de operações (normalmente via http://localhost:8501).