ADR-001: Linguagem para Implementação de Heurísticas¶
- Status: Decidido
- Data: 2025-07-24
Contexto¶
A execução das meta-heurísticas (ILS, GA, SA, etc.) é a parte computacionalmente mais intensiva do projeto. A escolha da linguagem de implementação tem um impacto direto na performance de execução e na velocidade de desenvolvimento. Precisamos de uma estratégia que equilibre esses dois fatores para garantir o sucesso da Fase 1 da pesquisa.
Opções Consideradas¶
- Python Puro: Implementar todas as heurísticas em Python, utilizando bibliotecas como
numpyenetworkxpara operações otimizadas. - C++ com Bindings Python: Implementar o núcleo de cada heurística em C++ de alta performance e criar uma camada de "binding" (usando
pybind11ouCython) para que possam ser chamadas a partir do nosso framework Python.
Decisão¶
Para a Fase 1 do projeto, todas as heurísticas serão implementadas em Python puro.
Justificativa¶
A prioridade da Fase 1 é a velocidade de descoberta e iteração. A complexidade de implementar, depurar e, principalmente, criar bindings para sete heurísticas diferentes em C++ representa um risco significativo para o cronograma e o foco do projeto. O ganho em velocidade de desenvolvimento em Python supera em muito o benefício da velocidade de execução nesta fase exploratória. A performance do Python é considerada suficiente para a campanha experimental planejada. A otimização de performance com C++ será reavaliada como uma atividade da Fase 2, e aplicada apenas aos algoritmos que se mostrarem mais promissores.