TProcuraAdversa
Algoritmos de procura adversa
Loading...
Searching...
No Matches
TProcuraAdversa.h
Go to the documentation of this file.
1#pragma once
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, utilizando todas as instâncias,
72 // Utiliza as configurações existentes, ou parâmetros atuais
73 // Efetua um torneio entre configurações
74 void TesteEmpirico(int inicio = -1, int fim = -1, bool mostrarSolucoes = true);
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
93 int MaiorAmeaca(TVector<int>& qMin, TVector<int>& qMax, int maxAmeaca);
94
95protected:
97 int NoFolha(bool nivel);
98
100 bool CorteAlfaBeta(int valor, int& alfa, int& beta);
101
103 int MetodoIterativo(int alfaBeta);
104
105
106 void OrdenarSucessores(TVector<TNo>& sucessores, TVector<int>& id, int nivel);
107
108 // hashtable
109 void SubstituirHT(int indice); // necessário redefinir para invalidar valorHT
110 bool ExisteHT(); // necessário redefinir par não remover estados (reutilizar o valor)
111 static TValorEstado valorHT[TAMANHO_HASHTABLE]; // hashtable / valor e nível obtido
112 // índice obtido na HT, se positivo
115 bool ValorEstado(TValorEstado& valor, int operacao);
117 bool Utilizavel(TValorEstado& valor, int nivel, int alfa, int beta);
118
119 static int reutilizadoAvaliacao; // número de vezes que uma avaliação é reutilizada
120};
EParametrosAdversa
Identifica um parâmetro específico no código.
@ podaHeuristica
permite cortar sucessores, mas calcula a heurística a todos, de modo a mantendo os melhores
@ parametrosAdversas
marcador para permitir a extensão do enum em subclasses.
@ podaCega
corta os sucessores, mesmo sem calcular a heurística, por ordem aleatória
@ ordenarSucessores
opção de ordenar sucessores por heurística, ou por último valor registado
struct SValorEstado TValorEstado
registo do valor de um estado, em procuras anteriores
ETipoValor
tipo de valor resultante do minimax com cortes alfa/beta
@ upperbound
o valor foi afetado por um corte de alfa (ou seja, ele é no máximo esse valor, mas pode ser menor).
@ exato
o valor foi calculado sem cortes, ou seja, não sofreu influência de alfa ou beta;
@ lowerbound
o valor foi afetado por um corte de beta (ou seja, ele é pelo menos esse valor, mas pode ser maior);
@ parametrosConstrutivas
Marcador para permitir a extensão do enum em subclasses.
#define 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
int MaiorAmeaca(TVector< int > &qMin, TVector< int > &qMax, int maxAmeaca)
Utilitário para calculo de uma heurística standard em jogos simples.
void OrdenarSucessores(TVector< TNo > &sucessores, TVector< int > &id, int nivel)
int MiniMax(int nivel=4)
retorna o valor do estado actual, apos procura de profundidade nivel
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]
void TesteEmpirico(int inicio=-1, int fim=-1, bool mostrarSolucoes=true)
Executa testes empíricos, em todas as configurações guardadas, nas instâncias selecionadas.
int ExecutaAlgoritmo()
Executa o algoritmo com os parametros atuais.
Representa um estado no espaço de estados.
registo do valor de um estado, em procuras anteriores
ETipoValor tipo