
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
</blockquote>
📑 Sumário
Sobre o Projeto
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.
Funcionalidades
- 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)
📦 Hierarquia de Classes
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
Instalação
Clonar o projeto, compilar um dos projetos de teste e executar.
Opção 1 - Clonar o Repositório
git clone https://github.com/jcoelho72/TProcura.git
ou
Aceder a página do repositório e clique em **"Code" → "Open with Visual Studio"**.
Opção 2 - Download Manual
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).
Opção 3 - Utilizar como Submódulo
Para integrar o TProcura como parte de outro projeto, utilize um submódulo:
git submodule add https://github.com/jcoelho72/TProcura.git
Uso
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
Exemplos
Problemas de exemplo da classe TProcura:
- TesteTVetor
Problemas de exemplo da classe TProcuraConstrutiva:
- Aspirador (parte 1, parte 2)
- Puzzle 8
- 8 Damas
- Partição
- Artificial
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.
Bibliografia
Licença
Distribuído sob a licença MIT. Veja o arquivo LICENSE para mais informações.