hexxagon game

27
Inteligência Artificial: Relatório Final do Trabalho Prático Patrício Ferreira: [ [email protected] ] Faculdade de Engenharia da Universidade do Porto Departamento de Engenharia Electrotécnica e de Computadores Rua Roberto Frias, s/n, 4200-465 Porto, Portugal 6 Junho 2010

Upload: patricio-lima

Post on 29-Jun-2015

291 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Hexxagon Game

Inteligência Artificial:

Relatório Final do Trabalho Prático

Patrício Ferreira: [ [email protected]]

Faculdade de Engenharia da Universidade do Porto

Departamento de Engenharia Electrotécnica e de Computadores

Rua Roberto Frias, s/n, 4200-465 Porto, Portugal

6 Junho 2010

Page 2: Hexxagon Game

Hexxagon Página 2

Resumo

Trabalho realizado no âmbito de cadeira de inteligência artificial, visa implementação de um

jogo de tabuleiro Hexxagon, em Prolog, com interface gráfica em java. Vai permitir três

formas de jogo:

Humano vs Humano

Humano vs Computador

Computador vs Computador

Objectivos

O trabalho tem como objectivo, dotar-nos de capacidade de programação em lógica e de

resoluções de problemas lógicos, e da aplicação da inteligência para fazer dotar o computador

de capacidades parecidas com as dos homens - o que faz o homem parecer inteligente.

Neste trabalho, foi implementado um jogo onde considerou-se três modos, sempre com dois

jogadores cada partida, que podem ser: humano contra humano, humano contra computador

ou computador contra computador.

O jogo em si é simples, tendo poucas limitações e regras, contudo a sua implementação

apresentou algum grau de dificuldade.

Primeiramente faram desenvolvidos as funções mais básicas como, as regras do movimento

das peças, as de visualização do tabuleiro, depois foi desenvolvida e aperfeiçoada os

principais módulos de inteligência.

O algoritmo minimax foi o principal módulo de inteligência para o jogo.

Page 3: Hexxagon Game

Hexxagon Página 3

Descrição do Problema

Este jogo de estratégia criado pela companhia Argo Games e publicado em 1993, é jogado

num tabuleiro hexagonal com 61 hexágonos onde 58 dessas são onde os jogadores podem

mover-se. Inicialmente cada jogador começa com 3 peças.

Sendo assim, para desenvolver este jogo em Prolog, é considerado um tabuleiro do jogo

como sendo um tabuleiro com 81 casas (nove casas por nove casas) onde 58 dessas casas

pode-se mover as peças. Onde as restantes só são utilizadas para facilitar a representação

matricial do tabuleiro.

Serão representados da seguinte forma:

Y \X 0 1 2 3 4 5 6 7 8

0

1

2

3

4

5

6

7

8

A tabela acima mostra como estará disposto o tabuleiro, onde as células amarelas são onde

pode-se mover as peças, as células brancas não fazem parte do espaço de movimento das

peças, e as células vermelhas e azuis são as posições iniciais das peças dos dois jogadores.

O jogo é para dois jogadores, sendo esses jogadores representados por utilizadores humanos,

ou pelo próprio computador.

O jogo pode começar desde que as peças estejam dispostas da seguinte forma mostrada na

figura abaixo.

Page 4: Hexxagon Game

Hexxagon Página 4

Fig. 1 Estado inicial do jogo.

Regras do jogo

O jogo desenrola-se em jogadas intercaladas pelos jogadores. Cada jogador na sua vez salta

uma peça que lhe pertença (da sua cor) para qualquer célula que esteja no máximo a distância

de duas células da origem com o intuito de se aproximar das peças do adversário, ficando a

distância de uma célula, quando isso acontecer a peça do adversário será sua e

consequentemente a cor da peça para a cor da sua peça.

O objectivo é terminar o jogo (quando ficar todo preenchido) com o maior número de peças.

O jogador não pode saltar para uma célula ocupada se não for possível fazer vizinhança com

as peças do adversário o jogador pode ainda saltar uma só casa e assim a peça duplica ficando

um na célula de origem e outra na célula de destino.

Page 5: Hexxagon Game

Hexxagon Página 5

Inicio do jogo

O tabuleiro é inicializado com 6 peças, sendo 3 peças para cada jogador. As peças são

distinguidas por cores.

O jogador que começa a jogada numa partida é escolhido aleatoriamente.

Objectivo do jogo

O objectivo final do jogo é ter no final, mais peças que o adversário.

Movimento das peças

No jogo pode-se saltar para qualquer célula, desde que esta esteja a menos de duas

casas e esteja vazia.

Sempre que salta para uma célula e na vizinhança contenha peças do adversário estas

transformam em peças do jogador.

O jogador pode mover as peças em todas as direcções, no tabuleiro.

Pode ainda fazer duplicar uma peça se esta saltar uma só casa.

Vencedor da partida

Ganha a partida o jogador que tiver mais peças no tabuleiro.

Page 6: Hexxagon Game

Hexxagon Página 6

Implementação do Jogo A implementação do jogo pode ser entendida em quatro etapas descritas em baixo. Desde a

construção do tabuleiro e a sua inicialização, à manipulação do mesmo, construção das

jogadas estratégias adoptadas para a implementação da parte de inteligência artificial.

Inicialização do Tabuleiro

Foi construída um tabuleiro de 9x9 com 58 campos onde as células adicionais, são

auxiliares. Em que cada jogador é-lhe atribuído 6 peças. Existe dois tipos de tabuleiro.

No inicio de cada partida o tipo de tabuleiro tal como o jogador que joga primeiro e

escolhida de forma aleatória pelo programa.

Em baixo segue-se a descrição dos principais predicados e exemplos de inicialização

do tabuleiro:

Predicados:

o table(T,N) – permite seleccionar uma dos tipos de tabuleiros existentes.

o Print_table(T) – imprime estado do tabuleiro T, em forma hexagonal.

Fig 1: Visualização do tabuleiro

Page 7: Hexxagon Game

Hexxagon Página 7

Manipulação do Tabuleiro

Foram criados predicados para manipular as peças na tabela. Tabela que é

representado por uma lista de listas, em Prolog.

Na base de factos contem as possíveis direcções de movimento das peças, que facilita

o movimento no tabuleiro. Para facilitar o movimento, a contagem dos pontos e

jogadas válidas, foram criadas predicados que contabiliza o número de vizinhos,e os

vizinhos dos vizinhos.

Predicados:

dir((X,Y),D):- devolve a direção unitária contida em D ex: dir((0,-1),n), na

direção norte(n), anda zero para direita e 1 para cima.

neighbours(P,X,Y,Table,Neig) – Dado um determinado jogador (P) as

coordenadas (X,Y) de uma peça e um tabuleiro (Table) é retornada em Neig um

vizinho(à uma célula de distancia).

neighbours_list(P,X,Y,Table,Neigs)- Dado um determinado

jogador (P) as coordenadas (X,Y) de uma peça e um tabuleiro (Table) é retornada em

Neigs todos os vizinhos(à uma célula de distancia).

Construção de Jogadas

Foram criadas um conjunto de predicados capazes de ler as coordenadas das peças no

tabuleiro, avaliar jogadas possíveis e efectuar jogadas com as melhores peças.

Predicados:

o valid_mov(Xi,Yi,Xf,Yf,T,P):- Verifica se um direcção é válida,

isto é, se é possivel fazer a jogada de dadas coordenadas sem violar as regras

de movimento.

o possible_jumps(X,Y,Table,Jumps) - Dado um determinado

jogador (P) as coordenadas (X,Y) de uma peça e um tabuleiro (Table) é

retornada o conjunto de coordenadas (Jumps) onde é possivel mover.

o play(X,Y,T,P,Xf,Yf,TF):- verifica se uma jogada é valida, sendo

valida realiza a jogada, onde T é o estado corrente, e TF é o estado do tabuleiro

depois da jogada.

o change(Table,X,Y,P,TF):- modifica os vizinhos com coordenadas

X,Y como peças do jogador P.

Page 8: Hexxagon Game

Hexxagon Página 8

Módulo de Inteligência

Para os tipos de jogo Computador Vs Computador e Humano Vs Computador foram

criados predicados com o objectivo de fazer jogadas mais inteligentes. Decisões que

são tomadas de acordo com o numero de pontos que são feitas pelo jogador e pelo

adversário.

o Minimax

Para resolver o problema das decisões criou-se predicados que usam o algoritmo

Minimax. Onde as possíveis decisões do jogador e do adversário são organizadas e

dispostas numa arvore por ordem de profundidade, onde tentará maximizar os pontos

das jogadas do jogador (computador) e minimizar os pontos da jogada do adversário.

A figura abaixo mostra como serão dispostas na árvore, onde os valores numéricos são

os pontos das respectivas jogadas.

Fig 2: Disposição das possíveis jogadas do Jogador e do adversário.

Os pontos são contabilizados de acordo com a quantidade de peças de cada jogador.

Predicados:

o minimax(EST,Jog,Prof,Valor,Jogada):- Predicado

principal do jogo, que dado um estado actual e precisão da

decisão(profundidade), ela escolhe a melhor jogada.

o max_value(ESTS,Jog,Prof,VT,JT,Valor,Jogada):-

predicado usado pelo minimax, que dado um conjunto de estados ela

escolhe a melhor, ou seja a jogada com maior valor.

Page 9: Hexxagon Game

Hexxagon Página 9

o min_value([E|L],Jog,Prof,VT,JT,Valor,Jogada):-

similar ao max_value, mas escolhe o menor valor.

o choose_max(V1,J1,V2,J2,VB,JB):- dado duas jogadas ela

retorna a melhor(com maior valor) em JB.

o choose_min(V1,J1,V2,J2,VB,JB):- dado duas jogadas ela

retorna a melhor(com menor valor) em JB.

o evaluate(EST,P,V):- é a função de avaliação da arvore

minimax, quando esta atinge a profundidade desejada.

o one_move(T,P,X,Y):- dado o estado do tabuleiro ela retorna um

movimento possível da peça P.

O módulo de inteligência foi testado de duas formas, primeiro colocando modo Computador

Vs Computador com o mesmo nível de inteligência, e depois um com nível de inteligência

mais baixo ou que joga aleatoriamente.

Page 10: Hexxagon Game

Hexxagon Página 10

Análise de Resultados O jogo foi testado e todos os requisitos foram satisfeitos, excepto a interface gráfica.

Para cada modo de jogo fizeram-se os seguintes testes.

Humano Vs Humano

Para testar o este modo, põe-se dois adversários quaisquer a jogar.

Em baixo mostra-se figuras da execução do modo Humano Vs Humano

Fig 3:Inicio Jogo Humano Vs Humano

Page 11: Hexxagon Game

Hexxagon Página 11

Fig 4: Fim do jogo Humano Vs Humano.

Humano Vs Computador

Para testar este modo primeiro testou-se o algoritmo minimax escolhendo

coordenadas aleatórias, e tabelas aleatórias, só depois foi testado no jogo.

É notável que em diferentes níveis de dificuldade (profundidade), a dificuldade

das jogadas é diferente.

Em baixo é mostrado imagens do modo.

Page 12: Hexxagon Game

Hexxagon Página 12

Fig 5: Inicio de jogo Humano Vs Computador

Page 13: Hexxagon Game

Hexxagon Página 13

Fig 6: Fim de jogo Humano Vs Computador

Computador Vs Computador

O modo computador Vs Computador foi testado de duas formas:

Primeiro os dois jogadores têm o mesmo nível de inteligência, onde as vezes

ganha umas as vezes ganha outro, dado tem o mesmo conhecimento.

A segunda os dois jogadores tem inteligência diferente, onde um joga

aleatoriamente (sem inteligência) e o outro joga prevendo as melhores jogadas,

Como consequência, o segundo sempre ganha o jogo.

Em baixo são mostrados imagens deste modo.

Page 14: Hexxagon Game

Hexxagon Página 14

Fig 7: Fim de Jogo Computador Vs Computador

Ambiente de desenvolvimento

O jogo foi feito totalmente em linguagem Prolog, onde foi utilizadas as

ferramentas de edição de texto do Swi-Prolog . Os compiladores utilizados

foram os da Sicstus Prolog e da Swi-Prolog. O programa também corre em

ambiente da Swi-Prolog e da Sicstus. O Jogo pode correr tanto em Microsoft

Windows SO como em Linux SO.

Page 15: Hexxagon Game

Hexxagon Página 15

Conclusões

No trabalho feito, foram implementadas os seguintes requisitos:

Jogo Humano Vs Humano

Jogo Humano Vs Computador

Jogo Computador Vs Computador com diferentes níveis de conhecimento.

No módulo de inteligência utilizou-se o algoritmo Minimax para prever as melhores jogadas,

algoritmo que apresenta algumas desvantagens:

Utiliza muitos estados para prever as melhores jogadas, o que o torna pouco eficiente.

Existem estados que poderiam ser descartados mas são avaliados. Uma alternativa a isso é a

utilização do Minimax cortes alfa-beta, que descarta essas possibilidades, tornando o minimax

mais eficiente.

Uma vantagem do minimax em relação a outros algoritmos de pesquisa, é a facilidade na

programação do mesmo.

A realização da interface gráfica e melhoramento do algoritmo Minimax são perspectivas,

caso tivesse mais tempo.

Referências Bibliográficas

http://kidrocket.org/game_hexxagon.php

http://paginas.fe.up.pt/~eol/IA/0910/TRABALHOS/pesqadv_hexxagon.html

http://www.mobygames.com/game/dos/hexxagon

http://www.springfrog.com/games/hexxagon/

http://www.mellekoning.nl/files/hexxagon/hexxagon.php

Software:

Sicstus Prolog

Swi-Prolog Editor

Page 16: Hexxagon Game

Hexxagon Página 16

Anexos

Manual do Utilizador

O programa corre nas consolas Prolog da Sicstus e da Swi-Prolog.

Em seguida são mostrados os passos desde a compilação até a execução do jogo.

Compilação

Para compilar basta numa das consolas consultar o ficheiro do jogo

Hexxagon.pl da seguinte forma.

Fig 8: Compilar o ficheiro

Ou na consola escrever “consult („Caminho para o ficheiro‟).

Fig 9: Compilar o ficheiro

Page 17: Hexxagon Game

Hexxagon Página 17

Correr o Jogo

Para correr basta na consola escrever “hexxagon.” ou “begin.”

Aparecerá o menu na imagem abaixo onde poderá escolher uma das 5 opções.

1. Computador Vs Computador

2. Computador mais Inteligente Vs Computador menos inteligente

3. Humano Vs Humano

4. Humano Vs Computador

5. Sair

As escolhas são feitas com os números do teclado de 1 à 5

Fig 10: Inicio do Jogo escolha do modo

Caso escolhe a opção 1 ou seja Computador Vs Computador os estados são

alternados pressionando na tecla ENTER. Na consola é pré-visualizada o

tabuleiro as coordenadas das jogadas dos dois jogadores, e a respectiva

pontuação.

Em baixo é apresentado a ilustração do descrito acima.

Page 18: Hexxagon Game

Hexxagon Página 18

Fig 11: Representação da Jogada

Para o modo Computador inteligente Vs Computador menos Inteligente é

similar ao descrito acima.

Já no caso do Humano Vs Humano (opção 3) é um pouco diferente, pois pede

as coordenadas de origem e de destino das jogadas.

Sendo a apresentação do tabuleiro e das pontuações são feitas da mesma forma

em todos os modos.

No modo Humano Vs Computador, quando joga o computador, a jogada é feita

automática, a na vez do humano é pedido as coordenadas.

Page 19: Hexxagon Game

Hexxagon Página 19

Fig 12: Inserção das coordenadas no Modo Humano Vs Computador

O jogo termina quando todos os campos tiverem preenchidos ou quando já não

houver mais peças de um dos jogadores, e é mostrado o vencedor.

Fig 13: Fim de jogada.

Page 20: Hexxagon Game

Hexxagon Página 20

Exemplo de Execução

Computador Vs Computador

Inicio do jogo.

Fig 14: Inicio do Jogo, Escolha de opção de jogo.

Page 21: Hexxagon Game

Hexxagon Página 21

Fig 15: Primeira Jogada

Page 22: Hexxagon Game

Hexxagon Página 22

Fig 16: Segunda Jogada

Page 23: Hexxagon Game

Hexxagon Página 23

Fig 17: Jogada de 0-8 para 1-7

Page 24: Hexxagon Game

Hexxagon Página 24

Fig 18: Computador 1 17 pontos, Computador 2 18 pontos

Page 25: Hexxagon Game

Hexxagon Página 25

Fig 19: Joga Computador 1

Page 26: Hexxagon Game

Hexxagon Página 26

Fig 20: Penultima Jogada

Page 27: Hexxagon Game

Hexxagon Página 27

Fig 21: Ultima Jogada, Ganha o computador 2