Autores: Danilo Ferreira e Samuel Sousa Disciplina: Análise e Planejamento de Sistema de Transportes
Este projeto implementa o Modelo Gravitacional de Alocação de Viagens para estimar uma matriz de deslocamentos Origem-Destino (OD). O diferencial deste modelo é a aplicação do método de Fator Duplo (Doubly Constrained / Furness), que garante que os totais de viagens geradas (
Esta versão utiliza uma Interface Gráfica do Utilizador (GUI) desenvolvida com pywebview para facilitar a interação, visualização de dados e análise de cenários.
O modelo parte do princípio de que a atratividade entre duas zonas é proporcional à sua capacidade de geração (
Para garantir que as restrições de origem e destino sejam satisfeitas, o modelo introduz dois fatores de balanceamento iterativos,
Fórmulas para os fatores de balanceamento $A_i$ e $B_j$
Onde:
-
$T_{ij}$ : Viagens estimadas da origem i para o destino j. -
$O_i$ e$D_j$ : Totais conhecidos de viagens que saem da zona i e chegam na zona j. -
$A_i$ e$B_j$ : Fatores de balanceamento calculados iterativamente. -
$f(C_{ij})$ : Função de impedância, que pode ser configurada (exponencial ou potência) e considera custos como tempo, distância e preço.
O núcleo do modelo (core/gravitational_model.py) implementa a rotina iterativa de Furness que ajusta
O projeto está organizado nos seguintes diretórios principais:
main_gui.py: Ponto de entrada da aplicação GUI.api.py: Interface entre o backend Python e a GUI (JavaScript).core/: Contém a lógica central do modelo:gravitational_model.py: Implementação do algoritmo de Furness.analysis_service.py: Orquestra a execução das análises e cálculo de métricas.data_models.py: Define estruturas de dados (Dataclasses) para entrada e resultados.
services/: Módulos para tarefas específicas:data_loader.py: Carregamento de dados (Excel, exemplo, cenários).visualization.py: Geração de gráficos e heatmaps (usados no PDF e potencialmente na GUI).pdf_exporter.py: Criação de relatórios em PDF.exceptions.py: Definição de exceções personalizadas.
gui/: Arquivos da interface gráfica:index.html: Estrutura principal da interface.css/: Folhas de estilo.js/: Lógica JavaScript para interatividade da GUI.assets/: Recursos como Bootstrap.
config/: Configurações da aplicação:app_config.py: Parâmetros do algoritmo (ex: iterações, tolerância).
cenarios.json: Definição dos cenários de análise pré-configurados.tests/: Testes unitários para o modelo.
A aplicação GUI oferece as seguintes funcionalidades:
-
Gestão de Dados:
- Carregar dados de um ficheiro Excel (
.xlsx) ou usar um conjunto de dados de exemplo. - Editar os dados de entrada (zonas, O/D, matrizes de custo) diretamente na interface.
- Adicionar ou remover zonas dinamicamente.
- Exportar os dados atuais para um ficheiro Excel.
- Baixar um modelo (
.xlsx) vazio para preenchimento.
- Carregar dados de um ficheiro Excel (
-
Análise Completa de Cenários:
- Executa uma análise de sensibilidade com cenários pré-definidos (
cenarios.json), variando os pesos$\alpha, \beta, \gamma$ . - Exibe uma tabela comparativa dos resultados e métricas na GUI.
- Permite a exportação de um relatório detalhado em PDF.
- Executa uma análise de sensibilidade com cenários pré-definidos (
-
Cenário Interativo:
- Permite ao utilizador definir valores customizados para os parâmetros
$\alpha, \beta, \gamma$ através de sliders. - Visualiza a matriz de viagens e métricas resultantes em tempo real.
- Mantém um histórico comparativo dos custos para os diferentes parâmetros testados.
- Permite ao utilizador definir valores customizados para os parâmetros
-
Dashboard e Ferramentas:
- Apresenta um dashboard com métricas chave do cenário base.
- Inclui ferramentas para:
- Calcular e visualizar o Índice de Acessibilidade por zona.
- Analisar a proporção de viagens intrazonais vs. interzonais.
- Gerar uma matriz de diferença (absoluta ou percentual) entre dois cenários selecionados.
-
Configurações:
- Permite ajustar parâmetros do algoritmo de Furness (máx. iterações, tolerância).
- Permite escolher a função de impedância (Potência ou Exponencial).
- Permite ativar/desativar o cálculo de viagens intrazonais.
- Configurar Ambiente Virtual (Recomendado):
python -m venv .venv # Windows .\.venv\Scripts\activate # macOS/Linux source .venv/bin/activate
- Instalar as dependências:
pip install -r requirements.txt
- Executar a aplicação:
python main_gui.py
