Você está na página 1de 27
Inteligência Artificial: Relatório Final do Trabalho Prático Patrício Ferreira: [ ee06038@fe.up.pt ] Faculdade de

Inteligência Artificial:

Relatório Final do Trabalho Prático

Artificial: Relatório Final do Trabalho Prático Patrício Ferreira: [ ee06038@fe.up.pt ] Faculdade de

Patrício Ferreira: [ ee06038@fe.up.pt]

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

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

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.

módulos de inteligência. O algoritmo minimax foi o principal módulo de inteligência para o jogo. Hexxagon
módulos de inteligência. O algoritmo minimax foi o principal módulo de inteligência para o jogo. Hexxagon
Descrição do Problema Este jogo de estratégia criado pela companhia Argo Games e publicado em

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
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.

jogo pode começar desde que as peças estejam dispostas da seguinte forma mostrada na figura abaixo.
jogo pode começar desde que as peças estejam dispostas da seguinte forma mostrada na figura abaixo.
Fig. 1 Estado inicial do jogo. Regras do jogo O jogo desenrola-se em jogadas intercaladas
Fig. 1 Estado inicial do jogo. Regras do jogo O jogo desenrola-se em jogadas intercaladas

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.

uma só casa e assim a peça duplica ficando um na célula de origem e outra
uma só casa e assim a peça duplica ficando um na célula de origem e outra
Inicio do jogo  O tabuleiro é inicializado com 6 peças, sendo 3 peças para

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.

uma só casa. Vencedor da partida  Ganha a partida o jogador que tiver mais peças
uma só casa. Vencedor da partida  Ganha a partida o jogador que tiver mais peças
Implementação do Jogo A implementação do jogo pode ser entendida em quatro etapas descritas em

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.

– imprime estado do tabuleiro T, em forma hexagonal. Fig 1: Visualização do tabuleiro Hexxagon Página

Fig 1: Visualização do tabuleiro

– imprime estado do tabuleiro T, em forma hexagonal. Fig 1: Visualização do tabuleiro Hexxagon Página
– imprime estado do tabuleiro T, em forma hexagonal. Fig 1: Visualização do tabuleiro Hexxagon Página
 Manipulação do Tabuleiro Foram criados predicados para manipular as peças na tabela. Tabela que

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.

o change( Table,X,Y,P,TF ):- modifica os vizinhos com coordenadas X,Y como peças do jogador P. Hexxagon
o change( Table,X,Y,P,TF ):- modifica os vizinhos com coordenadas X,Y como peças do jogador P. Hexxagon
 Módulo de Inteligência Para os tipos de jogo Computador Vs Computador e Humano Vs

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
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.

pelo minimax, que dado um conjunto de estados ela escolhe a melhor, ou seja a jogada
pelo minimax, que dado um conjunto de estados ela escolhe a melhor, ou seja a jogada
o min_value ([E|L],Jog,Prof,VT,JT,Valor,Jogada ):- similar ao max_value, mas escolhe o menor valor. o

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.

de inteligência, e depois um com nível de inteligência mais baixo ou que joga aleatoriamente. Hexxagon
de inteligência, e depois um com nível de inteligência mais baixo ou que joga aleatoriamente. Hexxagon
Análise de Resultados O jogo foi testado e todos os requisitos foram satisfeitos, excepto a

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

Em baixo mostra-se figuras da execução do modo Humano Vs Humano Fig 3:Inicio Jogo Humano Vs

Fig 3:Inicio Jogo Humano Vs Humano

Em baixo mostra-se figuras da execução do modo Humano Vs Humano Fig 3:Inicio Jogo Humano Vs
Em baixo mostra-se figuras da execução do modo Humano Vs Humano Fig 3:Inicio Jogo Humano Vs
Fig 4: Fim do jogo Humano Vs Humano.  Humano Vs Computador Para testar este
Fig 4: Fim do jogo Humano Vs Humano.  Humano Vs Computador Para testar este

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.

(profundidade), a dificuldade das jogadas é diferente. Em baixo é mostrado imagens do modo. Hexxagon Página
(profundidade), a dificuldade das jogadas é diferente. Em baixo é mostrado imagens do modo. Hexxagon Página
Fig 5: Inicio de jogo Humano Vs Computador Hexxagon Página 12
Fig 5: Inicio de jogo Humano Vs Computador Hexxagon Página 12

Fig 5: Inicio de jogo Humano Vs Computador

Fig 5: Inicio de jogo Humano Vs Computador Hexxagon Página 12
Fig 5: Inicio de jogo Humano Vs Computador Hexxagon Página 12
Fig 6: Fim de jogo Humano Vs Computador  Computador Vs Computador O modo computador
Fig 6: Fim de jogo Humano Vs Computador  Computador Vs Computador O modo computador

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.

Como consequência, o segundo sempre ganha o jogo. Em baixo são mostrados imagens deste modo. Hexxagon
Como consequência, o segundo sempre ganha o jogo. Em baixo são mostrados imagens deste modo. Hexxagon
Fig 7: Fim de Jogo Computador Vs Computador  Ambiente de desenvolvimento O jogo foi
Fig 7: Fim de Jogo Computador Vs Computador  Ambiente de desenvolvimento O jogo foi

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.

da Swi-Prolog e da Sicstus. O Jogo pode correr tanto em Microsoft Windows SO como em
da Swi-Prolog e da Sicstus. O Jogo pode correr tanto em Microsoft Windows SO como em
Conclusões No trabalho feito, foram implementadas os seguintes requisitos: Jogo Humano Vs Humano Jogo Humano

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

Software:

Sicstus Prolog

Swi-Prolog Editor

http://www.mellekoning.nl/files/hexxagon/hexxagon.php Software: Sicstus Prolog Swi-Prolog Editor Hexxagon Página 15
http://www.mellekoning.nl/files/hexxagon/hexxagon.php Software: Sicstus Prolog Swi-Prolog Editor Hexxagon Página 15
Anexos Manual do Utilizador O programa corre nas consolas Prolog da Sicstus e da Swi-Prolog.

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.

consultar o ficheiro do jogo Hexxagon.pl da seguinte forma. Fig 8: Compilar o ficheiro Ou na

Fig 8: Compilar o ficheiro

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

Ou na consola escrever “consult („Caminho para o ficheiro‟). Fig 9: Compilar o ficheiro Hexxagon Página

Fig 9: Compilar o ficheiro

Ou na consola escrever “consult („Caminho para o ficheiro‟). Fig 9: Compilar o ficheiro Hexxagon Página
Ou na consola escrever “consult („Caminho para o ficheiro‟). Fig 9: Compilar o ficheiro Hexxagon Página
 Correr o Jogo Para correr basta na consola escrever “hexxagon.” ou “begin.” Aparecerá o

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

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

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.

jogadores, e a respectiva pontuação. Em baixo é apresentado a ilustração do descrito acima. Hexxagon Página
jogadores, e a respectiva pontuação. Em baixo é apresentado a ilustração do descrito acima. Hexxagon Página
Fig 11: Representação da Jogada Para o modo Computador inteligente Vs Computador menos Inteligente é
Fig 11: Representação da Jogada Para o modo Computador inteligente Vs Computador menos Inteligente é

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.

joga o computador, a jogada é feita automática, a na vez do humano é pedido as
joga o computador, a jogada é feita automática, a na vez do humano é pedido as
Fig 12: Inserção das coordenadas no Modo Humano Vs Computador O jogo termina quando todos
Fig 12: Inserção das coordenadas no Modo Humano Vs Computador O jogo termina quando todos

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.

já não houver mais peças de um dos jogadores, e é mostrado o vencedor. Fig 13:

Fig 13: Fim de jogada.

já não houver mais peças de um dos jogadores, e é mostrado o vencedor. Fig 13:
já não houver mais peças de um dos jogadores, e é mostrado o vencedor. Fig 13:
Exemplo de Execução  Computador Vs Computador Inicio do jogo. Fig 14: Inicio do Jogo,

Exemplo de Execução

Computador Vs Computador

Inicio do jogo.

de Execução  Computador Vs Computador Inicio do jogo. Fig 14: Inicio do Jogo, Escolha de

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

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

Hexxagon

Página 20

Fig 15: Primeira Jogada Hexxagon Página 21
Fig 15: Primeira Jogada Hexxagon Página 21

Fig 15: Primeira Jogada

Fig 15: Primeira Jogada Hexxagon Página 21
Fig 15: Primeira Jogada Hexxagon Página 21
Fig 16: Segunda Jogada Hexxagon Página 22
Fig 16: Segunda Jogada Hexxagon Página 22

Fig 16: Segunda Jogada

Fig 16: Segunda Jogada Hexxagon Página 22
Fig 16: Segunda Jogada Hexxagon Página 22
Fig 17: Jogada de 0-8 para 1-7 Hexxagon Página 23
Fig 17: Jogada de 0-8 para 1-7 Hexxagon Página 23

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

Fig 17: Jogada de 0-8 para 1-7 Hexxagon Página 23
Fig 17: Jogada de 0-8 para 1-7 Hexxagon Página 23
Fig 18: Computador 1 17 pontos, Computador 2 18 pontos Hexxagon Página 24
Fig 18: Computador 1 17 pontos, Computador 2 18 pontos Hexxagon Página 24

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

Fig 18: Computador 1 17 pontos, Computador 2 18 pontos Hexxagon Página 24
Fig 18: Computador 1 17 pontos, Computador 2 18 pontos Hexxagon Página 24
Fig 19: Joga Computador 1 Hexxagon Página 25
Fig 19: Joga Computador 1 Hexxagon Página 25

Fig 19: Joga Computador 1

Fig 19: Joga Computador 1 Hexxagon Página 25
Fig 19: Joga Computador 1 Hexxagon Página 25
Fig 20: Penultima Jogada Hexxagon Página 26
Fig 20: Penultima Jogada Hexxagon Página 26

Fig 20: Penultima Jogada

Fig 20: Penultima Jogada Hexxagon Página 26
Fig 20: Penultima Jogada Hexxagon Página 26
Fig 21: Ultima Jogada, Ganha o computador 2 Hexxagon Página 27
Fig 21: Ultima Jogada, Ganha o computador 2 Hexxagon Página 27

Fig 21: Ultima Jogada, Ganha o computador 2

Fig 21: Ultima Jogada, Ganha o computador 2 Hexxagon Página 27
Fig 21: Ultima Jogada, Ganha o computador 2 Hexxagon Página 27