• Nenhum resultado encontrado

de Aprendizagem de Damas

4.3.2 A Tabela de Transposi¸ c˜ ao

O algoritmo alfa-beta, apresentado na se¸c˜ao 4.3.1, n˜ao mant´em um hist´orico dos estados da ´arvore de jogo procurados anteriormente. Assim, se um estado S0 do tabuleiro

for apresentado 2 vezes para o algoritmo alfa-beta, a mesma rotina ser´a executada 2 vezes a fim de encontrar a predi¸c˜ao associada ao estado S0. Para evitar redundˆancia de

trabalho, ou seja, evitar que o algoritmo alfa-beta seja executado duas vezes para encontrar a predi¸c˜ao do mesmo estado S0, pode-se associ´a-lo com uma tabela de transposi¸c˜ao.

Uma tabela de tranposi¸c˜ao (MILLINGTON, 2006) ´e um reposit´orio de predi¸c˜oes passadas associadas aos estados do tabuleiro do jogo que j´a foram submetidos ao procedimento de busca. Os detalhes da tabela de transposi¸c˜ao utilizada pelo VisionDraughts ser˜ao descritos a seguir.

4.3.2.1 Transposi¸c˜ao - Mais de uma Ocorrˆencia do Mesmo Estado do Tabu- leiro do Jogo

No jogo de damas, dentro de uma mesma partida, pode-se chegar a um mesmo es- tado do tabuleiro v´arias vezes e, quando isso ocorre, diz-se que houve uma transposi¸c˜ao (MILLINGTON, 2006). As transposi¸c˜oes ocorrem, em damas, de duas maneiras b´asicas:

1. Diferentes combina¸c˜oes de jogadas com pe¸cas simples: as pe¸cas simples n˜ao se mo- vem para tr´as. Apesar disso, elas podem desencadear uma transposi¸c˜ao, conforme mostrado na figura 24. Nesse caso, os estados do tabuleiro mostrados em a e d s˜ao idˆenticos, assim como os estados mostrados em c e f. Assumindo a como estado inicial, ´e poss´ıvel alcan¸car c passando por b. Assumindo d como estado inicial, ´e poss´ıvel alcan¸car f passando por e. Ent˜ao, os ´unicos estados diferentes s˜ao b e e. No caso da seq¨uˆencia de movimentos a, b e c, o jogador preto move-se primeiro para a direita e, em seguida, para a esquerda, enquanto na seq¨uˆencia de movimentos d, e e f, o jogador preto move-se primeiro para a esquerda e, em seguida, para a direita.

2. Diferentes combina¸c˜oes de jogadas com reis: os reis se movem em qualquer dire¸c˜ao, gerando transposi¸c˜oes facilmente, conforme mostrado na figura 25. Partindo do estado a, avan¸cando o rei, ´e poss´ıvel alcan¸car o estado b e, em seguida, recuando o rei, ´e poss´ıvel alcan¸car o estado c, idˆentico ao a.

As pr´oximas subse¸c˜oes abordar˜ao, em detalhe, como o VisionDraughts utiliza esse reposit´orio de estados, chamado tabela de transposi¸c˜ao. Como a compreens˜ao da t´ecnica

4.3 O Eficiente Mecanismo de Busca do VisionDraughts 83

Figura 24: Exemplo de transposi¸c˜ao em c e f : o mesmo estado do tabuleiro ´e alcan¸cado por combina¸c˜oes diferentes de jogadas com pe¸cas simples.

Figura 25: Exemplo de transposi¸c˜ao em a e c: o mesmo estado do tabuleiro ´e alcan¸cado por combina¸c˜oes diferentes de jogadas com reis.

de Zobrist ´e fundamental para a constru¸c˜ao da tabela de transposi¸c˜ao, inicialmente ´e apresentada a t´ecnica de Zobrist. Na seq¨uˆencia, s˜ao apresentados a estrutura da tabela de transposi¸c˜ao e como tratar poss´ıveis colis˜oes de estados do tabuleiro dentro da tabela. Assim, as se¸c˜oes se sucedem de acordo com o disposto a seguir: i) T´ecnica de Zobrist - Cria¸c˜ao de Chaves Hash para Indexa¸c˜ao dos Estados do Tabuleiro do Jogo; ii) Estrutura ENTRY - Dados Armazenados para um Determinado Estado do Tabuleiro do Jogo; e, iii) Colis˜oes - Conflitos de Endere¸cos para Estados do Tabuleiro do Jogo.

4.3.2.2 T´ecnica de Zobrist - Cria¸c˜ao de Chaves Hash para Indexa¸c˜ao dos Estados do Tabuleiro do Jogo

A tabela de tranposi¸c˜ao utilizada pelo VisionDraughts, ou seja, o reposit´orio de predi¸c˜oes anteriormente calculadas e associadas aos estados do tabuleiro do jogo que

4.3 O Eficiente Mecanismo de Busca do VisionDraughts 84

j´a foram submetidos ao procedimento de busca, foi implementada como uma tabela hash. Uma tabela hash ´e uma estrutura de dados que associa chaves a valores (RUSSELL; NOR- VIG, 2004). Cada chave representa um estado do tabuleiro do jogo de damas e ´e associada

a informa¸c˜oes relevantes obtidas, a partir do algoritmo alfa-beta, para `aquele estado. A representa¸c˜ao de um determinado estado do tabuleiro do jogo, na forma de uma chave hash, ´e feita utilizando a t´ecnica descrita por Zobrist (ZOBRIST, 1969) e apresentada nesta

se¸c˜ao.

Quando um programa de computador armazena um item I1 em uma tabela muito

grande T1, h´a duas formas de se tentar localizar este item na tabela: uma, executando-se

um procedimento de busca em T1 (o que pode ser muito ineficiente devido ao tamanho da

tabela); outra, dispondo-se de um m´etodo de c´alculo do endere¸co de I1, na tabela T1, a

partir do pr´oprio item I1. Uma fun¸c˜ao que converte itens em endere¸cos ´e chamada fun¸c˜ao

hash e a tabela resultante ´e chamada tabela hash.

O m´etodo descrito por Zobrist utiliza o operador XOR (ou exclusivo), simbolizado matematicamente por ⊕. Logicamente, o XOR ´e um tipo de disjun¸c˜ao l´ogica entre dois operandos que resulta em “verdadeiro” se, e somente se, exatamente um dos operandos tiver o valor “verdadeiro”. Computacionalmente, o operador XOR pode ser aplicado sobre dois operandos num´ericos. Por exemplo:

1. Operandos num´ericos na base bin´aria: o XOR aplicado sobre dois bits quaisquer resulta em “1” se, e somente se, exatamente um dos operandos tiver o valor “1”. Assim, considere Seq1 = b1, b2, ..., bn uma seq¨uˆencia bin´aria de n bits. Al´em disso,

considere Seq2 = r1, r2, ..., rn outra seq¨uˆencia bin´aria, tamb´em, de n bits. Para

calcular Seq3 = Seq1⊕Seq2, basta aplicar o operador XOR sobre os bits das posi¸c˜oes

correspondentes de Seq1 e Seq2, isto ´e, basta fazer Seq3 = b1⊕ r1, b2⊕ r2, ..., bn⊕ rn.

2. Operandos num´ericos na base decimal: a opera¸c˜ao XOR sobre dois inteiros de- cimais segue o mesmo procedimento mostrado para operandos num´ericos na base bin´aria, exceto que, os dois argumentos inteiros decimais devem ser, antes de tudo, convertidos para a base bin´aria. A convers˜ao de inteiros decimais para bin´arios ´e transparente em C++. Isso significa que dois operandos inteiros decimais podem ser passados como argumentos para o operador XOR (a convers˜ao ´e feita implicita- mente).

Assuma as seguintes propriedades, descritas em (ZOBRIST, 1969), para o operador XOR aplicado sobre seq¨uˆencias aleat´orias (r ) de inteiros decimais de n bits:

4.3 O Eficiente Mecanismo de Busca do VisionDraughts 85

1. ri ⊕ (rj ⊕ rk) = (ri ⊕ rj) ⊕ rk;

2. ri ⊕ rj = rj ⊕ ri;

3. ri ⊕ ri = 0;

4. se si = r1 ⊕ r2 ⊕ ... ⊕ ri ent˜ao si ´e uma seq¨uˆencia aleat´oria de n bits;

5. si ´e uniformemente distribu´ıda (uma vari´avel ´e dita uniformemente distribu´ıda

quando assume qualquer um dos seus valores poss´ıveis com a mesma probabilidade);

Suponha que exista um conjunto finito S qualquer e que se deseje criar chaves hash para os subconjuntos de S. Um m´etodo simples seria associar inteiros aleat´orios de n bits aos elementos de S e, a partir da´ı, definir a chave hash de um subconjunto S0 de S como

sendo o resultado da opera¸c˜ao ⊕ sobre os inteiros associados aos elementos de S0. Pelas

propriedades 1 e 2, a chave hash ´e ´unica e, pelas propriedades 4 e 5, a chave hash ´e aleat´oria e uniformemente distribu´ıda. Se qualquer elemento for adicionado ou retirado do subconjunto S0, a chave hash muda pelo inteiro que corresponde `aquele elemento.

No caso do VisionDraughts, existem 2 tipos distintos de pe¸cas (pe¸ca simples e rei), 2 cores distintas de pe¸cas (pe¸ca preta e branca) e 32 casas no tabuleiro do jogo. Ent˜ao, existem, no m´aximo, 128 possibilidades distintas (2 × 2 × 32) de colocar alguma pe¸ca em alguma casa do tabuleiro. Assim, foi criado um vetor de 128 elementos inteiros aleat´orios para representar os estados poss´ıveis do tabuleiro (cada elemento representa uma possi- bilidade de se ocupar uma das 32 casas do tabuleiro com alguma das 4 pe¸cas inerentes ao jogo). A chave hash para representar cada estado do tabuleiro ´e o resultado da opera¸c˜ao XOR realizada entre todos os elementos do vetor associados `as casas n˜ao vazias do tabu- leiro. Veja o seguinte exemplo:

1. Considere um vetor V de 128 elementos inteiros aleat´orios de 64 bits como sendo o mostrado na figura 26. O vetor V foi utilizado pelo sistema VisionDraughts para implementa¸c˜ao da tabela de transposi¸c˜ao. A maioria dos geradores de n´umeros aleat´orios, principalmente geradores baseados em softwares, n˜ao gera seq¨uˆencias verdadeiramente aleat´orias e sim seq¨uˆencias que possuem algumas das proprieda- des dos n´umeros aleat´orios (uma cuidadosa an´alise matem´atica ´e necess´aria para assegurar que a gera¸c˜ao de n´umeros seja suficientemente aleat´oria). N´umeros ver- dadeiramente aleat´orios s˜ao imposs´ıveis de serem gerados com m´aquinas de estado finito (computadores atuais). Neste caso, cientistas s˜ao obrigados a usar geradores

4.3 O Eficiente Mecanismo de Busca do VisionDraughts 86

baseados em caras e especializadas arquiteturas de hardware ou, mais freq¨uente- mente, contentarem-se com solu¸c˜oes sub-´otimas (como n´umeros pseudo-aleat´orios gerados por software). Assim, para garantir a qualidade dos n´umeros aleat´orios utilizados pelo VisionDraughts, os inteiros aleat´orios do vetor V foram gerados a partir do s´ıtio (STEVANOVIC, 2008), utilizando a t´ecnica descrita em (STIPCEVIC; ROGINA, 2007), que garante a aleatoriedade da seq¨uˆencia gerada baseando-se na

aleatoriedade intr´ınseca de processos f´ısicos em que f´otons s˜ao detectados ao acaso.