Biblioteca em C++ para testes paramétricos de algoritmos, e coleção de algoritmos de procura e otimização:
- procuras construtivas
- procuras melhorativas (evolutivas e locais)
- procuras adversas (minimax, alfa-beta, iterativo)
Documentação completa em:
👉 TProcura - Documentação
\anchor s1
O TProcura junta testes paramétricos e implementação genérica de algoritmos de procura.
Em vez de alterar macros e recompilar a cada teste de mudança de parâmetros, propõe-se:
- Estrutura para uma lista de parâmetros, gerida na superclasse
- Gerar automaticamente todas as combinações de parâmertros que o utilizador desejar
- Executar instâncias para cada combinação de parâmetros, e recolhe indicadores definidos
- Exportar resultados em CSV para análises em Excel, R ou Python
A arquitetura baseia-se em superclasses que já implementam algoritmos de procura. O utilizador só precisa de:
- Herdar a classe adequada
- Redefinir métodos de geração de sucessores, avaliação ou operadores, para o problema concreto, conforme adequado
- Declarar novos parâmetros e indicadores, se desejar
Este projeto é usado na UC de Introdução à Inteligência Artificial da Universidade Aberta.
\anchor s2
- Modo interativo, linha de comando ou MPI (futuro)
- Geração automática de combinações de parâmetros
- Recolha de indicadores (tempo, custo, iterações, etc.)
- Exportação de resultados em CSV
- Procuras Construtivas:
- Largura / Profundidade / Custo uniforme
- Melhor-primeiro / A* / IDA* / Branch-and-Bound
- Procuras melhorativas:
- Algoritmos genéticos, simples - (futuro: algoritmos evolutivos, Scatter Search, sistemas artificiais imunes, inteligência de enxames)
- Escalada do Monte - (futuro: pesquisa tabu, arrefecimento simulado, GRASP, procura com vizinhança variável e muito alargada)
- Procuras adversas:
- Minimax / Alfa-beta / iterativo / Hash-table de estados explorados (futuro: MCTS)
\anchor s3
TProcura # algoritmo
├─ TProcuraConstrutiva # sucessores e heurística
│ └─ TProcuraAdversa # sucessores e heurística
└─ TProcuraMelhorativa # solução inicial, vizinhança, mutação, cruzamento, avaliação
├─ TRepresentacaoBinaria # avaliação
├─ TRepresentacaoInteira # avaliação
├─ TRepresentacaoReal # avaliação
├─ TRepresentacaoPermutacao # avaliação
└─ TRepresentacaoArvore # avaliação
\anchor s4
Clonar o projeto, compilar um dos projetos de teste e executar.
git clone https://github.com/jcoelho72/TProcura.git
ou
Aceder a página do repositório e clique em "Code" → "Open with Visual Studio".
Aceder a página do repositório e clique em "Code" → "Download ZIP".
Extraia os arquivos e siga as instruções de compilação (por exemplo, via Makefile, Visual Studio etc., conforme seu ambiente).
Para integrar o TProcura como parte de outro projeto, utilize um submódulo:
git submodule add https://github.com/jcoelho72/TProcura.git
\anchor s5
Para implementar um novo problema utilizando uma das superclasses pode:
- identificar a superclasse mais adequada, e redefinir, criando uma subclasse;
- readaptar um problema similar já implementado.
Superclasses:
- TProcura - caso o problema não seja de procura, poderá utilizar esta classe para fazer testes paramétricos
- TProcuraConstrutiva - indicado caso tenha um problema de procura, e adopte a abordagem construtiva
- TProcuraMelhorativa - indicado caso tenha um problema de procura ou muito grande, e opte pela abordagem melhorativa
- TRepresentacaoBinaria, Inteira, Real, Permutacao, Arvore - na abordagem melhorativa, caso a representação do seu problema encaixe numa destas (as mais comuns), utilize estas classes de modo a ter os operadores já disponíveis, basta implementar a avaliação.
- TProcuraAdversa - indicado para procuras adversas, ou seja jogos
\anchor s6
Problemas de exemplo da classe TProcura:
Problemas de exemplo da classe TProcuraConstrutiva:
Problemas de exemplo da classe TProcuraMelhorativa:
- 8 Damas (TRepresentacaoInteira)
- 8 Damas (TRepresentacaoPermutacao)
- Partição (TRepresentacaoBinaria)
- ? (TRepresentacaoReal)
- ? (TRepresentacaoArvore)
Problemas de exemplo da classe TProcuraAdversa:
- Jogo do Galo
- Jogo em Linha
Esses exemplos servem tanto para testar o repositório quanto para servir de base para novas implementações.
\anchor s7
- Russell, S. J., & Norvig, P. (2021). Artificial intelligence: A modern approach (4th ed.). Pearson. https://elibrary.pearson.de/book/99.150005/9781292401171
- Eiben, A. E., & Smith, J. E. (2015). Introduction to evolutionary computing (2nd ed.). Springer. https://doi.org/10.1007/978-3-662-44874-8
- Burke, E. K., & Kendall, G. (Eds.). (2014). Search methodologies: Introductory tutorials in optimization and decision support techniques (2nd ed.). Springer. https://doi.org/10.1007/978-1-4614-6940-7
\anchor s8
Distribuído sob a licença MIT. Veja o arquivo LICENSE para mais informações.