Ensaio sobre Heurísticas em Engines de Jogos de Lógica II

[Pt-BR] 
Continuando nosso humilde artigo. Leia a primeira parte aqui: http://essaysonlogic.blogspot.com/2011/07/ensaio-sobre-heuristicas-em-engines-de.html

RESUMO (clique para lê-lo)

Este artigo foi, em suma, inspirado na ideia de fazer a máquina vencer um humano em seu próprio jogo. Esta ideia serve para jogos que se enquadram na definição de atividade intelectual. São exemplificadas as formas de representação virtual do tabuleiro com arrays e do jogo em si com árvores. Cada nó contém um estado possível do jogo; cada turno leva a um novo nó. As folhas são os diversos fins de jogo.
O computador analisa cada posição do array, vê quais os possíveis movimentos e qual tem maior prioridade. Os algoritmos de busca mais básicos comparam os nós-folha para decidir o melhor caminho. Entretanto a árvore pode facilmente crescer além do suportável pela memória do computador. Alguns aprimoramentos em heurísca são apresentados. E mesmo com a atual tecnologia, ainda surgem problemas computacionais.

2. ESTRUTURAÇÃO DE DADOS

Para se começar a fazer o computador entender o jogo, é necessário virtualizá-lo. Xadrez e Damas utilizam um tabuleiro de oito linhas por oito colunas. Intuitivamente, é possível representá-lo computacionalmente com um array de 64 posições[1]. Cada posição pode conter um identificador para sinalizar se a posição está desocupada ou qual peça contém. No xadrez, normalmente utiliza-se números de -6 a 6 para se representar as peças, sendo negativos para as peças pretas, positivos para as brancas e zero para sinalizar um espaço vazio no tabuleiro. Em Go e Jogo da Velha, o mesmo é válido, porém com números variando de -1 a 1 e Damas de -2 a 2. Entretanto, o Jogo da Velha teria um array de apenas nove espaços, equanto Go pode ter tabuleiros de tamanhos variados, chegando até a dezenove por dezenove.

Figura 1: exemplo de tabuleiro
Figura 2: representação com inteiros


Figura 3: representação com caracteres

Uma representação alternativa do tabuleiro é na forma de string. Existem várias notações oficiais que podem ser utilizadas para descrever a posição de cada peça no Xadrez. É possível fazer codificações semelhantes para os outros jogos. Esta forma de armazenamento ocupa menos espaço em memória, mas é mais difícil e menos intuitiva de se trabalhar.

A máquina representa o desenrolar do jogo na forma de uma árvore n-ária[2]. Cada nó possui um estado possível do tabuleiro, sendo a raiz a organização inicial das peças. Os "n" filhos são dados pelas possíveis jogadas, ou seja, cada sucessor será a nova organização das peças no tabuleiro caso um determinado movimento seja escolhido. O nível da árvore equivale ao número do turno.

A Figura 4 ilustra o começo de um Jovo da Velha. Na raiz, o estado inicial, em branco. Depois há um turno do X e outro do O. Teoricamente, nem todos as possíveis jogadas estão presentes. Entretanto, é necessário notar que, neste jogo, o "ponto de vista" é indiferente, portanto, girando as imagens, tem-se as posições que faltam.

Figura 4: Dois primeiros turnos em um Jogo da Velha

--
  1. Claude E. Shannon, "Programming a computer for playing chess", Philosophical Magazine, Vol. 41, No. 314, March 1950. Available: http://archive.computerhistory.org/...computer_for_playing_chess.shannon.062303002.pdf
  2. AI Horizon, (2011, April). Available: http://www.aihorizon.com/essays/

2 admirable thoughts:

Anonymous at: 22 July 2011 at 20:32 said...

Tabuleiro pra mim é só Dama. D:

{ Mochileiro } at: 25 July 2011 at 21:43 said...

Tive que fazer um trabalho de programação envolvendo xadrez, quero isso longe de mim por um tempo.

Post a Comment

 

Copyright © 2010 • Essays on Logic • Design by Dzignine