INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

40
FATEC - FACULDADE DE TECNOLOGIA DE OURINHOS Análise de Sistemas e Tecnologias da Informação Habilitação: Desenvolvimento de Sistemas INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO Juliano do Amaral Chaves Ourinhos – SP 2011

description

INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO UTILIZANDO A BUSCA A*

Transcript of INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

Page 1: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC - FACULDADE DE TECNOLOGIA DE OURINHOS

Análise de Sistemas e Tecnologias da Informação

Habilitação: Desenvolvimento de Sistemas

INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE

RACIOCÍNIO

Juliano do Amaral Chaves

Ourinhos – SP

2011

Page 2: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

Juliano do Amaral Chaves

INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE

RACIOCÍNIO

Monografia apresentada à Faculdade de Tecnologia de

Ourinhos, em cumprimento as exigências do curso de

Análise de Sistemas e Tecnologia da Informação, para

obtenção do titulo de Analista de Sistemas, sob

orientação do Prof. Sidney Carlos Ferrari.

Ourinhos – SP

2011

Page 3: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

Ficha Catalográfica

CHAVES, Juliano do Amaral inteligência artificial aplicada em jogos de raciocínio / Juliano do Amaral Chaves. Ourinhos, Faculdade de tecnologia de Ourinhos, 2011 lX, p. 40, il Monografia – Faculdade de Tecnologia de Ourinhos, 2011 1. Desenvolvendo o Jogo 8-Puzzle 2. A Inteligência Artificial 3.

Busca em Estados 4. Heurísticas Utilizadas em Busca I. CHAVES, Juliano do Amaral II. Titulo.

Page 4: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE

RACIOCÍNIO

Juliano do Amaral Chaves

Essa monografia foi julgada e aprovada para obtenção do Título de Bacharel em Análise de

Sistemas e Tecnologia da Informação, habilitação em Desenvolvimento de Sistemas, da

Faculdade de Tecnologia de Ourinhos.

Ourinhos, de dezembro de 2011

Prof. Dr. Lia Cupertino Duarte Albino Diretor da Fatec – Ourinhos

Banca examinadora

Prof. MS.

Prof. MS.

Prof. MS. Sidney Carlos Ferrari

Page 5: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

“O saber é a dádiva mais preciosa do universo”

Page 6: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

A minha família e em especial a minha mãe, que me deu a

oportunidade de conhecer a vida, que ela esteja em um

lugar lindo. A todos os professores, que foram

responsáveis pela minha formação.

Page 7: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

Agradecimento

A minha mãe, Claudelina, por ter tido orgulho das minhas conquistas e principalmente pelo

carinho que proporcionou a mim, durante sua vida, não mais poderei retribuir, mas serei

eternamente grato.

A minha esposa, Tamires, por fazer parte da minha vida e ter me dado duas princesas Julia e

Tamara, obrigado por estar presente e fazer minha vida valer apena.

A meu orientador, prof. Sidney Carlos Ferrari por me motivar e me ajudar neste trabalho,

que cheguei a acreditar que não poderia ser concluído, obrigado por ter apoiado a ideia do

trabalho.

A meus amigos, Fabíola Damasceno e Anderson Saturnino que me ajudaram quando tive

dificuldades, obrigado por terem se importado e dedicado tempo em me ajudar.

A todos, que fazem parte da minha vida e contribuem para que os dias se tornem cada vez

melhores.

Page 8: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

“Isso é essencialmente uma tentativa de ‘engenharia

reversa’ dos mecanismos biológicos.”

WHITBY BLAY

Page 9: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

Resumo

A tecnologia é surpreendente e fascina todo mundo, mas para quem esta na área, ela tem algo mais, ela desperta a curiosidade de saber o que tem atrás da cortina, e nos motiva a querer entender como tudo é feito. Hoje em dia praticamente tudo tem algum tipo de tecnologia e na área do entretenimento tudo isso é somado com a diversão, é seguindo esta ideia que este trabalho se propôs a desenvolver um jogo de quebra cabeça, que permite o jogador interagir com um tabuleiro para tentar organizar as peças fora do lugar, mas o jogador não esta sozinho nesta tarefa, pois o jogo conta com uma inteligência artificial capaz de dar dica de qual peça é a melhor escolha para mover ou solucionar todo o jogo. O trabalho apresentará os conceitos e algoritmos necessários para desenvolver o jogo e a inteligência artificial.

Palavras – chaves: 8-Puzzle, Busca em estado, Heurística, Inteligência Artificial.

Page 10: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

Abstract

The technology is amazing and fascinates everyone, but for anyone in this area, it has something more, it awakens the curiosity to know what's behind the curtain, and motivates us to want to understand how everything is done. Nowadays almost everything has some kind of technology and entertainment area all this is added to the fun, and following this idea that this study proposes to develop a puzzle game that allows players to interact with a board to try to arrange the pieces out of place, but the player is not alone in this task, because the game has an artificial intelligence able to tip which piece is the best choice to move or solve the entire game. The paper presents the concepts and algorithms necessary to develop the game and artificial intelligence.

Words - keys: 8-Puzzle, Search in a state, heuristics, Artificial Intelligence.

Page 11: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

LISTA DE FIGURAS

Figura 1 - Fazendeiro tentado resolver o jogo .............................................................. 20

Figura 2 – Possibilidades de desafios ........................................................................... 21

Figura 3 – Estado do tabuleiro antes e depois do movimento ...................................... 22

Figura 4 – Estrutura da Classe TPeca ........................................................................... 23

Figura 5 – Algoritmo para criar as peça do tabuleiro ................................................... 23

Figura 6 – Estruturas de dados para o movimento ....................................................... 24

Figura 7 – Função para o evento do movimento ao clicar na peça ............................... 24

Figura 8 – Algoritmo do movimento da peça em uma direção .................................... 25

Figura 9 – Função encontra peça pela sua origem ........................................................ 26

Figura 10 – Função para retornar uma peça pela localização do slot ........................... 26

Figura 11 – Estrutura da classe do formulário do jogo ................................................. 27

Figura 12 – Busca em espaço de estado em um grafo .................................................. 31

Figura 13 – Dois estados do Jogo 8-Puzzle .................................................................. 32

Figura 14 – Busca em um estado do jogo 8-Puzzle ...................................................... 33

Figura 15 – Estrutura de um nó .................................................................................... 34

Figura 16 – Código em Object Pascal da estrutura do nó ............................................. 34

Figura 17 – Algoritmo de busca em amplitude ............................................................ 35

Figura 18 – Código em Object Pascal da função Busca ............................................... 35

Figura 19 – Cálculos de heurísticas de um estado ........................................................ 37

Page 12: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

Sumário

1 – INTRODUÇÃO ...................................................................................................... 13

2 – REVISÃO DA LITERATURA .............................................................................. 15

3 – METODOLOGIA ................................................................................................... 18

4 – A HISTÓRIA DO JOGO 15 PUZZLE ................................................................... 20

5 – DESENVOLVENDO O JOGO 8-PUZZLE ........................................................... 22

6 – A INTELIGÊNCIA ARTIFICIAL ......................................................................... 28

7 – BUSCA EM ESTADO ........................................................................................... 30

8 – HEURÍSTICAS UTILIZADAS EM BUSCA ........................................................ 37

9 – CONCLUSÃO ........................................................................................................ 39

REFERENCIAS ........................................................................................................... 40

Page 13: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 13

1 – INTRODUÇÃO

Em um mundo cada vez mais evoluído tecnologicamente, é difícil não perceber que

aos poucos as máquinas estão ficando cada vez mais inteligentes e também mais presentes em

nossas vidas, chega ser assustador pensar que um dia possa existir uma máquina capaz de

pensar e executar tarefas que um ser humano não consiga. Por outro lado, também desperta o

interesse em desvendar o que há por traz desta tecnologia que a cada dia domina um pouco

mais as nossas vidas e que também traz aprimoramentos de trabalhos antes dificultosos e

demorados, agora mais fáceis e rápidos. Essa tecnologia não para por aí, ela é muito ampla e

também está presente no entretenimento digital. Há algum tempo, os jogos eletrônicos

deixaram de ser apenas passa tempo e passou a ser introdução de cultura, criatividade, lazer e

conhecimento para os jogadores mais dedicados.

O objetivo geral deste trabalho é desenvolver um jogo de raciocínio conhecido como

8-Puzzle, apresentando assim alguns conceitos simples de implementação de jogo e também

explorar uma pequena área da inteligência artificial (IA) muito utilizada em vários tipos de

jogos. Para atingir o objetivo geral, foram necessários alguns conhecimentos específicos que

deverão ser explorados para obter êxito nas implementações do jogo e da inteligência

artificial. Abaixo segue os conhecimentos básicos de programação necessários.

� Conhecer programação orientada a objeto;

� Conhecer linguagem de programação Object Pascal com Delphi 2010;

� Manipular vetor e matriz dinâmico;

� Saber algoritmos de ordenação;

� Manipular ponteiros, filas e pilhas;

� Manipular imagens em tempo de execução;

� Adquirir conceito de busca em espaço, busca em amplitude;

� Conhecer heurística de busca.

Este projeto poderá servir como base para desenvolvedores iniciantes de jogos digitais

e também para explorar o conhecimento em buscas com heurísticas introduzidas em

inteligência artificial.

Este trabalho está estruturado da seguinte forma, este capítulo apresenta a introdução e

o objetivo; o segundo capítulo apresenta a revisão da literatura onde são explorados os

Page 14: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 14

trabalhos semelhantes e diferenças apresentadas; o terceiro capítulo mostra os métodos e

ferramentas utilizados para o desenvolvimento do trabalho; o quarto capítulo apresenta a

história do jogo de quebra-cabeça; o quinto capítulo ajuda a desenvolver o jogo 8-Puzzle, o

sexto capítulo explora o contexto da inteligência artificial, o sétimo capítulo demonstra a

busca em estado, o oitavo capítulo exibe heurísticas utilizadas na busca, o nono capítulo e, por

fim, a conclusão.

Page 15: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 15

2 – REVISÃO DA LITERATURA

Para o desenvolvimento do trabalho foram feitas pesquisas de diversos trabalhos

semelhantes, apresentando várias diferenças significativas no jogo desenvolvido, nos

trabalhos pesquisados o jogo 8-Puzzle foi o único com implementação de resolução utilizando

inteligência artificial, pois no trabalho desenvolvido com o jogo 15-puzzle foi possível

perceber que a forma de resolução não utilizava algoritmo de inteligência artificial, mas sim

um algoritmo de ordenação que respeitava a regra do movimento do jogo e assim encontrando

a solução sem a certeza de que é uma solução ótima, ou seja, com a quantidade mínima

possível de movimentos. Entres as diferenças nos algoritmos, implementando a inteligência

artificial não houve muita diferença dos conceitos estudados, tendo apenas diferenças no

desenvolvimento do algoritmo, mas seguindo os conceitos encontrados nas pesquisas

bibliográficas.

Luger (2004) detalha estes algoritmos com simplicidade e eficiência, algoritmos

essenciais para que se possa programar rotinas de busca em espaço usando heurísticas de

otimização. Estes mesmos conceitos também foram explorados por Russel e Norvig (2004),

que explicaram e demonstraram a utilização das funções heurísticas na busca. É possível ter

uma visão mais ampla de onde se pode aplicar busca heurísticas nos exemplos de Costa e

Simões (2004), onde são explorados casos necessários para obter o menor custo

computacional e o melhor resultado.

Nas pesquisas documentais foram encontrados trabalhos semelhantes como o de

Permadi (2010), que desenvolve o jogo 8-Puzzle com uma interface simples com a

implementação de busca heurística. Em seu trabalho não foi demostrado a implementação,

mas sim o jogo e seu funcionamento, porém ele cita a utilização de busca heurística e que

também é possível perceber que a implementação foi bem sucedida, pelo tempo e quantidade

de movimentos na resolução de um determinado problema com custo computacional alto.

Entre os trabalhos documentais, teve destaque com grande importância para o

desenvolvimento e aplicação de inteligência artificial, o trabalho de Hübner (2010), um

professor de Universidade Federal de Santa Catarina. Seu trabalho foi além da implementação

de algoritmos de inteligência artificial utilizando busca em estado, Hübner desenvolveu um

Page 16: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 16

framework completo para a utilização de busca em estado utilizando a linguagem de

programação Java, sendo aplicável em vários tipos de problemas e jogos de raciocínio. Para a

demonstração prática do framework, ele desenvolveu uma interface com vários tipos e opções

de problemas que podem ser solucionados utilizando o framework, inclusive o jogo 8-Puzzle.

Seu trabalho tendo a inteligência artificial como foco, explorou pouco a interface do jogo 8-

Puzzle, utilizando apenas textos formatados em forma de uma matriz para demostrar cada

passo da solução. Mesmo utilizando o framework de Hübner, não foi possível obter solução

ótima para o jogo original com quinze peças o 15-puzzle, pois a quantidade de peças é um

fator muito importante para a aplicação da busca em estado, portanto a quantidade de busca

usada pelo algoritmo está relacionada com as possíveis variações de desorganização das

peças. O valor de variação de estados distintos do jogo é um cálculo fatorial da quantidade de

peças mais um, porém somente a metade destes estados tem solução, considerando a regra do

jogo que permite que uma peça ocupe apenas o espaço vazio, assim para termos o valor de

estados solucionáveis, temos que dividir o resultado do cálculo por dois. Mesmo assim um

jogo de quinze peças pode não chegar a uma solução por estourar a capacidade de memória,

então para solucionar esse problema da memória é necessário aplicar uma heurística capaz de

minimizar o custo computacional e chegar à solução do estado problema.

Este trabalho propõe um diferencial significativo de todos os vistos nas pesquisas

documentais e que foram implementados, deve-se o fato da possibilidade de alterar a

quantidade de peças, tendo as opções de alternar entre oito e quinze peças, podendo assim,

comparar o desempenho da busca em dois níveis de problemas, além de apresentar conceitos

de desenvolvimento de jogos. O trabalho também difere na linguagem utilizada para o

desenvolvimento, pois a maioria dos trabalhos pesquisados foi desenvolvida utilizando a

linguagem de programação Java, enquanto que este trabalho utiliza a linguagem object pascal.

A pesquisa documental complementou na prática a pesquisa bibliográfica, pois muitos

dos conceitos adquiridos com bibliografias seriam complicados para implementar sem ajuda,

entretanto, as bibliografias foram essenciais para ter um compreendimento mais amplo de

inteligência artificial, e também ajudaram a otimizar os algoritmos implementados

possibilitando compreender com clareza o conceito do estudo em questão. “Inteligência

artificial (IA) é o estudo do comportamento inteligente (em homens, animais e máquinas) e a

tentativa de encontrar formas pelas quais esse comportamento possa ser transformado em

qualquer tipo de artefato por meio da engenharia”. (WHITBY, 2004).

Page 17: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 17

Luger(2004, p. 95) explica que “Para ser bem sucedido no projeto e na implementação

de algoritmos de busca, um programador deve ser capaz de analisar e predizer o seu

comportamento.”. Entendendo assim, que para fazer uma busca, você primeiro deve definir o

comportamento que ela deve ter e que algumas questões deve ser levantadas: como se há uma

garantia do sistema encontrar uma solução? Se o sistema sempre chegará ao fim ou se pode

ficar preso em um laço infinito? Quando se encontra uma solução, é garantido que seja ótima?

Qual a complexidade do processo de busca em termos de consumo de tempo e memória?

Estas questões foram levantadas por Luger (2004) e determina o sucesso de uma busca em

espaço de estados, já que se ignoradas podem fazer com que o sistema não chegue a seu

objetivo ou que leve muito tempo para resolver o problema.

Para quem não acredita no potencial da IA e acredita que tudo que as máquinas fazem

é fruto do que foram programadas, não estão tão errados, porém se analisar melhor perceberá

que alguns problemas são praticamente impossíveis de ser resolvido com a melhor solução

por um ser humano, não pela incapacidade de resolver e sim pela limitação de pensar em

todas as variáveis do problema e assim chegar à melhor solução, fazendo assim com que se

resolva o problema com as variáveis de menos complexidade e que nem sempre é a melhor

solução. Então, esta tarefa é passada para uma máquina que não tem cérebro, mas que poderá

analisar milhares de estados do problema em segundos, chegando na melhor solução antes

mesmo que uma pessoa tivesse começado a pensar na forma de como iria resolver. Este fato é

encontrado em Costa e Simões (2004).

Existe a crença generalizada de que os computadores só fazem aquilo para que foram programados. No entanto, eles são chamados cada vez mais a resolver problemas complexos, para os quais se torna difícil antecipar tudo o que pode acontecer, pelo que os computadores necessitam estar preparados para estas situações. (COSTA E SIMÕES, 2004, p. 37).

Portanto, o mais coerente não é pensar na inteligência artificial como uma concorrente

da inteligência do homem, mas sim como uma extensão da capacidade humana em processar

dados em grandes quantidades, tornando possível a execução de tarefas que tanto o homem,

quanto a máquina separados, não são capazes de executar, mas juntos, interagem de forma a

superar grandes dificuldades em todas as áreas exploradas pelo homem.

Page 18: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 18

3 – METODOLOGIA

Para o desenvolvimento do projeto, foram feitas pesquisas bibliográficas que

permitiram adquirir conhecimentos essenciais e importantes para o entendimento das busca

em estado, aplicadas ao jogo 8-puzzle, a busca em estado é um recurso de inteligência

artificial que possibilita que um problema seja solucionando com uma solução ótima, testando

vários estados do problema até que se chegue à solução ou retorne falha se a solução não

existir. Vários algoritmos de busca puderam ser analisados de uma forma simples com

pequenas variações entre os autores, as buscas foram exploradas e exemplificadas, o que

facilitou o desenvolvimento do projeto. É claro que para um amplo conhecimento de I.A.

exigido pelo projeto, foi necessário que se fizesse várias releituras variando entre os autores, a

fim de compreender todas as dificuldades expostas na aplicação da teoria proposta, portanto a

aprendizagem foi gradativa e às vezes retroativa, chegando a alguns momentos desconsiderar

o conteúdo apreendido para possibilitar que novas pesquisas pudessem resolver e explicar

aplicações que não atingiam o objetivo por falta de conhecimento. Entre as pesquisas

bibliográficas, destacaram os autores Luger (2004) e Russel e Norvig (2004), expondo os

conceitos de inteligência artificial fundamentais para o sucesso deste projeto, Costa(2004)

também teve participação com demonstrações de algoritmos de busca. As pesquisas foram

indispensáveis desde o inicio do projeto.

Para a aplicação dos conceitos de inteligência artificial junto com o jogo 8-Puzzle foi

utilizado linguagem de programação Object Pascal e que para solucionar o jogo foram

implementados as busca em estado em amplitude (largura) e a busca A Estrela (A*), sendo a

última usada como solução definitiva para o jogo. Para a escolha da busca foi levado em

consideração a melhor solução com o menor custo computacional. E assim foi escolhida a

busca A* que apresenta estas características, sendo utilizada na maioria dos jogos atuais que

precisam movimentar a personagem de um ponto para outro, respeitando os obstáculos do

percurso, sendo assim perfeita para o jogo 8-Puzzle. Para a implementação das heurísticas na

busca A*, foi utilizado um algoritmo de fila ordenada usando como parâmetro de ordenação o

custo do problema, para encontrar o custo do problema foram utilizadas as heurísticas,

quadrados fora do lugar e distância de Manhattan. A implementação da busca em amplitude,

foi para efeito de comparação com a Busca A*. Também foi feito uma variação da busca A*,

utilizando somente a heurística distância de Manhattan que diminuiu em muito o custo

Page 19: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 19

computacional, mas encontrando uma solução não ótima, por ter um custo computacional

baixo, foi possível utilizá-la para solucionar problemas do jogo com quinze peças. Na

implementação das buscas foram utilizado os recursos de ponteiros, pilhas e filas que foram o

alicerce dos algoritmos de busca, pois sem estes recursos além de ter um trabalho de

codificação muito maior, possivelmente perderia desempenho de processamento. Para o

desenvolvimento de alguns algoritmos foram utilizadas pesquisas documentais, que auxiliram

o aperfeiçoamento da implementação do projeto.

Page 20: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 20

4 – A HISTÓRIA DO JOGO 15 PUZZLE

Loyd (1914) compilou centenas de colunas antes publicadas em vários jornais e

revistas de que era colaborador. Em uma destas colunas, ele conta a história de um quebra-

cabeça mais popular, o 15-Puzzle, jogo que perturbou muitos solucionadores que se

arriscavam em tentar resolvê-lo.

Segundo Ximenes (2010), ele conta que “O fifteen puzzle entrou para a História como

uma das mais diabólicas invenções de Loyd.”. A figura 1 mostra a dificuldade que o

solucionador tinha para resolver o problema proposto por Loyd (1914). O problema proposto

tinha uma recompensa de mil dólares para a primeira pessoa que o solucionasse, entretanto

nunca foi pago, pois o problema não tinha solução. O fato é que apenas a metade das

combinações de peças possíveis tem solução, só tem solução nos casos em que para

desorganizar o tabuleiro, utilize a regra do movimento da peça ser deslizada para a casa vazia,

caso uma peça seja troca de lugar com outra sem respeitar a regra do movimento, o jogo

ficará sem solução.

Este era o grande segredo de Loyd (1914) e que deixava muita gente perturbada

tentando solucionar o problema.

Um fazendeiro olhava para o quadro com o jogo, mostrando raiva na mão direita fechada e desespero no gesto de esfregar os cabelos com a mão esquerda. O cavalo e o arado, deixados de lado, indicavam o grau de concentração e envolvimento que o jogo era capaz de despertar naqueles que ousassem buscar a sua solução. (XIMENES, 2010).

Figura 1 - Fazendeiro tentado resolver o jogo Fonte: XIMENES, 2010

Page 21: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 21

Loyd (1914) conta que as histórias absurdas são contadas e destaca a característica

misteriosa do jogo que ninguém conseguia lembrar-se da seqüência de movimentos realizados

que se chega à solução do problema.

Os habitantes mais velhos da Terra dos Quebra-Cabeças lembrarão como, no início da década de 70 (do século XIX), enlouqueci o mundo todo por causa de uma pequena caixa de blocos móveis que se tornou conhecida como o 'Quebra-Cabeças 14-15'. Os quinze blocos eram dispostos em ordem regular dentro da caixa quadrada, mas com os números 14 e 15 invertidos, assim como aparece na ilustração acima. O jogo consistia em mover os blocos, um de cada vez, de modo a trazê-los de volta à posição inicial em todos os aspectos, exceto que o erro nos números 14 e 15 deveria ser corrigido. (LOYD 1914, p. 235)

Ximenes (2010) explica que “embora Loyd considere as histórias ludicrous (absurdas,

lúdicas, ridículas), ele as conta detalhadamente para dar força ao folclore em torno do fifteen

puzzle, demonstrando a sua inclinação para a autopropaganda.”.

Ximenes (2010) cita que ainda foram propostas por Loyd (1914) outras possibilidades

de desafios aos jogadores. Sendo que uma delas consistia em deixar o espaço vazio no canto

superior esquerdo ao invés do original no canto inferior direito, outra possibilidade era virar o

tabuleiro para o lado direito ou esquerdo deixando os números deitados e resolvê-lo como se

estivessem na posição original, essas possibilidades podem ser analisadas na figura 2 e ainda

um outro desafio que consistia em distribuir os números para que formassem, na soma, um

total de 30, em dez direções; as quatro horizontais, as quatro verticais e as duas diagonais.

Figura 2 – Possibilidades de desafios Fonte: XIMENES, 2010

Page 22: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 22

5 – DESENVOLVENDO O JOGO 8-PUZZLE

Como já foi visto na metodologia, foi utilizada a linguagem de programação Object

Pascal, junto com o ambiente de desenvolvimento integrado (IDE) do Delphi para o

desenvolvimento do jogo. O desenvolvimento do jogo inicializa com a definição dos

objetivos a serem atingidos e com a ideia de como deverá ser a interface gráfica, este trabalho

não irá aprofundar o desenvolvimento da parte gráfica e sim a mecânica do jogo e por isso os

códigos apresentados terão apenas as propriedades necessárias para explicar os conceitos

básicos da criação do jogo, no entanto é possível ver a implementação da parte gráfica no

código fonte do jogo no disco em anexo.

Como ponto de partida do jogo devemos identificar a sua estrutura principal, que se

trata de um jogo com oito peças e um espaço vazio dentro de uma caixa, as peças próximas ao

espaço vazio podem ser movidas para o espaço vazio deixando um espaço vazio no seu local

de origem, as peças só podem ser movidas no sentido horizontal e vertical.

Um estado problema do jogo é qualquer estado diferente do estado solução, neste

trabalho o estado solução é uma sequencia numérica ordenada crescentemente dentro da

matriz inicializando pelo número um. Para a criação das peças foi construída uma classe como

é mostrada na figura 4. Esta classe será utilizada para criar todas as peças do jogo. Foi

utilizada como ancestral a classe TImage, que contem recursos básicos de manipulação de

imagem para facilitar o desenvolvimento. Para o controle do movimento da peça foram

criadas as propriedades origem, slot, row e col. A propriedade origem será utilizada para

Figura 3 – Estado do tabuleiro antes e depois do movimento Fonte: AUTOR

Page 23: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 23

identificar o local original das peças, assim será possível calcular as funções heurísticas na

implementação da IA, a propriedade Slot é responsável para identificar a localização da peça,

ou seja, em qual posição a peça está localizada. Será útil para saber se a peça está em seu local

de origem. As propriedades row e col são necessárias para delimitar o movimento da peça

para que não se mova para um sentido não permitido.

Com a classe da peça já escrita, poderá criar o tabuleiro com todas as peças do jogo.

Na figura 5 é possível visualizar o algoritmo completo da criação do tabuleiro, no entanto

algumas funções utilizadas neste algoritmo serão detalhadas mais a frente.

Figura 4 – Estrutura da Classe TPeca

Figura 5 – Algoritmo para criar as peça do tabuleiro

Fonte: AUTOR

Fonte: AUTOR

Page 24: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 24

Através dos dois laços de repetição, foi possível criar uma matriz com três colunas e

três linhas totalizando nove peças. Para cada peça foi atribuído uma função no evento

OnClick, esta função é responsável por movimentar a peça ao ser clicada, não sendo atribuída

na última peça criada, pois esta recebe a função que oculta a peça fazendo com que o

tabuleiro fique com um espaço vazio permitindo assim que as peças adjacentes possam ser

movidas. Porém, antes da implementação da função do movimento é necessário escrever duas

estruturas que serão utilizadas para facilitar a implementação do movimento.

Com as estruturas da figura acima, será mais fácil implementar o movimento.

Figura 6 – Estruturas de dados para o movimento

Figura 7 – Função para o evento do movimento ao clicar na peça

Fonte: AUTOR

Fonte: AUTOR

Page 25: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 25

Depois de definido se a peça pode ser movida e qual a direção do movimento, é

chamado função Move, que recebe como parâmetro a peça e a direção do movimento, pois é

essa função que realmente irá fazer o movimento. Nesta função é feita a troca de valores entre

a peça movida e a peça oculta que representa o slot vazio e também passa valores para as

propriedades da variável empty que permite ao algoritmo do movimento identificar quais

peças podem ser movidas através da referencia da localização do espaço vazio.

Para alterar valores da peça oculta que representa o espaço vazio, é necessário utilizar

uma função que recebe como parâmetro o número de origem da peça, assim a função encontra

a peça pela sua origem e possibilita fazer alterações em suas propriedades, podendo então

fazer com que os algoritmos de movimento sejam íntegros quanto à direção do movimento

Figura 8 – Algoritmo do movimento da peça em uma direção

Fonte: AUTOR

Page 26: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 26

uma vez que seja possível localizar a peça oculta e saber se a peça clicada pode ser movida

para o local em que esta a peça oculta.

Além da função que encontra uma peça pela sua origem também será necessário uma

função que encontre a peça pela slot em que está localizada, essa função será utilizada quando

for necessário mover a peça informando apenas sua localização sem precisar clicar sobre ela.

Sua estrutura é semelhante a uma função anterior com diferencial na propriedade utilizada na

condição do retorno.

Figura 9 – Função encontra peça pela sua origem

Figura 10 – Função para retornar uma peça pela localização do slot

Fonte: AUTOR

Fonte: AUTOR

Page 27: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 27

Com os algoritmos mostrados é possível criarmos o jogo 8-Puzzle possibilitando

movimentar a peça clicando sobre ela. Abaixo segue a figura com as estrutura da classe do

formulário do jogo. Essa estrutura é apenas para a criação do jogo, sendo que após a

implementação da inteligência artificial a estrutura irá sofrer alterações, no entanto estas

alterações serão apresentadas no andamento do trabalho.

Nestes algoritmos não foram aprofundados a manipulação de recursos gráficos, porém

é possível encontrar no disco em anexo, o código fonte do projeto que implementa alguns

recursos que melhora o visual do jogo.

Figura 11 – Estrutura da classe do formulário do jogo Fonte: AUTOR

Page 28: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 28

6 – A INTELIGÊNCIA ARTIFICIAL

A inteligência é uma das razões que distingue o homem do animal, mas o que

aconteceria se uma maquina também fosse inteligente? Ela se tornaria homem? O homem se

tornaria animal? Ou as maquinas dominariam o mundo? Estas são algumas das ideias que

Whitby (2004) apresenta como argumento de temor de algumas pessoas quando ouvem falar

em inteligência artificial (IA). Ele cita que alguns mitos sobre IA não tem a veracidade como

fonte do conhecimento, contradizendo os mitos, o avanço dos estudos na área da inteligência

artificial, deixa mais claro que o rumo desta tecnologia, vai além da ficção introduzida nas

mentes das pessoas, por meio das mídias de entretenimento. Já utilizada em varias áreas

profissionais como instrumento de precisão, solução rápida e eficácia, a inteligência artificial

faz parte do dia-a-dia de muitas pessoas.

Considerada uma ciência recente por Stuart e Norvig (2004), ele conta que a

inteligência artificial surgiu logo após a segunda guerra mundial e que o próprio nome foi

criado em 1956, despertando interesse por vários cientistas de outras áreas, argumentando que

todas as boas ideias já foram desenvolvidas por Galileu, Newton, Einstein e outros cientistas

que participaram da historia da física e matemática, no entanto a IA ainda teria espaços para o

surgimento de vários Einsteins.

Denominamos nossa espécie Homo sapiens – Homem sábio – porque nossas capacidades mentais são muito importantes para nós. Durante milhares de anos, procuramos entender como pensamos; isto é, como um mero punhado de matéria pode perceber, compreender, prever e manipular o mundo muito maior que ela própria. O campo da inteligência artificial, ou IA, vai ainda mais além: ele tenta não apenas compreender, mas também construir entidades inteligentes. (STUART E NORVIG, 2004)

Stuart e Norvig (2004), explicam que IA abrange vários subcampos, partindo de áreas

de uso geral como aprendizado e percepção, até tarefas mais específicas como jogos de

xadrez, demonstrações de teoremas matemáticos, criação de poesia e diagnóstico de doenças.

E assim automatizando tarefas intelectuais, atuando em um campo universal relevante para

qualquer atividade intelectual humana.

Page 29: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 29

Contudo não é coerente pensar na IA, como sendo uma solução que resolverá todos os

problemas, pois seu próprio desenvolvimento tende a superar grandes desafios científicos e

críticas de pessoas fora da área, que interpretam a IA como sendo mal direcionada ou

impossível. Whitby (2004) descreve essas dificuldades e afirma que não afetou o progresso e

tão pouco o entusiasmo fora perdido. Ele também faz lembrar que os requerimentos para

pesquisas de IA, não necessitam de equipamentos absurdamente caros ou restrições de local,

sendo a principal qualificação necessária, a capacidade de pensar criativamente e ter

persistência nos problemas com dificuldade mais elevada.

Com a evolução da tecnologia novas áreas de problemas surgem para a IA, no entanto

há também uma grande quantidade de técnicas empregadas, que possibilita que a IA contribua

para que a solução possa ser satisfatória. Este trabalho não tem como objetivo detalhar todas

as teorias fundamentais de IA e sim usar uma de suas áreas para solucionar problemas comuns

em jogos que envolvam o raciocínio para jogar.

[...] como a busca guiada pela heurística fornece uma boa base para certos tipos de problemas, o que levou a programas de jogo de classe mundial (WHITBY, 2004, p. 83).

Este trabalho iniciou com o desenvolvimento do jogo, tornando-o funcional para ser

jogado por uma pessoa, após o desenvolvimento do jogo, chega-se a parte da aplicação da IA

para solucionar o jogo quando não estiver em seu estado de solução. A primeira interação

com a IA neste momento é identificar qual área e técnica deverá ser utilizada para obter

sucesso na aplicação. O não conhecimento das áreas de IA pode dificultar a estratégia a ser

utilizada, e exigirá pesquisas até que seja identificada qual área da IA que irá permitir o início

da aplicação.

Para que o jogo 8-Puzzle proposto por este trabalho tenha a capacidade de chegar a

solução, serão utilizadas as técnicas de buscas exploradas por Luger (2004) e também por

Russel e Norvig (2004) que utilizaram exemplos da aplicação da técnica no jogo base deste

trabalho.

Page 30: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 30

7 – BUSCA EM ESTADO

Como visto no capitulo anterior, a área da IA com potencial para resolver os

problemas do jogo 8-Puzzle, é denominado de busca em espaço de estado. Para entender o

que são buscas em espaço de estados, é importante compreender como o ser humano age com

determinados problemas.

[...] problemas são resolvidos realizando busca entre escolhas alternativas, é apoiada por uma visão de senso comum da resolução de problemas por seres humanos. Os seres humanos geralmente consideram varias estratégias alternativas sobre o modo de resolver um problema. Um jogador de xadrez considera geralmente varias jogadas alternativas, selecionando a melhor de acordo com critérios como as possíveis respostas do adversário ou o grau com que varias jogadas correspondem a uma certa estratégia global do jogo. (NEWELL E SIMON apud LUGER, 2004, p. 60)

Por meio da citação de Luger (2004), é possível entender como o ser humano resolve

um determinado problema, analisando varias alternativas e escolhendo a melhor de acordo

com algum critério, pode considerar-se que a analise de varias alternativas compreende-se

como a busca pela melhor escolha, utilizando um critério de comparação. Luger da um

exemplo de como a busca é usada para resolver um problema mais complicado, utilizando no

exemplo uma pane mecânica em um automóvel. Ele afirma que embora este problema não

pareça ser adequado para utilizar busca em espaço de estado, como o jogo da velha ou o jogo

de xadrez, é um problema que se enquadra bem nesta estratégia.

Um grafo é um conjunto de nós e arcos que se conectam. Um grafo rotulado tem um ou mais descritores (rótulos) atribuídos a cada nó, que distingue aquele nó de qualquer outro nó do grafo. Num grafo de espaço de estados, estes descritores identificam estados num processo de solução de problema. (LUGER, 2004, p. 98)

Usando como comparação entre o problema do jogo e a pane mecânica, Luger explica

que como no jogo-da-velha ou o jogo de xadrez , um nó de um grafo representa um estado do

tabuleiro e que no problema da pane o nó representa um estado do conhecimento parcial sobre

problemas mecânicos do automóvel. Assim o nó inicial do problema é vazio indicando que

não há nenhum conhecimento sobre a causa do problema. Então a primeira coisa a ser feita,

seria o mecânico perguntar ao cliente qual o parte do automóvel que parece estar causando o

Page 31: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 31

problema, gerando vários outro nós partindo do nó inicial do grafo e cada novo nó

representando um estado do problema.

Com o exemplo de Luger, é possível ter uma ideia das possibilidades da aplicação da

busca em espaço de estado e que o estado inicial do problema representa o nó inicial em um

grafo e que a partir de uma informação novos nós são gerados. Este conceito de busca será a

base do desenvolvimento de IA para este trabalho e para ter um entendimento melhor a figura

abaixo mostra a estrutura de uma busca em grafo.

Para compreender melhora a figura acima, pode utiliza-se do exemplo da pane

mecânica no automóvel, definindo o nó inicial como uma pergunta do mecânico para o cliente

sobre onde esta o problema e limitando o cliente em apenas três respostas, sendo a primeira

resposta o motor, a segunda transmissão e por fim a terceira freios. Se o cliente responder

motor então duas novas perguntas devem ser feitas, se o motor da partida, ou se o motor não

da partida e assim novas perguntas deveram ser feitas para cada resposta dada até que a causa

do problema seja encontrada.

É muito importante fazer todas as perguntas possíveis para cada nó, permitindo assim

que todas as hipóteses da causa do problema sejam analisadas, evitando que a solução não

seja encontrada por não ter explorado um nó que poderia ser a solução. Por exemplo, caso a

resposta da pergunta, o motor gira? for não, uma das próximas perguntas deverá ser, as luzes

acendem? Se a resposta para esta pergunta for não, há uma grande chance da causa do

problema estar na bateria do automóvel, portanto se esta pergunta não for feita, a solução do

problema poderá não ser encontrada ou levará mais tempo para acha-la.

Figura 12 – Busca em espaço de estado em um grafo Fonte: AUTOR

Page 32: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 32

No entanto, até agora em todos os exemplos de busca citados, o objetivo é encontrar a

solução, porém a solução em si não é a resposta para todo o problema e tão pouco o único

objetivo da busca. Se o problema for solucionar o jogo 8-Puzzle de nada irá adiantar a busca

achar a solução, porque para resolver o jogo, deverá mover as peças até que todas elas estejam

em seus lugares corretamente. E sendo assim o importante é saber qual peça deve ser movida

por vez até que o jogo esteja solucionado.

Analisando a figura acima, são identificados dois estados do jogo 8-Puzzle, o estado à

esquerda é o problema ou estado inicial e o estado à direita é a solução ou estado meta. No

entanto, mesmo sabendo qual é a solução não é possível resolve-lo, pois neste caso é

necessário saber os passos que devem ser feitos até a solução.

A busca em extensão é uma estratégia simples em que o nó raiz é expandido primeiro, em seguida todos os sucessores do nó raiz são expandidos, depois os sucessores desses nós e assim por diante. Em geral todos os nós em uma dada profundidade na árvore de busca são expandidos, antes que todos os nós no nível seguinte sejam expandidos. (RUSSEL e NORVIG, 2004, p. 74)

Na figura 14 é possível identificar o comportamento da busca em espaço de estados. É

perceptiva a identificação do momento em que a busca encontra a solução, no entanto, nota-se

que a busca continua a explorar novos estados do problema. Este comportamento é

característico de uma busca em amplitude ou largura, cada nó gerado é colocado na fila para

ser explorado respeitando a ordem da sequencia da fila.

Russel e Norvig (2004, p. 74) denominam esta busca como busca em extensão e

explicam que “a busca em extensão pode ser implementada chamando-se BUSCA-EM-

Figura 13 – Dois estados do Jogo 8-Puzzle Fonte: AUTOR

Problema Solução

Page 33: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 33

ÁRVORE com uma borda vazia que seja uma fila do tipo first-in-first-out (FIFO)

assegurando-se que os nós visitados primeiros serão expandidos primeiros”. Russel e Norvig

afirmam que esta estratégia de busca garante que todos os nós de uma profundidade sejam

expandidos ou explorados antes de passar para uma próxima profundidade. A profundidade é

o valor em que o nó vai se distanciando do nó raiz, por exemplo, na figura 14 atingiu-se uma

profundidade máxima de três níveis e a solução foi encontrada na profundidade dois. Porém o

fato da solução ter sido encontrada não resolve o problema do jogo, neste caso o que importa

é o caminho do nó inicial até a solução encontrada, permitindo que seja possível mover as

peças até que o jogo esteja resolvido.

Sabendo que para solucionar um problema do jogo 8-Puzzle é necessário conhecer o

caminho do nó inicial até o nó meta, será preciso que o nó guarde informações de seu

ancestral, assim quando a busca encontrar a solução, poderá montar o caminho partindo da

solução até o nó inicial. Antes de iniciar a implementação da busca é importante analisar bem

Figura 14 – Busca em um estado do jogo 8-Puzzle

Fonte: AUTOR

Page 34: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 34

a definição do problema. Russel e Norvig (2004) afirmam que um problema pode ser definido

formalmente por quatro componentes:

� O estado inicial é o problema por onde a busca se inicializa.

� A função sucessor permite que novos estados sejam criados a partir de um

determinado nó, e também contém a descrição das ações possíveis que estão

disponíveis para que o sucessor criado seja um sucessor válido.

� O teste objetivo é responsável por verificar se um dado estado é a solução.

� A função de custo do caminho atribui um valor numérico a cada caminho.

Com a definição do problema bem resolvido já será possível interpretar melhor os

algoritmos de busca, faltando apenas entender a estrutura do nó, que poderá ser visualizado na

figura abaixo.

“Nós são as estruturas de dados a partir das quais a árvore de busca é construída. Cada

nó tem um pai, um estado e diversos campos de anotação. Setas apontam do filho para o pai”

(RUSSEL e NORVIG, 2004, p. 72). Abaixo segue a estrutura de dados do nó que será

utilizado nos algoritmos de busca.

Figura 15 – Estrutura de um nó Fonte: adaptado de RUSSEL e NORVIG (2004)

Figura 16 – Código em Object Pascal da estrutura do nó Fonte: AUTOR

Page 35: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 35

Definidas as informações que devem compor o nó que será utilizado na busca, é

importante conhecer o algoritmo da busca. Luger (2004, p. 111) explica que “Além de

especificar uma direção de busca (guiada por dados ou por objetivos), um algoritmo de busca

deve determinar a ordem na qual os estados são examinados na árvore ou no grafo.”.

Por meio do algoritmo da busca em amplitude de Luger, foi possível escrever a função

da busca que será utilizada no jogo 8-Puzze deste trabalho.

função busca_em_amplitude; início abertos := [iniciar]; fechados := [ ]; enquanto abertos ≠ [ ] faça inicio remova o estado mais à esquerda em abertos, c hame-o de X; se X for um objetivo, então retorne SUCESSO senão início gere filhos de X; coloque X em f echados;

descarte filhos de X se já estiverem em a bertos ou fechados; coloque os filhos que restam no final à d ireita de abertos; fim; fim; retorne FALHA fim.

Figura 17 – Algoritmo de busca em amplitude Fonte: LUGER (2004)

function TBuscaEstado.Busca(Const Inicial: TBoard): PNode; begin Result := nil; // Retorna vazio se não houver solução NodoInicial(Node, Inicial); // Cria o nó Inicial Abertos.Push(Node, Custo); // Coloca o nó na fila de Abertos while not AbertosVazio do // Enquanto a fila não estiver vazia faça begin Node := Abertos.pop; // Remove o primeiro nó da fila Fechados.Push(Node); // Inclui o nó Atual na lista de fechados if EMeta(Node.Estado) then // Verifica se o nó atual é solução begin Result := Node; // Retorna o nó atual se for a solução Break; // Quebra o laço de repetição end; Expandir(Node); // Gera filhos a partir do nó atual AddSucessores; // Inclui se não esta aberto ou fechado end; end;

Figura 18 – Código em Object Pascal da função Busca Fonte: AUTOR

Page 36: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 36

O código de programa da busca da figura acima, apresenta varias outras funções que

são invocadas com o objetivo de processar informações possibilitando a busca encontrar a

solução. Os códigos dessas funções podem ser encontrados no disco em anexo. A

implementação da função da busca em amplitude, teve um diferencial comparado com o

algoritmo de Luger (2004), que utilizou uma fila ordena para armazenar os nós, sendo a forma

adequada para implementar a busca em amplitude, fazendo a busca expandir todos os nós de

um determinado nível ou profundidade antes de ir para o próximo nível, no entanto, Luger

também apresentou vários outros algoritmos de busca com comportamentos diferentes, como

a busca em profundidade que ao contrario da busca em amplitude, vai aprofundando os níveis

até que a solução seja encontrada ou que não tenha mais como aprofundar fazendo um

processo de retrocesso.

Luger também apresentou buscas com heurísticas que aperfeiçoam o custo

computacional e encontra a solução ótima de um problema se ela existir. Então o código da

busca da figura 18 difere na inclusão do nó na fila de abertos, pois a fila utilizada no código

da busca é ordenada pela função custo e não pela sequencia em que é gerada. Assim se

desejar que a busca tenha o comportamento da busca em amplitude, é necessário apenas

passar um valor numérico sequencial para cada nó gerado, tornando assim uma fila que o

primeiro que entra é o primeiro que sai no processamento da busca. Esta alteração no

algoritmo facilitou a implementação de heurísticas na busca por meio da função custo.

Page 37: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 37

8 – HEURÍSTICAS UTILIZADAS EM BUSCA

Heurística é definido por Luger (2004) como as regras de julgamento que o ser

humano utiliza para fazer escolhas que pareçam ser mais promissoras para resolver um

determinado problema. E segundo ele a heurística constitui um dos tópicos centrais da

pesquisa em IA.

Uma heurística (o nome vem da palavrea grega “descobrir”) é uma estratégia para a busca seletiva de um espaço de problema. Ela guia a nossa busca ao longo de linhas que têm uma alta probabilidade de sucesso, ao mesmo tempo evitando esforços desnecessários e aparentemente estúpidos. LUGER(2004, p. 63)

Luger adverte que heurísticas não são perfeitamente seguras e mesmo a melhor

estratégia pode ser derrotada, no entanto, uma boa heurística pode e deve na maioria das vezes

encontrar a solução ótima ou ficar próxima. Para o projeto foram utilizadas duas heurísticas

específicas para o jogo 8-Puzzle descritas por Russel e Norvig (2004).

� h1 = O número de blocos em posições erradas.

� h2 = A soma das distâncias dos blocos de suas posições objetivo, conhecida

como Distância de Manhattan.

Como exemplo da utilização de heurísticas em busca de estados, foi utilizado o

problema da figura abaixo. A função h1 que representa as peças fora do lugar é igual a 3 (três)

enquanto que a função h2 que representa a distância de cada peça do seu local de origem é

igual a 5 (cinco).

Figura 19 – Cálculos de heurísticas de um estado Fonte: AUTOR

h1 = 0 + 0 + 0 + 0 + 1 + 1 + 0 + 1 = 3 h2 = 0 + 0 + 0 + 0 + 2 + 1 + 0 + 2 = 5

Estado Inicial Estado Objetivo

Page 38: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 38

Para implementar a heurística é necessário utilizar a busca A Estrela (A*), que inclui o

estado do problema em uma lista ordenada pelo custo heurístico, contudo a busca já esta

implementada, bastando apenas implementar a função custo que irá definir o custo do estado

problema, então a função custo fica definida como f(n) = h1(n) + h2(n) + g(n), em que a

função g(n) é o custo do caminho. A função g(n) é muito importante para garantir que a busca

encontre a solução ótima, sem ela a busca poderá aprofundar vários níveis encontrando uma

solução não ótima.

E assim fica completa a Implementação de IA utilizando a Busca A* para resolver os

problemas do jogo 8-Puzzle. Para uma compreensão mais detalhada das implementações

feitas do jogo e da IA, poderá utilizar o código fonte no disco em anexo, no código fonte estão

todas as funções necessárias para desenvolver o jogo por completo.

Page 39: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 39

9 – CONCLUSÃO

Por meio das teorias e conceitos aplicados e demonstrados pelo presente trabalho

pode-se concluir que, o desenvolvimento do projeto obteve sucesso tanto na programação do

jogo quanto na implementação da inteligência artificial. Quanto ao jogo, os conhecimentos

básicos de manipulação de matriz e algum conhecimento do ambiente de desenvolvimento

Delphi 2010, foram suficientes para construir a interface básica do jogo, exigindo a

criatividade para aprimoramento de recursos gráficos, movimentação e controle de objetos, o

trabalho apresenta algoritmos simples que permitem a compreensão facilitada de conceitos

pouco explorado como o movimento de um objeto na tela e portanto pode considerar-se que o

jogo foi bem desenvolvido e pode interagir com o jogador.

A implementação da IA também obteve o resultado esperado, possibilitando a

interação do processamento do computador para resolver um problema de um jogo que

envolve raciocínio para soluciona-lo. As teorias de IA puderam ser testadas na prática

permitindo identificar as dificuldades e limitações que todo programa de computador está

sujeito a apresentar, no entanto a implementação da IA obteve mérito no custo computacional,

que utilizando uma boa heurística foi capaz de resolver qualquer problema do jogo com

menos de um segundo, utilizando um computador com processador de baixo custo. Através

de testes entre os algoritmos de busca, ficou comprovado que o algoritmo A Estrela, por ser

muito mais eficiente comparado com a busca em largura, é o algoritmo mais apropriado para

este tipo de jogo, sendo que nos teste comparativos a diferença é absurdamente grande, tanto

no tempo de processamento quanto no consumo de memória. No disco em anexo, encontra-se

todo o código do jogo, inclusive a implementação da inteligência artificial e alguns recursos

gráficos não abordados no trabalho.

Page 40: INTELIGÊNCIA ARTIFICIAL APLICADA EM JOGOS DE RACIOCÍNIO

FATEC – Faculdade de Tecnologia de Ourinhos 40

REFERENCIAS

COSTA, Ernesto; SIMÕES, Anabela. Inteligência Artificial: Fundamentos e Aplicações.

Coimbra: FCA, 2004.

HÜBNER, Jomi Fred. Busca Java. Disponível em: <http://www.inf.furb.br/~jomi/ia/>.

Acesso em: 19 Jun 2010.

LOYD, Samuel. Cyclopedia of 5000 Puzzles: Tricks, and Conundrums with Answers. New

York: The Lamb Publishing Company, 1914.

LUGER, George F. Inteligência Artificial: estruturas e estratégicas para a solução de

problemas complexos. 4. ed. Porto Alegre: Bookmann, 2004.

PERMADI, F. The 8 Puzzle. Disponível em: <http://www.permadi.com/java/puzzle8/>.

Acesso em: 14 Set 2010.

RUSSEL, Stuart; NORVIG, Peter. Inteligência Artificial: São Paulo: Campus, 2003.

WHITBY, Blay. Inteligência Artificial: um Guia para Iniciantes/Blay Whitby. São Paulo:

Madras, 2004.

XIMENES, Sérgio Barcellos. História das Palavras Cruzadas. Disponível em:

<http://www.roteiroromanceado.com/cruzadas/historia/ancestrais/squares/fifteen/fifteen.html

>. Acesso em: 15 de Out 2010.