TCC - Tiago Antonio Jacobi
-
Upload
tiago-antonio-jacobi -
Category
Documents
-
view
503 -
download
0
Transcript of 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
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
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.
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
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.
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.
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 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.
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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
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
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
Figura 11: Configuração do projeto.
Fonte: Primária (2011)
Figura 12: Estrutura de um novo projeto.
Fonte: Primária (2011)
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
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
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
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
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.