Sistema inteligente de otimização de rotas de entrega que combina Algoritmos Genéticos com IA Generativa para resolver o problema de roteamento de veículos (VRP - Vehicle Routing Problem).
- Sobre o Projeto
- Funcionalidades
- Tecnologias
- Instalação
- Uso
- Algoritmos Genéticos
- Integração com IA
- Testes
- Estrutura do Projeto
- Equipe
Este projeto foi desenvolvido como parte do Tech Challenge da FIAP - Fase 2, focando na otimização de rotas de entrega utilizando técnicas avançadas de computação evolutiva e inteligência artificial.
O Vehicle Routing Problem (VRP) é um problema clássico de otimização combinatória que busca encontrar as melhores rotas para uma frota de veículos atender um conjunto de pontos de entrega, minimizando custos e respeitando diversas restrições:
- 📦 Capacidade dos veículos
- ⛽ Autonomia/alcance
- 🎯 Prioridade de entregas
- ⏰ Janelas de tempo
- 📐 Dimensões físicas das cargas
Utilizamos Algoritmos Genéticos para explorar o espaço de soluções de forma eficiente, combinados com Google Gemini AI para gerar insights, relatórios e responder perguntas sobre as rotas otimizadas.
-
Múltiplos operadores de cruzamento:
- PMX (Partially Mapped Crossover)
- OX1 (Order Crossover)
- CX (Cycle Crossover)
- K-Point Crossover
- ERX (Edge Recombination Crossover)
-
Operadores de mutação:
- Mutação por troca (swap)
- Mutação por inversão
- Mutação por embaralhamento
-
Métodos de seleção:
- Roleta (Roulette Wheel)
- Torneio (Tournament)
- Ranking
-
Elitismo configurável
-
Função de fitness com restrições múltiplas
- Suporte a múltiplos tipos de veículos
- Gestão de capacidade e autonomia
- Alocação inteligente de entregas por veículo
- Visualização de rotas por veículo
- 📊 Geração automática de relatórios periódicos
- 🗺️ Instruções para motoristas com detalhamento de rotas
- 💬 Perguntas em linguagem natural sobre as rotas
- ✅ Validação de outputs com JSON Schema
- 💾 Cache de respostas para otimizar uso da API
- Visualização em tempo real do algoritmo genético
- Mapa interativo para criação de pontos customizados
- Gráfico de evolução do fitness
- Painel de controle intuitivo
- Sistema de layout centralizado e responsivo
- Python 3.8+ - Linguagem principal
- NumPy 2.3.3 - Computação numérica
- SciPy 1.16.2 - Algoritmos científicos
- Pygame 2.6.1 - Interface gráfica e visualização
- Google Generative AI 0.7.0+ - Integração com Gemini
- Pydantic 2.8.0+ - Validação de dados e schemas
- python-dotenv 1.0.1+ - Gerenciamento de variáveis de ambiente
- pytest 8.4.2 - Framework de testes
- colorama 0.4.6 - Colorização de logs
- Pygments 2.19.2 - Syntax highlighting
- Python 3.8 ou superior
- pip (gerenciador de pacotes Python)
- Conta Google Cloud (para uso da API Gemini)
- Clone o repositório:
git clone https://github.com/junior-vs/FIAP-Tech-Challenge-6IADT-Fase-2.git
cd FIAP-Tech-Challenge-6IADT-Fase-2- Instale as dependências:
python -m pip install -r requirements.txt- Configure as variáveis de ambiente:
Crie um arquivo .env na raiz do projeto:
# API Google Gemini
GOOGLE_API_KEY=sua_chave_aqui
# Configurações LLM (opcionais)
LLM_MODEL=gemini-2.0-flash-exp
LLM_MAX_STOPS=6
LLM_STRICT=0
LLM_DISABLE_CACHE=0
LLM_CACHE_DIR=.cache/llmpython src/main/TSPGeneticAlgorithm.py| Ação | Atalho/Botão | Descrição |
|---|---|---|
| Gerar Mapa | Generate Map |
Cria pontos de entrega |
| Iniciar Algoritmo | Run Algorithm / SPACE |
Inicia a otimização |
| Parar Algoritmo | Stop Algorithm / ESC |
Interrompe a execução |
| Resetar | Reset |
Limpa todos os dados |
| Perguntar à IA | Q |
Faz pergunta em linguagem natural |
| Gerar Relatório | R |
Gera relatório e instruções |
- Random: Pontos distribuídos aleatoriamente
- Circle: Pontos em formato circular
- Custom: Clique no mapa para adicionar pontos manualmente
- Número de Cidades: Use
+/-para ajustar (3-50) - Porcentagem de Prioridade: Slider para controlar produtos prioritários
- Método de Seleção: Roleta / Torneio / Ranking
- Método de Crossover: PMX / OX1 / CX / K-Point / ERX
- Método de Mutação: Swap / Inversão / Embaralhamento
- Elitismo: Ativar/Desativar preservação do melhor indivíduo
[OK] Relatório salvo em: out/relatorio_20251014_143052.md
[OK] Instruções salvas em: out/instrucoes_20251014_143052.md
Os arquivos gerados incluem:
- 📊 Relatório: Métricas, análise de desempenho, recomendações
- 🗺️ Instruções: Roteiro detalhado para cada motorista
Digite sua pergunta sobre a rota: Qual a melhor sequência de entregas?
==== RESPOSTA DA IA ====
A melhor sequência baseada na otimização atual é...
[Resposta detalhada da IA]
=========================
Cada cromossomo representa uma rota completa como uma permutação de pontos de entrega:
Cromossomo: [P3, P1, P5, P2, P4]
└─ Ordem de visita dos pontos
A função de fitness considera múltiplos fatores:
fitness = base_fitness * priority_bonus * constraint_penalty
Onde:
- base_fitness: 1 / (distância_total + 1)
- priority_bonus: multiplicador baseado em entregas prioritárias
- constraint_penalty: penaliza violações de restrições- Inicialização: População aleatória de N rotas
- Avaliação: Cálculo do fitness de cada rota
- Seleção: Escolha dos pais usando método configurado
- Crossover: Geração de filhos combinando pais
- Mutação: Pequenas alterações aleatórias
- Elitismo: Preservação do melhor indivíduo (opcional)
- Repetição: Volta ao passo 2 até atingir critério de parada
Pai1: [1, 2, | 3, 4, 5 |, 6, 7]
Pai2: [4, 5, | 1, 2, 7 |, 3, 6]
--------+---------+--------
Filho: [6, 2, | 3, 4, 5 |, 1, 7]
Antes: [1, 2, 3, 4, 5, 6]
↓ ↓
Depois:[1, 2, 5, 4, 3, 6]
# src/llm/llm_client.py - Cliente base
# src/llm/prompts.py - Templates de prompts
# src/llm/report_generator.py - Serviços de alto nível
# src/llm/utils.py - Utilitários
# src/llm/local_fallback.py - Fallback localTodos os outputs da IA são validados contra schemas JSON:
schemas/llm_outputs/
├── driver_instructions.schema.json # Instruções para motoristas
├── improvements.schema.json # Sugestões de melhoria
├── nlq.schema.json # Respostas a perguntas
└── report.schema.json # Relatórios periódicos
tests/
├── test_crossover_functions.py # Testes de crossover
├── test_delivery_point_product_integration.py # Integração domínio
├── test_product_constraints.py # Validação de restrições
└── test_route_and_operators.py # Operadores genéticos
tests_llm/
└── test_json_extraction_and_schema.py # Validação LLM outputs
# Todos os testes
pytest -v
# Testes específicos
pytest tests/test_crossover_functions.py -v
# Testes LLM
pytest tests_llm/ -v
# Com cobertura
pytest --cov=src tests/FIAP-Tech-Challenge-6IADT-Fase-2/
│
├── src/
│ ├── domain/ # Modelos de domínio
│ │ ├── delivery_point.py
│ │ ├── product.py
│ │ ├── route.py
│ │ └── vehicle.py
│ │
│ ├── functions/ # Funções auxiliares
│ │ ├── app_logging.py
│ │ ├── crossover_function.py
│ │ ├── draw_functions.py
│ │ ├── fitness_function.py
│ │ ├── mutation_function.py
│ │ ├── selection_functions.py
│ │ └── ui_layout.py # 🎯 Layout centralizado
│ │
│ ├── llm/ # Integração IA
│ │ ├── llm_client.py
│ │ ├── local_fallback.py
│ │ ├── prompts.py
│ │ ├── report_generator.py
│ │ └── utils.py
│ │
│ └── main/
│ ├── TSPGeneticAlgorithm.py # Aplicação principal
│ └── logs/ # Logs de execução
│
├── schemas/
│ └── llm_outputs/ # JSON Schemas para validação
│
├── tests/ # Testes unitários
├── tests_llm/ # Testes LLM
├── config/ # Configurações
│
├── requirements.txt # Dependências Python
├── .env.example # Exemplo de configuração
└── README.md # Este arquivo
FIAP Tech Challenge - Grupo 6IADT
- 👤 Alana Caroline de Oliveira da Luz
- 👤 Catherine Cruz Porto
- 👤 Etianne Torres Chan
- 👤 Renan Augusto Alves da Costa
- 👤 Valdir de Souza Junior
Projeto desenvolvido para o curso de Pós-Graduação em Inteligência Artificial para Devs da FIAP
Feito com ❤️ para o FIAP Tech Challenge
