{ "cells": [ { "cell_type": "markdown", "id": "90710a92", "metadata": {}, "source": [ "# Alocação de Frotas (Fleet Scheduling) - Aeronaves C-97\n", "\n", "Este projeto visa realizar a alocação de frota (Fleet Assignment) baseada nos princípios do livro referenciado *Airline Operations and Scheduling*.\n", "Diferentemente do modelo anterior que utilizava aeronaves de carga, este foca exclusivamente na aeronave de passageiros **C-97**.\n", "\n", "## Objetivos:\n", "1. Remover cálculos de aeronaves de carga.\n", "2. Analisar as demandas diárias para a aeronave C-97.\n", "3. Identificar os esquadrões detentores dessas aeronaves e a quantidade de aeronaves (matrículas únicas).\n", "4. Calcular os 5 trechos mais relevantes do ano de 2025 utilizando estatística e gráficos.\n", "5. Realizar o Fleet Assignment para os 5 trechos, visando minimizar o custo total da operação (Modelo 1 proposto).\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "5e2bab53", "metadata": { "execution": { "iopub.execute_input": "2026-06-07T23:11:56.681238Z", "iopub.status.busy": "2026-06-07T23:11:56.680938Z", "iopub.status.idle": "2026-06-07T23:11:57.169135Z", "shell.execute_reply": "2026-06-07T23:11:57.168256Z" } }, "outputs": [], "source": [ "# Importação de bibliotecas\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "import pulp\n", "import pymap3d as pm\n", "import math\n", "\n", "# Configuração de estilo para os gráficos\n", "sns.set_theme(style=\"whitegrid\")\n", "\n", "# Constantes globais\n", "CSV_FILEPATH = \"SISCO_AEREA_01-01-2025_A_31-12-2025_1911251714Z.csv\"\n", "JSON_AEROPORTOS = \"airports.json\"\n", "CAPACIDADE_C97 = 30 # Capacidade média de passageiros do C-97 (Brasília)\n" ] }, { "cell_type": "markdown", "id": "01b6d291", "metadata": {}, "source": [ "## 1. Leitura e Limpeza dos Dados\n", "Vamos carregar os dados, filtrar apenas para o modelo `C-97` e tratar os campos de localidades e datas.\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "39011534", "metadata": { "execution": { "iopub.execute_input": "2026-06-07T23:11:57.170725Z", "iopub.status.busy": "2026-06-07T23:11:57.170545Z", "iopub.status.idle": "2026-06-07T23:11:57.534804Z", "shell.execute_reply": "2026-06-07T23:11:57.534327Z" } }, "outputs": [], "source": [ "# Carregamento do banco de dados\n", "df = pd.read_csv(CSV_FILEPATH, low_memory=False)\n", "df_aeroportos = pd.read_json(JSON_AEROPORTOS, orient='index')\n", "\n", "# Tratamento básico de valores nulos expressos como 'NIL'\n", "df.replace('NIL', 0, inplace=True)\n", "\n", "# Filtro para a aeronave C-97 (Passageiros) e remoção de registros de carga\n", "df_c97 = df[df['Modelo'] == 'C-97'].copy()\n", "\n", "# Filtrando decolagens e pousos conhecidos\n", "df_c97 = df_c97[df_c97['Localidade Decolagem'] != 0]\n", "df_c97 = df_c97[df_c97['Localidade Pouso'] != 0]\n", "\n", "# Criação da coluna Trecho\n", "df_c97['Trecho'] = df_c97['Localidade Decolagem'] + '-' + df_c97['Localidade Pouso']\n", "\n", "# Conversão da coluna PAX para numérico\n", "df_c97['PAX'] = pd.to_numeric(df_c97['PAX']).fillna(0)\n", "\n", "# Tratamento de datas\n", "df_c97['Dep TimeStamp'] = pd.to_datetime(df_c97['Data de Decolagem'] + ' ' + df_c97['Hora de Decolagem'], format='mixed', dayfirst=True)\n", "df_c97['Data Apenas'] = df_c97['Dep TimeStamp'].dt.date\n" ] }, { "cell_type": "markdown", "id": "7727e9ca", "metadata": {}, "source": [ "## 2. Análise dos Esquadrões e Matrículas (Aeronaves)\n", "Identificaremos quais esquadrões operam o C-97 e qual a disponibilidade de aeronaves (número de matrículas únicas), pois isso definirá as restrições de frota.\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "1e40e4de", "metadata": { "execution": { "iopub.execute_input": "2026-06-07T23:11:57.536360Z", "iopub.status.busy": "2026-06-07T23:11:57.536237Z", "iopub.status.idle": "2026-06-07T23:11:57.547915Z", "shell.execute_reply": "2026-06-07T23:11:57.547430Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Esquadrões que operam o C-97: ETA1, ETA3, ETA5, ETA6, ETA7, ETA2, PAMA SP\n", "Total de matrículas únicas (aeronaves disponíveis): 14\n", "\n", "Aeronaves por esquadrão:\n", " - ETA1: 1 aeronaves\n", " - ETA2: 1 aeronaves\n", " - ETA3: 3 aeronaves\n", " - ETA5: 1 aeronaves\n", " - ETA6: 4 aeronaves\n", " - ETA7: 3 aeronaves\n", " - PAMA SP: 1 aeronaves\n", "\n", "Bases inferidas por esquadrão (pela moda de decolagens):\n", " - ETA1: SBBE\n", " - ETA2: SBNT\n", " - ETA3: SBGL\n", " - ETA5: SBCO\n", " - ETA6: SBBR\n", " - ETA7: SBMN\n", " - PAMA SP: SBGR\n" ] } ], "source": [ "# Obtendo esquadrões e matrículas únicas\n", "esquadroes = df_c97['Emissor'].unique()\n", "matriculas_unicas = df_c97['Matrícula'].unique()\n", "total_aeronaves = len(matriculas_unicas)\n", "\n", "print(f\"Esquadrões que operam o C-97: {', '.join(esquadroes)}\")\n", "print(f\"Total de matrículas únicas (aeronaves disponíveis): {total_aeronaves}\")\n", "\n", "# Aeronaves por esquadrão\n", "aeronaves_por_esquadrao = df_c97.groupby('Emissor')['Matrícula'].nunique().to_dict()\n", "print(\"\\nAeronaves por esquadrão:\")\n", "for esq, qtd in aeronaves_por_esquadrao.items():\n", " print(f\" - {esq}: {qtd} aeronaves\")\n", " \n", "# Identificar a base principal de cada esquadrão (aeroporto com mais decolagens)\n", "bases_esquadroes = {}\n", "for esq in aeronaves_por_esquadrao.keys():\n", " base = df_c97[df_c97['Emissor'] == esq]['Localidade Decolagem'].mode()[0]\n", " bases_esquadroes[esq] = base\n", "\n", "print(\"\\nBases inferidas por esquadrão (pela moda de decolagens):\")\n", "for esq, base in bases_esquadroes.items():\n", " print(f\" - {esq}: {base}\")\n" ] }, { "cell_type": "markdown", "id": "7cf32f02", "metadata": {}, "source": [ "## 3. Análise Estatística das Demandas Diárias\n", "Para definir os trechos mais relevantes do ano, calcularemos a demanda de passageiros (PAX) agregada diariamente. Em seguida, extraímos a **média de passageiros diários** e o **desvio padrão** para cada trecho. A relevância será determinada pela maior média de demanda diária de PAX.\n", "Começaremos focando em 5 trechos (alvo variável).\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "6ac506ed", "metadata": { "execution": { "iopub.execute_input": "2026-06-07T23:11:57.549463Z", "iopub.status.busy": "2026-06-07T23:11:57.549345Z", "iopub.status.idle": "2026-06-07T23:11:57.812722Z", "shell.execute_reply": "2026-06-07T23:11:57.812187Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TrechoMedia_PAX_DiarioDesvio_Padrao_PAXTotal_PAXDias_Operados
223SBGL-SBBR0.9808224.097998358.038
69SBBR-SBGL0.7945213.483710290.034
72SBBR-SBGR0.4876712.420831178.021
272SBGR-SBBR0.4767122.481277174.021
237SBGL-SBGR0.4602742.575601168.019
\n", "
" ], "text/plain": [ " Trecho Media_PAX_Diario Desvio_Padrao_PAX Total_PAX Dias_Operados\n", "223 SBGL-SBBR 0.980822 4.097998 358.0 38\n", "69 SBBR-SBGL 0.794521 3.483710 290.0 34\n", "72 SBBR-SBGR 0.487671 2.420831 178.0 21\n", "272 SBGR-SBBR 0.476712 2.481277 174.0 21\n", "237 SBGL-SBGR 0.460274 2.575601 168.0 19" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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8AEBNgAAAAAAPiDABgAAAADABwTYAAAAAAD4gAAbAAAAAICkDLCPHj0a/P3bb7+19957z/79918/tgkAAAAAgMgPsNevX2833XSTvf322+76kCFDrFu3bvbaa6/ZHXfcYb///ntibCcAAAAAAJEVYA8cONDSpk1rDRs2tJMnT9rEiROtSZMm9ttvv1mdOnVcwA0AAAAAQEqT4ABbgXSPHj2sQoUKtmjRIjt06JDdddddljVrVmvdurWtWLEicbYUAAAAAIBICrBPnTpl2bNnd7/PmzfPMmXKZFWrVnXXz5w540a3AQAAAABIaRIcYJcqVcpmzZplu3btspkzZ1rt2rVdUK3A+6OPPnL3AwAAAACQ0iQ4wO7atatNnjzZ6tatawcOHLBOnTq522+++Wb79ddf7bHHHkuM7QQAAAAAIKwlOJ/7+uuvt6+++sqWL19ulSpVskKFCrnb27dvb9dee62VLl06MbYTAAAAAICwdkETpq+44gp3WbdunS1btsxy5szpAmwAAAAAAFKqCwqwv/76a7fu9e7du4O35cmTx1UXb9asmZ/bBwAAAABAZAbYc+bMsZ49e7p08CeeeMIF1jt37rRp06bZM888Yzly5LD69esnztYCAAAAABApAfaoUaOscePGNnjw4Ci333nnnda9e3cbM2YMATYAAAAAIMVJcBXxv//+25o3bx7jfbp99erVfmwXAAAAAACRHWCroJmW54rJ/v37LX369H5sFwAAAAAAkR1g16pVy4YPH27bt2+Pcvu2bdtsxIgRbhkvAAAAAABSmgTPwVZhM823btSokVWpUsUVOVM18aVLl9pll13mKokDAAAAAJDSJHgEO2/evPb5559bu3bt7NixY7ZixQr3U9d1e6FChRJnSwEAAAAAiKQR7BdeeMFatmzpluoCAAAAAAAXOIKt9a6PHDmS0KcBAAAAABDREhxga971woULE2drAAAAAABIKSnipUuXtrFjx9rMmTOtTJkyljlz5ij3p0qVyvr37+/nNgIAAAAAEHkB9uzZsy1fvnx26tQpW758+Tn3K8AGAAAAACClSXCAPWfOnMTZEgAAAAAAUtIcbAAAAAAAcIEj2A0bNrQRI0a4Odc33HBDnGnguu+7776Lz8sCAAAAAJCyAuwaNWpYlixZgr8zzxoAAAAAgAsIsAcMGBD8/dVXX43PUwAAAAAA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a89tt93mLgAAAAAApFTxThH/9NNPrWnTpla5cmUXTOs6AAAAAABIQIA9ZcoU6927t505c8YaNGjgltZ68cUX3ZrUAAAAAAAgniniH330kTVp0sQGDRrkCptJ//797cMPP7QuXbqwHwEAAAAAKV68RrA3bNhgrVq1CgbX0q5dOzt48KBt2rQpxe9EAAAAAADiFWAfP37csmTJEuW2/Pnzu5+HDx9mLwIAAAAAUrx4BdiBQCDK6LVoHracPXs2xe9EAAAAAADiXUUcAAAAAAD4sA723Llzbf369cHrGrnWqPaPP/5o//zzT5THNmvWLL4vCwAAAABAygqwR4wYEePt0ZfqUtBNgA0AAAAASGniFWB///33ib8lAAAAAABEeoBdqFChxN8SAAAAAACSMYqcAQAAAADgAwJsAAAAAAB8QIANAAAAAIAPCLABAAAAAEjKAFvrYK9evdrmzZtnhw8ftv379/uxPQAAAAAARPY62KG+/PJLe/PNN23nzp2WOnVq++yzz9x62OnSpXO3p0+f3v8tBQAAAAAgkkawZ8yYYU8//bRde+21NnjwYDeSLTfddJPNnTvXRo4cmRjbCQAAAABAZI1gjx492lq3bm19+vSxM2fOBG+/8847be/evfbpp59at27d/N5OAAAAAAAiawR7w4YNbrQ6JpUqVbIdO3b4sV0AAAAAAER2gJ07d25bt25djPfpdt0PAAAAAEBKk+AAu2nTpjZs2DCbOXOmnTx50t2WKlUqW7FihZt/3bhx48TYTgAAAAAAImsOtuZX//333+6nKohLu3bt7OjRo1atWjV7/PHHE2M7AQAAAACIrABbS3C9++679ssvv9iCBQvswIEDli1bNqtRo4bVq1fPjWYDAAAAAJDSXNA62HL99de7CwAAAAAAiGeAPXz48ATtq86dO7NvAQAAAAApygUF2EoDDwQCliZNGsuZM6dLEz916pSlS5fOLrvsMgJsAAAAAECKE68Ae/Xq1cHfNe/6iSeesBdeeMFuvvlmF2TLvHnz7LnnnrNevXol3tYCAAAAABApy3T17dvXunbt6pbr8oJrqVu3rqsgPnjwYL+3EQAAAACAyAuwt23bZoUKFYrxvty5c9uePXv82C4AAAAAACI7wC5Tpox99NFHdubMmSi3nzhxwi3fVbFiRT+3DwAAAACAyFymS/OvH3jgAbvxxhut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uhw+fNhmz57tgu3333/fChcubLfeeqsLtil8BgAAAABIiS6oinjWrFmtefPm7rJ//34XbH/zzTc2evRot1TX1KlT/d9SAAAAAADCWNwVy+LhxIkTLn38+PHjdubMGduyZYs/WwYAAAAAQKSPYO/YscNmzpzpLn/88YdlzpzZbrzxRnvooYfs+uuv938rAQAAAACIlAA7NKhetmyZm5PdoEED69ixo9WpU8fSp0+fuFsKAAAAAEByD7DbtGnjRqozZMhg9erVs6FDh7qfug4AAAAAAOIZYC9dutTSpEljJUuWtL1799qECRPcJSapUqWy8ePHs28BAAAAAClKvALs6tWrB38PBAJxPvZ89wMAAAAAkGID7A8//DDxtwQAAAAAgJS8TBcAAAAAACDABgAAAADAF4xgAwAAAADgAwJsAAAAAAB8QIANAAAAAIAPCLABAAAAAPABATYAAAAAAD4gwAYAAAAAwAcE2AAAAAAA+IAAGwAAAAAAHxBgAwAAAADgAwJsAAAAAAB8QIANAAAAAIAPCLABAAAAAPABATYAAAAAAD4gwAYAAAAAwAcE2AAAAAAA+IAAGwAAAAAAHxBgAwAAAADgAwJsAAAAAAAiIcA+e/asDRs2zOrUqWOVK1e2Tp062aZNm2J9/D///GMPPvig1axZ02rVqmVdu3a1rVu3XtJtBgAAAAAg7ALskSNH2sSJE61fv342adIkF3B37NjRTp48ec5j9+3bZx06dLCMGTPahx9+aO+8847t3bvXPf7EiRNJsv0AAAAAACR5gK0gety4cW4Uun79+lamTBkbPHiwbd++3WbNmnXO47/77js7evSovf7661aqVCm7+uqr7Y033rB169bZkiVLkuQ9AAAAAACQ5AH26tWr7ciRIy7V25M9e3YrV66cLV68+JzH63Ea8dYItid16v97CwcPHrxEWw0AAAAAwLnSWhLSSLUULFgwyu358uUL3heqcOHC7hLq7bffdgF39erVE3lrAQAAAAAI0wD72LFj7mf69Omj3J4hQwY7cODAeZ+vedgTJkyw559/3nLlynXB2xEIBFzq+cVIlSqVZcqU6aJeAwj9bqhdJjXaNSKtTQvtGn6hXSMShUu75liNcGrXeq7aZNgH2F6qt+Zih6Z9q2BZXMGq3uDQoUNt1KhR9sgjj1i7du0uajtOnTplq1atuqjX0PYq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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Demanda diária por trecho\n", "demanda_diaria = df_c97.groupby(['Trecho', 'Data Apenas'])['PAX'].sum().reset_index()\n", "\n", "# Criar um range de datas para todo o ano de 2025 para contabilizar os dias sem voo\n", "import itertools\n", "datas_2025 = pd.date_range(start='2025-01-01', end='2025-12-31').date\n", "todos_trechos = demanda_diaria['Trecho'].unique()\n", "idx = pd.MultiIndex.from_product([todos_trechos, datas_2025], names=['Trecho', 'Data Apenas'])\n", "demanda_diaria_completa = pd.DataFrame(index=idx).reset_index()\n", "\n", "# Mesclar com os dados reais e preencher NaN com 0\n", "demanda_diaria_completa = pd.merge(demanda_diaria_completa, demanda_diaria, on=['Trecho', 'Data Apenas'], how='left').fillna({'PAX': 0})\n", "\n", "# Estatísticas (Média e Desvio Padrão) por trecho\n", "estatisticas_trechos = demanda_diaria_completa.groupby('Trecho').agg(\n", " Media_PAX_Diario=('PAX', 'mean'),\n", " Desvio_Padrao_PAX=('PAX', 'std'),\n", " Total_PAX=('PAX', 'sum'),\n", " Dias_Operados=('PAX', lambda x: (x > 0).sum())\n", ").reset_index()\n", "\n", "# Ordenar pelas rotas de maior média de PAX diário\n", "estatisticas_trechos = estatisticas_trechos.sort_values(by='Media_PAX_Diario', ascending=False)\n", "\n", "# Definir número de trechos alvo\n", "NUM_TRECHOS = 5\n", "top_trechos = estatisticas_trechos.head(NUM_TRECHOS)\n", "\n", "display(top_trechos)\n", "\n", "# Gráfico\n", "plt.figure(figsize=(10, 6))\n", "sns.barplot(data=top_trechos, x='Trecho', y='Media_PAX_Diario', hue='Trecho', palette='viridis', legend=False)\n", "plt.title(f'Top {NUM_TRECHOS} Trechos Mais Relevantes (Média de PAX Diário)')\n", "plt.ylabel('Média Diária de Passageiros')\n", "plt.xlabel('Trecho (Origem - Destino)')\n", "plt.xticks(rotation=45)\n", "plt.tight_layout()\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "eadb21ce", "metadata": {}, "source": [ "## 4. Fleet Assignment Model (FAM)\n", "Conforme o livro base *Airline Operations and Scheduling*, o problema de alocação de frotas busca atribuir os tipos de aeronaves às pernas de voo visando minimizar o custo e as perdas de receita (spill). Como temos apenas um tipo (C-97), nosso problema adapta-se a uma **alocação de esquadrões (e suas respectivas bases)** aos voos requeridos para minimizar o custo total de operação, que é proporcional à distância voada.\n", "\n", "**Modelo Matemático:**\n", "- **Variáveis de decisão:** $X_{s, r}$ (Quantidade de voos operados pelo esquadrão $s$ no trecho $r$)\n", "- **Função Objetivo:** Minimizar a distância total (Distância de posicionamento da base + Distância do trecho + Retorno para a base).\n", "- **Restrições:**\n", " 1. O número de voos alocados para o trecho deve suprir a demanda média (Média PAX / Capacidade do C-97).\n", " 2. O total de voos atribuídos a um esquadrão não pode exceder o número de aeronaves disponíveis naquele esquadrão no dia.\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "c485ad06", "metadata": { "execution": { "iopub.execute_input": "2026-06-07T23:11:57.814188Z", "iopub.status.busy": "2026-06-07T23:11:57.814061Z", "iopub.status.idle": "2026-06-07T23:11:57.912503Z", "shell.execute_reply": "2026-06-07T23:11:57.911927Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "== RESULTADO DO FLEET ASSIGNMENT ==\n", "Status: Optimal\n", "Distância Total Minimizada: 7722.27 km\n", "\n", "Alocações (Voos Diários):\n", "\n", "Trecho: SBGL-SBBR (Voos necessários: 1)\n", " -> ETA3 (Base SBGL): 1 voo(s)\n", "\n", "Trecho: SBBR-SBGL (Voos necessários: 1)\n", " -> ETA3 (Base SBGL): 1 voo(s)\n", "\n", "Trecho: SBBR-SBGR (Voos necessários: 1)\n", " -> ETA6 (Base SBBR): 1 voo(s)\n", "\n", "Trecho: SBGR-SBBR (Voos necessários: 1)\n", " -> ETA6 (Base SBBR): 1 voo(s)\n", "\n", "Trecho: SBGL-SBGR (Voos necessários: 1)\n", " -> ETA3 (Base SBGL): 1 voo(s)\n" ] } ], "source": [ "# Preparação dos dados para o modelo\n", "rotas_lista = top_trechos['Trecho'].tolist()\n", "\n", "# Dicionário de distâncias\n", "def calc_distancia(icao1, icao2):\n", " try:\n", " lat1, lon1, alt1 = df_aeroportos.loc[icao1, ['lat', 'lon', 'elevation']]\n", " lat2, lon2, alt2 = df_aeroportos.loc[icao2, ['lat', 'lon', 'elevation']]\n", " # Retorna a distância oblíqua em km\n", " return pm.geodetic2aer(lat1, lon1, alt1, lat2, lon2, alt2)[2] / 1000.0\n", " except KeyError:\n", " return 9999.0 # Penalidade caso aeroporto não exista no json\n", "\n", "distancias_voo = {}\n", "for r in rotas_lista:\n", " origem, destino = r.split('-')\n", " dist_trecho = calc_distancia(origem, destino)\n", " for esq, base in bases_esquadroes.items():\n", " dist_ida = calc_distancia(base, origem) if base != origem else 0\n", " dist_volta = calc_distancia(destino, base) if base != destino else 0\n", " distancias_voo[(esq, r)] = dist_ida + dist_trecho + dist_volta\n", "\n", "# Demanda de voos por rota (Média diária)\n", "voos_requeridos = {}\n", "for _, row in top_trechos.iterrows():\n", " # Arredondamento para cima da (demanda / capacidade)\n", " voos = math.ceil(row['Media_PAX_Diario'] / CAPACIDADE_C97)\n", " # Pelo menos 1 voo para suprir a demanda da rota selecionada\n", " voos_requeridos[row['Trecho']] = max(1, voos)\n", "\n", "# MODELAGEM COM PULP\n", "prob = pulp.LpProblem(\"Fleet_Assignment_C97\", pulp.LpMinimize)\n", "\n", "# Variáveis\n", "X = pulp.LpVariable.dicts(\"X\", [(esq, r) for esq in aeronaves_por_esquadrao.keys() for r in rotas_lista], lowBound=0, cat='Integer')\n", "\n", "# Função Objetivo\n", "prob += pulp.lpSum([distancias_voo[(esq, r)] * X[(esq, r)] for esq in aeronaves_por_esquadrao.keys() for r in rotas_lista])\n", "\n", "# Restrição 1: Suprir a demanda da rota\n", "for r in rotas_lista:\n", " prob += pulp.lpSum([X[(esq, r)] for esq in aeronaves_por_esquadrao.keys()]) >= voos_requeridos[r]\n", "\n", "# Restrição 2: Limite de aeronaves por esquadrão\n", "for esq in aeronaves_por_esquadrao.keys():\n", " prob += pulp.lpSum([X[(esq, r)] for r in rotas_lista]) <= aeronaves_por_esquadrao[esq]\n", "\n", "# Solução\n", "prob.solve(pulp.PULP_CBC_CMD(msg=False))\n", "\n", "# Exibição dos resultados\n", "print(\"== RESULTADO DO FLEET ASSIGNMENT ==\")\n", "print(f\"Status: {pulp.LpStatus[prob.status]}\")\n", "print(f\"Distância Total Minimizada: {pulp.value(prob.objective):.2f} km\\n\")\n", "\n", "print(\"Alocações (Voos Diários):\")\n", "for r in rotas_lista:\n", " print(f\"\\nTrecho: {r} (Voos necessários: {voos_requeridos[r]})\")\n", " for esq in aeronaves_por_esquadrao.keys():\n", " qtd = int(X[(esq, r)].varValue)\n", " if qtd > 0:\n", " print(f\" -> {esq} (Base {bases_esquadroes[esq]}): {qtd} voo(s)\")\n" ] } ], "metadata": { "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.13" } }, "nbformat": 4, "nbformat_minor": 5 }