2#include "../Construtiva/TProcuraConstrutiva.h"
struct SResultadoJogo TResultadoJogo
registo do valor de um estado, em procuras anteriores
EParametrosAdversa
Identifica um parâmetro específico no código.
@ PARAMETROS_ADVERSA
marcador para permitir a extensão do enum em subclasses.
@ HEUR_BASE
valor base para diferença entre ameaças de K e K-1 (100 não há diferença, 200 é o valor por omissão)
@ 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 PontuacaoJogos(TVector< TString > &jogos)
bool Validar(TVector< TString > solucao) override
Verifica a validade de uma solução para a instância atual.
bool SolucaoCompleta(void)=0
Verifica se o estado actual é objectivo (é uma solução completa)
int Pontos(int resultado)
converte -infinito, 0, +infinito em -1 (vitória preta), 1 (vitória branca), 0 empate
void OrdenarSucessores(TVector< TNo > &sucessores, TVector< int > &id, int nivel)
void TesteValidacao(TVector< int > instancias, TVector< int > impossiveis, TVector< int > referencias, TString fichSolucoes, TString fichResultados="") override
Executa testes de validação, executando cada solução na instância respetiva, e verificando a sua vali...
void TesteEmpiricoTrabalhador(TVector< int > instancias, TString ficheiro="") override
Teste empírico com modo mestre-escravo (este é o escravo)
int MiniMax(int nivel=4)
retorna o valor do estado actual, apos procura de profundidade nivel
int MaiorAmeaca(TVector< int > &qMin, TVector< int > &qMax, int maxAmeaca) const
Utilitário para calculo de uma heurística standard em jogos simples.
void Sucessores(TVector< TNo > &sucessores)
Coloca em sucessores a lista de estados sucessores.
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
void TesteEmpirico(TVector< int > instancias, TString ficheiro="") override
Executa testes empíricos, em todas as configurações guardadas, nas instâncias selecionadas.
bool CorteAlfaBeta(int valor, int &alfa, int &beta)
verifica se há um corte alfa/beta, atualizando alfa e beta
bool RelatorioCSV(TVector< TResultadoJogo > &resultados, TString ficheiro)
Gera um relatório CSV com os resultados.
void JogoTerminado(TString &jogo)
bool ValorEstado(TValorEstado &valor, int operacao)
ler ou gravar o melhor valor conhecido
bool ExisteHeuritica(void)
void ExecutaTarefa(TVector< TResultadoJogo > &resultados, int inst, int brancas, int pretas, TVector< TVector< int > > *torneio=NULL)
Executa uma tarefa num teste empírico.
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
void TesteEmpiricoGestor(TVector< int > instancias, TString ficheiro="") override
Teste empírico com modo mestre-escravo (este é o mestre)
static int infinito
valor de infinito (vitoria/derrota), omissao 1000
TString Jogar(TString jogo, int configID)
static int nivelOK
profundidade máxima no método iterativo
void DebugChamada(bool noFolha, int alfa=0, int beta=0)
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]
static int resultadoCompleto
resultado após SolucaoCompleta() retornar true (-1 vitória minimizar, 0 empate, 1 vitória maximizar)
bool CoerenciaJogo(TVector< TString > &jogos, TVector< TString > &anterior)
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.
static TNo solucao
Estado objetivo encontrado, retornado pela procura (deve ser libertado).
registo do valor de um estado, em procuras anteriores
registo do valor de um estado, em procuras anteriores