37
SOCIEDADE EDUCACIONAL DE SANTA CATARINA - SOCIESC INSTITUTO SUPERIOR TUPY - IST Tiago Antonio Jacobi AVALIAÇÃO DOS ALGORITMOS DE BUSCA EM AMPLITUDE E BUSCA EM PROFUNDIDADE: UM ESTUDO DE CASO PARA O JOGO DE XADREZ Joinville 2011/2

TCC - Tiago Antonio Jacobi

Embed Size (px)

Citation preview

Page 1: TCC - Tiago Antonio Jacobi

SOCIEDADE EDUCACIONAL DE SANTA CATARINA - SOCIESC

INSTITUTO SUPERIOR TUPY - IST

Tiago Antonio Jacobi

AVALIAÇÃO DOS ALGORITMOS DE BUSCA EM AMPLITUDE E BUSCA EM

PROFUNDIDADE: UM ESTUDO DE CASO PARA O JOGO DE XADREZ

Joinville

2011/2

Page 2: TCC - Tiago Antonio Jacobi

TIAGO ANTONIO JACOBI

Avaliação dos algoritmos de busca em amplitude e busca em profundidade: um estudo

de caso para o jogo de xadrez

Trabalho de Conclusão de Curso apresentado aoInstituto Superior Tupy - IST, como requisito par-cial para a obtenção de grau de Bacharel em En-genharia da Computação, sob a orientação doprofessor Msc. Paulo Marcondes Bousfield.

Joinville

2011/2

Page 3: TCC - Tiago Antonio Jacobi

JACOBI, TIAGO A.. Avaliação dos algoritmos de busca em amplitude e busca

em profundidade: um estudo de caso para o jogo de xadrez

Joinville: SOCIESC, 2011/2.

Page 4: TCC - Tiago Antonio Jacobi

TIAGO ANTONIO JACOBI

Trabalho de Diplomação sob o título Avali-ação dos algoritmos de busca em ampli-tude e busca em profundidade: um estudode caso para o jogo de xadrez, apresen-tado por Tiago Antonio Jacobi, e aprovadoem 08 de Dezembro de 2011, em Joinville,pela banca examinadora constituída con-forme abaixo:

Prof. Msc. Paulo Marcondes Bousfield - SOCIESC

Prof. Msc. Edicarsia Barbiero Pilon - SOCIESC

Prof. Esp. Paulo Rogerio Pires Manseira - SOCIESC

Page 5: TCC - Tiago Antonio Jacobi

Dedico esse trabalho, primeiramente aDeus, aos meus pais que apesar da dis-tância física, sempre estiveram presentese me apoiaram durante esta jornada emJoinville, a minha irmã e a minha namoradaque me ajudaram e me deram forças paraseguir em frente e ao prof. Msc. Paulo Mar-condes Bousfield que também apostou nosucesso desse trabalho.

Page 6: TCC - Tiago Antonio Jacobi

AGRADECIMENTO

Agradeço primeiramente a Deus, que iluminou o meu caminho e me guiou até aqui, e tambémpor ter me cercado de pessoas com bom coração.Agradeço ao meu pai Adelmo Marcos Jacobi e a minha mãe Rosane Jacobi, que me educaramcom muito carinho e também pelo apoio nestes cinco anos de graduação, bem como por teremexigido meu esforço e dedicação.Agradeço a minha irmã Stifani Caroline Jacobi e ao meu cunhado Michel Gasparotto, pelo apoioque me deram principalmente no início de minha caminhada em Joinville.Agradeço a minha namorada Josiane Lopes, por ter me aturado nos momentos de estresse, porter me apoiado e ajudado quando eu não sabia mais por onde seguir.Agradeço também aos meus amigos, por todos os momentos de felicidade que passamos juntosnestes cinco anos de graduação e pelos momentos difíceis que superamos juntos com muitoesforço, estudo e dedicação.Agradeço a prof. Glaci Gurgacz, pela disponibilidade para ouvir e colaborar a cada dia nacorreção e melhoria deste trabalho.Agradeço ao prof. Msc. Paulo Marcondes Bousfield, pelo apoio e dedicação em prol da con-stante evolução deste trabalho.Por fim agradeço a todos os professores que me ajudaram a obter o conhecimento necessáriopara o meu desenvolvimento pessoal, tornando possível a criação deste trabalho.

Page 7: TCC - Tiago Antonio Jacobi

Nunca ande pelo caminho traçado, pois ele conduz somente

até onde os outros foram.

Alexander Graham Bell

Page 8: TCC - Tiago Antonio Jacobi

RESUMO

O Xadrez é um tipo de jogo bastante conhecido no mundo, ele trabalha muito com a mentedo ser humano, desenvolvendo principalmente sua capacidade de raciocínio lógico. Tambémé muito conhecido na área de Inteligência Artificial, por seus números intrigantes e pelas difi-culdades que o jogo proporciona, a utilização de algoritmos de busca vem crescendo cada vezmais nesta área devido ao seu grande potencial, o objetivo deste trabalho é implementar doistipos de algoritmo de busca, permitindo ao computador efetuar jogas contra um oponente real.O estudo utiliza inicialmente uma pesquisa de caráter exploratório sobre cada um dos algorit-mos, visando à obtenção de dados que ajudem na análise de desempenho quando relacionadoscom as necessidades do jogo de xadrez. Após análise, o estudo utilizou uma pesquisa experi-mental por meio da qual foram realizados testes e simulações com os algoritmos, tendo comoobjetivo identificar seus pontos fortes e fracos, para então escolher o algoritmo que melhor seadapta ao jogo de xadrez. Os resultados obtidos demonstraram que cada um dos algoritmospossui vantagens e desvantagens, porém que para a aplicação proposta, o algoritmo de buscaem profundidade seria mais adequado.

Palavras-chave: Inteligência Artificial. Teoria dos Jogos. Xadrez.

Page 9: TCC - Tiago Antonio Jacobi

ABSTRACT

Chess is a kind of game well-known in the world, it works a lot with human minds, especiallyits ability to develop logical reasoning. It is also well-known in the area of Artificial Intelligence,by their intriguing numbers and the difficulties which the game provides, the use of search al-gorithms has grown more in this area due to its great potential, the objective of this work is toimplement two types of search algorithm, allowing the computer to play against a real opponent.The first study uses an exploratory research on each of the algorithms in order to obtain data toassist in the analysis of performance as they relate to the needs of a chess game. After analysis,the study used an experimental research by means of which tests and simulations were per-formed with the algorithms, aiming to identify their strengths and weaknesses, and then choosethe algorithm that best fits the game of chess. The results showed that each of the algorithmshas advantages and disadvantages, however, for the proposed application, the depth-search al-gorithm would be more appropriate.

Keywords: Artificial Intelligence. Theory of the game. Chess.

Page 10: TCC - Tiago Antonio Jacobi

Lista de Figuras

−Figura 1 Árvore de busca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

−Figura 2 Espaço de estados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

−Figura 3 Exemplo do comportamento de um algoritmo de busca em profundidade. 21

−Figura 4 Exemplo do comportamento de um algoritmo de busca em amplitude. . . . 23

−Figura 5 O jogo Chaturanga. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

−Figura 6 O jogo da velha. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

−Figura 7 Porção do espaço de estados para o jogo da velha. . . . . . . . . . . . . . . . . . . . . . . 27

−Figura 8 O jogo de xadrez. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

−Figura 9 Interface do Adobe Flash Builder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

−Figura 10 Selecionando um tipo de projeto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

−Figura 11 Configuração do projeto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

−Figura 12 Estrutura de um novo projeto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

−Figura 13 Estrutura final das pastas do projeto do jogo de xadrez. . . . . . . . . . . . . . . . . . . 34

−Figura 14 Estrutura completa da pasta componentes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

−Figura 15 Estrutura das pastas “objetos” e “robos”. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

−Figura 16 Algoritmo recursivo base da busca em profundidade. . . . . . . . . . . . . . . . . . . . . 35

Page 11: TCC - Tiago Antonio Jacobi

LISTA DE SIGLAS

ECP Bacharelado em Engenharia da Computação

IST Instituto Superior Tupy

IA Inteligência Artificial

ERP Enterprise Resource Planning

RIA Aplicações de Internet Rica (do inglês Rich Internet Application), são as aplicações Web

executadas em um navegador, porém que possuem funcionalidades e/ou caracteristicas

de aplicações desktop

IDE Ambiente Integrado de Desenvolvimento (do inglês Integrated Development Environment),

é um programa de computador que possui algumas ferramentas para auxiliar no desen-

volvimento de aplicações

SDK Kit de Desenvolvimento de Software (do inglês Source Development Kit)

J2EE Java Edição Empresarial (do inglês Java 2 Enterprise Edition), uma plataforma de desen-

volvimento para servidores na linguagem de programação Java

MVC Model-View-Controller

Page 12: TCC - Tiago Antonio Jacobi

Sumário

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

2 INTELIGÊNCIA ARTIFICIAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.1 DEFINIÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3 TEORIA DOS JOGOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.1 DEFINIÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4 ALGORITMOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4.1 BUSCA EM ESPAÇO DE ESTADOS . . . . . . . . . . . . . . . . . . . . . . . . . 19

4.2 ALGORITMO DE BUSCA EM PROFUNDIDADE . . . . . . . . . . . . . . . . . . . 21

4.2.1 Vantagens do Algoritmo de Busca em Profundidade . . . . . . . . . . . . . . . 22

4.3 ALGORITMO DE BUSCA EM AMPLITUDE OU BUSCA EM LARGURA . . . . . . . 22

4.3.1 Vantagens do Algoritmo de Busca em Amplitude . . . . . . . . . . . . . . . . 22

5 XADREZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

5.1 DEFINIÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

5.2 HISTÓRIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

5.3 IMPORTÂNCIA PARA INTELIGÊNCIA ARTIFICIAL . . . . . . . . . . . . . . . . . . 26

6 DESENVOLVIMENTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

6.1 ADOBE FLEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

6.2 DEFINIÇÕES E CRIAÇÃO DO PROJETO . . . . . . . . . . . . . . . . . . . . . . . 31

6.3 ESTRUTURA DO JOGO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

7 CONCLUSÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

Page 13: TCC - Tiago Antonio Jacobi

13

1 INTRODUÇÃO

Os algoritmos de busca vêm sendo pesquisados e utilizados em grande escala na área

de jogos e Inteligência Artificial (IA). Devido ao grande potencial e poder de processamento

que possuem, eles nos permitem consumir grandes quantias de dados, com maior velocidade

e menor esforço. Vários algoritmos podem ser utilizados para se chegar a um mesmo objetivo,

porém alguns se tornam incapazes de realizar problemas mais específicos, mas que quando

aplicados em mais simples, obtém-se um resultado muito bom, sem que haja a necessidade de

implementar algoritmos mais complexos.

A grande maioria dos problemas interessantes para a IA não possuem soluções algorítmi-

cas, ou tais soluções conhecidas são de extrema complexidade, a ponto de torná-las impos-

síveis de serem praticadas. Dentre estes problemas podem-se citar os jogos como um dos

primeiros, historicamente, a serem estudados. (BITTENCOURT, 2006).

Levando em consideração a falta de soluções algorítmicas, uma das metodologias que po-

dem ajudar na criação de uma solução viável é a busca em espaço de estados. Implementando

esta metodologia e através de um grafo de espaço de estados, é possível fazermos uma análise

da complexidade envolvida no problema de um jogo de xadrez, bem como da busca por uma

resolução ótima e correta. (LUGER, 2004).

Diante desta situação, percebe-se a dificuldade em identificar qual algoritmo possui desem-

penho mais elevado para resolução do jogo de xadrez, e que tal resolução seja mais assertiva.

Neste trabalho serão avaliados dois algoritmos de busca em específico: o algoritmo de busca

em profundidade e o algoritmo de busca em amplitude, ou também conhecido como algoritmo

de busca em largura. O intuito desta avaliação é para que ao final seja possível chegar a uma

conclusão de sua utilização, levando em consideração fatos como: dificuldade de implemen-

tação, performance, resultado esperado e resultado fornecido, dentre outros.

Após avaliação destes algoritmos será escolhido um que melhor se adapta ao jogo pro-

posto, após a escolha o algoritmo será implementado com o intuito de criar a IA do jogo, ou

seja, desenvolver o algoritmo de forma que ele jogue contra um adversário real, um usuário. Ele

também deverá ter inteligência suficiente para pensarem nas possíveis jogadas, sempre visando

a um resultado final, este resultado será a vitória do computador, que para o jogo de xadrez é

a captura do Rei do jogador adversário. Na seção 2 são descritos alguns conceitos, idéias e

definições sobre a IA possibilitando um melhor entendimento desta área da computação. A IA

do jogo será baseada na Teoria dos Jogos, que é descrita no capítulo 3, e que também engloba

Page 14: TCC - Tiago Antonio Jacobi

14

assuntos como, as áreas de aplicação, como exemplo na economia, mas principalmente a sua

utilização na área dos jogos, que é o assunto foco para este trabalho.

Seguindo esta diretiva, o capítulo 4, contém uma descrição sobre algoritmos de uma forma

geral e sobre a busca em um espaço de estados, que é metodologia base utilizada nos dois

algoritmos desenvolvidos por este projeto, sendo necessário o entendimento desta metodologia

para facilitar a compreensão de como os algoritmos de busca funcionam, para finalizar este

capítulo são detalhados os algoritmos avaliados neste trabalho e os conceitos que envolvem

tais algoritmos, bem como algumas de suas vantagens e desvantagens. Logo após, na seção 5

é detalha a história sobre a provável origem do jogo de xadrez, que era conhecido como Chatu-

ranga. Também são descritos alguns conceitos do jogo propriamente dito e as curiosidades que

este jogo possui. Esta seção ainda mostra os números mirabolantes que envolvem o xadrez e

o quão poderoso ele é, ajudando até no desenvolvimento de capacidades no relacionamento

interpessoal do ser humano e principalmente no intelecto da pessoa.

No capítulo 6 é apresentado sobre a ferramenta utilizada no desenvolvimento do jogo. Tam-

bém é detalhada a estrutura final do jogo, com algumas imagens dos códigos gerados. Por fim,

o capítulo 7 apresenta a conclusão, onde serão discutidos os tais resultados, as dificuldades

encontradas na realização e desenvolvimento deste trabalho e também algumas sugestões de

projetos que poderão ser desenvolvidos futuramente.

Page 15: TCC - Tiago Antonio Jacobi

15

2 INTELIGÊNCIA ARTIFICIAL

Quando surgiram os primeiros computadores a admiração devido às inúmeras possibili-

dades que estas máquinas tinham, fizeram com que elas fossem também conhecidas como

cérebros eletrônicos, principalmente pela capacidade de resolver problemas mais complexos e

que até então eram reservados aos seres humanos. Por este motivo criou-se então um certo

mito, fazendo com que até o final dos anos 50, os computadores fossem vistos com desconfi-

ança, uma vez que teriam a possibilidade de ocupar o lugar dos seres humanos sem que sua

intervenção fosse necessária (BARRETO, 2001).

Segundo Barreto (2001) este mito foi destruído através de um intenso esforço de fabricantes

de computadores. Através de propagandas, eles conseguiram fazer com que as pessoas pas-

sassem a ver o computador como uma máquina incapaz de qualquer forma de raciocínio, porém

uma máquina útil para automatizar trabalhos comuns do dia-a-dia.

2.1 DEFINIÇÃO

Não existe ainda hoje uma definição exata sobre o que seria a IA, vários autores possuem

diferentes definições e opiniões sobre o assunto, sendo que, nenhuma delas evidentemente são

aceitas universalmente.

Rich e Knight (1993) definem a IA como um estudo responsável por fazer com que os

computadores realizem tarefas que, no atual momento, as pessoas fazem melhor, eles também

afirmam que esta definição fornece uma boa noção sobre o que realmente constitui a IA e

ainda evita questões filosóficas que dominam as tentativas de explicar o significado tanto de

inteligência quanto de artificial.

Luger (2004, p.23), por sua vez, ao tratar deste assunto, afirma que a “Inteligência Airtificial

(IA) pode ser definida como o ramo da ciência da computação que se ocupa da automação

do comportamento inteligente.”, para o autor tal definição é mais apropriada ao seu livro, pois

enfatiza que a IA é uma parte da ciência da computação e, devido a este fato, deve ser funda-

mentada em sólidos princípios teóricos e práticos deste campo, tais como, estruturas de dados,

algoritmos, linguagens e técnicas de programação.

Já Ertel (2011), debate em seu livro uma série de definições da IA, como por exemplo a

de John McCarthy em 1995, que define a IA como sendo o objetivo de desenvolver máquinas

capazes de se comportarem como se fossem inteligentes, porém rebate esta idéia com al-

guns argumentos, ele ainda cita uma definição da Enciclopédia Britânica de 1991, que define

a IA como uma habilidade de computadores digitais ou controlados por robôs, de resolverem

Page 16: TCC - Tiago Antonio Jacobi

16

problemas que são normalmente associados com a grande capacidade intelectual dos seres hu-

manos, definição esta que também é rebatida pelo autor. Ertel (2011) finaliza sua explanação

com a definição de, Rich e Knight (1993) conforme descrita acima, como sendo a que melhor

caracteriza a IA nos dias de hoje, mas afirma que com as novas pesquisas que vem sendo

realizadas, esta definição deverá se tornar ultrapassada por volta de 2050.

A definição da IA que melhor se adapta a este trabalho é a proposta por Millington e Funge

(2009), pois eles fazem uma abordagem da IA voltada a área dos jogos. Os autores apresen-

tam a definição de que a IA trata sobre como tornar os computadores capazes de executar

tarefas que os seres humanos e os animais tem a capacidade de fazer. Eles sustentam sua

idéia explicando que nós, somos capazes de desenvolver programas com super habilidades em

resolver problemas, matemáticos, de ordenação de dados e de busca de dados e também que

conseguimos desenvolver robôs com maior habilidade que nós mesmos em jogos de tabuleiros,

como exemplo o jogo Reversi e o jogo de Xadrez que é o foco deste trabalho.

Page 17: TCC - Tiago Antonio Jacobi

17

3 TEORIA DOS JOGOS

A teoria dos jogos foi criada com o intuito de modelar fenômenos que podem ser observados

quando dois ou mais agentes de decisão interagem entre si. Hoje a teoria dos jogos vendo

estudada e aplicada principalmente voltada as áreas da economia e IA (SARTINI et al., 2004).

De acordo com Sartini et al. (2004), a teoria dos jogos é utilizada para estudar diversos as-

suntos, como por exemplo: eleições, leilões, balança de poder, evolução genética entre outros,

mas que na nossa realidade é mais frequentemente estudada em seus aspectos matemáticos e

em aplicações, ela é usada como uma ferramenta que auxilia no entendimento de sistemas de

maior complexidade. Como já dito esta teoria também é matemática pura, e tem sido estudada

como tal, sem que haja a necessidade de relacioná-la com jogos e/ou problemas comportamen-

tais.

3.1 DEFINIÇÃO

A teoria dos jogos pode ser definida como uma teoria de modelos matemáticos, a qual

estuda como escolher e tomar decisões ótimas sob condições de conflito. O elemento básico

de um jogo é o conjunto de jogadores que dele participam, neste caso cada jogador tem o seu

conjunto de estratégias (SARTINI et al., 2004).

No entendimento de Millington e Funge (2009) a teoria dos jogos classifica os jogos em

três tipos, número de jogadores, o tipo de objetivos que os jogadores tem e a informação que

cada jogador tem sobre o jogo. De acordo com o autor o xadrez é classificado como um jogo

de “Informação”, onde cada jogador sabe tudo o que tem para saber sobre os estados do jogo,

eles conseguem saber quais as suas movimentações possíveis bem como a de seu oponente

e também é possível saber qual o efeito que cada jogada poderá acarretar.

Conforme Almeida (2004), a teoria dos jogos, quando aplicada a jogos como xadrez, ou

jogo da velha, por exemplo, tem como finalidade prever os movimentos dos outros jogadores

independente destes jogadores serem aliados ou concorrentes. Baseando-se nessa teoria, os

jogadores se posicionam de forma a obterem o resultado desejado. Como exemplo, é possível

citar o jogo de xadrez, explicando de uma forma mais simples, esta teoria avaliaria as possíveis

jogadas de seu oponente, bem como as suas e então tomaria uma decisão, ou seja, a teoria

iria verificar dentre os seus movimentos e os do seu oponente uma sequência de jogadas que

faria com que você ganhasse o jogo, ela faz uma busca nas jogadas de forma a induzir o seu

oponente a tomar determinadas decisões garantindo um resultado positivo para você.

Page 18: TCC - Tiago Antonio Jacobi

18

A teoria dos jogos pode ainda determinar uma pontuação para as movimentações. Neste

caso, ela pode fazer uma jogada, que faça com que o jogador A ganhe menos pontos, mas

em compensação seu adversário, o jogador B, irá ganhar muito menos pontos ou até mesmo

nenhum. Para exemplificar melhor como isso funciona, pressupõe-se que o jogador A tenha

apenas duas possíveis jogadas, J1 e J2, sendo que a J1 vale 20 pontos e a J2 apenas 14.

Caso seja executada a jogada J1, o jogador B fica habilitado de fazer três jogadas, sendo elas

com 18, 15 e 11 pontos. Por outro lado, se a jogada J2 for executada, ficam liberadas quatro

jogadas ao seu oponente, estas por sua vez valendo 5, 3, 2 e 0 pontos. Para esta situação, a

teoria opta por efetuar a jogada J2, que reduz 6 pontos do jogador A, mas que reduz ainda mais

pontos do jogador B, podendo fazer com que ele não ganhe nenhum ponto.

Page 19: TCC - Tiago Antonio Jacobi

19

4 ALGORITMOS

Os algoritmos são a base da computação, uma vez que tudo praticamente gira entorno

deles. Conforme Silveira e Cosentino (2008, p.3), “um algoritmo é uma sequência de passos

que resolve algum problema ou alcança algum objetivo.”, Goodrich e Tamassia (2007, 156)

definem um algoritmo como, “um procedimento passo a passo para executar alguma tarefa

em tempo finito.”. Assim, conclui-se que um algoritmo é todo e qualquer trecho de código que

possua algum objetivo e que este seja executado em tempo finito. A forma da definição de

execução dos passos de um algoritmo é uma implementação do algoritmo, ou seja, algoritmo é

o que deve ser feito e a implementação é como deve ser feito (SILVEIRA; COSENTINO, 2008).

Nesta seção serão abordados os dois algoritmos foco deste trabalho, sendo eles:

a) Busca em profundidade: este algoritmo resulta em uma sequência de vértices, onde

cada um deles é um adjacente ao próximo vértice (FELISBERTO et al., 2005).

b) Busca em amplitude ou busca em largura: este algoritmo por sua vez trabalha dividindo

os vértices em níveis, sendo que para a busca dos vértices ele se utiliza primeiramente dos com

menor distância e posteriormente dos vértices com maior distância (FELISBERTO et al., 2005).

4.1 BUSCA EM ESPAÇO DE ESTADOS

Segundo Ertel (2011) a procura por uma solução em uma árvore de busca muito grande,

pode apresentar problemas em quase todos os tipo de sistemas. Partindo de um estado inicial

podem existir muitos outros estados, para cada um destes estados podem existir muitas outras

possibilidades e assim sucessivamente, conforme demonstrado na figura 1.

Figura 1: Árvore de busca.

Fonte: Ertel (2011, p.83)

Muitos problemas da computação tornam-se interessantes para a IA por não possuírem

soluções algorítmicas, ou por possuírem soluções de extrema complexidade a ponto de torná-

las impraticáveis (BITTENCOURT, 2006).

Diante da falta de uma solução algorítmica que seja viável, a única alternativa é a da uti-

lização de busca. Um problema de busca pode ser formalizado através da definição de alguns

elementos, tais como:

Page 20: TCC - Tiago Antonio Jacobi

20

a) Um conjunto de descrições, chamado de espaço de estados.

b) Um ou mais estados iniciais.

c) Um ou mais estados finais.

d) Um conjunto de operadores.

Com estes quatro elementos, torna-se possível construir uma árvore de busca, o nó raiz é

associado a um estado inicial, e os sucessores de qualquer nó estão associados sempre aos

estados obtidos. Para tornar a compreensão mais simples pode-se verificar na figura 2, que

apresenta o exemplo de um espaço de estados (a) e ao lado outra ilustração de como ficaria a

árvore já organizada com os estados (b) (BITTENCOURT, 2006).

Figura 2: Espaço de estados.

Fonte: Bittencourt (2006, p.214)

Ambos os algoritmos, aqui discutidos, baseiam se na busca em espaço de estados. Con-

forme Bittencourt (2006), uma estratégia de busca é considerada “cega” se ela não leva em

consideração algumas informações específicas sobre o problema a ser resolvido. Este au-

tor também enuncia que existem basicamente dois algoritmos de busca que são considerados

como estratégias “cegas” na construção de uma árvore. As estratégias que o autor se refere

são as duas abordadas neste trabalho, a busca em profundidade que será mais bem detalhada

na seção 4.2 e a busca em amplitude que por sua vez será definida e detalhada na seção 4.3.

Page 21: TCC - Tiago Antonio Jacobi

21

4.2 ALGORITMO DE BUSCA EM PROFUNDIDADE

No entendimento de Ziviani (2007) a busca em profundidade (do inglês depth-first search)

é um algoritmo utilizado para caminhar em um grafo, ou seja, para fazer uma busca em um

espaço de estados. Este algoritmo busca sempre o mais profundo item de um espaço de

estados. Ziviani (2007) também explica que este algoritmo é utilizado como base para muitos

outros algoritmos importantes, tais como o algoritmo de ordenação topológica, a verificação de

grafos acíclicos e componentes fortemente conectados.

Silveira e Cosentino (2008) por sua vez, ao tratar deste assunto, afirma que o algoritmo está

relacionado ao uso de Pilhas e também pode ser utilizado com recursividade. Basicamente fa-

lando, a execução deste algoritmo segue os nós de uma árvore e vai se aprofundando até que

não seja mais possível, neste momento então o algoritmo volta ao nível anterior, para verificar,

e então tentar outro caminho alternativo, assim acontece sucessivamente até que tenha encon-

trado o resultado correto. Este algoritmo sempre irá funcionar desde que haja uma saída.

Figura 3: Exemplo do comportamento de um algoritmo de busca em profundidade.

Fonte: Primária (2011)

A figura 3 mostra uma ilustração de uma busca em profundidade em um espaço de estados,

demonstrado em forma de uma árvore. Na figura, cada número representa a ordem de visitação

do algoritmo. Conforme pode ser observado, o algoritmo verifica sempre o primeiro nó de cada

nível da árvore, passando então ao nível posterior. Quando chega ao último nível, ele verifica os

outros nós, como não encontra a solução ele volta ao nível anterior e segue o mesmo processo,

até encontrar uma solução.

Page 22: TCC - Tiago Antonio Jacobi

22

4.2.1 Vantagens do Algoritmo de Busca em Profundidade

Rich e Knight (1993) esclarecem algumas vantagens que busca em profundidade tem sobre

a busca em amplitude:

a) Menor consumo de memória: a busca em profundidade utiliza menos memória do com-

putador, pois armazena somente os nós do caminho corrente. O que contrasta com busca em

amplitude, pois ela necessita que toda a árvore gerada até o momento seja armazenada em

memória.

b) Encontrar solução com menor espaço de busca examinado: Rich e Knight (1993) não

colocam esta vantagem como efetiva, os autores afirmam que, quando houver cuidado na or-

denação dos estados sucessores alternativos, esta situação pode ocorrer. Já na busca em

amplitude todas as partes da árvore precisam ser verificadas no nível atual, para posterior-

mente serem examinados os nós do próximo nível. Este fato se torna mais significativo quando

existirem muitas soluções aceitáveis, pois neste caso a busca em profundidade para quando

encontra uma delas.

4.3 ALGORITMO DE BUSCA EM AMPLITUDE OU BUSCA EM LARGURA

O algoritmo de busca em amplitude (do inglês breadth-first search) diferentemente do al-

goritmo de busca em profundidade, quando executado, ele segue os nós de uma árvore por

níveis, e somente passa para o próximo nível quando o atual já tiver sido inteiramente lido

(BITTENCOURT, 2006).

De acordo com Ziviani (2007) este algoritmo, ganhou este nome, pois ele verifica os vértices

descobertos e também os não descobertos de forma uniforme, como se fossem os círculos

concêntricos que são gerados quando se deixa cair uma pedra sobre uma superfície de água

parada. O autor também afirma que o algoritmo de busca em amplitude é a base para muitos

outros algoritmos em grafos importantes, como por exemplo, o algoritmo de Prim que visa a

obtenção da árvore geradora mínima, e o algoritmo de Dijkstra que tem por objetivo, obter o

caminho mais curto, entre um vértice e todos os outros.

É possível verificar na figura 4 uma ilustração simples do processo seguido por um algoritmo

de busca em amplitude, para visitar todos os nós da árvore. A exemplo da figura 3 cada número

dentro dos círculos representa a ordem de visitação do algoritmo. Se observarmos a figura, o

algoritmo visita todos os nós do nível corrente, e somente quando terminou o nível atual ele

passa para o próximo nível, seguindo essa lógica até encontrar a solução.

Page 23: TCC - Tiago Antonio Jacobi

23

Figura 4: Exemplo do comportamento de um algoritmo de busca em amplitude.

Fonte: Primária (2011)

4.3.1 Vantagens do Algoritmo de Busca em Amplitude

Rich e Knight (1993) apontam as vantagens que o algoritmo de busca em amplitude tem,

com relação ao algoritmo de busca em profundidade:

a) Explorar beco sem saída: os autores explicam que o algoritmo não corre o risco de cair

nesta armadilha, justamente pelo fato de que ele verifica todos os nós do nível atual antes de

seguir para o próximo nível. Diferentemente no algoritmo de busca em profundidade existe a

possibilidade de que ele siga por um caminho inviável por muito tempo, ou até mesmo para

sempre.

b) Assertividade: Rich e Knight (1993) citam também que se houver uma solução na árvore

de busca, então o algoritmo com certeza irá encontrar. Para o caso de existirem várias soluções,

o algoritmo entrará a mais próxima. Isto pode ser garantido, pois os nós mais distantes só serão

examinados quando os mais próximos já tiverem sido visualizados, ao contrário da busca em

profundidade que segue por um caminho até o término, ou até encontrar uma solução, que

poderá ser mais distante, pois ainda podem existir vários caminhos inexplorados.

Page 24: TCC - Tiago Antonio Jacobi

24

5 XADREZ

5.1 DEFINIÇÃO

O xadrez não é um simples jogo, ele é muito mais do que isso. É uma forma de diversão

intelectual que compõe arte e muita ciência. O xadrez é para mente de um ser humano o que

os exercícios diários são para o corpo, pois exercita a mente desenvolvendo a capacidade e

tornando-a mais rápida para problemas lógicos (CAPABLANCA, 2004). Para o autor do ponto de

vista social, o xadrez se torna uma diversão útil e agradável, para o resto da vida de quem o

joga, proporcionando aos jogadores muitas horas de distração e exercício mental.

O xadrez serve como poucas coisas neste mundo, para distrair e esquecermomentaneamente as preocupações da vida diária. Em minha experiência en-contrei muitos médicos, advogados e homens de negócio proeminentes, que,ao cair da tarde, ou durante as primeiras horas da noite, iam aos clubes dexadrez descansar ou esquecer suas angústias e preocupações (CAPABLANCA,2004, p.11).

Como explicitado na citação acima, o xadrez também pode ser utilizado como networking,

ampliando seu círculo de amigos e por consequência seus contatos profissionais. Considerado

um dos jogos mais praticados pelo mundo, no xadrez, uma jogada deve ser consequência lóg-

ica da anterior e a antecipação da seguinte. O xadrez possibilita a potencialização de muitas

capacidades, tais como: atenção e a concentração, a imaginação e a previsão, a memória, a

paciência e o autocontrole, o raciocínio analítico e a síntese, a criatividade e a inteligência, o

julgamento e o planejamento (SOARES, 2008).

5.2 HISTÓRIA

São várias as histórias contadas sobre a origem do xadrez, portanto, ainda não se sabe

ao certo qual delas é a verdadeira. A mais interessante delas e mais conhecida é descrita

por Lasker (1999) onde o autor fala que o xadrez foi criado na Índia e conforme Soares (2008)

o xadrez que conhecemos e jogamos é pertencente a família do Xiangqi e do Shogi. Ele é

originado do Chaturanga (figura 5) e foi inicialmente praticado na Índia no século VI.

A história contada há mais de mil anos é a de que um determinado rei solicitou a um de

seus sábios que criasse um jogo que pudesse mostrar diligência, inteligência, visão e prudência

dos jogadores.

A sábia, denominada Sissa, desenvolveu o que mais tarde conheceríamos como xadrez.

Levou então o ao seu rei Kaíde. Sissa dizia basear-se na guerra para a invenção do jogo, pois

Page 25: TCC - Tiago Antonio Jacobi

25

Figura 5: O jogo Chaturanga.

Fonte: Sayman (2003, 10)

ela seria a escola mais eficiente no ensino e como aprendizado de valores como: persistência,

coragem, o valor de uma decisão, o vigor e da ponderação. Visto a grandiosidade do jogo e

levando em consideração sua complexidade, o rei fica encantado e ordena que a invenção seja

preservada nos templos, considerando que o princípio do jogo seria o fundamento da justiça e

acreditando que ele seria a melhor forma de treinamento para guerra.

O rei então oferece a Sissa uma recompensa, que ela poderia escolher de livre arbítrio, e,

mediante a insistência do rei, Sissa então pede sua recompensa em grãos de milho de modo

que estes fossem distribuídos sobre o tabuleiro, onde para a primeira casa fosse de entregue

um grão, na segunda casa dois grãos, na terceira, quatro; na quarta, oito; na quinta o dobro da

quarta casa e assim sucessivamente até se chegar na septuagésima e última casa do tabuleiro.

O rei, ao ordenar a realização do pedido, fica surpreso por perceber que antes mesmo de

chegar a última casa todo o milho da Índia teria acabado, e pior que o valor total de grãos

cobriria a terra com uma camada de nove polegadas de altura. O total exato de grãos de milho

que deveriam ser entregues a Sissa seria 18.446.744.073.709.551.615 (Dezoito quintilhões,

quatrocentos e quarenta e seis quatrilhões, setecentos e quarenta e quatro trilhões, setenta e

três bilhões, setecentos e nove milhões, quinhentos e cinquenta e um mil, seiscentos e quinze),

ou seja, 264 − 1. O rei então fica confuso diante de tamanha sabedoria e por não saber o

Page 26: TCC - Tiago Antonio Jacobi

26

que realmente deveria admirar, se a engenhosidade do pedido de Sissa ou a invenção do jogo

(LASKER, 1999; ANGéLICO; PORFíRIO, 2008).

5.3 IMPORTÂNCIA PARA INTELIGÊNCIA ARTIFICIAL

Para entender melhor o quão importante e interessante é o xadrez para a IA, inicia-se esta

seção fazendo uma abordagem sobre um outro jogo também muito conhecido, o jogo da velha.

Conforme a figura 6, este jogo é composto por um tabuleiro de nove casas. Este tabuleiro

é utilizado com dois tipos de peças, uma em formato de um xis (X) e outra em formato de

um círculo (O), sendo o objetivo final dos jogadores de formar uma sequência de três peças,

dispostas na diagonal, vertical ou horizontal.

Figura 6: O jogo da velha.

Fonte: Primária (2011)

Mas por que explicar o jogo da velha, e o que ele tem de tão importante? Tanto o jogo da

velha quanto o xadrez se utilizam um pouco da Teoria dos Jogos, conforme explicado anteri-

ormente na seção 3. Existem várias ferramentas na IA que poderiam ser utilizadas para que

um computador conseguisse determinar qual a melhor jogada para uma determinada ocasião.

Como o este jogo não possui tanta complexidade agregada em seus movimentos e peças, uma

forma simples para resolvê-lo seria a utilização de busca em espaço de estados.

A busca em espaço de estados utiliza-se de um grafo de espaço de estados, este grafo é

montado a partir de um estado inicial, que neste exemplo será o tabuleiro do jogo da velha em

branco, ou seja, sem nenhuma peça. Cada estado do que será inserido no grafo representa um

possível estado do tabuleiro, ou seja, uma jogada do jogador, após a montagem de todo o grafo

ele ficaria parecido com a figura 7.

Page 27: TCC - Tiago Antonio Jacobi

27

Figura 7: Porção do espaço de estados para o jogo da velha.

Fonte: Luger (2004, p.61)

Este simples jogo, que contém apenas dois tipos de peças e é composto por apenas nove

casas, possui 39 diferentes estados de tabuleiro, ou seja, um total equivalente de 19.683 (Dezen-

ove mil, seiscentos e oitenta e três) estados. Se um jogo como este tão simples já possui tantos

estados é possível imaginar a quantia de estados que um jogo de xadrez possa ter.

O xadrez por ser um jogo com muitas regras, táticas, estratégias e também muito conhecido

pela sua complexidade e necessidade de concentração reúne uma série de características que

o torna interessante em uma abordagem para estudos na IA.

Conforme constatamos anteriormente, o jogo da velha poderia ser solucionado, computa-

cionalmente falando, com a utilização de um algoritmo de busca em espaço de estados. Seria

assim tão simples para o xadrez?

Bem diferente do jogo da velha, o jogo do xadrez possui um total de 32 (trinta e duas) peças,

sendo elas dividas em dois times, o time “preto” e o time “branco”. Estas peças são dispostas

sobre um tabuleiro de 64 casas conforme figura 8.

O que torna o xadrez tão interessante são as inúmeras possibilidades de acontecerem

diferentes situações. Se formos demonstrar em porcentagem pode-se constatar que os 19.683

estados do jogo da velha não significam nem 0,1 % dos estados que um jogo de xadrez pos-

sui, ou que o número de estados diferentes de um jogo de xadrez é maior que o número de

Page 28: TCC - Tiago Antonio Jacobi

28

Figura 8: O jogo de xadrez.

Fonte: Primária (2011)

moléculas existentes no universo ou maior e muito além do que número de nanossegundos que

passou desde o “big bang”. Luger (2004, p.3) explicita que:.

O jogo de xadrez, por exemplo, tem 10120 diferentes estados de tabuleiro. Estenúmero é maior que o número de moléculas no universo, ou o número denanossegundos que se passaram desde o “big bang”. A busca num espaçotão grande está muito além da capacidade de qualquer computador, cujas di-mensões devem estar confinadas ao universo conhecido e cuja execução deveser encerrada antes que o universo sucumba à devastação da entropia.

É este um dos fatores que tornam o xadrez tão intrigante. Mas então como seria possível

determinar e calcular as jogadas do computador durante um jogo real de xadrez? Esta é a

pergunta que fundamenta a seção 4.

Page 29: TCC - Tiago Antonio Jacobi

29

6 DESENVOLVIMENTO

Para iniciar o desenvolvimento do jogo de xadrez, percebeu-se a necessidade de criar al-

gumas etapas para organizá-lo e garantir o seu correto funcionamento.

Primeiramente, foi definida a linguagem que seria utilizada no desenvolvimento, sendo a

escolhida Adobe Flex, que é uma linguagem web muito utilizada por empresas no desenvolvi-

mento de sites e de sistemas. Flex é uma linguagem orientada a objetos que disponibiliza

grandes recursos para o desenvolvimento de interfaces com boa qualidade.

Após a escolha da linguagem, foi necessário definir qual seria a estrutura do jogo, de modo

que viesse facilitar a futura inclusão da IA, que é o alvo foco deste trabalho visando a utilização

dos dois algoritmos de busca citados no capítulo 4.

6.1 ADOBE FLEX

Lançado em março de 2004 pela Macromedia, é uma tecnologia que suporta o desenvolvi-

mento de aplicações do tipo Aplicações de Internet Rica (do inglês Rich Internet Application),

são as aplicações Web executadas em um navegador, porém que possuem funcionalidades

e/ou caracteristicas de aplicações desktop (RIA) baseadas na plataforma do Macromedia Flash.

A primeira versão desta tecnologia era composta por três partes, um Ambiente Integrado de

Desenvolvimento (do inglês Integrated Development Environment), é um programa de computa-

dor que possui algumas ferramentas para auxiliar no desenvolvimento de aplicações (IDE), um

Kit de Desenvolvimento de Software (do inglês Source Development Kit) (SDK) e também um

produto denominado Flex Data Services que era utilizado para integração com o Java Edição

Empresarial (do inglês Java 2 Enterprise Edition), uma plataforma de desenvolvimento para

servidores na linguagem de programação Java (J2EE). Em 2005, a Adobe adquiriu a Macrome-

dia, desde então nas novas versões do Flex o produto Flex Data Services que antes era gratuito

passou solicitar uma licença e também teve seu nome alterado para LiveCycle Data Services.

Com a utilização de duas formas de linguagem MXML e XML o Adobe Flex possibilita

uma criação facilitada e de alta velocidade para o leiaute de aplicações do tipo RIA. Baseado

em um modelo cliente-servidor ou comumente conhecido como multicamada, ao contrário de

aplicações desenvolvidas em HTML que se baseiam em páginas, as aplicações Flex servem

como camada de aplicação e mantém o estado do cliente, pois mudanças significativas de

visualização não necessariamente requerem a carga de uma nova página.

Algumas tecnologias como OpenLaszlo, Ajax, JavaFX e o Silverlight são comparadas com

o Flex por terem uma estrutura parecida.

Page 30: TCC - Tiago Antonio Jacobi

30

Para desenvolvimento do jogo de xadrez foi utilizado a IDE que a Adobe disponibiliza como

padrão nomeada de Adobe Flash Builder 4 na versão Standard. A figura 9 mostra a interface

da IDE inicial, logo após a instalação e sem nenhum projeto criado.

Figura 9: Interface do Adobe Flash Builder.

Fonte: Primária (2011)

6.2 DEFINIÇÕES E CRIAÇÃO DO PROJETO

O desenvolvimento dos códigos para o jogo de xadrez foi feito com a utilização do conceito

de Orientação a Objetos, com isso surgiu a necessidade de adotar um padrão para a nomeação

de Objetos, Classes, variáveis e funções. O padrão adotado foi o CamelCase, que é muito uti-

lizado nas linguagens de programação mais conhecidas, como o Java, PHP, Ruby e até mesmo

no próprio Adobe Flex.

A tecnologia utilizada no desenvolvimento do jogo possibilita a criação de um arquivo do

tipo MXML que pode armazenar tanto o código MXML de desenvolvimento da interface quanto

os códigos em Action Script, que são mais utilizados para execução de eventos, regras de

negócio e lógicas computacionais, neste projeto foi utilizado um pouco do conceito Model-View-

Page 31: TCC - Tiago Antonio Jacobi

31

Controller (MVC), que visa a separação dos códigos em Model, View e Controller, ou seja, ele

tem por objetivo separar a lógica de negócio da lógica de apresentação, tornando possível o

desenvolvimento, teste e a manutenção separada de ambos.

Para iniciar o desenvolvimento foi criado um novo projeto, denominado XadrezTcc. Para isto

basta clicar com o botão direito do mouse na aba Package Explorer e selecionar a opção New,

depois Project. Ao clicar, será aberta uma tela conforme a figura 10, onde será necessário

selecionar o tipo de projeto o usuário deseja criar, que neste caso será Flex Project, após

selecionar, basta clicar no botão Next.

Figura 10: Selecionando um tipo de projeto.

Fonte: Primária (2011)

Ao clicar no botão Next, será apresentado ao usuário uma tela de configurações iniciais

do projeto, em concordância com a ilustração 11. Nesta etapa será informado o nome do

projeto que se chamará XadrezTcc, também é necessário definir se será um projeto Web ou

Desktop e qual versão do SDK será utilizada. Para o desenvolvimento deste projeto optou-se

pela criação de um projeto Web utilizando a versão Flex 3.5 do SDK. Ao finalizar estes passos

basta clicar no botão Finish que o projeto será criado e aparecerá na aba Package Explorer

conforme demonstra a figura 11.

Page 32: TCC - Tiago Antonio Jacobi

32

Figura 11: Configuração do projeto.

Fonte: Primária (2011)

Figura 12: Estrutura de um novo projeto.

Fonte: Primária (2011)

Page 33: TCC - Tiago Antonio Jacobi

33

6.3 ESTRUTURA DO JOGO

Partindo do projeto criado acima, foi iniciada a programação do jogo para posterior imple-

mentação do algoritmo de busca em profundidade. A programação gerou a estrutura de pastas

de acordo com a figura 13. É possível verificar que o arquivo “XadrezTcc.mxml” permanece

na pasta “(default package)”, este é o arquivo mãe do projeto, pois é nele que todas telas são

instanciadas para aparecerem em tela.

Figura 13: Estrutura final das pastas do projeto do jogo de xadrez.

Fonte: Primária (2011)

Ainda se tratando da figura 13, pode-se perceber a pasta “assets” que contém as imagens,

fontes e o arquivo de estilos “main.css”, que possui os estilos responsáveis pelas cores e design

da tela. A pasta “componentes” está separada em “controller ” e “view” conforme o conceito de

MVC anteriormente discutido, esta pasta é segui pela pasta “objetos” que possui alguns objetos

criados para auxiliar na programação, por fim a pasta “robos” que contem a classe do algoritmo

de busca em profundidade.

A figura 14 mostra a estrutura completa da pasta de componentes, que conforme podemos

verificar na pasta “controller ” outras três pastas, a primeira “movimentacao” possui as classes

responsáveis por gerar a estrutura de um espaço de estados, na forma de uma árvore que

Page 34: TCC - Tiago Antonio Jacobi

34

será lida posteriormente pelo algoritmo de busca em profundidade. Na pasta “regras” estão

às classes com as lógicas de movimentação para cada tipo de peca e na pasta “validacao”

encontram-se as classes que fazem as validações que testam se uma determinada peça pode

ou não mover. Na pasta “view“ estão interfaces, do tabuleiro e uma interface genérica para as

peça.

Figura 14: Estrutura completa da pasta componentes.

Fonte: Primária (2011)

Na ilustração 15 são detalhadas as pastas, “objetos” e “robos” sendo que na primeira pasta

estão os objetos auxiliares no desenvolvimento projeto e na segunda está a classe que contem

o algoritmo de busca em profundidade implementado.

Figura 15: Estrutura das pastas “objetos” e “robos”.

Fonte: Primária (2011)

Na classe “RoboBuscaEmProfundidade.as” que pode ser visualizada na imagem 15 está

todo o código de busca e validação da árvore, ou espaço de estados, gerado pelo programa.

A figura 16 mostra uma parte deste código de validação e busca, está parte é o algoritmo de

busca em profundidade, que é um algoritmo de recursividade, ou seja, ele executa ele mesmo

até chegar ao final da árvore, e então seguir por outro nível.

Page 35: TCC - Tiago Antonio Jacobi

35

Figura 16: Algoritmo recursivo base da busca em profundidade.

Fonte: Primária (2011)

Ainda com relação a imagem 16, é possível perceber a chamada da função “ehEstadoMeta”

na linha 2, que faz a verifica se o estado do tabuleiro é um estado meta, que para o xadrez pode

ser definido quando o Rei do seu oponente não está no tabuleiro.

Page 36: TCC - Tiago Antonio Jacobi

36

7 CONCLUSÃO

Este trabalho teve como objetivo principal a avaliação de dois tipos de algoritmos de busca,

o algoritmo de busca em amplitude e o algoritmo de busca em profundidade, com esta avaliação

foi possível identificar qual algoritmo se adequaria melhor as necessidades do jogo de xadrez.

A partir desta definição, seria iniciado o desenvolvimento do jogo de xadrez em conjunto com

o algoritmo mais adequado as necessidades deste trabalho. Foi realizada inicialmente uma

pesquisa de caráter exploratório sobre cada um dos algoritmos, visando à obtenção de dados

que pudessem ajudar na análise de desempenho dos algoritmos, quando relacionados com as

necessidades do jogo de xadrez.

Após a análise, foi realizada uma pesquisa experimental por meio da qual foram realizados

testes e simulações com os algoritmos, tendo como objetivo identificar seus pontos fortes e

fracos, para então escolher o algoritmo que melhor se adapta ao jogo de xadrez. Os resultados

obtidos demonstraram que cada um dos algoritmos possui vantagens e desvantagens, porém

que para a aplicação proposta por este trabalho, o algoritmo de busca em profundidade seria

mais adequado, principalmente devido ao fato de consumir menos memória do computador,

que por se tratar de um jogo web se torna uma característica muito importante, também foi

levado em consideração na escolha, o fato de que o algoritmo de busca em profundidade, tem

maior probabilidade de encontrar uma solução aceitável, quando o espaço de busca estiver bem

organizado.

Durante o desenvolvimento deste é trabalho foram encontradas algumas dificuldades, prin-

cipalmente no que tange o desenvolvimento da aplicação, momento onde surgiram diversas

perguntas, como por exemplo: Como gerar a árvore de busca? De que forma o algoritmo vai

identificar saber quando parar? Qual é meu estado Meta? Perguntas estas que foram sendo

respondidas através de pesquisas em livros e principalmente fóruns e artigos da internet.

Com o objetivo de encorajar a continuidade do trabalho desenvolvido, sugere-se, para tra-

balhos futuros a criação de um campeonato acadêmico baseado em um programa de xadrez

que possibilitasse o acoplamento de robôs, sendo que cada robô teria sua inteligência e efetu-

aria as jogadas de acordo com as informações de estado passadas por este programa, funcio-

nando como um middleware.

Page 37: TCC - Tiago Antonio Jacobi

37

REFERÊNCIAS

ALMEIDA, A. N. de. Teoria dos Jogos: As origens e os fundamentos da Teoria dosJogos. 2004. Disponível em: <http://www.diaadiaeducacao.pr.gov.br/diadia/arquivos/File-/conteudo/artigos teses/MATEMATICA/Artigo Alecsandra.pdf>. Acesso em: 20 de nov. de2010.

ANGéLICO, L. P.; PORFíRIO, L. C. O Jogo de Xadrez Modifica a Escola: Por que se deveaprender xadrez e tê-lo como eixo integrador no currículo escolar? 2008. Disponível em:<http://www.semar.edu.br/revista/pdf/artigo-lays-angelica-luciana-porfirio.pdf>. Acesso em: 4de nov. de 2010.

BARRETO, J. M. Inteligência artificial no limiar do século XXI. 3. ed. Florianópolis: DuplicDigital, 2001.

BITTENCOURT, G. Inteligência Artificial: ferramentas e teorias. 3. ed. Florianópolis: Edittora daUFSC, 2006.

CAPABLANCA, J. R. Lições Elementares de Xadrez. 1. ed. [S.l.]: Hemus Editora Ltda., 2004.

ERTEL, W. Introduction to Artificial Intelligence translated to English by Nathanael Black. 1. ed.[S.l.]: Springer, 2011.

FELISBERTO, V. et al. Implementação do algoritmo de busca em profundidade em umgrafo: Utilização da STL List. 2005. Disponível em: <http://200.169.53.89/download/CDcongressos/2006/Sulcomp/pdf/21891.pdf>. Acesso em: 20 de nov. de 2010.

GOODRICH, M. T.; TAMASSIA, R. Estruturas de Dados e Algoritmos em Java. traduzido porBernardo Copstein e Leandro Bento Pompermeier. 4. ed. Porto Alegre: Bookman, 2007.

LASKER, E. História do xadrez. traduzido por Aydano Arruda. 2. ed. São Paulo: Ibrasa, 1999.

LUGER, G. F. Inteligência Artificial - Estruturas e Estratégias para a Solução de ProblemasComplexos. 4. ed. [S.l.]: Bookman, 2004.

MILLINGTON, I.; FUNGE, J. Artificial Intelligence for games. 2. ed. [S.l.]: Morgan Kaufmann,2009.

RICH, E.; KNIGHT, K. Inteligência artificial traduzido por Maria Cláudia Santos Ribeiro Ratto erevisado por Alvaro Antunes. 2. ed. São Paulo: Makron Books, 1993.

SARTINI, B. A. et al. Uma Introdução a Teoria dos Jogos. 2004. Disponível em: <http://www-.mat.puc-rio.br/˜hjbortol/bienal/M45.pdf>. Acesso em: 2 de nov. de 2010.

SAYMAN, U. Chess History and Reminiscences. 2003. Disponível em: <http://www.blackmask-.com>. Acesso em: 3 de nov. de 2010.

SILVEIRA, P. E. A.; COSENTINO, R. A. Algoritmos e Estruturas de Dados em Java. 2008.Disponível em: <http://www.caelum.com.br/curso/cs-14-algoritmos-estruturas-dados-java>.Acesso em: 10 de nov. de 2010.

SOARES, C. S. Machado de assis, o enxadrista. Revista Brasileira, Ano XIV, no 55, 2008.

ZIVIANI, N. Projeto de Algoritmos: com implementações em Java e C++. 1. ed. São Paulo:Thomson Learning, 2007.