Trabalho de Implementação – Jogo Reversi 1 Introdução

Transcrição

Trabalho de Implementação – Jogo Reversi 1 Introdução
Trabalho de Implementação – Jogo Reversi
Paulo Afonso Parreira Júnior {[email protected]}
Rilson Machado de Olivera {[email protected]}
Universidade Federal de Lavras – UFLA
Departamento de Ciência da Computação - DCC
Resumo: este trabalho apresenta os artefatos gerados durante o desenvolvimento do jogo Reversi,
tais como: a descrição do trabalho, o diagrama de caso de uso e o diagrama de classes. O trabalho
apresenta ainda, detalhes sobre as técnicas de busca competitiva utilizadas pelo jogo. Ao final, será
indicado o link para execução do jogo através da Internet.
1 Introdução
Nos primeiros anos da pesquisa em Inteligência Artificial - IA, desenvolver bons métodos de busca
era o principal objetivo. Os pesquisadores acreditavam que a busca é a base da resolução de
problemas [1]. Antes de adentrar mais no assunto, faz-se necessário explicitar alguns termos
inerentes aos métodos de buscas. Esta terminologia é representada na Tabela 1.
Termos
Descrição
Estado
Situação relevante para o problema.
Estado inicial
Estado onde o agente se encontra no início.
Operadores ou ações
Conjunto de ações disponíveis ao agente que permite ir de um estado
para outro.
Espaço de estados
Conjunto de todos os estados alcançáveis a partir do estado inicial por
meios da aplicação de uma sequência de ações.
Caminho
Uma sequência de ações levando de um estado a outro.
Teste de objetivo
Teste aplicado pelo agente para verificar se chegou a um estado
objetivo.
Custo do caminho
A soma total dos custos das ações individuais ao longo de uma
caminho, denotada pela função “g”.
Solução
Um caminho que parte do estado inicial e leva a uma estado objetivo.
Completude
A estratégia garante encontrar uma solução se esta existir?
Complexidade de tempo
Quanto demorou a achar a solução?
Complexidade no espaço Quanta memória foi necessária para achar a solução?
Optimalidade
A solução encontrada foi a melhor?
Tabela 1Terminologia: Métodos de Busca. Fonte: [1]
A Figura 1, a Figura 2 e a Figura 3 representam exemplos de problemas e a definição de métodos de
busca que possam resolvê-los.
Figura 1: Exemplo: Quebra-Cabeça. Fonte: [1]
Figura 2: Exemplo: Oito Rainhas. Fonte: [1]
Figura 3: Exemplo: Missionário e Canibais. Fonte: [1]
O funcionamento de um método de busca pode ser visto como um processo de expansão de uma
árvore [1]. Assim sendo, podem-se utiliza estratégias para expansão deste nós. Algumas estratégias
conhecidas são: (i) busca de amplitude, (ii) bsuca de custo uniforme, (iii) bsuca em profundidade,
(iv) minimax, (v) poda alpha-beta, entre outras.
Neste trabalho, serão implementados o algoritmo mini-max e a estratégia de poda alpha-beta.
1.1 Minimax
O algorítimo MINIMAX é uma técnica de busca utilizada em jogos de soma zero (se alguém
ganha, alguém tem que perder). Considere o jogo de xadrez, por exemplo, temos dois lados: as
brancas e as pretas. Se um ganha, o outro perde, assim, se a pontuação de um jogador é X, a do
oponente é -X, garantindo a soma 0 [1].
Baseado no algoritmo descrito no livro “Prolog Programming For Artificial Intelligence”. É
através deste algoritmo que o computador “procura” a melhor jogada a efectuar. O algoritmo
minimax, consiste na construção de uma árvore com as jogadas possíveis para cada jogador e todas
as subsequentes destas. É atribuído então aos nós terminais (jogadas que não têm “descendentes”)
um valor conforme as condições do tabuleiro favoreçam um jogador ou outro. Desse modo, um dos
jogadores deverá tentar obter o valor máximo (jogador MAX) e outro o valor mínimo (jogador
MIN). Logo, a todo nó ascendente de um nó terminal, será atribuído o valor do filho com menor ou
maior valor, conforme seja uma jogada do MIN ou MAX respectivamente. O mesmo é repetido para
todos os nós da árvore, até chegar ao valor da raiz. Na prática, a árvore não é visitada até às folhas,
mas sim até uma determinada profundidade imposta por limites de tempo para efectuação da jogada
e capacidade de processamento [2].
Neste trabalho, o usuário poderá selecionar até que nível da árvore o algoritmo deverá
pesquisar. Através da opção Nível de Dificuldade na tela principal do jogo, o usuário poderá
escolher entre os valores:
•
Fácil
•
Intermediário
•
Difícil
Estes estes valores representam até que nível da árvore de busca o algoritmo deverá executar. Sendo
assim, o valor Fácil permitirá que o algoritmo vasculhe até o 3º nível, o nível intermediário até o
5º nível e o nível Difícil até o 7º nível.
Segundo [1], conforme a altura da árvore aumenta, melhor é a jogada do computador.
1.2 Cortes Alpha-Beta
Os cortes alpha-beta procuram aumentar a eficiência do algoritmo minimax permitindo a
omissão de alguns “ramos” da árvore de jogadas possíveis na procura da melhor jogada. A ideia é
encontrar uma jogada que seja suficientemente boa (não necessariamente a melhor) para conduzir à
decisão correcta. É com esse intuito que são introduzidos os limites Alpha e Beta, sendo Alpha o
valor mínimo que se garante que o MAX obtenha, e o Beta o valor máximo que o MAX pode
esperar obter (logo, o valor final obtido encontrar-se-á entre este dois limites). Se se concluir que
uma jogada têm valores exteriores ao intervalo, trata-se de uma jogada que não deverá ser
efectuada, não sendo necessário calcular o seu valor exacto, este só tem de ser calculado caso o
valor se encontre dentro do intervalo Alpha-Beta [2].
No pior caso, o algoritmo alpha-beta visitará exactamente as mesmas posições que visita o
algoritmo minimax simples, não havendo nesse caso vantagem deste algoritmo em relação ao
minimax exaustivo. No entanto, está provado que no melhor caso (quando a jogada mais forte é
considerada primeiro) o algoritmo alpha-beta terá apenas que avaliar a raiz do número de jogadas
terminais que teriam de ser avaliadas pelo algoritmo de pesquisa minimax exaustivo.
1.3 Heurísticas
Neste trabalho foram utilizadas 2 heurísticas para avaliação das possíveis jogadas. A
primeira foi proposta por [1] e é apresentada na seção 1.3.1. A segunda heurística foi proposta pela
equipe de desenvolvedores (Paulo Afonso e Rilson) e é apresentada na seção 1.3.2. A avaliação final
de uma jogada é feita a partir da média ponderada dos valores resultantes das 2 heurísticas
anteriormente citadas (ver Figura 4).
Avaliação Final Jogada = (Avaliação Heurística 1) * 0.7 + (Avaliação Heurística 2) * 0.3
Figura 4: Avaliação final de uma jogada
1.3.1 Heurísticas dos Pesos
A avaliação de um nó é dada da seguinte maneira: para todas as peças que possuída por
quem está na vez da jogada (Usuário/Computador), soma-se o seu valor baseado na seguinte matriz
de pesos (ver Tabela 2):
20
0
10
10
10
10
10
10
0
20
0
0
10
10
10
10
10
10
0
0
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
5
5
10
10
10
10
10
10
10
10
5
5
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
0
0
10
10
10
10
10
10
0
0
20
0
10
10
10
10
10
10
0
20
Tabela 2: Matriz de Pesos. Fonte: [2]
Considerações sobre a matriz de pesos [2]:
1. As casas do meio mudam freqüentemente o seu valor. Por isso achamos que não valia muito
possuir uma casa dessas.
2. As casas do canto são muito valiosas, uma vez que seu valor nunca poderá ser alterado.
3. As casas vizinhas às casas do canto são as piores casas do tabuleiro, uma vez que se você possuílas, você dará oportunidade do adversário dominar um canto.
4. Todas as outras casas têm um valor razoavelmente bom, e quanto mais você possuir, mais opções
de jogo você terá, reduzindo as chances de você ter que ceder a vez.
1.3.1 Heurísticas da Qunatidade de Peças Capturadas
Esta é uma heurística simples onde cada jogada é avaliada de acordo com a quantidade de
peças capturadas na mesma. Ou seja, uma jogada em que mais peças do adversário são capturadas,
para esta heurística, é considerada um boa jogada.
2 Desenvolvimento do Jogo
2.1 Descrição do trabalho
O objetivo desse trabalho é implementar algumas técnicas de busca competitiva que são
utilizadas em jogo clássicos em IA. Implementar um programa para jogos conhecidos como
“Reversi”. O Resversi é um de tabuleiro, onde dois jogadores (um branco e outro preto) tentam
preencher o maior numero de posição como suas peças. O tabuleiro tem 8X8 posições, e
inicialmente as posições centrais são preenchidas com 2 peças brancas e duas peças pretas formando
um X. O jogador preto começa e deve colocar sua peça de forma que exista pelo menos uma peça
branca “peça capturada” entre duas peças pretas, seja na vertical, horizontal ou diagonal. As peças
capturadas mudam de cor, e o jogo termina quando nenhum jogador possui mais nenhuma jogada
valida.
2.2 Diagrama de Casos de Uso
Esta seção apresenta o diagrama de Casos de Uso do sistema a ser desenvolvido. Como pode ser
visto na Figura 5, o usuário poderá iniciar um jogo e reiniciá-lo a qualquer momento, poderá
também selecionar uma jogada quando for sua vez de jogar, consultar ajuda e visualizar sobre.
Figura 5: Diagrama de Casos de Uso - Jogo Reversi.
O outro atuador do sistema, o ator “Computador”, representa a máquina que irá jogar contra o
usuário. Como pode-se observar, este ator apenas pode selecionar uma jogada quando for a sua vez
de jogar.
O detalhamento destes Casos de Uso pode ser visto na Tabela X.
Id Caso de Uso: 001
Nome: Iniciar Jogo
Casos de Uso Relacionados: -Descrição: O ator iniciar uma nova partida.
Ator(es): Usuário
Pré-Condições: O Ator ter selecionado um tema, com qual peça deseja jogar e o nível de
dificuldade do jogo.
Extension Points: -Execução Normal:
1. O Ator inicia o Caso de Uso selecionando “Iniciar Jogo”;
2. O Sistema atualiza o tabuleiro e exibe a tela para um novo jogo;
Pós-Condições: Um novo jogo é iniciado.
Exceções: -Fluxos Alternativos: -Interfaces: --
Id Caso de Uso: 002
Nome: Reiniciar Jogo
Casos de Uso Relacionados: -Descrição: O ator poderá reiniciar um jogo a qualquer momento.
Ator(es): Usuário
Pré-Condições: -Extension Points: -Execução Normal:
3.O Ator inicia o Caso de Uso selecionando “Reiniciar Jogo”;
4.O Sistema atualiza o tabuleiro e exibe a tela para um novo jogo;
Pós-Condições: Um novo jogo é iniciado.
Exceções: -Fluxos Alternativos: -Interfaces: -Id Caso de Uso: 003
Nome: Selecionar jogada
Casos de Uso Relacionados: -Descrição: O Ator informa a jogada que deseja realizar naquele momento;
Ator(es): Usuário, Computador
Pré-Condições: -Extension Points: Consultar Ajuda
Execução Normal:
1. O Ator inicia o Caso de Uso informando a jogada que deseja realizar, ou seja,
informando sobre qual casa deseja colocar uma peça sua;
2. O Sistema verifica se a jogada satisfaz as regras do jogo [E1];
3. O Sistema atualiza o tabuleiro e encerra o Caso de Uso;
Pós-Condições: Uma nova configuração do tabuleiro é representada;
Exceções:
Exceção E1 – Jogada Inválida.
1. O Sistema informa que a jogada não é válida; volta para o passo 1 do Fluxo Básico;
Fluxos Alternativos: -Interfaces: -Id Caso de Uso: 004
Nome: Consultar Ajuda
Casos de Uso Relacionados: -Descrição: O Ator obtém ajuda sobre as regras do jogo;
Ator(es): -Pré-Condições: -Extension Points: -Execução Normal:
1. O Ator inicia o Caso de Uso, selecionando “Consultar Ajuda”;
2. O Sistema exibe as informações sobre o jogo, bem como suas regras e dicas de boas
jogadas;
Pós-Condições: Informações sobre o jogo são exibidas.
Exceções: -Fluxos Alternativos: -Interfaces: --
Id Caso de Uso: 005
Nome: Consultar Sobre
Casos de Uso Relacionados: -Descrição: Exibe informações sobre a equipe que desenvolveu o jogo;
Ator(es): -Pré-Condições: -Extension Points: -Execução Normal:
1. O Ator inicia o Caso de Uso, selecionando “Consultar Sobre”;
2. O Sistema exibe as informações dos desenvolvedores do jogo;
Pós-Condições: Informações sobre os desenvolvedores são exibidas.
Exceções: -Fluxos Alternativos: -Interfaces: --
2.3 Diagrama de Classes
Esta seção apresenta o diagrama de Classes do jogo desenvolvido (ver Figura 6), bem como uma
breve descrição sobre cada uma das classes presentes no diagrama (ver Tabela 3).
Classe
Descrição
Tabuleiro
Classe que modela o tabuleiro do jogo. Possui métodos para manipulação
das peças no tabuleiro, bem como para a escolha das jogadas através dos
métodos de busca Minimax e Poda alfa-beta.
TabuleiroSingleton
Classe derivada do Design Pattern Singleton que garante a existência de
apenas uma instância da classe Tabuleiro durante o jogo.
CasaTabuleiro
Classe que modela uma casa do tabuleiro. Possui métodos que possibilitam
verificar se casa está vazia, ou com alguma peça.
JogadaValida
Consiste de um casa de destino e algumas casas que possuem peças a serem
capturadas. Ou seja, é uma classe que modela uma jogada, e esta jogada
necessariamente é válida, ou seja, é passível de ocorrer.
Jogo
Classe que modela o jogo reversi. É responsável por criar a interface do jogo
e garantir a interação com o usuário. Funciona como interface entre o
usuário e o tabuleiro do jogo, traduzindo os eventos gerados pelo jogador em
ações de movimentação de peças do tabuleiro.
Util
Classe utilitária, responsável por armazenar as mensagens e constantes
utilizadas pelo jogo.
Tema
Classe que modela um tema de jogo. É responsável por definir o formato das
peças do tabuleiro.
JApplet
Classe distribuída junto com a plataforma de desenvolvimento JDK da
linguagem JAVA. Permite a construção de Applets: componentes que podem
ser incoporados a páginas HTML e executados via web.
Tabela 3: Descrição das classes - Jogo Reversi
Figura 6: Diagrama de classes - Jogo Reversi
3 Ferramentas Utilizadas
Para o desenvolvimento deste trabalho foram utilizadas as seguintes tecnologias:
•
Plataforma de programação JAVA 1.5: tecnologia Applet;
•
Browser Mozila Firefox;
•
Ferramenta de modelagem de sistemas orientados a objetos baseado na UML – JUDE 5.0;
Considerações Finais
Com este trabalho foi possível aprender mais sobre as estratégias de IA (Minimax e Poda
Alfa-beta) utilizadas em jogos. Utilizando o algoritmo MiniMax, observou-se a diferença na
qualidade das jogadas encontradas pelo computador quando este é habilitado a vasculhar mais ou
menos o espaço de busca da solução. Percebeu-se também, que quanto mais alta era árvore de busca
(nível de dificuldade difícil), maior era o tempo dispensado para retornar uma jogada válida. Sendo
assim, foi implementado a estratégia de poda alfa-beta que garante um desempenho maior deste
algoritmo por realizar cortes na árvore de busca em regiões onde a melhor solução não se encontra.
O resultado do trabalho encontra-se disponibilizado na Internet e pode ser acessado através do
endereço endereço: http://alunos.dcc.ufla.br/~paulojr
6 Referências Bibliográficas
[1] Notas de aula. Disciplina: IA – Inteligência Artificial, UFLA: 2007/2.
[2] http://paginas.fe.up.pt/~eol/IIA/trabalhos/98_99/XADREZ/relatorio.html

Documentos relacionados

1. O Jogo

1. O Jogo Com uma grande quantidade de testes, concluímos que em mais de 92% dos casos as jogadas tendem a convergir a partir da altura 5. Podemos denominar este fenômeno de convergência de jogadas. Outro fe...

Leia mais