Inteligência Artificial aplicada ao jogo PACMAN - IC

Propaganda
Inteligência Artificial aplicada ao jogo PACMAN
Ellen Borges
Juliana Nader
Maíra Menegas
Universidade Federal de São Paulo
Bacharelado em Ciência e Tecnologia
São José dos Campos/SP
[email protected]
Universidade Federal de São Paulo
Bacharelado em Ciência e Tecnologia
São José dos Campos/SP
[email protected]
Universidade Federal de São Paulo
Bacharelado em Ciência e Tecnologia
São José dos Campos/SP
[email protected]
Abstract—The project implements the classical game Pacman
making use of Artificial Intelligence techniques. The main reference for this project was University of California’s (Berkeley)
Intro to Artificial Intelligence course, CS188. To make a comparison between some algorithms and define which one is better for
this type of game, four algorithms were selected: Breadth First
Search, Depth First Search, Uniform Cost Search and A Star.
Minimax algorithm was used to implement a multi agent search
algorithm and make pacman decide for himself. Two evaluation
functions were analized: a basic one from UC Berkeley’s course
and another created for this project. The one created was better
but some improvements should be done in order to grant pacman
more "intelligence".
Keywords—pacman, DFS, BFS, Uniform Cost, A*, A star,
Minimax.
I.
I NTRODUÇÃO
A área de Inteligência Artificial (IA) não só tenta entender,
mas também tenta construir entidades inteligentes. Ela engloba
uma variedade grande de subáreas, desde áreas gerais até áreas
específicas. IA é relevante para qualquer esfera da atividade
intelectual humana, ou seja, é um campo universal [4].
Um dos primeiros desafios de IA foi baseado em jogos.
Por volta de 1950, o xadrez foi estudado por Korad Zuse,
Claude Shannon, Norbert Wiener e por Alan Turing. Desde
então houve um progresso constante no padrão dos jogos, até o
ponto em que as máquinas ultrapassaram os seres humanos nos
jogos de damas e Othello, Xadrez e gamão (embora não todas
as vezes). Os jogos são atraentes para os pesquisadores de I.A
devido a sua natureza abstrata. Em geral, são complicados de
serem resolvidos (e.g. xadrez) e, por isso, geraram inúmeras
pesquisas e ideias interessantes em como fazer o melhor uso
possível do tempo [4].
Ambientes competitivos, em que as metas dos agentes estão
em conflito, dão origem a problemas de busca competitiva,
frequentemente conhecidos como jogos [4].
Fig. 1.
Exemplo do jogo tradicional de PACMAN
conjunto de slides e vídeos conferência com o objetivo de
ensinar os conceitos e aplicar as técnicas de IA ao jogo PACMAN, como por exemplo,a árvore de busca A*, Problemas de
Satisfação de Restrições, Minimax, Aprendizagem por reforço,
Inferência Bayesiana, entre outros. O curso disponibiliza aos
alunos uma interface na linguagem Python para auxiliar os
alunos na implementação e com isto obter um foco maior nos
algoritmos referentes à IA.
No presente trabalho, realizou-se uma comparação entre
os principais algoritmos de IA, para analisar qual seria o
melhor para o jogo Pacman, além de implementar o algoritmo
Minimax para dar mais "inteligência" ao personagem Pacman,
que joga por si só.
II.
MOTIVAÇÃO
Utilizar as técnicas de Inteligência Artificial torna-se de
maior interesse, por ser tratar de um jogo clássico, em que
não só o aprendizado é conquistado, mas também é possível
alcançar momentos de diversão.
III.
OBJETIVO
O jogo escolhido como objeto de estudo foi o PACMAN.
Trata-se de um jogo multiagentes, onde existem dois tipos
de personagens, sendo eles: os fantasmas e o come-come.
O come-come é controlado por um usuário e tem como
objetivo comer todas as bolinhas que estão situadas no cenário.
Quando terminar de comer as bolinhas, o usuário vence. Já
os fantasmas tentam derrotar o come-come alcançando sua
posição (figura 1) [1].
A. Algoritmos de Busca
A principal referência utilizada foi o curso introdutório
de Inteligência Artificial da Universidade da Califórnia de
Berkeley CS188 [2]. Trata-se de um curso composto por um
1) Depth Fisrt Search (DFS): DFS seleciona o nó não
expandido mais profundo na árvore de busca para expansão.
Não é um algorismo completo nem ótimo, mas possui pouco
O principal objetivo é aplicar técnicas de Inteligência
Artificial ao jogo PACMAN. Posteriormente realizar um estudo
comparativo entre as técnicas adotadas, avaliando o desempenho alcançado.
IV.
R EVISÃO B IBLIOGRÁFICA
requerimento de memória.Ele só precisa guardar um caminho
único entre a raíz e uma folha, juntamente com os irmãos não
expandidos restantes para cada nó no caminho[4].
2) Breadth First Search (BFS): BFS seleciona o nó mais
superficial que não foi expandido ainda na árvore de busca
para expansão. É um algorismo completo e ótimo quando o
custo de cada passo é igual, mas sua complexidade espacial o
faz impraticável na maioria dos casos[4].
Os algoritmos de busca em largura (bfs) e de busca
em profundidade (dfs) (Breadth First Search e Depth Fisrt
Search, respectivamente) são bastante semelhantes em código,
a principal diferença é que o primeiro utiliza uma lista como
estrutura de dados para armazenar os nós da árvore e o segundo
utiliza uma pilha. Essa diferença faz com que bfs procure os
nós do mesmo nível primeiro, enquanto a dfs expande o nó
atual mais profundo (primeiro de profundidade 1, depois o
primeiro de profundidade 2...) até encontrar um nó folha [4]
3) Uniform Cost Search (UCS): O algoritmo de busca
de custo uniforme (Uniform Cost Search ou ucs) pode ser
considerado o mesmo algoritmo de bfs se os passos para
cada nó fossem os mesmos. Porém esse algoritmo expande
o próximo nó com base no menor caminho existente entre
eles[4].
4) A Star (A*): O A* (A estrela) é um dos algoritmos
path-finding mais utilizados em jogos. É útil devido às suas
características, como por exemplo, pode-se alterar seu comportamento apenas modificando ou alterando heurísticas [3].A
heurística utilizada para o cálculo da distância foi a Manhattan.
B. Minimax
Para a parte da busca com Multi-agentes, utilizou-se o
algoritmo Minimax, visto que este tipo de jogo favorece a
utilização deste algoritmo. Jogos com dois jogadores (no caso
o pacman e os fantasmas, contados como um) podem ser
definidos como um tipo de problema de busca, onde um
jogador tenta obter o valor Máximo e o outro, o valor Mínimo,
para assim competirem entre si. Alguns componentes a serem
considerados:
• O estado inicial, que inclui a posição no jogo e identifica
o movimento do jogador;
• Uma função sucessora, que retorna uma lista de pares
(movimento, estado), indicando um movimento legal e o estado
resultante;
• Um teste terminal, que determina o fim do jogo (estado
terminal);
• Uma função utilidade, que identifica um valor numérico
para os estados terminais.
O estado inicial e os movimentos legais para cada lado
definem a árvore do jogo. O algoritmo Minimax utiliza uma
computação recursiva simples dos valores minimax de cada
estado sucessor. A recursão procede até as folhas e então, os
valores minimax são trazidos para cima quando a recursão
se desenrola. O algoritmo realiza uma exploração Depth First
completa da árvore. Este algoritmo se baseia no fato de que
cada adversário faz suas escolhas através de decisões ótimas
[4].
V.
M ETODOLOGIA E XPERIMENTAL
A. Materiais
Utilizou-se Pyhton como linguagem de programação.
Trata-se de uma linguagem de alto nível, que possui um modelo de desenvolvimento aberto e comunitário (OpenSource).
Foram utilizados alguns softwares que ajudaram na realização deste projeto: Microsoft Excel, para comparações e gráficos; Software Eclipse com pyDev, IDE para o desenvolvimento
dos algoritmos na linguagem python; Command Prompt do
Windows para testar os códigos.
O curso da UC Berkeley utilizado como referência para
este projeto, proporcionou um guia para a implementação dos
algoritmos selecionados, além de ter toda a base de códigos
do jogo tradicional de pacman semi-pronta, em que só foram
alterados alguns arquivos para a implementação dos códigos
de IA: search.py e multiAgents.py. O restante dos arquivos
foram retirados do site e não foram modificados.
O arquivo search.py contém os algoritmos de busca que
foram comparados: dfs, bfs, ucs e A*. O arquivo multiAgents.py contém o algoritmo de busca multi agentes utilizado
pelos personagems do jogo, o Minimax. Este usa uma função
de utilidade ou de avaliação para determinar qual o melhor
passo que o personagem deve seguir.
B. Métodos
Os algoritmos de busca foram implementados com base na
teoria do curso da UC Berkeley e do livro de Russel [4], além
do que foi aprendido em sala de aula.
Após a implementação dos algoritmos de busca, executouse cada algoritmo passando os parâmetros necessários de cada
um. Os dados obtidos (pontuação e nós expandidos) foram
salvos e na planilha do Excel, gerou-se as curvas para posterior
análise e comparação de desempenho dos algoritmos.
Após a implementação do algoritmo de busca multi
agentes, o Minimax, comparações entre as funções de avaliação do algoritmo foram realizadas para identificar diferenças
ou semelhanças entre elas, verificar qual a mais eficiente.
Testes também foram feitos rodando o jogo para cada tipo
de função e a análise dos dados foi coletada.
VI.
R ESULTADOS E D ISCUSSÃO
Os dados obtidos após a execução de cada algoritmo de
busca nos três diferentes tamanhos de labirintos, encontram-se
representados nas figuras 2 e 3.
A figura 2, representa a quantidade de nós expandidos por
cada algoritmo (DFS, BFS, UCS, A*)de acordo com os tipos
de labirintos: tiny (pequeno), medium (médio) e big (grande).
Para o tiny, a quantidade de nós expandidos foram os mesmos,
porém para o medium e big, observou-se que o algoritmo DFS,
obteve uma quantidade menor de nós expandidos.
Já a figura 3, refere-se ao score (pontuação), obtido por
cada algoritmo também de acordo com os três tipos de
labirintos. Para o labirinto big, não houve diferença entre todos
os algoritmos,muito provavelmente devido a sua configuração,
pois observou-se que este labirinto havia apenas um caminho
correto que levava o pacman ao destino final.
Fig. 2. Nós expandidos de cada algoritmo de acordo com o tipo de labirinto
Fig. 5.
Algortimo BFS para o labirinto medium maze.
Fig. 6.
Algortimo UCS para o labirinto medium maze.
Fig. 7.
Algortimo A* para o labirinto medium maze.
Porém para o tiny e o medium, apenas o algoritmo DFS,
obteve uma desvantagem em relação aos outros três, devido ao
fato dele preferir seguir o caminho mais longo para chegar na
bolinha (figura 4). Estes dois labirintos possuíam duas opções
de caminhos que chegavam a bolinha.
Fig. 3.
Score de cada algoritmo de acordo com o tipo de labirinto
para o pacman, diante dos resultados obtidos para este tipo
de labirinto. Para um resultado mais fidedigno, ressalta-se a
importância de gerar outros tipos de labirintos e realizar mais
testes.
Fig. 4.
Algoritmo DFS para o labirinto medium maze.
Os outros três algoritmos (BFS, UCS e A*) para o labirinto
medium optaram seguir o mesmo caminho (figuras 5, 6 e 7).
Pode-se observar que o algoritmo menos eficiente foi o
dfs. No entanto, ele foi o que menos expandiu nós para
alcançar o objetivo, ou seja, ocupou menos memória. Acabou
ocorrendo um trade off entre memória e eficiência. Os outros
três algoritmos obtiveram resultados semelhantes entre si,
impossibilitando a escolha de um algoritmo somente como o
melhor para o jogo. Isso quer dizer que qualquer um entre
os três leva a um resultado ótimo para ser implementado
Em relação ao algoritmo de busca multi agentes, Minimax,
percebeu-se que ele funciona para o jogo. No entanto, nota-se
que o personagem não é muito "inteligente", ocorrendo muitas
vezes a estagnação do personagem até que algum fantasma o
pressione para andar e, assim, voltar a se alimentar. Podese notar diferenças principalmente com o tipo de função de
avaliação utilizada. Comparou-se a função criada com a básica
já existente nos códigos obtidos, em que esta só analisava
a pontuação do jogo. A função criada foi mais eficiente,
causando maiores pontuações e menos jogos perdidos.
A questão da estagnação do personagem pacmam foi frequente nas duas funções analisadas, mas notou-se uma melhora
na performance (leia-se também agilidade do pacman e menos
tempo de execução de jogo), em que o personagem pacman
ficava menos parado ao adicionar uma "inteligência" a mais aos
fantasmas, acrescentando o parâmetro "-g DirectionalGhost"
ao rodar o programa. Isso acontece pois os fantasmas são
"agentes perturbadores" do algoritmo, e isso obriga o pacmam
a se mover e encontrar novos movimentos ao invés de ficar
estagnado, a salvo dos fantasmas. O tempo de jogo com
fantasmas inteligentes chega a ser menos do que a metade do
tempo de jogo quando os fantasmas são menos inteligentes,
porque o pacman fica muito tempo parado em algum pedaço
do labirinto (figura 8).
TABLE II.
P ORCENTAGEM DE VITÓRIA DE CADA FUNÇÃO E SUA
RESPECTIVA ORDEM DE RAPIDEZ .
Funções
Vitórias (%)
evaluationFunction
evaluationFunction com fantasmas
scoreEvaluationFunction com fantasmas
scoreEvaluationFunction
90
50
0
10
Ordem
de
rapidez
2
1
3
4
fantasmas mais inteligentes que pressionam mais o pacman e,
com isso, o pacman fica mais suscetível a perder também.
A porcentagem de vitórias para cada função diferente do
Minimax pode ser observada na tabela II (table II), mostrando
a eficiência de cada um. O algoritmo Minimax mostra-se
basntante eficiente com a função criada, acertando 90% das
vezes.
VII.
C ONCLUSÃO E T RABALHOS F UTUROS
Diante dos resultados obtidos, conclui-se que em relação
aos algoritmos de busca, os algoritmos bfs, A* ou UCS são os
os mais indicados para este tipo de jogo, o qual envolve como
ambiente, um labirinto. O que coincide com as referências
encontradas, o qual citam o A* como um algoritmo ótimo.
Fig. 8. Exemplo de estagnação do pacman em labirinto do tipo medium com
vitória.
A figura 8 mostra um exemplo em que o algoritmo Minimax estava sendo utilizado com a função de avaliação básica
do código (scoreEvatluationFunction), sem a perseguição inteligente dos fantasmas, durante um tempo de execução extremamente alto pois o personagem pacman ficava estagnado
no canto esquerdo, só alterando a posição quando um fantasma
fosse em sua direçao. Apesar deste problema, o pacman
conseguiu ter uma vitória neste caso e diminuiu a pontuação
para -509, porque ganhou no final. Lembrando que a cada
segundo que o pacman não come, a pontuação vai diminuindo.
O total negativo da pontuação na figura dá um exemplo de
como o tempo de execução foi longo neste caso.
TABLE I.
P ONTUAÇÕES OBTIDAS PARA CADA FUNÇÃO COM 10
REPETIÇÕES CADA .
Funções
evaluation
scoreEvaluation
evaluation
scoreEvaluation
Function
Function
Scores
Function
Function
com fantasmas
com fantasmas
1
1383
1470
409
376
2
1683
1599
105
56
3
1476
1603
384
-509
4
1640
83
1586
172
5
1403
1711
223
-291
6
478
576
115
56
7
1459
235
1648
-295
8
1672
366
248
257
9
1500
635
448
54
10
1143
1688
354
356
Média
1383,70
996,60
552,0
23,20
Obs: Pontuações em negrito representam partidas que obtiveram vitória.
A tabela I mostra as pontuações (scores) de cada algoritmo
em 10 execuções de cada. Nota-se que os algoritmos com
pontuações mais altas e mais rápidos (table II) são aqueles com
a função de avaliação criada. O mais rápido é o que contém
A função de avaliação é uma das partes mais importantes
do algoritmo Minimax, afetando diretamente na performance
do algoritmo e no tempo de execução do jogo. No entanto,
precisa ser melhorado ou acrescentado algum algoritmo de
aprendizagem. Isto evitaria a estagnação do personagem e faria
com que ele se movimentasse mais, a fim de terminar o jogo
com a mais alta pontuação possível, ao invés de ficar parado.
A função desenvolvida evita bastante este tipo de problema,
mas não o soluciona.
Para projetos futuros, a implementação da poda alfa-beta
seria interessante para melhorar a resposta do Pacman, assim, a
busca do melhor caminho em profundidades maiores não seria
inviável. Além disso, outros métodos de aprendizagem podem
ser implementados no jogo do Pacman, como a aprendizagem
por reforço.
AGRADECIMENTOS
Agradecimentos aos criadores do curso da UC Berkeley
pela criatividade de organizar um curso que chama a atenção
dos alunos e, principalmente, ensina IA de maneira divertida.
Além disso, ainda mantêm o conteúdo do curso disponível a
todos.
R EFERENCES
[1]
Appio, R.A.;Sistemas Multiagentes utilizando a linguagem AgentSpeak(L) para criar estratégias de armadilha e cooperação em um
jogo tipo PACMAN.
[Trabalho de conclusão de curso].Blumenau:
Universidade Regional de Blumenau, Curso de Ciência da Computação,
2014.
[2] DeNero, J.; Klein D.;Teaching Introductory Artificial Intelligence with
Pac-Man.
Computer Science Division. University of California Berkeley. 2010. Site da disciplina: http://ai.berkeley.edu/home.html
[3] Osório, F.; Pessin, G.;Ferreira, S.;Nonnenmacher, V.; Inteligência Artificial para Jogos: Agentes especiais com permissão para matar... e
raciocinar!. Universidade do Vale do Rios dos Sinos, Graduação em
Jogos Digitais,São Leopoldo, RS.
[4]
Russell, S. and Norvig, P.;Inteligência Artificial, 2 ed. Campus, tradução
da 2a edição , 2004.
Download