TProcuraAdversa
Algoritmos de procura adversa
|
Functions | |
virtual const char * | TProcuraConstrutiva::Acao (TNo sucessor) |
Retorna a ação (movimento, passo, jogada, lance, etc.) que gerou o sucessor. | |
virtual void | TProcuraConstrutiva::Codifica (uint64_t estado[OBJETO_HASHTABLE]) |
Codifica o estado para um vetor de inteiros de 64 bits. | |
virtual int | TProcuraConstrutiva::Heuristica (void) |
Função para calcular quanto falta para o final, o valor da heurística. | |
virtual void | TProcuraConstrutiva::Debug (void) |
Mostra o estado no ecrã, para debug. | |
virtual void | TProcuraConstrutiva::ResetParametros () |
Inicializa os parametros. | |
Métodos de redefinição aconselhados a uma boa implementação
|
inlinevirtual |
Retorna a ação (movimento, passo, jogada, lance, etc.) que gerou o sucessor.
sucessor | - estado filho deste, cuja ação deve ser identificada |
Este método não é crítico, mas é importante para se poder visualizar ações. Se este método não for redefinido, a interface mostrará apenas os estados completos, sem detalhar as ações que os geraram.
Durante a exploração manual do espaço de estados, permitir que ações sejam fornecidas diretamente, ao invés de depender do ID do sucessor, facilita testes e integração com outros sistemas. Esta situação é vantajosa, para permitir introduzir uma sequência de ações, que eventualmente venha de outro programa, permitindo assim a validação da solução.
Reimplemented in CJogoEmLinha.
Definition at line 452 of file TProcuraConstrutiva.h.
|
virtual |
Codifica o estado para um vetor de inteiros de 64 bits.
As variáveis de estado devem ser compactadas no vetor de inteiros de 64 bits. Todos os estados codificados têm de ser distintos de 0. Estados distintos, têm de ficar com codificações distintas.
Em diversos problemas, um mesmo estado pode ter múltiplas representações equivalentes. Por exemplo, se um conjunto de inteiros for um estado, este pode ser representado em vetor. No entanto a ordem é irrelevante, dado que é um conjunto. Assim não faz sentido guardar vários estados que sejam representações do mesmo estado. Há que normalizar o estado antes de o guardar, de modo a que seja dado como estado repetido, se uma das duas formas já tiver sido gerada. O exemplo do conjunto de inteiros, a normalização pode ser a ordenação do vetor, constituindo assim um estado único entre todas as formas que o conjunto pode ser representado em vetor. Problemas de tabuleiro, há simetrias que podem gerar várias versões da mesma posição.
Sucessores()
. Reimplemented in CJogoDoGalo, and CJogoEmLinha.
Definition at line 1371 of file TProcuraConstrutiva.cpp.
|
virtual |
Mostra o estado no ecrã, para debug.
Esta função deverá mostrar claramente o estado atual, em texto mas da forma mais confortável possível. O formato texto destina-se principalmente a quem implementa o problema, e não utilizadores finais. É importante poder explorar o espaço de estados, para verificar a correta implementação dos sucessores, como também possa ver a árvore de procura dos algoritmos, para árvores pequenas, e assim detectar bugs.
NovaLinha()
pode imprimir caracteres que representam os ramos da árvore de procura, criando uma visualização textual que simula a estrutura da procura.parametro[nivelDebug].valor
. Um nível menor pode mostrar informações mais sucintas, enquanto um nível maior pode detalhar todas as variáveis do estado.Reimplemented in CJogoDoGalo, and CJogoEmLinha.
Definition at line 558 of file TProcuraConstrutiva.cpp.
|
virtual |
Função para calcular quanto falta para o final, o valor da heurística.
A função heurística é crítica para utilizar os algoritmos informados. Deve devolver uma estimativa sem ultrapassar o custo real, do custo que falta para atingir o estado objetivo mais próximo do estado atual. Se a estimativa não ultrapassar o custo real, a heurística será admissível. No entanto, em alguns casos, heurísticas não admissíveis podem ser utilizadas, podendo acelerar a procura, mesmo que ocasionalmente levem a resultados subótimos.
No final, chame a função heurística da superclasse para atualizar as estatísticas e o número de avaliações. Se estiver configurado, esse processo também pode introduzir ruído na heurística, o que pode impactar certos algoritmos de procura.
Esta função pretende-se rápida, e o mais próxima possível do valor real, sem ultrapassar.
Reimplemented in CJogoDoGalo, CJogoEmLinha, and TProcuraAdversa.
Definition at line 546 of file TProcuraConstrutiva.cpp.
|
virtual |
Inicializa os parametros.
Nesta função, a primeira instrução deverá ser a chamada da função da superclasse, para que sejam criados os parametros da superclasse antes de qualquer outra instrução.
Cada problema pode ter um algoritmo e configurações padrão que funcionam bem na maioria dos casos. Nesta função, podem ser definidos estes valores de omissão, que se não forem alterados, irá executar a configuração mais genérica.
Novos parâmetros podem ser adicionados conforme necessário para atender às particularidades do problema. Estes parametros podem depois ser selecionados ou incluídos num teste empírico, de modo a averiguar em fase de testes, qual a melhor configuração, evitando escolhas arbitrárias ou não fundamentadas.
parametrosConstrutivos
, garantindo que novas adições na superclasse sejam automaticamente refletidas aqui.Exemplo com a alteração do valor de omissão de um parametro, e adição de dois novos parametros.
Reimplemented in CJogoEmLinha, and TProcuraAdversa.
Definition at line 50 of file TProcuraConstrutiva.cpp.