Skip to content

jcoelho72/TProcura

Repository files navigation

TProcura

GitHub issues GitHub forks GitHub stars GitHub license

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


📑 Sumário


\anchor s1

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:

  1. Herdar a classe adequada
  2. Redefinir métodos de geração de sucessores, avaliação ou operadores, para o problema concreto, conforme adequado
  3. Declarar novos parâmetros e indicadores, se desejar

Este projeto é usado na UC de Introdução à Inteligência Artificial da Universidade Aberta.


\anchor s2

Funcionalidades

  1. Modo interativo, linha de comando ou MPI (futuro)
  2. Geração automática de combinações de parâmetros
  3. Recolha de indicadores (tempo, custo, iterações, etc.)
  4. Exportação de resultados em CSV
  5. Procuras Construtivas:
    • Largura / Profundidade / Custo uniforme
    • Melhor-primeiro / A* / IDA* / Branch-and-Bound
  6. 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)
  7. Procuras adversas:
    • Minimax / Alfa-beta / iterativo / Hash-table de estados explorados (futuro: MCTS)

\anchor s3

📦 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

\anchor s4

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

\anchor s5

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

\anchor s6

Exemplos

Problemas de exemplo da classe TProcura:

  1. TesteTVetor

Problemas de exemplo da classe TProcuraConstrutiva:

  1. Aspirador (parte 1, parte 2)
  2. Puzzle 8
  3. 8 Damas
  4. Partição
  5. Artificial

Problemas de exemplo da classe TProcuraMelhorativa:

  1. 8 Damas (TRepresentacaoInteira)
  2. 8 Damas (TRepresentacaoPermutacao)
  3. Partição (TRepresentacaoBinaria)
  4. ? (TRepresentacaoReal)
  5. ? (TRepresentacaoArvore)

Problemas de exemplo da classe TProcuraAdversa:

  1. Jogo do Galo
  2. Jogo em Linha

Esses exemplos servem tanto para testar o repositório quanto para servir de base para novas implementações.


\anchor s7

Bibliografia


\anchor s8

Licença

Distribuído sob a licença MIT. Veja o arquivo LICENSE para mais informações.

About

TProcura junta testes paramétricos e implementação genérica de algoritmos de procura

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •