TProcura
Biblioteca em C++ para testes paramétricos de algoritmos, e coleção de algoritmos de procura e otimização
Loading...
Searching...
No Matches
TProcuraAdversa.h
Go to the documentation of this file.
1#pragma once
2#include "../Construtiva/TProcuraConstrutiva.h"
3
20
29
33typedef struct SValorEstado {
34 int valor;
35 int nivel; // 0 - valor heurístico, -1 - inválido
38
47{
48public:
49 TProcuraAdversa(void);
50 ~TProcuraAdversa(void);
51
55 static int infinito;
57 static bool completo;
59 static int nivelOK;
60
61
63 void ResetParametros();
64
66 int MiniMax(int nivel = 4);
67
69 int MiniMaxAlfaBeta(int nivel = 4, int alfa = -infinito, int beta = +infinito);
70
71 // Utilizar para executar testes empíricos
72 // Utiliza as configurações existentes, ou parâmetros atuais
73 // Efetua um torneio entre configurações
75
77 int ExecutaAlgoritmo();
78
80 int Heuristica(void);
81
82 // @brief chamar em CSubProblema::Heuristica() para verificar se a heurística já existe, ou precisa de ser calculada
83 bool ExisteHeuritica(void);
84
85
94
95protected:
97 int NoFolha(bool nivel);
98
100 bool CorteAlfaBeta(int valor, int& alfa, int& beta);
101
103 int MetodoIterativo(int alfaBeta);
104
111
113
114 // hashtable
115 void SubstituirHT(int indice); // necessário redefinir para invalidar valorHT
116 bool ExisteHT(); // necessário redefinir par não remover estados (reutilizar o valor)
117 static TValorEstado valorHT[TAMANHO_HASHTABLE]; // hashtable / valor e nível obtido
118 // índice obtido na HT, se positivo
121 bool ValorEstado(TValorEstado& valor, int operacao);
123 bool Utilizavel(TValorEstado& valor, int nivel, int alfa, int beta);
124
125 static int reutilizadoAvaliacao; // número de vezes que uma avaliação é reutilizada
126};
EParametrosAdversa
Identifica um parâmetro específico no código.
@ PARAMETROS_ADVERSA
marcador para permitir a extensão do enum em subclasses.
@ PODA_HEURISTICA
permite cortar sucessores, mas calcula a heurística a todos, de modo a mantendo os melhores
@ ORDENAR_SUCESSORES
opção de ordenar sucessores por heurística, ou por último valor registado
@ PODA_CEGA
corta os sucessores, mesmo sem calcular a heurística, por ordem aleatória
struct SValorEstado TValorEstado
registo do valor de um estado, em procuras anteriores
ETipoValor
tipo de valor resultante do minimax com cortes alfa/beta
@ EXATO
o valor foi calculado sem cortes, ou seja, não sofreu influência de alfa ou beta;
@ LOWER_BOUND
o valor foi afetado por um corte de beta (ou seja, ele é pelo menos esse valor, mas pode ser maior);
@ UPPER_BOUND
o valor foi afetado por um corte de alfa (ou seja, ele é no máximo esse valor, mas pode ser menor).
@ PARAMETROS_CONSTRUTIVA
Marcador para permitir a extensão do enum em subclasses.
constexpr int TAMANHO_HASHTABLE
Representa um estado no espaço de estados.
int NoFolha(bool nivel)
fim da procura, por corte de nível (ou não haver sucessores), retornar heurística
void OrdenarSucessores(TVector< TNo > &sucessores, TVector< int > &id, int nivel)
void TesteEmpirico(TVector< int > instancias, bool mostrarSolucoes=true, char *ficheiro=NULL)
int MiniMax(int nivel=4)
retorna o valor do estado actual, apos procura de profundidade nivel
void RelatorioCSV(TVector< TVector< int > > &torneio, FILE *f)
Gera um relatório CSV com os resultados.
int MaiorAmeaca(TVector< int > &qMin, TVector< int > &qMax, int maxAmeaca) const
Utilitário para calculo de uma heurística standard em jogos simples.
static bool completo
controlo para indicar se a procura foi realizada de forma completa (c.c. foi cortada)
bool minimizar
o jogador actual deve minimizar o custo (ou maximizar caso tenha o valor falso)
int Heuristica(void)
chamar após calcular a heurística (grava o valor, dependendo da parametrização)
int MetodoIterativo(int alfaBeta)
iteração, aumentando o nível progressivamente
bool CorteAlfaBeta(int valor, int &alfa, int &beta)
verifica se há um corte alfa/beta, atualizando alfa e beta
bool ValorEstado(TValorEstado &valor, int operacao)
ler ou gravar o melhor valor conhecido
bool ExisteHeuritica(void)
void ResetParametros()
Método para inicializar os parâmetros (redefinir se forem adicionados parâmetros específicos)
void SubstituirHT(int indice)
static int reutilizadoAvaliacao
bool Utilizavel(TValorEstado &valor, int nivel, int alfa, int beta)
ver se o valor obtido é utilizável no contexto atual
static int infinito
valor de infinito (vitoria/derrota), omissao 1000
static int nivelOK
profundidade máxima no método iterativo
int MiniMaxAlfaBeta(int nivel=4, int alfa=-infinito, int beta=+infinito)
retorna o valor do estado actual, apos procura de profundidade nivel. Idêntico a MiniMax
static TValorEstado valorHT[TAMANHO_HASHTABLE]
int ExecutaAlgoritmo()
Executa o algoritmo com os parametros atuais.
Representa um estado no espaço de estados.
static int resultado
Resultado retornado pelo algoritmo na última execução.
Definition TProcura.h:493
registo do valor de um estado, em procuras anteriores
ETipoValor tipo