SOCIEDADE EDUCACIONAL DE SANTA CATARINA - SOCIESC
INSTITUTO SUPERIOR TUPY - IST
Tiago Antonio Jacobi
AVALIAÇÃO DOS ALGORIT...
TIAGO ANTONIO JACOBI
Avaliação dos algoritmos de busca em amplitude e busca em profundidade: um estudo
de caso para o jogo...
JACOBI, TIAGO A.. Avaliação dos algoritmos de busca em amplitude e busca
em profundidade: um estudo de caso para o jogo de...
TIAGO ANTONIO JACOBI
Trabalho de Diplomação sob o título Avali-
ação dos algoritmos de busca em ampli-
tude e busca em pro...
Dedico esse trabalho, primeiramente a
Deus, aos meus pais que apesar da dis-
tância física, sempre estiveram presentes
e m...
AGRADECIMENTO
Agradeço primeiramente a Deus, que iluminou o meu caminho e me guiou até aqui, e também
por ter me cercado d...
Nunca ande pelo caminho traçado, pois ele conduz somente
até onde os outros foram.
Alexander Graham Bell
RESUMO
O Xadrez é um tipo de jogo bastante conhecido no mundo, ele trabalha muito com a mente
do ser humano, desenvolvendo...
ABSTRACT
Chess is a kind of game well-known in the world, it works a lot with human minds, especially
its ability to devel...
Lista de Figuras
−Figura 1 Árvore de busca. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
LISTA DE SIGLAS
ECP Bacharelado em Engenharia da Computação
IST Instituto Superior Tupy
IA Inteligência Artificial
ERP Ente...
Sumário
1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2 INTELIGÊNCIA ARTIFIC...
13
1 INTRODUÇÃO
Os algoritmos de busca vêm sendo pesquisados e utilizados em grande escala na área
de jogos e Inteligência...
14
assuntos como, as áreas de aplicação, como exemplo na economia, mas principalmente a sua
utilização na área dos jogos, ...
15
2 INTELIGÊNCIA ARTIFICIAL
Quando surgiram os primeiros computadores a admiração devido às inúmeras possibili-
dades que...
16
problemas que são normalmente associados com a grande capacidade intelectual dos seres hu-
manos, definição esta que tam...
17
3 TEORIA DOS JOGOS
A teoria dos jogos foi criada com o intuito de modelar fenômenos que podem ser observados
quando doi...
18
A teoria dos jogos pode ainda determinar uma pontuação para as movimentações. Neste
caso, ela pode fazer uma jogada, qu...
19
4 ALGORITMOS
Os algoritmos são a base da computação, uma vez que tudo praticamente gira entorno
deles. Conforme Silveir...
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...
21
4.2 ALGORITMO DE BUSCA EM PROFUNDIDADE
No entendimento de Ziviani (2007) a busca em profundidade (do inglês depth-first ...
22
4.2.1 Vantagens do Algoritmo de Busca em Profundidade
Rich e Knight (1993) esclarecem algumas vantagens que busca em pr...
23
Figura 4: Exemplo do comportamento de um algoritmo de busca em amplitude.
Fonte: Primária (2011)
4.3.1 Vantagens do Alg...
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
intelectua...
25
Figura 5: O jogo Chaturanga.
Fonte: Sayman (2003, 10)
ela seria a escola mais eficiente no ensino e como aprendizado de ...
26
que realmente deveria admirar, se a engenhosidade do pedido de Sissa ou a invenção do jogo
(LASKER, 1999; ANGéLICO; POR...
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 ape...
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...
29
6 DESENVOLVIMENTO
Para iniciar o desenvolvimento do jogo de xadrez, percebeu-se a necessidade de criar al-
gumas etapas...
30
Para desenvolvimento do jogo de xadrez foi utilizado a IDE que a Adobe disponibiliza como
padrão nomeada de Adobe Flash...
31
Controller (MVC), que visa a separação dos códigos em Model, View e Controller, ou seja, ele
tem por objetivo separar a...
32
Figura 11: Configuração do projeto.
Fonte: Primária (2011)
Figura 12: Estrutura de um novo projeto.
Fonte: Primária (201...
33
6.3 ESTRUTURA DO JOGO
Partindo do projeto criado acima, foi iniciada a programação do jogo para posterior imple-
mentaç...
34
será lida posteriormente pelo algoritmo de busca em profundidade. Na pasta “regras” estão
às classes com as lógicas de ...
35
Figura 16: Algoritmo recursivo base da busca em profundidade.
Fonte: Primária (2011)
Ainda com relação a imagem 16, é p...
36
7 CONCLUSÃO
Este trabalho teve como objetivo principal a avaliação de dois tipos de algoritmos de busca,
o algoritmo de...
37
REFERÊNCIAS
ALMEIDA, A. N. de. Teoria dos Jogos: As origens e os fundamentos da Teoria dos
Jogos. 2004. Disponível em: ...
Próximos SlideShares
Carregando em…5
×

TCC - Tiago Antonio Jacobi

446 visualizações

Publicada em

0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
446
No SlideShare
0
A partir de incorporações
0
Número de incorporações
13
Ações
Compartilhamentos
0
Downloads
2
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

TCC - Tiago Antonio Jacobi

  1. 1. 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
  2. 2. 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 ao Instituto 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 do professor Msc. Paulo Marcondes Bousfield. Joinville 2011/2
  3. 3. 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.
  4. 4. 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 estudo de caso para o jogo de xadrez, apresen- tado por Tiago Antonio Jacobi, e aprovado em 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
  5. 5. Dedico esse trabalho, primeiramente a Deus, aos meus pais que apesar da dis- tância física, sempre estiveram presentes e me apoiaram durante esta jornada em Joinville, a minha irmã e a minha namorada que me ajudaram e me deram forças para seguir em frente e ao prof. Msc. Paulo Mar- condes Bousfield que também apostou no sucesso desse trabalho.
  6. 6. AGRADECIMENTO Agradeço primeiramente a Deus, que iluminou o meu caminho e me guiou até aqui, e também por 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 educaram com muito carinho e também pelo apoio nestes cinco anos de graduação, bem como por terem exigido meu esforço e dedicação. Agradeço a minha irmã Stifani Caroline Jacobi e ao meu cunhado Michel Gasparotto, pelo apoio que 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, por ter 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 juntos nestes cinco anos de graduação e pelos momentos difíceis que superamos juntos com muito esforço, estudo e dedicação. Agradeço a prof. Glaci Gurgacz, pela disponibilidade para ouvir e colaborar a cada dia na correçã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ário para o meu desenvolvimento pessoal, tornando possível a criação deste trabalho.
  7. 7. Nunca ande pelo caminho traçado, pois ele conduz somente até onde os outros foram. Alexander Graham Bell
  8. 8. RESUMO O Xadrez é um tipo de jogo bastante conhecido no mundo, ele trabalha muito com a mente do 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 vez mais nesta área devido ao seu grande potencial, o objetivo deste trabalho é implementar dois tipos 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 relacionados com 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 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, o algoritmo de busca em profundidade seria mais adequado. Palavras-chave: Inteligência Artificial. Teoria dos Jogos. Xadrez.
  9. 9. ABSTRACT Chess is a kind of game well-known in the world, it works a lot with human minds, especially its 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 to implement 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 to assist 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 choose the algorithm that best fits the game of chess. The results showed that each of the algorithms has 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.
  10. 10. 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
  11. 11. 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
  12. 12. 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
  13. 13. 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
  14. 14. 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.
  15. 15. 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
  16. 16. 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.
  17. 17. 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ê.
  18. 18. 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.
  19. 19. 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:
  20. 20. 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.
  21. 21. 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.
  22. 22. 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.
  23. 23. 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.
  24. 24. 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 esquecer momentaneamente 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 de xadrez 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
  25. 25. 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
  26. 26. 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.
  27. 27. 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
  28. 28. 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. Este número é maior que o número de moléculas no universo, ou o número de nanossegundos que se passaram desde o “big bang”. A busca num espaço tã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 deve ser 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.
  29. 29. 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.
  30. 30. 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-
  31. 31. 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.
  32. 32. 32 Figura 11: Configuração do projeto. Fonte: Primária (2011) Figura 12: Estrutura de um novo projeto. Fonte: Primária (2011)
  33. 33. 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
  34. 34. 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.
  35. 35. 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.
  36. 36. 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.
  37. 37. 37 REFERÊNCIAS ALMEIDA, A. N. de. Teoria dos Jogos: As origens e os fundamentos da Teoria dos Jogos. 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. de 2010. ANGéLICO, L. P.; PORFíRIO, L. C. O Jogo de Xadrez Modifica a Escola: Por que se deve aprender 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: 4 de nov. de 2010. BARRETO, J. M. Inteligência artificial no limiar do século XXI. 3. ed. Florianópolis: Duplic Digital, 2001. BITTENCOURT, G. Inteligência Artificial: ferramentas e teorias. 3. ed. Florianópolis: Edittora da UFSC, 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 um grafo: Utilização da STL List. 2005. Disponível em: <http://200.169.53.89/download/CD congressos/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 por Bernardo 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 Problemas Complexos. 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 e revisado 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.

×