Sie sind auf Seite 1von 70

Trabalho de Concluso de Curso

Um Jogo de Othello Evolutivo

Anderson Lemos Camelo


andersonlemos83@gmail.com

Orientador:
Roberta Vilhena Vieira Lopes

Co-orientador:
Valter Wellington Ramos Junior

Macei, Abril de 2011

Anderson Lemos Camelo

Um Jogo de Othello Evolutivo

Monograa apresentada como requisito parcial para obteno do grau de Bacharel em Cincia da Computao do Instituto de Computao da Universidade Federal de Alagoas.

Orientador:

Roberta Vilhena Vieira Lopes

Co-orientador:

Valter Wellington Ramos Junior

Macei, Abril de 2011

Monograa apresentada como requisito parcial para obteno do grau de Bacharel em Cincia da Computao do Instituto de Computao da Universidade Federal de Alagoas, aprovada pela comisso examinadora que abaixo assina.

Roberta Vilhena Vieira Lopes - Orientador Instituto de Computao, Campus A. C. Simes Universidade Federal de Alagoas

Valter Wellington Ramos Junior - Co-orientador Computao FAA-IESA/FACIMA

Luiz Cludius Coradine - Examinador Instituto de Computao Universidade Federal de Alagoas

Manoel Agamemnon Lopes - Examinador Instituto de Computao Universidade Federal de Alagoas

Macei, Abril de 2011

Resumo
Os jogos eletrnicos so uma das formas de entretenimento de mais sucesso no mundo. Desde a sua criao eles esto em um processo de constante evoluo, onde os fabricantes procuram melhorar a sua qualidade empregando tcnicas de diversas reas de pesquisa da computao no seu desenvolvimento. Atualmente, o maior desao para os desenvolvedores de jogos a criao de um jogo com um bom desao para o jogador, j que os jogos alcanaram um patamar grco e sonoro bem prximo da realidade. Diversos algoritmos j esto sendo testados pelas produtoras de jogos com o intuito de simular uma inteligncia humana convincente. Assim, com objetivo de validar novas tcnicas de Inteligncia Articial para jogos, este trabalho prope uma anlise comparativa entre novos e antigos algoritmos representados, respectivamente, pelas tcnicas de Algoritmos Genticos e Poda alfa-beta, utilizados na estrutura de tomada de deciso de jogos eletrnicos. Esse pensamento levou ao desenvolvimento de um jogo de tabuleiro conhecido como Othello. Um jogo onde necessrio que se tenha um mnimo de estratgia para alcanar a vitria. O desenvolvimento desse jogo vai servir para avaliao do desempenho desses algoritmos aplicados em um ambiente de tomada de deciso, onde existe ainda o ndice de incerteza proporcionado pela a contnua interao com o usurio. No m, ser realizado um estudo de caso com o intuito de analisar os pontos fortes e fracos de cada uma dessas abordagens. Palavras-chave: Inteligncia Articial, Algoritmos Genticos, Poda alfa-beta, Jogos de Tabuleiro e Othello.

Abstract
Video games are one of the most successful entertainment in the world. Since its creation they are in a constant process of evolution, where developers seek to improve their quality using techniques from diverse areas of computing research in its development. Currently, the biggest challenge for game developers is to create a game with a good challenge for the player as the games reached a level of graphics and sound very close to reality. Several algorithms are already being tested by the game companies in order to simulate a convincing human intelligence. Thus, in order to validate the new articial intelligence techniques for games, this paper proposes a comparative analysis between new and old algorithms represented respectively by the techniques of Genetic Algorithms and alpha-beta Pruning, used in decision-making structure of electronic games. This thought led to the development of a board game called Othello. A game where it is necessary to have a minimum strategy for victory. The development of this game will serve to evaluate the performance of these algorithms applied in a decision-making environment, where there is still the uncertainty provided by the continuous interaction with the user. In the end, there will be a case study in order to analyze the strengths and weaknesses of each approach. Keywords: Articial Intelligence, Genetic Algorithms, alfa-beta Pruning, Board Game and Othello.

ii

Agradecimentos
O perodo de realizao desse trabalho de concluso de curso, foi marcado por uma fase bastante agitada da minha vida, causada principalmente pelo meu ingresso no mercado de trabalho que acabou me afastando da rea acadmica e, conseqentemente, atrasando a sua elaborao. Para que eu pudesse encontrar a fora e o incentivo necessrios para transpor os obstculos e as diculdades encontradas durante esse perodo foi necessrio f e o apoio de muitas pessoas, sendo algumas delas fundamentais. Sendo assim, agradeo primeiro a Deus, anal ele quem escreve certo por linhas tortas. Em segundo lugar, agradeo a minha famlia pelo amor e a cumplicidade durante esse perodo to difcil. Agradeo aos grandes amigos, Dalton Eugnio de Barros, ns somos a prova viva de que no se vence uma guerra lutando sozinho; e Rui Braga das Chagas Jnior, pela amizade e, principalmente, por me lembrar dia aps dia que eu no era nada sem um diploma. Agradeo a Prof.a Dr.a Roberta Vilhena Vieira Lopes, minha orientadora, por fornecer o estmulo inicial e os subsdios necessrios para uma primeira reexo sobre o tema. Agradeo tambm a Lucas Cherem de Camargo Rodrigues, exmio jogador de Othello, por aceitar testar essa aplicao. Agradeo as bandas a-ha e The Cranberries, por fazerem parte da trilha sonora da minha vida. Por ltimo, mas no menos importante, agradeo a todas as pessoas que duvidaram da minha capacidade e colocaram meu talento a prova.

iii

Sumrio
1 Introduo 1.1 Motivao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Descrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Minimax 2.1 Histria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 O Algoritmo Minimax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 A Poda alfa-beta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algoritmo Gentico 3.1 Histria . . . . . . . . . . . . . . . . 3.2 Fundamentos Biolgicos . . . . . . . 3.3 O Algoritmo Gentico . . . . . . . . 3.4 Codicao . . . . . . . . . . . . . . 3.4.1 Codicao Binria . . . . . . 3.4.2 Codicao por Permutao . 3.5 Operadores Genticos . . . . . . . . . 3.5.1 Cruzamento . . . . . . . . . . 3.5.2 Mutao . . . . . . . . . . . . 3.6 Avaliao e Seleo de Cromossomos 3.7 Parmetros de um Algoritmo Gentico Othello 4.1 Histria . . . . . . . 4.2 Regras . . . . . . . . 4.2.1 Componentes 4.2.2 Objetivo . . . 4.2.3 Preparao . 4.2.4 O Jogo . . . 4.2.5 Fim de Jogo . 4.2.6 Vencedor . . 1 1 2 2 3 3 4 8 12 12 14 15 22 22 23 24 24 27 28 30 32 32 33 33 33 33 34 36 36 37 37 38 39 41

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

Desenvolvimento da Aplicao 5.1 Linguagem e ferramentas utilizadas para o desenvolvimento 5.2 Arquitetura . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1 Pacote GUI . . . . . . . . . . . . . . . . . . . . . . 5.2.2 Pacote Domnio . . . . . . . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

iv

SUMRIO 5.2.3 Pacote IA . . . . . . . . . . . . . . . . Forma de implementao dos Algoritmos . . . 5.3.1 Implementao da Poda alfa-beta . . . 5.3.2 Implementao do Algoritmo Gentico Aplicao . . . . . . . . . . . . . . . . . . . . Outras Implementaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

v 42 45 45 47 51 52 53 56 56 57

5.3

5.4 5.5 6 7

Estudo de Caso Concluso e Trabalhos Futuros 7.1 Consideraes Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Lista de Figuras
2.1 2.2 2.3 2.4 2.5 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 3.19 3.20 3.21 3.22 3.23 3.24 3.25 3.26 3.27 3.28 4.1 4.2 4.3 John von Neumann . . . . . . . . . . . . . . . . . . . . . . Exemplo de rvore de deciso para o Jogo da Velha . . . . . Heurstica de conito aplicada aos estados do Jogo da Velha Exemplo de Minimax com antecipao de dois nveis . . . . Exemplo de Minimax com poda alfa-beta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 6 7 7 10 13 15 16 17 17 17 18 19 19 19 20 20 21 21 21 22 23 23 25 25 25 26 27 27 28 28 29 30 32 34 34

John H. Holland . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Teoria da seleo natural de Darwin aplicada ao pescoo da girafa . . . . Exemplo de cromossomo com codicao binria . . . . . . . . . . . . . Populao P(0) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clculo da funo de aptido de P(0) . . . . . . . . . . . . . . . . . . . . Pares selecionados da populao P(0) . . . . . . . . . . . . . . . . . . . Cruzamento do primeiro par de indivduos selecionados de P(0) . . . . . Cruzamento do segundo par de indivduos selecionados de P(0) . . . . . . Populao P(1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clculo da funo de aptido de P(1) . . . . . . . . . . . . . . . . . . . . Pares selecionados da populao P(1) . . . . . . . . . . . . . . . . . . . Cruzamento do primeiro par de indivduos selecionados de P(1) . . . . . Transmisso do segundo par de indivduos de P(1) para a gerao seguinte Populao P(2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clculo da funo de aptido de P(2) . . . . . . . . . . . . . . . . . . . . AG visualizado como mtodo paralelo de subida de encosta . . . . . . . . Exemplo de cromossomos com codicao binria . . . . . . . . . . . . Exemplo de cromossomo com codicao por permutao . . . . . . . . Exemplo de cruzamento uniponto . . . . . . . . . . . . . . . . . . . . . Exemplo de cruzamento multiponto . . . . . . . . . . . . . . . . . . . . Exemplo de cruzamento uniforme . . . . . . . . . . . . . . . . . . . . . Exemplo de cruzamento ordenado . . . . . . . . . . . . . . . . . . . . . Exemplo de cruzamento parcialmente mapeado . . . . . . . . . . . . . . Exemplo de cruzamento circular . . . . . . . . . . . . . . . . . . . . . . Exemplo de mutao binria . . . . . . . . . . . . . . . . . . . . . . . . Exemplo de mutao com troca recproca . . . . . . . . . . . . . . . . . Exemplo de seleo por roleta . . . . . . . . . . . . . . . . . . . . . . . Exemplo de seleo por classicao . . . . . . . . . . . . . . . . . . . .

Tabuleiro do jogo Go, de origem chinesa . . . . . . . . . . . . . . . . . . . . . Congurao inicial do tabuleiro de Othello . . . . . . . . . . . . . . . . . . . Exemplo de uma possvel jogada inicial . . . . . . . . . . . . . . . . . . . . .

vi

LISTA DE FIGURAS 4.4 4.5 4.6 4.7 4.8 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 5.13 5.14 5.15 6.1 6.2 6.3 Trs possibilidades de jogadas para as peas brancas . . . Exemplo de jogada invlida por espao em branco . . . . . Exemplo de boa jogada . . . . . . . . . . . . . . . . . . . Exemplo de uma tentativa invlida de virar peas por tabela Resultado da jogada da gura 4.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

vii 34 35 35 36 36 38 40 41 42 43 46 46 47 47 48 49 49 51 51 52 54 55 55

Diagrama de pacotes da aplicao . . . . . . . . . . . . . . . . . . Diagrama de classes simplicado do pacote gui . . . . . . . . . . . Diagrama de classes simplicado do pacote domnio . . . . . . . . Diagrama de classes simplicado do pacote minimax . . . . . . . . Diagrama de classes simplicado do pacote ag . . . . . . . . . . . . Avaliao esttica do tabuleiro do jogo Othello . . . . . . . . . . . Exemplo de estado do jogo Othello . . . . . . . . . . . . . . . . . . Tabela de diculdade da Poda alfa-beta . . . . . . . . . . . . . . . Coordenadas do tabuleiro de Othello . . . . . . . . . . . . . . . . . Exemplo de codicao para o jogo Othello . . . . . . . . . . . . . Exemplo de populao intercalada usada para clculo de aptido . . Exemplo de cromossomo intercalado usado para clculo de aptido . Tabela de diculdade do Algoritmo Gentico . . . . . . . . . . . . Interface grca da aplicao . . . . . . . . . . . . . . . . . . . . . Interface grca de congurao do jogo . . . . . . . . . . . . . . .

Grco de tempo mdio de resposta dos algoritmos . . . . . . . . . . . . . . . Grco de pontuao mdia dos algoritmos . . . . . . . . . . . . . . . . . . . Grco de vitrias dos algoritmos . . . . . . . . . . . . . . . . . . . . . . . .

Lista de Tabelas
6.1 Resumo dos resultados obtidos aps a execuo da classe de benchmark . . . . 53

viii

Captulo 1 Introduo
Segundo VIEIRA FILHO (2005), a Inteligncia Articial (IA), vem sendo aplicada em jogos desde os anos 70, onde surgiram os primeiros jogos simples e de recursos escassos. Muitos programadores dessa poca implementavam padres de movimentos ou movimentos repetitivos e/ou aleatrios para os personagens controlados pelo computador como sendo a nica inteligncia existente no jogo (SCHWAB, 2004). No decorrer dos anos a IA em jogos teve um crescimento tmido em relao ao crescimento da IA como um todo. At recentemente as empresas desenvolvedoras de jogos no faziam nenhum esforo para melhorar a IA dos jogos que produziam. No incio do sculo XXI os jogos de computador vm se tornando cada vez mais realistas, o que atrai novos jogadores e aumentam os lucros dos fabricantes. Nesse processo de busca por mais realismo pode-se citar a melhoria dos grcos do jogo, o que implica em melhoria dos componentes de hardware, melhoria dos enredos, melhoria da jogabilidade e, despontando como fator diferencial, melhoria da inteligncia articial. Os jogadores sempre buscam um jogo que no seja nem muito fcil e nem muito difcil ao ponto de ser impossvel de se completar o objetivo, eles buscam um jogo onde predomine o equilbrio de diculdade. Para alcanar esse equilbrio necessrio recorrer a IA, pois ela quem concede ao computador uma inteligncia semelhante a que os humanos possuem, tornando o jogo mais interessante e realista.

1.1

Motivao

Diante do grande crescimento do mercado de jogos eletrnicos, vericou-se a necessidade de estudar com mais detalhes o desempenho de novos algoritmos de Inteligncia Articial. Assim, este trabalho se prope a analisar os impactos da utilizao de algoritmos evolucionrios para solucionar problemas que antes eram resolvidos por algoritmos de busca seqencial. O algoritmo evolucionrio que ser foco de estudo o Algoritmo Gentico, e seu desempenho ser comparado ao de um algoritmo tradicional de busca seqencial conhecido como Poda alfa-beta, ambos aplicados sobre o mesmo domnio, o do jogo de tabuleiro chamado Othello. A natureza 1

1.2. OBJETIVO

impar e a simplicidade desse jogo, em comparao a outros jogos de tabuleiro, foram fatores decisivos para sua escolha, o que torna possvel focar as atenes no estudo dos dois algoritmos. O diferencial deste trabalho consiste no fato de que o Algoritmo Gentico ser aplicado diretamente na estrutura da tomada de deciso da aplicao ao invs de ser utilizado no ajuste do comportamento, isto , do desempenho da aplicao, prtica que j se tornou tradio no desenvolvimento de jogos de computador.

1.2

Objetivo

O objetivo desse trabalho implementar um jogo virtual de Othello onde o jogador poder decidir entre enfrentar um computador que simula o comportamento de um jogador humano por meio de Algoritmo Gentico ou de Poda alfa-beta. Ao m da fase de desenvolvimento, ser realizado um estudo de caso com o intuito de analisar os pontos fortes e fracos de cada um desses algoritmos.

1.3

Descrio

Esse trabalho se inicia com a apresentao das duas tcnicas de Inteligncia Articial estudadas, a m de deixar o leitor a par da histria e dos conceitos de cada um dos algoritmos. Assim, no captulo 2 ser estudado o algoritmo Minimax e sua otimizao atravs da tcnica de Poda alfa-beta. Em seguida, no captulo 3, sero explicados os conceitos evolucionrios do Algoritmo Gentico. No captulo 4 ser apresentado o domnio da aplicao na forma do jogo do jogo Othello. No captulo 5 sero explicados todos os detalhes envolvidos no processo de desenvolvimento da aplicao. No capitulo 6 ser apresentado um estudo de caso com o objetivo de analisar os resultados obtidos. Por ltimo, no captulo 7 ser feita as consideraes nais sobre esse trabalho.

Captulo 2 Minimax
O algoritmo Minimax faz parte de uma famlia de algoritmos de busca seqencial usado, principalmente, nas reas de teoria da deciso, teoria dos jogos, estatsticas e losoa, para minimizar a perda mxima possvel em situaes de conito entre duas ou mais partes com interesses opostos. O algoritmo Minimax foi inspirado nos conceitos matemticos da teoria dos jogos, sendo inicialmente aplicado em jogos de soma zero, abrangendo tanto as situaes nas quais os jogadores fazem jogadas alternadas quanto simultneas, tendo sido depois expandido a jogos mais complexos e tomada de decises na presena de incerteza. Uma verso simples deste algoritmo lida com jogos de tabuleiro nos quais um jogador pode perder, empatar ou ganhar. Se o jogador A pode ganhar com apenas uma jogada, ento a sua melhor jogada ser essa. Se o jogador B sabe que uma determinada jogada pode levar o jogador A a ganhar com apenas uma jogada, enquanto que outra jogada pode levar o jogador A a no mximo empatar, ento a sua melhor jogada ser essa. Com o avano do jogo, torna-se fcil ver qual a melhor jogada. O algoritmo Minimax ajuda a encontrar a melhor jogada, comeando do m para o incio do jogo; em cada passo assume-se que o jogador A est a tentar maximizar as suas chances de ganhar, enquanto que o jogador B est a tentar minimizar as chances de A ganhar.

2.1

Histria

Registros antigos sobre teoria dos jogos remontam ao ano de 1713. Em correspondncia dirigida a Nicolas Bernoulli, James Waldegrave propem uma soluo de estratgia mista de Minimax para a verso de duas pessoas do jogo le Her. Contudo, Waldegrave no estendeu sua abordagem para uma teoria geral. No ano de 1913, Ernst Zermelo publicou o primeiro teorema matemtico da teoria dos jogos, o teorema arma que o jogo de xadrez estritamente determinado, isto , em cada estgio do jogo pelo menos um dos jogadores tem uma estratgia em mo que lhe dar a vitria ou conduzir o jogo ao empate. Outro grande matemtico que se interessou em jogos foi Emile Borel, que reinventou as solues Minimax e publicou quatro 3

2.2. O ALGORITMO MINIMAX

artigos sobre jogos estratgicos. Ele achava que a guerra e a economia podiam ser estudadas de uma maneira semelhante (SARTINI & GARBUGIO, 2004). Em seu incio, a teoria dos jogos chamou pouca ateno. O grande matemtico John von Neumann mudou esta situao. Em 1928, ele demonstrou que todo jogo nito de soma zero com duas pessoas possui uma soluo em estratgias mistas. A demonstrao original usava topologia e anlise funcional e era muito complicada de se acompanhar. Em 1937, ele forneceu uma nova demonstrao baseada no teorema do ponto xo de Brouwer. John von Neumann, que trabalhava em muitas reas da cincia, mostrou interesse em economia e, junto com o economista Oscar Morgenstern, publicou o clssico The Theory of Games and Economic Behaviour em 1944 e, com isto, a teoria dos jogos invadiu a economia e a matemtica aplicada (SARTINI & GARBUGIO, 2004).

Figura 2.1: John von Neumann

2.2

O Algoritmo Minimax

Segundo LUGER (2004), em jogos cujo espao de estado pode ser exaustivamente delineado, a diculdade primordial levar em conta as aes do adversrio. Para isso, necessrio assumir que o adversrio usa o mesmo conhecimento sobre o espao de estados que voc e que aplica este conhecimento num esforo consistente para vencer o jogo. O Minimax busca o espao do jogo levando em considerao a existncia de um oponente hostil e essencialmente imprevisvel, para tanto, ele simula um jogo entre dois jogares chamados de MIN e MAX. O signicado destes nomes pode ser entendido facilmente: MAX representa o jogador que tenta vencer, ou MAXimizar a sua vantagem. MIN o adversrio que tenta MINimizar o escore de MAX (LUGER, 2004). Dado um jogo entre esses dois jogadores, MIN e MAX, o jogo comea com uma jogada de MAX que se reveza com MIN realizando jogadas at o jogo terminar. Ao m do jogo, o vencedor premiado e o perdedor penalizado. Segundo RUSSUEL & NORVIG (2004), um jogo desse tipo pode ser denido como um problema de busca e possui os seguintes componentes: Estado inicial: consiste numa posio qualquer no tabuleiro e identica o jogador que iniciar jogando.

2.2. O ALGORITMO MINIMAX

Funo sucessor: funo que aponta os possveis movimentos vlidos para o estado atual. Teste de trmino: funo que determina em quais estados o jogo chega ao m, esses estados so chamados estado terminais. Funo utilidade: funo que d um valor mensurvel aos estados terminais. Esses valores informaro ao algoritmo se essa soluo boa ou ruim. A partir do estado inicial, o algoritmo desenvolve uma rvore de busca atribudo um estado para cada um de seus ns e rotulando cada nvel dessa rvore de acordo com quem est realizando o movimento naquele ponto do jogo, MIN ou MAX. Em cada n, o jogador da vez usa a funo sucessor para determinar seu conjunto de possveis jogadas, e cada uma delas leva a um n situado em um nvel abaixo, formando a rvore de jogadas at os estados nais. O algoritmo Minimax calcula valor de cada soluo a partir do estado inicial, utilizando computao recursiva simples dos valores de cada estado sucessor. O mtodo recursivo percorre um caminho descendente at chegar s folhas da rvore onde usada a funo utilidade para descobrir os valores de cada n folha da rvore e depois esse valor retornado at o n raiz do algoritmo de busca (RUSSUELL & NORVIG, 2004). Segue abaixo uma explicao supercial das principais etapas do algoritmo Minimax: 1. Gerar toda a rvore do jogo; 2. Aplicar a funo utilidade a cada estado terminal; 3. Propagar a utilidade dos ns terminais para nveis superiores: (a) Quando no nvel superior a vez de MIN fazer um movimento, escolher o menor valor. (b) Quando no nvel superior a vez de MAX fazer um movimento, escolher o maior valor. 4. No nodo raiz, MAX escolhe o movimento que leva ao maior valor. Um bom exemplo sobre o funcionamento do algoritmo Minimax pode ser descrito pela gura 2.2. A partir do estado inicial MAX tem nove movimentos possveis. O jogo vai se alterando com a colocao de um X por MAX e a colocao de um O por MIN at ser alcanado ns de folhas que correspondem ao estado terminal, ou seja, o jogador deve ter trs smbolos em uma linha ou todos os quadrados so preenchidos. O nmero em cada n representa o valor de utilidade do estado terminal, nesse caso os valores 1, -1 e 0, sendo os valores altos bons para MAX e valores baixos bons para MIN. Aps esses valores serem propagados de volta para o nodo raiz, cabe a MAX usar essa informao para escolher sua melhor jogada (RUSSUELL & NORVIG, 2004).

2.2. O ALGORITMO MINIMAX

Figura 2.2: Exemplo de rvore de deciso para o Jogo da Velha Segundo LUGER (2004), ao se aplicar Minimax a jogos mais complicados, raramente possvel expandir o grafo de espao at os ns folhas. Em vez disso, o espao de estados buscado at um nmero de nveis predenido, conforme os recursos disponveis de tempo e memria. Esta estratgia chamada de antecipao para n nveis, onde n o nmero de nveis a serem explorados. Como as folhas deste subgrafo no so estados nais do jogo, no possvel atribu-lhes valores que reitam uma vitria ou uma derrota. Em vez disso, atribui-se a cada n um valor de acordo com alguma funo de avaliao heurstica de modo que o valor dessa funo se aproxime ao mximo do resultado obtido pela funo utilidade. O valor que propagado de volta ao n raiz no uma indicao de que uma vitria pode ou no ser alcanada como na gura 2.2, simplesmente o valor heurstico do melhor estado que pode ser alcanado em n movimentos a partir do n inicial. O primeiro passo para se minimaximizar para um nmero xo de nveis denir uma funo heurstica que nos passe informaes mais detalhadas sobre o conito ocorrido no jogo. A maioria dos jogos de disputa entre dois jogadores usam uma forma simples de heurstica no qual medida a vantagem de um jogador sobre o outro. Em jogos como damas, a vantagem de peas importante, assim uma heurstica simples poderia calcular a diferena no nmero de peas pertencentes a MAX e a MIN e tentar maximizar a diferena entre estas medidas de peas. No caso do Jogo da Velha, jogo utilizado no cenrio de explicao desse algoritmo, foi adotada uma heurstica que calcula a diferena entre o nmero de retas (linhas, colunas ou diagonais) abertas para o jogador X e para o jogador O como mostra a gura 2.3:

2.2. O ALGORITMO MINIMAX

Figura 2.3: Heurstica de conito aplicada aos estados do Jogo da Velha A partir de agora, usaremos o termo funo utilidade para nos referir a heurstica de aproximao denida como U (n) = X (n) O(n), onde X(n) o total de linhas vitoriosas possveis para X, O(n) o total de linhas vitoriosas possveis para O e U(n) a avaliao total do estado n. A gura 2.4 mostra uma antecipao de dois nveis para o Jogo da Velha. Primeiro o algoritmo escolhe o ramo a que representa uma possvel jogada de MAX. Depois MIN precisa realizar uma jogada, ao escolher o ramo d o algoritmo chega a um nodo folha, nesse momento, o Minimax utiliza a funo utilidade para descobrir o valor heurstico para a congurao atual do tabuleiro e em seguida propaga o valor 1 para o n acima. Esse processo repetido nos ramos e, f, g e h, onde se obtm os valores 0, 1, 0 e -1 respectivamente. Agora o nodo MIN precisa escolher quais dessas jogadas mais favorvel a ele, o valor -1 escolhido e propagado de volta. Esse mesmo processo volta a acontecer nos ramos b e c, onde se obtm os valores -2 e 1 respectivamente. Agora cabe ao nodo MAX escolher a jogada mais favorvel entre a, b e c, o valor escolhido o ramo de valor 1.

Figura 2.4: Exemplo de Minimax com antecipao de dois nveis O processo descrito na gura 2.4 pode ser representado matematicamente pela resoluo da equao abaixo: MINIMAX (raiz) = max(a, b, c) MINIMAX (raiz) = max(min(d , e, f , g, h), min(i, j, l , m, n), min(o, p)) MINIMAX (raiz) = max(min(1, 0, 1, 0, 1), min(2, 1, 0, 1, 0), min(1, 2))

2.3. A PODA ALFA-BETA MINIMAX (raiz) = max(1, 2, 1) MINIMAX (raiz) = 1

O algoritmo Minimax executa uma explorao completa em profundidade de toda a rvore do jogo. Se a profundidade m e existem b movimentos o tempo que o algoritmo demorar em executar de O(bm ). A complexidade do espao denida por O(bm) para um algoritmo que gera todos os sucessores de uma vez ou O(m) para um algoritmo que gera um sucessor por vez. claro que em jogos, o custo de tempo totalmente impraticvel, mas o algoritmo serve como base para anlise matemtica de jogos e algoritmos prticos (RUSSUELL & NORVIG, 2004). Abaixo o pseudocdigo do algoritmo Minimax: ROTINA minimax(n, profundidade) SE n terminal OU profundidade = 0 ENTO RETORNE o valor da heurstica do n FIM-SE SE o n representa a jogada de MAX ENTO v PARA CADA lho DE n v max(v, minimax(lho, profundidade-1)) FIM-PARA RETORNE v FIM-SE SE o n representa a jogada de MIN ENTO v + PARA CADA lho DE n v min(v, minimax(lho, profundidade-1)) FIM-PARA RETORNE v FIM-SE FIM-ROTINA

2.3

A Poda alfa-beta

O grande problema do algoritmo Minimax que o nmero de estados examinados no jogo exponencial em relao ao nmero de movimentos. Para LUGER (2004), isso acontece porque o algoritmo busca todos os ramos no espao, incluindo muitos que poderiam ser ignorados ou podados por um algoritmo mais inteligente. Um mtodo proposto no nal dos anos 1950 por Allen Newell e Herbert Simon para aperfeioar a busca do algoritmo Minimax a Poda alfa-beta. Nela, o algoritmo elimina galhos da rvore que comprovadamente no podem trazer

2.3. A PODA ALFA-BETA

resultados melhores, interrompendo a busca naquele trecho da rvore. Desta forma, o tempo de processamento reduzido, mas o resultado da busca o mesmo nas duas tcnicas (KORF, 1996). A idia para a busca alfa-beta simples, dois valores chamados alfa e beta so criados durante a busca. O valor alfa, associado aos ns MAX, no pode decrescer, e o valor beta, associado aos ns MIN, no pode aumentar. Suponha que o valor MAX seja x. Ento, MAX no precisa considerar qualquer valor retropropagado menor ou igual a x que seja associado com qualquer n MIN abaixo dele. Alfa o pior que MAX pode marcar, dado que MIN tambm faa o melhor possvel. Da mesma forma, se MIN tem um valor beta de y, ele no precisa considerar qualquer n MAX abaixo que tenha um valor maior ou igual a y (LUGER, 2004). A gura 2.5 mostra como seria a busca do exemplo da gura 2.4 usando a Poda alfa-beta. Inicialmente, o processo de busca idntico ao Minimax tradicional, ou seja, o algoritmo desce atravs do ramo a de MAX e do ramo d de MIN at encontrar um nodo folha onde faz uso da funo utilidade para descobrir o valor heurstico do estado corrente. O valor 1 propagado de volta para MIN que por sua vez atribui esse valor a beta, como o ancestral MAX no possui valor alfa a busca se repete nos ramos e, f, g e h, onde se obtm os valores 0, 1, 0 e -1 respectivamente. Por m, MIN escolhe o menor desses valores, atualiza o valor de beta para -1 e propaga esse valor para o nodo MAX que adiciona o valor -1 ao seu alfa. O algoritmo prossegue atravs dos ramos b de MAX e i de MIN at achar outro nodo folha. Ao aplicar a funo utilidade encontrado o valor -2 que em seguida propagado de volta para o nodo MIN acima. Agora, MIN atualiza seu valor beta corrente para -2 e diferentemente do que ocorreu nos ramos anteriores, o nodo MIN possui um ancestral MAX com valor alfa. Nesse instante, feito o teste de corte baseado nas seguintes regras: Poda Alfa: Se n for MIN e seu ancestral MAX possuir valor al f a beta, ento todos os ramos abaixo de MIN so podados. Poda Beta: Se n for MAX e seu ancestral MIN possuir valor beta al f a, ento todos os ramos abaixo de MAX so podados. Ento, ao realizarmos o teste de corte com os valores correntes de alfa e beta, temos 1 2, logo realizada uma poda alfa no ramos j, l, m e n. Por ltimo, o algoritmo avana nos ramos c de MAX e o de MIN onde se depara novamente com um nodo folha. Ao aplicar a funo utilidade encontrado o valor 1 que retropropagado para MIN atualizar seu valor beta. Novamente, como MIN possui um ancestral MAX com valor alfa realizado o teste de corte, al f a beta 1 1, logo, dessa vez no h poda e o algoritmo prossegue no ramo p onde encontrado o valor 2. O valor retorna para MIN, como esse o ltimo ramo pesquisado no pode haver mais nenhuma poda, ento MIN escolhe o menor valor entre 1 e 2, e propaga de

2.3. A PODA ALFA-BETA

10

volta para o nodo MAX acima. MAX por sua vez, escolhe o maior valor entre -1 e 1, e propaga para o n raiz concluindo assim a busca com poda alfa-beta.

Figura 2.5: Exemplo de Minimax com poda alfa-beta Assim como na gura 2.4, o processo descrito na gura 2.5 tambm pode ser representado matematicamente pela resoluo da equao abaixo: MINIMAX (raiz) = max(a, b, c) MINIMAX (raiz) = max(min(d , e, f , g, h), min(i, j, l , m, n), min(o, p)) MINIMAX (raiz) = max(min(1, 0, 1, 0, 1), min(2, B, C, D, E ), min(1, 2)) MINIMAX (raiz) = max(1, A, 1), onde A 2 MINIMAX (raiz) = 1 A efetividade da Poda alfa-beta dependente da ordem que feita a anlise dos sucessores. Se por exemplo, na busca da gura 2.5, o algoritmo gerasse seus sucessores levando em considerao alguma estratgia no aleatria, a busca poderia ser iniciada pelo ramo c, assim, em vez de podarmos apenas quatro ramos (j, l, m e n) poderamos podar at oito ramos (e, f, g, h, j, l, m e n). Supondo que uma ordenao fortuita de estados no espao de busca seja feita, ento alfabeta precisar examinar apenas O(bm/2 ) ns para escolher entre o melhor, em vez de O(bm ) do Minimax, signicando um fator de ramicao efetivo igual a b em vez de b, com isso, alfabeta pode efetivamente dobrar a profundidade do espao de busca com um compromisso xo de espao/tempo de computao. No caso de no haver ordenao, o nmero de ns examinados por alfa-beta seria de O(b3m/4 ), ou seja, bem prximo ao nmero examinado por Minimax; entretanto, a busca feita em apenas um passo. Uma importante considerao sobre os procedimentos Minimax e Poda alfa-beta que avaliaes em qualquer profundidade xa podem ser muito enganosas. Quando uma heurstica aplicada com antecipao limitada, possvel que a profundidade da antecipao no possa

2.3. A PODA ALFA-BETA

11

detectar que um caminho heuristicamente promissor leve a uma situao ruim mais tarde no jogo. Se o seu adversrio no jogo de xadrez oferecer uma torre como uma isca para pegar a sua dama e a avaliao antecipar apenas at o nvel em que a torre oferecida, a avaliao ser inuenciada por este estado. Infelizmente, a seleo deste estado pode causar a perda do jogo! Este o chamado efeito de horizonte. Ele normalmente enfrentado avanando a busca mais profundamente por vrios nveis para estados que parecem ser excepcionalmente bons. Entretanto, este aprofundamento seletivo da busca em reas importantes no far desaparecer o efeito horizonte. A busca precisa parar em algum lugar e ela ser cega para os estados que se escondam alm deste ponto (LUGER, 2004). Abaixo o pseudocdigo da Poda alfa-beta: ROTINA alfabeta(n, profundidade, , ) SE n terminal OU profundidade = 0 ENTO RETORNE o valor da heurstica do n FIM-SE SE o n representa a jogada de MAX ENTO v PARA CADA lho DE n v max(v, alfabeta (lho, profundidade-1, , )) SE v = ENTO RETORNE v FIM-SE max(v, ) FIM-PARA RETORNE v FIM-SE SE o n representa a jogada de MIN ENTO v + PARA CADA lho DE n v min(v, minimax(lho, profundidade-1, , )) SE v = ENTO RETORNE v FIM-SE min(v, ) FIM-PARA RETORNE v FIM-SE FIM-ROTINA Onde o algoritmo inicialmente chamado com = - e = +.

Captulo 3 Algoritmo Gentico


Os Algoritmos Genticos (AG) fazem parte de uma famlia de algoritmos de aprendizagem de mquina inspirados em analogias biolgicas e podem ser utilizados para solucionar problemas de busca e otimizao. AG tem suas razes na Computao Evolucionria (CE) e propem um modelo de aprendizagem que simulam a forma mais elegante e poderosa da natureza: a evoluo de formas de vida de plantas e animais. Charles Darwin disse: ... no h limites para a vida.... Atravs de um processo simples de introduo de variaes em geraes sucessivas e eliminando seletivamente os indivduos menos ajustados, emergem numa populao adaptaes de crescente capacidade e diversidade. Evoluo e emergncia ocorrem em populaes de indivduos corporicados, cujas aes afetam outros indivduos e que, por sua vez, so afetados por outros indivduos. Assim, as presses seletivas no surgem apenas do ambiente externo, mas tambm de interaes entre membros de uma populao. Um ecossistema tem muitos membros, cada um com papis e habilidades apropriadas sua prpria sobrevivncia, mas mais importante que isso, cujo comportamento acumulativo molda e moldado pelo resto da populao (LUGER, 2004).

3.1

Histria

Historicamente, os primeiros passos na rea de Computao Evolucionria aconteceram no incio dos anos sessenta quando um grupo de bilogos e geneticistas tiveram a idia de tentar simular os processos vitais de um ser humano em um computador, o chamado processo gentico. Dentre os cientistas destacam-se os nomes de Barricelli, Fraser, Martin e Cockerham (GOLDBERG, 1989). Nos anos seguintes, o bilogo Ingo Rosenberg introduziu o conceito de Estratgias Evolutivas. Em sua tese de doutorado, ele simulou uma populao de seres unicelulares, com cromossomos de 20 genes e 16 alelos, enfatizando a mutao e recombinao como operadores essenciais ao processo de busca e no espao de parmetros (GOLDBERG, 1989).

12

3.1. HISTRIA

13

No nal dos anos sessenta, um estudante de doutorado chamado John H. Holland tentava desenvolver um mtodo computacional que se prestasse para abordar fenmenos gerados por sistemas adaptativos complexos. Os fenmenos gerados por estes sistemas so aqueles cujos resultados dependem das interaes no lineares entre vrios agentes adaptativos. Por exemplo, a seca do nordeste brasileiro um fenmeno deste tipo (CARVALHO, 2008). No decorrer do seu trabalho, Holland percebeu que existia uma ntida semelhana entre os fenmenos que estudava e o processo de evoluo das espcies de Darwin, pois assim como interao entre os agentes adaptativos determinava o resultado dos fenmenos investigados por ele, a interao entre os fatores ambientais determinava a prxima populao de uma determinada regio (CARVALHO, 2008). Com base nesta constatao, Holland props um modelo de sistemas de aprendizagem de mquina conhecido como Algoritmos Genticos. Tais modelos implementavam populaes de indivduos contendo um gentipo, formado por cromossomos representados por cadeias de bits aos quais se aplicavam operadores de seleo, recombinao e mutao (DAVIS, 1991). Todo esse trabalho resultou no livro Adaptation in Natural and Articial Systems publicado em 1975, hoje considerado um clssico sobre Algoritmos Genticos.

Figura 3.1: John H. Holland Ainda nesse perodo, Bagley, utilizou em sua dissertao AG aplicados a representaes mais complexas, incluindo regras de produo, para evoluir conjuntos de regras adaptadas para interagir com o ambiente dando origem aos chamados Sistemas Classicadores. No incio dos anos noventa, John Koza usou AG para combinar e aplicar mutao em fragmentos de cdigo de programas na tentativa de evoluir um programa de computador. Ele chamou seu mtodo de Programao Gentica. Foram usados programas em LISP porque programas nessa linguagem podem ser expressos na forma de rvores, que so objetos utilizados pelos AG (OBITKO, 1998). Nos ltimos anos, AG tem se tornado objeto freqente de estudo para pesquisadores de comunidades acadmicas de todo o mundo, principalmente aqueles que procuram um mtodo alternativo para encontrar boas solues para os chamados problemas Polinomiais No Determinsticos (NP) da qual fazem parte problemas como o do caixeiro viajante, do roteamento de veculos e o da satisfatibilidade booleana.

3.2. FUNDAMENTOS BIOLGICOS

14

3.2

Fundamentos Biolgicos

A principal inspirao para o modelo de Algoritmos Genticos proposto por Holland vem da Sntese Evolutiva Moderna, cuja base de seus conceitos vem da combinao da gentica como base para a herana biolgica de Gregor Mendel e da teoria de evoluo das espcies por meio de seleo natural de Charles Darwin. Da gentica, sabe-se que todos os organismos vivos so constitudos de clulas. No ncleo de cada clula de um determinado organismo, existem cadeias de molculas de cido desoxirribonuclico (DNA) onde esto gravadas suas caractersticas. Estas cadeias de DNA esto associadas com protenas formando estruturas conhecidas como cromossomos. O cromossomo constitudo de genes, que so regies nas molculas de DNA que contm informao gentica que codica uma determinada protena. Basicamente, podemos dizer que cada gene codica uma determinada feio, por exemplo, cor dos olhos. Conjunto de genes relacionados com determinada feio so chamados alelos. A posio especca que cada gene ocupa dentro do cromossomo chamada de lcus. O conjunto completo de material gentico formado por todos os cromossomos de um organismo chamado genoma. O conjunto de todos os genes no genoma o seu gentipo. O conjunto das caractersticas observveis que compem a estrutura e o comportamento de um organismo denominado o seu fentipo. Estas caractersticas surgem da interao do gentipo com o ambiente. Durante a reproduo sexuada ocorre troca de material gentico entre os dois indivduos. Atravs de um processo chamado meiose, o nmero de cromossomos de cada indivduo reduzido metade, e atravs da fecundao eles so combinados para formar novos cromossomos que dar origem a um novo indivduo. Essa descendncia recm criada pode sofrer uma mutao, ou seja, pequenas alteraes acidentais ou induzidas nos genes, que podero ter repercusses nas caractersticas do novo ser. O fenmeno da mutao tem uma probabilidade muito reduzida. Quando acontece, o gene de um lho ca diferente do gene correspondente de ambos os pais. Da teoria da evoluo das espcies, sabe-se que a vida na terra comeou com a evoluo da clula, a partir da qual se desenvolveram os organismos mais simples. Estes deram origem aos organismos mais complexos. Todos os novos genes e novas informaes surgiram por mutao e recombinao. A seleo natural o processo chave dessa teoria e age selecionando as caractersticas apropriadas para melhorar a adaptao dos organismos. O conceito central da seleo natural a aptido evolutiva de um organismo. Isto mede a contribuio gentica de um organismo para a gerao seguinte. Contudo, no o mesmo que o nmero total de descendentes: a aptido mede a proporo de geraes subsequentes que carregam os genes de um organismo. Por consequncia, se um alelo aumenta a aptido mais do que outros alelos do mesmo gene, ento em cada gerao esse alelo tornar-se mais comum dentro da populao. Se o ambiente mudar, caractersticas que previamente eram neutras ou prejudiciais podem tornar-se bencas ou vice-versa.

3.3. O ALGORITMO GENTICO

15

Figura 3.2: Teoria da seleo natural de Darwin aplicada ao pescoo da girafa Um bom exemplo sobre como a seleo natural pode agir sobre os indivduos de uma dada populao em determinado ambiente pode ser descrito pela gura 3.2. Em um primeiro momento, as girafas provavelmente apresentavam pescoos de comprimentos variveis. Com o tempo, a competio e a seleo natural levaram a sobrevivncia das girafas de pescoo longo, um a vez que elas conseguiam alimentar-se melhor do que as girafas de pescoo curto. Por m, apenas as girafas de pescoo longo sobreviveram competio. Portanto, pela seleo natural ocorreu a evoluo.

3.3

O Algoritmo Gentico

Algoritmos Genticos so baseados numa metfora biolgica: eles vem o aprendizado como uma competio numa populao de solues evolutivas, candidatas para o problema. Uma funo aptido avalia cada soluo para decidir se ela contribuir para a prxima gerao de solues. Ento, atravs de operaes anlogas transferncia de genes na reproduo sexual, o algoritmo cria uma nova populao de solues candidatas (LUGER, 2004). Segue abaixo o pseudocdigo do Algoritmo Gentico. Suponha que P(t) dena uma populao de solues candidatas, xti , no tempo t: P(t) = xt1 , xt2 , ..., xtn ROTINA algoritmo genetico () Ajuste o tempo t 0; Gere uma populao aleatria P(t); Avalie a aptido de cada indivduo da populao P(t); ENQUANTO condio de parada no for satisfeita FAA ENQUANTO populao descendente P(t) no estiver completa FAA Selecione com base na aptido um bom par de indivduos de P(t) para produzir descendentes; Produza descendentes destes pares usando os operadores genticos Cruzamento e Mutao;

3.3. O ALGORITMO GENTICO Adicione os descendentes gerados na populao P(t); ENQUANTO-FIM P(t) P(t); Ajuste o tempo t t + 1; Avalie a aptido de cada indivduo da populao P(t); ENQUANTO-FIM RETORNE indivduo com melhor aptido de P(t); ROTINA-FIM

16

Para entendermos melhor o funcionamento do algoritmo descrito acima, suponha que desejamos usar Algoritmos Genticos para aprender a classicar cadeias de 0s e 1s com oito caracteres de modo que aps duas geraes nos retorne a soluo mais prxima da soluo ideal denida como 01010101. A primeira coisa a se pensar sobre como representar uma dada soluo para o problema na estrutura gentica de um cromossomo. Como nosso problema consiste numa cadeia binria de bits, essa representao se d de forma simples e natural com um cromossomo formado por oito genes, onde cada um desses genes codica uma caracterstica denida como 0 ou 1, como mostra a gura 3.3.

Figura 3.3: Exemplo de cromossomo com codicao binria A segunda coisa a se pensar sobre quais sero as condies de parada do algoritmo. Como nosso problema busca uma determinada soluo, nada mais natural que denirmos essa soluo como uma condio de parada para o algoritmo, ou seja, o algoritmo para aps encontrar a soluo ideal 01010101 com valor de aptido igual a 8. No entanto, sabemos que a idia bsica do AG consiste em evoluir sua populao de solues durante vrias geraes sem oferecer nenhuma garantia de que a soluo ideal seja realmente encontrada. Assim, razovel denir uma segunda condio de parada para que o algoritmo no que no chamado loop innito. Uma boa condio seria denir um determinado nmero de geraes descendentes, no nosso problema o algoritmo para quando a varivel t for igual a 2. Inicialmente, o algoritmo gentico inicializa a varivel t com valor zero e gera a populao P(0) aleatoriamente. Por exemplo, considere que P(0) foi inicializado com a populao mostrada na gura 3.4, composta por quatro indivduos.

3.3. O ALGORITMO GENTICO

17

Figura 3.4: Populao P(0) Aps gerar uma populao inicial, o algoritmo avalia o grau de adaptao de cada indivduo dessa populao atravs de uma funo de aptido, f(xti ) que retorna a adaptao do indivduo no tempo t. Por exemplo, deniremos nossa funo aptido de forma a somar um ponto para cada 0 situado em um gene impar e para cada 1 situado em um gene par do cromossomo como mostra a gura 3.5.

Figura 3.5: Clculo da funo de aptido de P(0) Aps avaliar cada indivduo, o algoritmo deve checar se alguma condio de parada foi satisfeita. Como podemos ver, nenhum indivduo da populao P(0) tem aptido igual a 8, alm disso, t menor que 2. Logo, nenhuma condio de parada pode ser satisfeita. O prximo passo do AG ser produzir uma nova populao P(1) descendente de P(0). Para que isso seja possvel, o algoritmo precisa selecionar em cada iterao do lao de formao da nova populao um par de indivduos para aplicar os operadores genticos. Geralmente cada par selecionado produz dois descendentes, assim, sero necessrios dois pares para formar uma nova populao com quatro indivduos. Como no caso da evoluo natural, a aptido de um indivduo determina em que extenso ele se reproduz, sendo que aqueles indivduos que tm avaliaes mais altas recebem maiores probabilidades de se reproduzirem. Por exemplo, considere que o algoritmo selecione em cada iterao os pares da gura 3.6. Note que o indivduo com adaptao igual a seis foi selecionado duas vezes.

Figura 3.6: Pares selecionados da populao P(0)

3.3. O ALGORITMO GENTICO

18

Aps o algoritmo selecionar o primeiro par de indivduos de P(0), podemos proceder com a operao de cruzamento. O cruzamento toma o cromossomo dos dois indivduos e os divide, trocando seus genes para produzir dois novos indivduos. A gura 3.7 ilustra o cruzamento do primeiro par de indivduos selecionados. O operador divide os cromossomos ao meio e forma dois lhos cujo segmento inicial se origina de um dos pais e cujo segmento nal vem de outro pai. Note que a diviso de um cromossomo no meio uma escolha arbitrria. Esta diviso pode at mesmo ser ajustado aleatoriamente ou mudado durante o processo de soluo. Alm disso, importante deixar claro que o operador de cruzamento aplicado com uma dada probabilidade para cada par de cromossomos, sendo esta probabilidade chamada de taxa de cruzamento. Quando no ocorre cruzamento, os lhos so iguais aos pais e certas caractersticas so preservadas com isso.

Figura 3.7: Cruzamento do primeiro par de indivduos selecionados de P(0) Terminada a operao de cruzamento do primeiro par de indivduos de P(0), o algoritmo procede com a operao de cruzamento do segundo par de indivduos como mostra a gura 3.8. Podemos perceber que algo de anormal aconteceu com um dos dois lhos gerados nesse cruzamento. O primeiro gene do cromossomo (marcado com vermelho) que deveria herdar o valor 0 acabou cando com o valor 1. Assim como na reproduo sexuada, o processo de diviso de cromossomos para formar descendentes pode sofre uma mutao. A mutao um operador gentico que age visando aumentar a diversidade das solues geradas de uma populao para outra. Ele tambm aplicado com uma dada probabilidade, a taxa de mutao. Em nosso problema a mutao funciona da seguinte forma, a cada quatro descendentes gerados um sofre mutao, ou seja, uma taxa de mutao de 25% sobre os cromossomos da populao. Aps um cromossomo ser selecionado para mutao, usado a inverso em um de seus oito genes de forma aleatria mudando seu valor de 0 para 1 ou vice-versa.

3.3. O ALGORITMO GENTICO

19

Figura 3.8: Cruzamento do segundo par de indivduos selecionados de P(0) Ao m da execuo do lao de formao da populao P(0), o algoritmo substitui P(0) pela nova populao P(0) e incrementa a varivel t como mostra a gura 3.9.

Figura 3.9: Populao P(1) Agora que o algoritmo gerou a populao descendente P(1), ele deve calcular o grau de adaptao dessa nova populao como mostra a gura 3.10. Com base nos valores gerados podemos perceber nitidamente a evoluo da populao P(1) sobre sua populao ancestral P(0). Curiosamente, a populao P(1) mesmo mais evoluda acabou cando mais distante soluo ideal do problema, ou seja, os indivduos com melhor aptido das populaes P(0) e P(1) possuem respectivamente aptides 6 e 5. Esse tipo de comportamento das verses mais tradicionais AG pode ser considerado uma falha, no entanto ela pode ser corrigida facilmente com adio de outros operadores genticos como, por exemplo, o Elitismo (DEJONG, 1975), que consiste em manter o melhor cromossomo de uma gerao para outra durante a utilizao do algoritmo, com a inteno de preservar a melhor soluo encontrada at ento.

Figura 3.10: Clculo da funo de aptido de P(1) Aps formar sua primeira descendncia, o algoritmo deve vericar novamente se alguma das suas condies de parada foi satisfeita. Analisando o estado atual do algoritmo, podemos

3.3. O ALGORITMO GENTICO

20

ver que nenhuma condio de parada foi satisfeita, pois alm de nenhum indivduo da populao P(1) ter aptido igual a 8, t tambm menor que 2. Mais uma vez o algoritmo deve selecionar bons pares de indivduos para produzir descendentes, existe muitos mtodos para selecionar indivduos pela sua aptido como, por exemplo, a seleo por roleta e a seleo por classicao que veremos adiante. Mas para nosso problema, considere que uma forma de seleo qualquer tenha selecionado pares da gura 3.11.

Figura 3.11: Pares selecionados da populao P(1) Aps selecionar bons pares para produzir descendentes, o algoritmo inicia a operao de cruzamento do primeiro par de indivduos de P(1) como mostra a gura 3.12. Podemos perceber que ocorreu uma mutao no descendente com gene marcado de vermelho. A mutao importante porque a populao inicial pode excluir algum componente essencial da soluo. No nosso exemplo, usamos um operador de cruzamento simples, que gera seus descendentes recombinando cromossomos que foram divididos ao meio. Isso signica que caso a populao inicial no tenha pelo menos dois indivduos, um com o valor 0101 na primeira metade de seu cromossomo e outro com o mesmo valor na segunda metade de seu cromossomo, o algoritmo no ser capaz de encontrar a soluo ideal sem a ajuda do operador de mutao.

Figura 3.12: Cruzamento do primeiro par de indivduos selecionados de P(1) O algoritmo continua sua execuo selecionando o segundo par de indivduos de P(1) para uma possvel operao de cruzamento. A gura 3.13 ilustra o resultado dessa operao. Como mencionado anteriormente, a operao de cruzamento realizada de acordo com uma determinada taxa de cruzamento. Em nosso problema, adotamos uma taxa de 75%, ou seja, a cada quatro pares de indivduos selecionados para produzir descendentes, um no par no realiza o cruzamento. Quando isso acontece, os lhos gerados dessa operao so copias exatas de seus pais. Ou, seguindo a mesma linha de raciocnio, podemos simplesmente dizer que os pais selecionados foram adicionados diretamente na nova populao.

3.3. O ALGORITMO GENTICO

21

Figura 3.13: Transmisso do segundo par de indivduos de P(1) para a gerao seguinte Ao m da execuo do lao de formao da populao P(1), o algoritmo substitui P(1) pela nova populao P(1), incrementa a varivel t e calcula o grau de adaptao da populao como mostram as guras 3.14 e 3.15.

Figura 3.14: Populao P(2)

Figura 3.15: Clculo da funo de aptido de P(2) Aps formar sua segunda descendncia, o algoritmo nalmente para. Apesar de no haver nenhum indivduo da populao P(2) com aptido igual a 8, a varivel t j alcanou o valor 2, satisfazendo assim uma de suas condies de parada. Ao m de sua execuo, o algoritmo retorna o indivduo melhor adaptado, ou seja, 11010101. Esses resultados nos mostram o quo poderoso o AG pode ser. Da seleo natural, tivemos a garantia de que os indivduos mais adaptados reproduziriam mais freqncia. Da gentica, tivemos a garantia de que os genes desses indivduos seriam transmitidos para seus descendentes. Assim, aps algumas geraes podemos vimos uma populao mais adaptada emergir. Uma importante vantagem do algoritmo gentico est na natureza paralela da sua busca. Os algoritmos genticos implementam uma forma poderosa de subida de encosta que mantm

3.4. CODIFICAO

22

mltiplas solues. A gura 3.16 mostra mltiplas solues convergindo para pontos timos num espao de busca. Nesta gura, o eixo horizontal representa os pontos possveis num espao de solues, enquanto que o eixo vertical reete a qualidade dessas solues. Os pontos sobre a curva so membros da populao corrente de solues candidatas do algoritmo gentico. Inicialmente, as solues esto espalhadas por todo o espao de solues possveis. Aps vrias geraes, elas tendem a se agruparem em torno de solues de alta qualidade (LUGER, 2004).

Figura 3.16: AG visualizado como mtodo paralelo de subida de encosta Agora que j conhecemos o funcionamento do AG, na prxima seo abordaremos de forma mais detalhada temas como codicao, operadores genticos, avaliao, seleo e parmetros mais utilizados em algoritmos.

3.4

Codicao

A codicao a primeira coisa que devemos pensar quando tentamos resolver um problema utilizando Algoritmos Genticos. Existem vrias formas de se representar um cromossomo, no entanto, essa escolha depender muito do problema a ser resolvido. As duas formas de codicao mais bem sucedidas so a codicao binria e a codicao por permutao.

3.4.1

Codicao Binria

A codicao binria foi o primeiro tipo de representao proposto por Holland. Devido a sua simplicidade, a codicao binria permite vrias combinaes de cromossomos, mesmo com nmero reduzido de alelos. No entanto, esta codicao no natural para muitos tipos de problemas e algumas vezes preciso fazer correes antes e at mesmo depois dos cruzamentos e mutaes. A representao de um cromossomo nessa codicao feita atravs de uma cadeia de bits composta por 0s e 1s.

3.4. CODIFICAO

23

Figura 3.17: Exemplo de cromossomos com codicao binria Um bom exemplo para demonstramos a utilizao da codicao binria o problema de satisfao de uma Forma Normal Conjuntiva (FNC). Uma expresso est na sua forma normal conjuntiva quando ela for uma seqncia de clusulas ligada por uma relao e (). Cada uma das clusulas est na forma de uma disjuno, o ou (), de literais. Por exemplo, se os literais forem a, b, c, d, e e f, ento a expresso (a c) (a c e) (b c d e) (a b c) (e f) est na FNC (LUGER, 2004). Satisfazer uma FNC signica que devemos encontrar uma atribuio de verdadeiro ou falso (1 ou 0) para cada um dos seis literais, de modo que a expresso FNC seja avaliada como verdadeira. Assim, uma representao natural para o problema de satisfao da FNC uma seqncia de seis bits, cada bit, ordenadamente, representando verdadeiro (1) ou falso (0) para cada um dos seis literais, novamente na ordem a, b, c, d, e e f. Assim: 101010 indica que a, c e e so verdadeiros b, d e f so falsos e o exemplo de expresso FNC , portanto, falso (LUGER, 2004).

3.4.2

Codicao por Permutao

A codicao por permutao ou path usada principalmente em problemas cuja ordenao seja um fator importante na escolha de uma boa soluo. A representao de um cromossomo nessa codicao feita atravs de um conjunto de nmeros inteiros que representam uma posio numa seqncia. Assim como na codicao binria, para alguns tipos de cruzamentos e mutaes, so necessrias correes na estrutura do cromossomo para manter a sua consistncia, ou seja, para que representem uma seqncia vlida.

Figura 3.18: Exemplo de cromossomo com codicao por permutao

3.5. OPERADORES GENTICOS

24

Um bom exemplo para demonstramos a utilizao da codicao por permutao o clssico problema do caixeiro viajante (TSP - traveling salesperson problem). A descrio do problema a seguinte: Um caixeiro viajante deve visitar N cidades como parte de um roteiro de vendas. Existe um custo (por exemplo, a quilometragem ou tarifa area) associado a cada par de cidades no roteiro. Encontre o caminho com menor custo em que o caixeiro viajante inicie numa cidade numa cidade, visite todas as cidades exatamente uma vez e retorne ao ponto inicial. Uma representao para esse problema seria associar um nmero a cada cidade, por exemplo, 1, 2, ..., N; de modo que cada cromossomo formado descreva a ordem em que o caixeiro visitar as cidades.

3.5

Operadores Genticos

Os operadores genticos so os principais elementos de um Algoritmo Gentico, so eles os responsveis pela evoluo das solues durante a execuo da aplicao. Existem vrios tipos de operadores genticos, no entanto, o cruzamento e a mutao so os dois operadores mais comuns e ento presentes na maioria das implementaes. Segundo RAMOS & SALGADO (2001), o cruzamento o responsvel pela convergncia da populao, enquanto que a mutao tem como objetivo introduzir e manter variedade gentica. Dependendo do tipo de codicao escolhido, podem existir vrias formas de se implementar esses operadores.

3.5.1

Cruzamento

Segundo RAMOS & SALGADO (2001), o cruzamento (crossover) o operador gentico responsvel pela criao de novos cromossomos atravs da recombinao do material gentico de dois cromossomos j existentes na populao. Existem vrias formas de se implementar esse operador, no entanto, o mais importante que essa implementao garanta os alelos (ou caractersticas) transmitidos para os cromossomos lhos sejam exatamente os mesmos do cromossomo que os transmitiu. 3.5.1.1 Cruzamento para Codicao Binria

Dos vrios tipos de cruzamentos utilizados para codicao binria, podemos destacar o uniponto, o multiponto e o uniforme. O cruzamento uniponto aquele que possu um nico ponto de corte denido aleatoriamente. A gura 3.19 ilustra esse tipo de cruzamento. Nele, o primeiro lho herda os bits do primeiro pai at o ponto de corte, e a partir desse ponto herda os bits do segundo pai. Analogamente, o segundo lho acaba herdando os bits restantes.

3.5. OPERADORES GENTICOS

25

Figura 3.19: Exemplo de cruzamento uniponto O cruzamento multiponto funciona de forma semelhante ao cruzamento uniponto, s que com mais de um ponto de corte como mostra a gura 3.20.

Figura 3.20: Exemplo de cruzamento multiponto No cruzamento uniforme, gerada uma mscara aleatria que indica quais os genes dos dois cromossomos que vo ser trocados. Os descendentes so formados da seguinte forma, para o primeiro lho, onde a mscara for 0 ser herdado o bit do primeiro pai e onde a mscara for 1 ser herdado o bit do segundo pai. Analogamente, o segundo lho acaba herdando os bits restantes como mostra a gura 3.21.

Figura 3.21: Exemplo de cruzamento uniforme

3.5. OPERADORES GENTICOS 3.5.1.2 Cruzamento para Codicao por Permutao

26

Dos vrios tipos de cruzamentos utilizados para codicao por permutao, podemos destacar o cruzamento ordenado, o cruzamento parcialmente mapeado e o cruzamento circular. No cruzamento ordenado, os descendentes so gerados escolhendo uma subseqncia de cidades de um dos pais e preservando a ordem relativa das cidades do outro pai. A gura 3.22 ilustra o cruzamento ordenado. Aps denirmos dois pontos de corte, o primeiro lho herda a subseqncia de cidades (4567) que esto entre os dois pontos de corte do primeiro pai, em seguida, a partir do segundo ponto de corte herdada seqncia relativa de cidades (31289) do segundo pai, omitindo-se as repeties e obedecendo seqncia vai do segundo ponto de corte at o nal do cromossomo e do incio do cromossomo at o primeiro ponto de corte. O segundo lho gerado seguindo a mesma linha de raciocnio.

Figura 3.22: Exemplo de cruzamento ordenado No cruzamento parcialmente mapeado, assim como no cruzamento anterior, os descendentes so gerados escolhendo uma subseqncia de cidades de um dos pais. No entanto, os genes do outro pai so extrados preservando a ordem e a posio do maior nmero de cidades possveis. Por m, os genes restantes so escolhidos atravs de um mapeamento entre os dois pais. Considere o exemplo ilustrado na gura 3.23. Aps denirmos dois pontos de corte, o primeiro lho herda a subseqncia de cidades (4567) que esto entre os dois pontos de corte do primeiro pai. Aps isso, feito um mapeamento de cada cidade dessa subseqncia para a cidade situada na mesma posio do cromossomo do segundo pai (4-8, 5-7, 6-6, 7-9). Por ltimo, os genes restantes so herdados do segundo pai obedecendo ao posicionamento original (412 e 35), e no caso de haver algum gene repetido (4 e 5), ele ser substitudo pelo seu respectivo nmero mapeado (812 e 39). O segundo lho gerado seguindo a mesma linha de raciocnio.

3.5. OPERADORES GENTICOS

27

Figura 3.23: Exemplo de cruzamento parcialmente mapeado No cruzamento circular, os descendentes so gerados de forma que cada cidade e sua respectiva posio no cromossomo venham de um dos pais sem que ocorra repetio de cidades. O primeiro descendente gerado a partir da primeira cidade do primeiro pai (1xxxxxxxx) como mostra a gura 3.24. A prxima cidade a ser escolhida ser a cidade correspondente a primeira posio do segundo pai, mas na posio em que ela aparece no primeiro pai (1xx4xxxxx). Em seguida, selecionamos a cidade da quarta posio do segundo pai, mas na posio que ela aparece no cromossomo do primeiro pai (1xx4xxx8x), e assim sucessivamente at no termos mais opes (1234xxx8x). Por m, completamos as posies vazias com as cidades situadas nessas mesmas posies no cromossomo do segundo pai (123476985). O segundo lho gerado seguindo a mesma linha de raciocnio.

Figura 3.24: Exemplo de cruzamento circular

3.5.2

Mutao

A mutao um operador gentico que tem o objetivo de aumentar a diversidade gentica de uma populao a cada gerao. Usando apenas o cruzamento a populao de solues pode convergir para o que chamamos de mximo local, ou seja, quando todos os cromossomos da populao possuem um determinado alelo alfa e, no entanto, a melhor soluo necessita de um alelo beta j extinto. Esse problema pode ser resolvido com mutao que, utilizada com baixas probabilidades, pode alterar o valor desse alelo e evitar que o algoritmo que preso nesse mximo local.

3.6. AVALIAO E SELEO DE CROMOSSOMOS 3.5.2.1 Mutao para Codicao Binria

28

A mutao utilizada para codicao binria funciona de forma bastante simples, selecionando um cromossomo e mudando aleatoriamente o valor de alguns de seus bits de 0 para 1 e viceversa.

Figura 3.25: Exemplo de mutao binria 3.5.2.2 Mutao para Codicao por Permutao

Assim como na mutao para codicao binria, a mutao para codicao path tambm bastante simples. A chamada mutao com troca recproca sorteia dois genes do cromossomo e inverte suas posies.

Figura 3.26: Exemplo de mutao com troca recproca

3.6

Avaliao e Seleo de Cromossomos

Segundo RAMOS & SALGADO (2001), a avaliao da qualidade de um cromossomo e da soluo que ele representa feita por uma funo de aptido (Fitness Function). A funo de aptido a nica ligao que o AG tem com o problema que se pretende resolver. Por exemplo, suponha que precisssemos implementar uma funo de aptido para o problema da FNC mostrado na seo 3.4.1 deste captulo. A escolha de uma funo de aptido para esta populao de cadeia de bits no muito fcil. Por um lado, uma atribuio de valores verdade para literais tornar a expresso verdadeira ou, ento, a expresso ser falsa. Se uma atribuio especca tornar a expresso verdadeira, ento a soluo foi encontrada; caso contrrio, ela no a soluo. primeira vista parece difcil determinar uma funo de aptido que possa julgar a qualidade de cadeias de bits como solues potenciais (LUGER, 2004).

3.6. AVALIAO E SELEO DE CROMOSSOMOS

29

Entretanto, existem vrias alternativas. Uma delas seria observar que a expresso FNC completa composta pela conjuno de cinco clusulas. Assim, podemos conceber um sistema de avaliao que nos permita ordenar as solues de padres de bits num intervalo de 0 a 5, dependendo do nmero de clusulas que o padro satisfaz. Assim, o padro: 110010 tem aptido de 1, 010010 tem aptido de 2, 010011 tem aptido de 3 e 101011 tem aptido de 5 e uma soluo (LUGER, 2004). Os valores retornados pela funo de aptido so geralmente chamados mrito. atravs do mrito que selecionamos os cromossomos para gerar descendentes. Quanto maior for esse valor, maior probabilidade o cromossomo tem de ser escolhido. No entanto, importante que cromossomos com mrito baixo tambm sejam selecionados com menor freqncia porque neles tambm podem conter algum componente essencial para a soluo. Existem vrios mtodos para selecionar cromossomos segundo seu valor de mrito. Dentre eles podemos destacar os mtodos seleo por roleta e seleo por classicao. Na seleo por roleta criado um circulo imaginrio dividido em regies chamado roleta, onde cada cromossomo da populao ocupa uma regio da roleta proporcional ao seu mrito. A seleo feita lanando uma bolinha imaginria na roleta, o cromossomo que representar a regio onde a bolinha parar selecionado para participar do processo de gerao da nova populao. Assim, os cromossomos cujas regies possuem maior rea tero maior probabilidade de serem selecionados mais vezes. Na gura 3.27 podemos ver um exemplo de seleo por roleta.

Figura 3.27: Exemplo de seleo por roleta Como podemos ver esse mtodo no eciente para populaes onde a diferena entre os mritos forem grandes. Como no exemplo acima, onde o cromossomo com melhor mrito ocupa uma regio que representa 47% de toda a roleta. Com isso, os demais cromossomos tero chances muito baixas de serem selecionados. A seleo por classicao usada para contornar esse problema. Ela classica os cromossomos pelo valor de seu mrito. Assim, o pior cromossomo ca classicado como 1, o segundo pior como 2 e assim sucessivamente de forma que o melhor cromossomo seja classicado como

3.7. PARMETROS DE UM ALGORITMO GENTICO

30

n, onde n igual ao nmero de cromossomos da populao. A gura 3.28 ilustra um exemplo de seleo por classicao. Como podemos ver agora todos os cromossomos possuem chances mais homogneas de serem selecionados. Entretanto, este mtodo pode resultar numa menor convergncia, porque os melhores cromossomos no se distinguem muito dos outros.

Figura 3.28: Exemplo de seleo por classicao

3.7

Parmetros de um Algoritmo Gentico

Agora que conhecemos os principais elementos que constituem a base de um Algoritmo Gentico, faremos uma breve discusso sobre como ajust-los para se obter o melhor desempenho da aplicao. So eles: Codicao: Depende somente do problema a ser resolvido. A codicao binria a mais indicada, no entanto, podemos optar por outros tipos de codicao como a por permutao ou outra qualquer. O mais importante garantir que a codicao utilizada suporte os operadores genticos. Tamanho da populao: O nmero de cromossomos da populao compromete o desempenho da aplicao. Populaes pequenas podem levar convergncia para mximos locais devido reduzida diversidade gentica. Por outro lado, populaes com tamanho muito grande normalmente no a aumentam o desempenho da aplicao. Segundo OBITKO (1998), um bom tamanho para a populao cerca de 20-30 cromossomos, entretanto s vezes tamanhos de 50-100 cromossomo so relatados como melhores. Seleo: Existem vrias formas de se selecionar cromossomos pelo seu mrito. No entanto, devermos ter conscincia que o tipo de seleo escolhido afetar diretamente a forma com que a populao ir convergir. Taxa de cruzamento: O operador de cruzamento responsvel gerar novas solues para o problema. Por esse motivo, esse operador desse ser usado sob grande probabilidade. Segundo OBITKO (1998), a taxa de cruzamento deve car entre 80% a 95%. Entretanto, existem alguns tipos de problemas que funcionam melhor com taxas de 60%.

3.7. PARMETROS DE UM ALGORITMO GENTICO

31

Taxa de mutao: O operador de mutao responsvel pela diversidade gentica da populao. Assim, uma taxa de mutao muito elevada pode levar a uma procura quase aleatria. Portanto, segundo LACERDA & CARVALHO (1999), para evitar uma variao muito abrupta de uma populao para outra, recomendada a utilizao de pequenas taxas de mutao, normalmente entre 0,1% e 5%.

Captulo 4 Othello
4.1 Histria

Othello um jogo de tabuleiro de estratgia. Ele se baseia no jogo chamado Reversi, inventado em 1883 e ganhou popularidade considervel na Inglaterra no nal do sculo XIX. Os crditos da criao do jogo so reivindicados separadamente pelos ingleses Lewis Waterman e John W. Mollett. O jogo teve sua primeira referncia convel na edio de 21 de agosto de 1886 do The Saturday Review. Mais tarde, em 1895, um artigo do New York Times dizia: Reversi algo como Go, e jogado com 64 peas. Em 1898, uma conhecida editora de jogos alem chamada Ravensburger teve como um dos seus primeiros lanamentos o jogo Reversi. Dois livros europeus do sculo XVIII so mencionados na pgina 14 do livro Othello Quarterly de 1989. Eles fazem referncia a um jogo muito semelhante ao Reversi Ingls, levantando especulaes de que a sua origem seja mais antiga do que parece ser.

Figura 4.1: Tabuleiro do jogo Go, de origem chinesa Com um novo conjunto de regras criado na cidade japonesa de Mito em 1971, a empresa de jogos Tsukuda Original Co. registrou o jogo com o nome de Othello. O nome foi inspirado na obra de Shakespeare chamada Othello, o Mouro de Veneza. O jogo faz referncia ao conito entre o general Othello e seu subocial Iago que movido por inveja conspira contra o romance entre general, que negro e seu grande amor Desdmona, que branca. O jogo tambm pode ser comparado a uma competio de inveja, tema central da obra, uma vez que o objetivo do jogo consiste em tomar posse das peas de seu adversrio. 32

4.2. REGRAS

33

Em 2002, um comunicado da imprensa sobre as origens do jogo no fez nenhuma meno verso original: Othello foi inventado pelo entusiasta de jogos japons, Goro Hasegawa em 1971. Ele escolheu James R. Becker, para ajud-lo a desenvolver e comercializar o jogo. Inspirado em Go, um antigo jogo de estratgia chins, Hasegawa procurou criar um jogo rico em estratgia, mas que fosse acessvel para um jogador casual. Becker simplicou o jogo, cunhou o slogan, Um minuto para aprender... Uma vida para dominar e nomeou este novo jogo aps ouvir o clssico de Shakespeare, por causa das peas pretas e brancas. Othello foi introduzido pela primeira vez no Japo em 1973, pela Tsukuda Original Co., que por sugesto de Becker organizou a Associao Japonesa de Othello. No Brasil, a Grow Jogos e Brinquedos S.A. foi o ltimo fabricante do jogo.

4.2
4.2.1

Regras
Componentes

01 tabuleiro de 8x8 64 discos bi-coloridos: de um lado do disco preto e do outro lado desse disco branco. 02 jogadores: um branco e um preto.

4.2.2

Objetivo

O objetivo de cada jogador fazer com que, no nal da partida, haja o maior nmero possvel de peas de sua cor com no tabuleiro.

4.2.3

Preparao

Sorteiam-se quem jogar com a cor preta e quem car com a cor branca. A cor preta sempre inicia a partida. Coloque quatro peas nas casas centrais do tabuleiro, duas com face preta para cima e duas com face branca, conforme mostra a gura 4.2. As peas restantes devem se divididas entre os dois jogadores.

4.2. REGRAS

34

Figura 4.2: Congurao inicial do tabuleiro de Othello

4.2.4

O Jogo

O primeiro a jogar coloca, no tabuleiro, uma pea com a face preta voltada para cima, de modo a fazer com que uma das peas brancas que entre duas pretas.

Figura 4.3: Exemplo de uma possvel jogada inicial Cada vez que um jogador cercar uma pea de outra cor em duas extremidades, ela ser virada, isto , mudar de cor e de dono. Portanto, as peas no podem ser colocadas no tabuleiro em qualquer posio, mas deve-se ter sempre como objetivo cercar uma ou mais peas adversrias. Se, na sua vez de jogar, voc no puder colocar nenhuma pea de modo a virar, pelo menos, umas das peas do outro jogador, voc perder a vez e o adversrio jogar novamente. Assim, o resultado da jogada que vemos na gura anterior a conquista de uma posio para as peas pretas, com a transformao da pea branca em preta.

Figura 4.4: Trs possibilidades de jogadas para as peas brancas

4.2. REGRAS

35

A seguir, o adversrio coloca uma pea branca no tabuleiro de forma a cercar uma das peas pretas. Perceba que, no exemplo acima, h trs possibilidades de jogada para as peas brancas: na vertical, na horizontal e a diagonal. No incio da partida, so relativamente poucas as alternativas de jogada, porm, conforme os lances vo ocorrendo, torna-se possvel cercar vrias peas adversrias. No entanto, para que voc possa virar todas numa nica jogada, no pode haver nenhum espao vazio entre elas.

Figura 4.5: Exemplo de jogada invlida por espao em branco No caso acima, a pea preta assinalada no poderia ser colocada nessa posio. Uma boa opo de jogada seria, por exemplo:

Figura 4.6: Exemplo de boa jogada O que ocasionaria a conquista de duas peas brancas. possvel, simultaneamente, cercar peas em mais de um sentido: horizontal, vertical e diagonal, mas todas as peas cercadas devem ser viradas. No se podem virar apenas algumas, mesmo que seja interessante do ponto de vista estratgico. Uma pea s pode ser virada como resultado direto de uma jogada, tendo que estar, obrigatoriamente, na mesma linha da pea atacante. No possvel, ento, virar peas por tabela.

4.2. REGRAS

36

Figura 4.7: Exemplo de uma tentativa invlida de virar peas por tabela Na gura acima, a colocao da pea preta assinalada provocar apenas o giro das duas peas brancas ao lado dela, enquanto que as duas peas brancas da vertical continuam imveis, pois no foram cercadas como resultado direto da jogada, conforme podemos vericar na gura 4.8.

Figura 4.8: Resultado da jogada da gura 4.7 Tambm no permitido voltar jogada. Assim que voc colocar uma pea, dever, obrigatoriamente, dar continuidade ao jogo, mesmo que o resultado lhe seja desfavorvel depois. As peas do no mudam mais de posio. O giro de peas, com a conseqente troca de cores, ocorre sempre nas posies onde foram originalmente colocadas.

4.2.5

Fim de Jogo

A partida termina quando no houver mais lugar no tabuleiro para a colocao de peas, ou quando no houver mais possibilidade de jogada.

4.2.6

Vencedor

O jogador que tiver mais peas de sua cor no tabuleiro ser o vencedor.

Captulo 5 Desenvolvimento da Aplicao


Neste captulo sero discutidos os detalhes de implementao do projeto proposto por esse trabalho. O projeto consiste em criar uma verso do jogo Othello cuja as regras foram apresentadas no captulo 4, e dois jogadores virtuais, um representando a Poda alfa-beta e outro o Algoritmo Gentico, discutidos respectivamente nos captulos 2 e 3 deste trabalho. Assim, discutiremos os principais mtodos e classes responsveis pela interao do usurio com a aplicao, por validar as regras do jogo e pelo comportamento de cada inteligncia articial estudada no projeto.

5.1

Linguagem e ferramentas utilizadas para o desenvolvimento

Dentre as vrias linguagens de programao atuais, optou-se por desenvolver a aplicao utilizando a linguagem Java. A principal razo desta escolha foi o fato de j est habituado linguagem, sendo esta, utilizada para desenvolver sistemas de grande porte em nosso cotidiano de trabalho. Alm disso, no to difcil encontrar outras razes que justique essa escolha, umas delas a portabilidade. Diferentemente das linguagens convencionais, que so compiladas para cdigo nativo, a linguagem Java compilada para um bytecode que interpretado pela mquina virtual java (JVM). Isso signica que uma aplicao feita em Java pode ser executada em qualquer plataforma que d suporte a uma JVM. Podemos ainda citar o suporte a programao multithread que permite aumentar o desempenho de uma aplicao executandoa paralelamente em vrios processadores. Por m, por ser uma linguagem bastante exvel e difundida atualmente, est mais que justicada sua escolha. Para desenvolver a aplicao foi utilizado o kit de desenvolvimento da linguagem Java verso 1.6.0, distribudo pela Oracle Corporation, em conjunto com a IDE Eclipse 3.3.0. As imagens utilizadas foram criadas utilizando a ferramenta Paint Shop Pro Photo X2 verso 12.5 de propriedade da Corel Corporation. Os links dos sites dos proprietrios dessas ferramentas estaro disponveis na bibliograa deste trabalho. 37

5.2. ARQUITETURA

38

5.2

Arquitetura

Hoje em dia, o sucesso ou o fracasso de um projeto de software est diretamente ligado a forma com que ele foi concebido, ou seja, aos princpios da boa engenharia de software. Apesar de o projeto proposto apresentar uma baixa complexidade se comparado aos grandes softwares comerciais, tentamos adotar algumas boas prticas que ns ajudasse a alcanar nosso objetivo e que facilitasse sua compreenso por parte de terceiros. No caso especco desse projeto, foi seguida uma losoa orientada a objetos com foco na arquitetura e em sua modelagem visual. Assim, foi necessrio recorrer ao UML (Unied Modeling Language) como ferramenta auxiliar de modelagem e desenvolvimento de projeto. O projeto est dividido em trs partes principais - gui ou interface, domnio e ia. A gura 5.1 ilustra esta diviso. O pacote gui est situado na parte superior do diagrama, sua funo agrupar todas as classes de interface grca. atravs dessas classes que o jogador interage com o jogo posicionando suas pedras no tabuleiro. O pacote situado na parte central do diagrama o de domnio, sua funo agrupar todas as classes responsveis por controlar as regras de negocio da aplicao. As classes de domnio armazenam informaes sobre o estado atual do jogo como, por exemplo, pontuao e espaos vagos no tabuleiro. Situado na parte inferior do diagrama, temos o pacote de ia (Inteligncia Articial). Sua funo agrupar todas as classes responsveis por implementar os jogadores virtuais da aplicao, mais especicamente, a Poda alfa-beta e o Algoritmo Gentico.

Figura 5.1: Diagrama de pacotes da aplicao A seguir, discutiremos de forma mais detalhada a responsabilidade de cada um desses pacotes, assim como o funcionamento e interao das suas respectivas classes e mtodos.

5.2. ARQUITETURA

39

5.2.1

Pacote GUI

Ao iniciar a aplicao, o usurio ser posto no papel de um jogador, e, portanto deve se submeter s caractersticas impostas ao mesmo. Sua interao com a aplicao se dar por meio de uma interface grca que o colocar diante de um jogo virtual de Othello idntico a um jogo real. A linguagem Java oferece, dentre as funcionalidades incorporadas sua API padro, um extenso conjunto de classes e interfaces para o desenvolvimento de aplicaes grcas. Esse conjunto de componentes grcos se divide em duas APIs, a AWT (Abstract Windowing Toolkit) e a Swing. A primeira API agrupa funcionalidades grcas que esto presentes desde a primeira verso do Java, que operam tendo por base as funcionalidades de bibliotecas grcas do sistema onde a aplicao est sendo executada. J a segunda API uma extenso padronizada da AWT, mas trabalha de uma maneira totalmente diferente. Ela renderiza por conta prpria todos os componentes grcos deixando aparncia independente do sistema operacional. Assim, visando tornar a interao com o usurio o mais simples e perceptvel possvel, optou-se por utilizar a API Swing em nosso projeto. A gura 5.2 ilustra a interao de suas principais classes no pacote gui. Como podemos ver, a criao de uma interface grca envolve tipicamente a criao de um container, um componente que pode receber outros componentes. Em nosso caso, os principais containeres utilizados foram o JFrame, o JPanel e o JDialog. Aps a sua criao, esses containeres estaro aptos a receber componentes de interface com o usurio, como por exemplo, o tabuleiro e suas pedras. Os principais componentes utilizados para essa funo foram o JLabel, o JButton, o JRadioButton e o ImageIcon. Finalmente, preciso especicar quais devem ser os efeitos das aes dos usurios quando realizadas sobre cada um desses componentes, como por exemplo, um clique do mouse sobre o tabuleiro. Isto se d atravs da especicao de classes que manipulam eventos, projetadas para a aplicao. Em nosso projeto, foram usadas a interface ActionListener e a classe MouseAdapter para determinar o comportamento da aplicao. O container central da aplicao a classe Reversi, a parti dela que podemos executar a aplicao. A classe Reversi estende da classe JFrame e agrega atributos como Tabuleiro, Congurao e Sobre, seus eventos so tratados pela classe MenuActionListener que implementa o mtodo actionPerformed da interface ActonListener. A classe Tabuleiro a principal classe do pacote gui, ela estende da classe JPanel e responsvel por materializar o tabuleiro do jogo e suas respectivas pedras na tela do usurio. Alm disso, ela agrega as duas principais classes tratadoras de eventos desse projeto, JogadaComputadorListener que tambm implementa o mtodo actionPerformed da interface ActionListener e JogadorListener que estende de MouseAdapter e reescreve os mtodos mouseEntered, mouseExited e mouseClicked. Por m, ela quem faz a comunicao entre o pacote gui e o pacote de domnio agregando o atributo ControleJogo. Finalmente temos as classes Congurao e Sobre, ambas estendendo da classe JDialog. Essas classes possuem um papel secundrio para a aplicao, enquanto a primeira

5.2. ARQUITETURA

40

implementa uma tela de congurao pertinente ao jogo, a segunda apenas exibe informaes sobre a aplicao e seus criadores.

Figura 5.2: Diagrama de classes simplicado do pacote gui importante explicarmos com mais detalhes as formas com que o jogador humano e o jogador computador interagem com o jogo. A classe responsvel por tratar os eventos gerados pelo jogador humano, quando este possui a vez de jogar, a classe JogadorListener, sua interao com o jogo feita pelos mtodos mouseEntered, mouseExited e mouseClicked. Ao passar o mouse por uma casa vazia do tabuleiro gerado um evento que chama o mtodo mouseEntered que, em seguida, consulta o domnio do jogo para saber se aquela casa uma possvel jogada, caso seja, uma pedra com a cor do jogador humano aparecer sobre o espao vazio. Ao retirar o mouse dessa casa, gerado outro evento que chama o mtodo mouseExited. O mtodo consulta o domnio do jogo para saber se aquela pedra foi realmente jogada, caso no, a casa volta a car vazia. Por ltimo, temos o mtodo mouseClicked, esse mtodo chamado aps clicarmos em alguma casa do tabuleiro, caso essa casa j esteja marcada como uma possvel jogada, o mtodo atualiza o domnio do jogo xando uma pedra representando a sua cor naquela posio do tabuleiro. Por outro lado, a classe responsvel por tratar os eventos gerados pelo jogador computador a classe JogadaComputadorListener, ela ativada por um atributo do tipo Timer que possui os mtodos start e stop. Quando o jogador humano perde a vez, dado um start, e quando o jogador computador perde a vez, dado um stop. Depois de ativada, a classe Joga-

5.2. ARQUITETURA

41

daComputadorListener chama sua implementao para o mtodo actionPerformed, este por sua vez, que faz uma requisio de jogada para o domnio que, por sua vez, delega para a classe do pacote ia referente inteligncia articial escolhida.

5.2.2

Pacote Domnio

O pacote de domnio o mais importante de toda a aplicao, dentre suas principais funes podemos citar o gerenciamento da partida, a validao das regras envolvidas no jogo, a manuteno do estado corrente da partida e a ligao entres todos os pacotes da aplicao. Esse pacote agrega trs classes, so elas ControleJogo, EstadoJogo e Pedra, e sua interao pode ser vista na gura 5.3.

Figura 5.3: Diagrama de classes simplicado do pacote domnio A classe ControleJogo a principal classe desse pacote, ela quem gerencia as partidas de Othello controlando os turnos entre os jogadores, aplicando e validando as regras entre outras coisas. Dentre seus principais mtodos, podemos citar: buscaJogadaComputador: Esse mtodo verica qual inteligncia articial foi escolhida e delega a busca da jogada para a sua respectiva classe no pacote ia. A jogada recebida passada como parmetro para o mtodo realizaJogada; realizaJogada: Esse mtodo quem de fato realiza uma jogada, tanto para tanto para o jogador computador quanto para o jogador humano. Ele atualiza todas as variveis de controle e de estado de acordo com as regras do jogo; aplicaRegrasJogada: Esse um mtodo auxiliar usado pelo mtodo realizaJogada. Sua funo atualizar o tabuleiro do jogo virando as pedras em todas as direes possveis; checaPossivelJogada: Esse mtodo verica se uma determinada casa vazia no tabuleiro est apta a se tornar uma jogada efetiva, ou seja, ele checa se possvel virar pelo menos

5.2. ARQUITETURA

42

uma pedra adversria. Esse mtodo de grande valia para o mtodo mouseEntered do pacote gui; checaSeQuemPossuiVezPossuiJogada: Esse mtodo verica se o jogador que possui a vez est apto a jogar, ou seja, se possui alguma jogada naquele turno; mJogo: Esse mtodo verica se o jogo chegou ao m, seja por falta de espaos vazios no tabuleiro ou por falta de jogada para ambos os jogadores. A classe EstadoJogo implementa o estado do jogo Othello, ela que mantm as informaes relacionadas posio e a cor de cada pedra no tabuleiro, a pontuao dos jogadores, o jogador que possui a vez, alm de todo o histrico de jogadas da partida. O principal mtodo dessa classe o mtodo heurstica, sua funo avaliar a congurao corrente do tabuleiro e atribuir um valor mensurvel para a jogada. Esse mtodo um sinnimo das funes utilidade e aptido que foram discutidas, respectivamente, nos captulos 2 e 3 desse trabalho. A classe Pedra tem a funo apenas de representar uma pedra de Othello do mundo real. Seu mtodo inverterCor usado para inverter a cor da pedra quando for virada aps uma jogada.

5.2.3

Pacote IA

O pacote ia rene as classes responsveis por implementar a inteligncia do jogador computador. Pode ser considerado o pacote mais importante da aplicao do ponto de vista acadmico pelo fato de agrupar os algoritmos que sero alvos de estudo desse trabalho. Esse pacote se divide em dois subpacotes, denominados minimax e ag. O pacote minimax contm apenas uma classe chamada Busca, ela foi criada inicialmente com intuito de agrupar vrios algoritmos de busca seqencial, no entanto, foi implementado apenas o algoritmo Minimax com sua otimizao alfa-beta. Como podemos ver na gura 5.4, a classe Busca apresenta uma estrutura bastante simples, seu principal mtodo buscaMinimaxAlfaBeta que implementa os conceitos de busca seqencial apresentado no capitulo 2 desse trabalho.

Figura 5.4: Diagrama de classes simplicado do pacote minimax

5.2. ARQUITETURA

43

O mtodo buscaMinimaxAlfaBeta um mtodo recursivo, ou seja, que chama ele prprio. Ele se vale dos parmetros jogo (EstadoJogo), profundidade (int), alfa (int), beta (int) e base (int), para percorrer toda a rvore de estados de uma partida de Othello. O parmetro EstadoJogo o n inicial da rvore de estados, na primeira chamada do mtodo passado o estado corrente da partida que est em andamento. Esse parmetro utilizado pelo atributo ControleJogo para simular os diferentes estados da rvore de busca. O parmetro profundidade dene a quantidade mxima de nveis que o algoritmo poder descer na sua busca pela melhor jogada, ou seja, sua antecipao para n nveis. Esse parmetro denido de forma proporcional a diculdade escolhida, ou seja, quando mais difcil mais profunda ser a busca, e decrementado a cada nvel que desce. Os parmetros alfa e beta so utilizados para realizar as podas alfas e betas vistas na seo 2.3 desse trabalho. Os valores desses parmetros so atualizados a cada chamada desse mtodo. O parmetro base utilizado para marcar o nvel do n pai. O pacote ag responsvel por agrupar as classes que implementam o Algoritmo Gentico apresentado no captulo 3 desse trabalho. Esse pacote agrega quatro classes, so elas AlgoritmoGenetico, Cromossomo, Gene e MisturaCromossomo, e sua interao pode ser vista na gura 5.5.

Figura 5.5: Diagrama de classes simplicado do pacote ag A classe AlgoritmoGenetico a principal classe desse pacote, ela quem gera a populao inicial, avalia e seleciona os cromossomos, aplica os operadores de recombinao e mutao

5.2. ARQUITETURA

44

para formar novas populaes, entre outras atribuies. importante destacarmos que essa classe mantm e evolui duas populaes de cromossomos, uma representando as possveis aes para o jogador computador e outra representando as possveis aes de seu adversrio, o jogador humano. Os motivos dessa abordagem sero explicados com mais detalhes nas sees seguintes, por hora, s precisamos ter em mente que assim como qualquer jogo, em Othello tambm existe um conito de interesse. Isso signica que a vitria numa partida no depende apenas das suas jogadas, mas sim do benecio que elas traro diante das jogadas do seu adversrio que tambm tenta vencer a partida. Dentre os principais mtodos utilizados por essa classe, podemos citar: gerarPopulacaoInicial: Esse mtodo gera as populaes iniciais do computador e de seu adversrio, o jogador; combinarPopulacoes: Esse mtodo gera uma terceira populao formada pelo produto cartesiano entre a populao do computador e a populao do jogador. Essa terceira populao ser usada na avaliao da aptido de cada cromossomo dessas duas populaes; avaliarPopulacoes: Esse mtodo avalia a aptido da populao do computador e da populao do jogador. A avaliao feita atravs da populao combinada; selecaoPorClassicacao: Esse mtodo implementa a seleo por classicao vista na seo 3.6 desse trabalho; selecaoElitismo: Esse mtodo implementa o operador de elitismo comentado na seo 3.3 desse trabalho; cycleCrossover: Esse mtodo implementa uma variao do cruzamento circular visto na seo 3.5.1.2 desse trabalho; mutacaoPorTrocaReciproca: Esse mtodo implementa a mutao por troca recproca vista na seo 3.5.2.2 desse trabalho; gerarNovaPopulacao: Esse mtodo faz uso dos operadores genticos para produzir novas populaes para o computador e para o jogador. As classes Cromossomo e Gene servem apenas para representar a estrutura da codicao escolhida para implementao. Enquanto o Cromossomo representa um conjunto de jogadas, o Gene representa a posio de uma nica jogada, ou seja, sua coordenada no tabuleiro. Finalmente, temos a classe JuntaCromossomo, ela uma classe auxiliar usada pelo mtodo avaliarPopulacoes para representar dois cromossomos intercalados.

5.3. FORMA DE IMPLEMENTAO DOS ALGORITMOS

45

5.3

Forma de implementao dos Algoritmos

Agora que j conhecemos os conceitos gerais que envolvem as duas tcnicas de inteligncia articial estudada nesse trabalho, bem como detalhes da arquitetura da aplicao envolvendo o comportamento de suas principais classes e mtodos. Chegou hora de apresentarmos os detalhes especcos de nossa implementao para o algoritmo de Poda alfa-beta e para o Algoritmo Gentico.

5.3.1

Implementao da Poda alfa-beta

A nossa implementao para o algoritmo de Poda alfa-beta possui, basicamente, os mesmos componentes e segue as mesmas etapas vista no captulo 2 desse trabalho. No entanto, dois pontos importantes valem apena serem discutidos, o primeiro diz respeito funo utilidade concebida para o jogo Othello e o segundo diz respeito aos nveis de diculdade denidos para o jogo quando zer uso dessa tcnica. A funo utilidade adotada foi concebida levando em conta os seguintes critrios: vantagem de pedras do computador sobre o adversrio e peso associado a casa do tabuleiro onde a pedra foi jogada. A vantagem de pedras representa diretamente o conito de interesses entre os dois jogadores de Othello, que consiste em ter a posse de um nmero maior de pedras que seu adversrio. Assim, segundo esse critrio, a melhor jogada ser aquela que conduzir a partida para um estado onde o computador possua maior vantagem de pedras possveis. No entanto, como estamos fazendo uso de uma antecipao para n nveis, a adoo de um critrio de avaliao relativamente simples poderia no ser suciente para conduzir o computador para uma vitria visto que essa vantagem pode ser apenas uma vantagem momentnea usada como armadilha por parte do adversrio. Assim, visando diminuir a ao do efeito de horizonte sobre a heurstica, adotamos um segundo critrio de avaliao para a funo utilidade. Ele consiste em associar um peso a cada casa do tabuleiro levando em conta a importncia dessa casa para a estratgia do jogo, ou seja, quanto mais importante for a casa maior ser o seu peso. Entretanto, para denirmos uma matriz de pesos seriam necessrios anos de experincia em Othello, coisa que no possumos no momento. Para solucionar esse problema recorremos ALLIOT & DURAND (1996), que em seu experimento fez uso de algoritmos genticos para moldar uma matriz de pesos para um tabuleiro de Othello como mostra na gura 5.6. Por m, denimos a funo utilidade como: U (e) = 0, 65 V (e) + 0, 35 C(P(e)), onde V(e) a diferena entre o nmero de pedras do computador e o nmero de pedras do jogador adversrio, P(e) o peso da casa onde a ltima pedra foi jogada, C(e) um conversor de peso para a escala de mrito denida entre -64 e 64, e U(e) o valor do mrito do estado e.

5.3. FORMA DE IMPLEMENTAO DOS ALGORITMOS

46

Figura 5.6: Avaliao esttica do tabuleiro do jogo Othello Em termos prticos, vejamos como o algoritmo calcula o valor da funo utilidade para o estado ilustrado na gura 5.7, onde temos o computador no controle das pedras de cores pretas e sua ltima jogada apontada pela seta vermelha: U (e) = 0, 65 V (e) + 0, 35 C(P(e)); U (e) = 0, 65 ( pedrasPretas pedrasBrancas) + 0, 35 C(240); U (e) = 0, 65 (6 8) + 0, 35 (64); U (e) = 1, 3 + 22, 4; U (e) = 23, 7 logo, por se tratar de um valor de mrito negativo, dicilmente o algoritmo escolheria uma jogada como essa.

Figura 5.7: Exemplo de estado do jogo Othello A aplicao apresenta trs nveis de diculdade: iniciante, intermedirio e grand othello. Para denirmos esses nveis de diculdade para o algoritmo de Poda alfa-beta, adotamos uma antecipao para n nveis para representar cada uma delas. Assim, atravs de testes de usurio analisamos o tempo de resposta do jogo para os diferentes nveis de profundidade a m de descobrir qual a profundidade mxima que a aplicao consegue atingir num intervalo aceitvel de tempo sem que houvesse problemas de congelamento da aplicao. Assim, a partir da profundidade mxima encontrada, moldamos os diferentes nveis de diculdade deste algoritmo como mostra a gura 5.8.

5.3. FORMA DE IMPLEMENTAO DOS ALGORITMOS

47

Figura 5.8: Tabela de diculdade da Poda alfa-beta

5.3.2

Implementao do Algoritmo Gentico

A viso evolutiva para soluo de um problema apresentada por Holland em seu algoritmo tem servido de base em pesquisas que buscam por solues para problemas de alta complexidade. Assim, para ajustar-se ao problema apresentado por uma partida de jogo de Othello, foi necessrio realizar algumas modicaes no modelo de algoritmo gentico apresentado no captulo 3 deste trabalho, como tambm denir quais parmetros e implementaes sero utilizadas no projeto. Tais modicaes e denies so relativas codicao, a funo de aptido, a forma de seleo, aos operadores genticos, a condio de parada, a taxa de elitismo e aos nveis de diculdade implementados. 5.3.2.1 Codicao

Aps analisarmos as inmeras formas de representao de cromossomo, optou-se por usar a codicao por permutao. A principal vantagem de usar esse tipo de codicao que ela nos permite representar um gene como um nmero inteiro pertencente ao conjunto de coordenadas do tabuleiro de Othello. Assim, como podemos ver na gura 5.9, o gene representado por um nmero de dois dgitos, onde o nmero das dezenas representa uma linha e o nmero das unidades representa uma coluna, formando uma jogada denida pelo par coordenado (linha, coluna). Outro fator decisivo para a escolha desse tipo de codicao foi semelhana com o problema do caixeiro viajante visto na seo 3.4.2 desse trabalho. Enquanto o problema do caixeiro busca a melhor ordenao de cidades para minimizar o gasto total de uma tour pelas cidades, o problema do jogo Othello busca, a grosso modo, a melhor ordenao de jogadas para maximizar sua vantagem de pedras sobre o adversrio.

Figura 5.9: Coordenadas do tabuleiro de Othello

5.3. FORMA DE IMPLEMENTAO DOS ALGORITMOS

48

Por m, denimos o cromossomo como uma lista ordenada de genes de tamanho igual quantidade de casas do tabuleiro, ou seja, uma lista com 64 jogadas como mostra a gura 5.10. Neste momento, o leitor deve est no mnimo intrigado pela escolha de um cromossomo de tamanho xo to longo e que no decorrer da partida carregar consigo genes que representam posies do tabuleiro que j foram jogadas. A justicativa para o uso dessa estratgia se d pelo ganho que a aplicao ter por no precisar validar os novos cromossomos nas operaes de cruzamento e por no precisar tratar possveis casos especiais nas operaes de clculo da aptido dos indivduos. Alm do mais, os genes que no possuem mais utilidade para o jogo em andamento provavelmente no sero prejudiciais para a aplicao visto que estamos manipulando uma lista de prioridade, logo, aps algumas geraes os genes teis tendero a se posicionar nas primeiras posies do cromossomo enquanto que os genes que no possurem mais valor se posicionaro no nal do cromossomo.

Figura 5.10: Exemplo de codicao para o jogo Othello 5.3.2.2 Funo Aptido

A funo de aptido adotada para o Algoritmo Gentico dessa aplicao foi concebida seguindo os mesmos critrios de avaliao da funo utilidade vista na seo 5.3.1 desse trabalho. Assim, de forma semelhante ao algoritmo de Poda alfa-beta que estende sua rvore de estados e aplica sua funo utilidade em cada um de seus ns folha, nosso AG deve prover de uma estrutura que permita estender um ramo de rvore especco para fazer uso de sua funo aptido. A primeira idia que tivemos foi a de usarmos a abordagem tradicional de AG com uma populao de cromossomos, onde cada um desses cromossomos representaria uma partida de Othello e seus genes representariam as jogadas do computador e seu adversrio. No entanto, essa abordagem peca por representar as jogadas do computador e de seu adversrio num mesmo cromossomo, isso signica que ao usarmos a funo aptido e operadores genticos o algoritmo ir evoluir as jogadas do computador e degradar as jogadas do seu adversrio. O leitor pode at est achando que esta uma boa soluo, mas devemos lembr-lo que Othello um jogo onde existe um conito de interesses entre dois jogadores que buscam ganhar a partida. Logo, para vencer a partida, o computador deve dispor de jogadas que se sobressaiam no s sobre as piores jogadas de seu adversrio, como tambm sobre as melhores. Por m, nessa abordagem a maioria dos cromossomos teria que passar por um processo de correo para que viesse a representar partidas vlidas de Othello.

5.3. FORMA DE IMPLEMENTAO DOS ALGORITMOS

49

Assim, para contornarmos esse problema recorremos soluo utilizada por RAMOS & SALGADO (2001), que em seu trabalho evoluiu duas populaes de cromossomos, uma representando as jogadas do computador e outra representando as jogadas de seu adversrio, para implementar a inteligncia num jogo de xadrez. Segundo essa abordagem, os operadores genticos vo operar nestas duas populaes separadamente, originando descendentes mais adaptados para ambas. Enquanto que a avaliao de seus cromossomos feita levando em conta no s a qualidade das jogadas isoladamente, mas tambm as possveis respostas do adversrio. Logo, para se conseguir avaliar estas seqncias de jogadas computador-adversrio criada, em cada ciclo de evoluo do AG, uma populao misturada, constituda por cromossomos das populaes do computador e de seu adversrio, intercalados. A gura 5.11 ilustra o processo de formao dessa terceira populao.

Figura 5.11: Exemplo de populao intercalada usada para clculo de aptido A idia bsica desse processo obter o produto cartesiano das duas populaes, ou seja, uma populao formada por todos os pares ordenados onde o primeiro elemento um cromossomo do computador e o segundo um cromossomo do adversrio. Cada um desses cromossomos resultantes formado por uma seqncia de lances ordenados de forma a representar partidas vlidas de um jogo Othello como mostra a gura 5.12.

Figura 5.12: Exemplo de cromossomo intercalado usado para clculo de aptido Por m, a funo de aptido opera na populao intercalada realizando desta maneira mltiplas avaliaes para cada cromossomo das populaes do computador e de seu adversrio. No exemplo da gura 5.11, cada cromossomo do computador avaliado duas vezes e o seu mrito ser uma mdia dessas avaliaes, dessa forma o cromossomo com maior aptido ser aquele que se sair melhor sobre todas as estratgias de jogo presentes na populao do adversrio. 5.3.2.3 Seleo, Cruzamento e Mutao

Agora que j denimos a codicao e a funo de aptido da aplicao, chegou a hora de justicar as escolhas feitas para as operaes de seleo, cruzamento e mutao.

5.3. FORMA DE IMPLEMENTAO DOS ALGORITMOS

50

Comeando pela seleo, optou-se pela seleo por classicao vista na seo 3.6 deste trabalho, porque esta se adapta melhor as populaes onde as medidas de mrito se distanciam muito de um indivduo para outro. Alm do mais, a seleo por classicao evita que a populao convirja rapidamente correndo o risco de car estacionada num ponto de mximo local. Na operao de cruzamento, optou-se por utilizar o cruzamento circular visto na seo 3.5.1.2 deste trabalho, porque este tipo de cruzamento consegue transmitir elmente as caractersticas dos pais para os lhos evitando assim que a busca por uma boa soluo siga um caminho quase aleatrio. Assim, adotou-se uma taxa de cruzamento de 90% para o uso deste operador. Finalmente temos o operador de mutao, devido a sua simplicidade optou-se por utilizar a mutao por troca recproca vista na seo 3.5.2.2 deste trabalho aplicada a uma taxa de 2%. 5.3.2.4 Condies de Parada, Elitismo e Nveis de Diculdades

Os ltimos detalhes sobre esta implementao so referentes condio de parada, a taxa de elitismo e aos nveis de diculdade. Como vimos na seo 3.3 deste trabalho, uma boa condio de parada para uma implementao de Algoritmo Gentico quando se encontra uma soluo tima ou satisfatria para resolver o problema. No entanto, denir uma condio de parada como esta para nosso problema torna-se complicado pelo fato de que nossa funo de aptido no retorna uma medida absoluta de satisfao para o problema, mas sim uma satisfao mdia calculada sobre uma pequena amostragem de estratgias de jogo. Assim, mesmo que denssemos uma vitria por qualquer placar como sendo uma soluo satisfatria para o problema, no haveria garantias de que ela satiszesse o problema devido ao fato de que o adversrio poderia responder com uma estratgia de jogo melhor. Portanto, optou-se simplesmente por estipular um patamar para a quantidade de geraes de descendentes que sero produzidas. No nosso caso, optou-se pelo valor de 10 geraes antes do AG cessar sua execuo. Quando criamos uma nova populao por cruzamento e mutao, ns temos uma grande chance de perder os melhores cromossomos de uma gerao para outra como vimos na seo 3.3 deste trabalho. Assim, para contornar esse problema foi adotado uso do operador de elitismo que consiste em preservar as melhores solues de uma gerao para outra. Assim, optou-se por uma taxa de elitismo de 4 indivduos a m de prevenir a perda das melhores solues j encontradas. Para denirmos os trs nveis de diculdade para o Algoritmo Gentico, adotamos o tamanho da populao como critrio mesmo sabendo que o mesmo no deve ser considerado sinnimo de aumento de desempenho da aplicao. A escolha desse critrio deu-se atravs de testes de usurio na qual foram testadas vrias combinaes de parmetros, sendo observado que o tamanho da populao era o fator que mais impactava na inteligncia do computador.

5.4. APLICAO

51

Assim, de forma semelhante aos testes feitos para a Poda alfa-beta da seo 5.3.1, moldamos os diferentes nveis de diculdade do AG como mostra a gura 5.13.

Figura 5.13: Tabela de diculdade do Algoritmo Gentico

5.4

Aplicao

Ao iniciar a aplicao o usurio ser colocado diante da tela inicial do jogo como mostra a gura 5.14a. Neste ponto o usurio pode escolher entre comear uma nova partida de Othello, editar as conguraes da partida ou simplesmente fechar a aplicao.

(a) Antes de uma partida

(b) Aps iniciar uma partida

Figura 5.14: Interface grca da aplicao Ao optar por uma nova partida, o usurio ento posto diante de um tabuleiro virtual de Othello e com suas respectivas pedras posicionadas para comear a partida como mostra a gura 5.14b. A interao do jogador se d atravs da ao de posicionar a seta do mouse sobre uma casa qualquer do tabuleiro que represente uma possvel jogada, onde automaticamente aparecer uma pedra de sua cor sobre o espao vazio, caso o jogador deseje realizar esta jogada basta dar um clique sobre este espao que a ao de jogar ser nalizada. Independente de quem d o primeiro lance, o jogador sempre far uso das pedras de cor branca. Mesmo sabendo que as

5.5. OUTRAS IMPLEMENTAES

52

regras do jogo dizem que o primeiro a jogar ser aquele que tiver a posse das pedras de cor preta, optou-se por no implement-la visto que a mesma no trivial para o funcionamento do jogo e acabaria consumindo um tempo precioso que preferimos usar em aspectos mais importantes desse trabalho. Na parte inferior da aplicao exibia uma srie de informaes sobre a partida em andamento. A barra de cor verde tem a funo de narrar a partida sinalizando de quem a vez de jogar entre outras coisas. Para o caso da jogada atual pertencer ao usurio ser exibida a mensagem Sua vez de jogar e para o caso da jogada pertencente ao computador a mensagem Aguardando a jogada do computador.... Ao m da partida exibida a mensagem Voc venceu a partida, parabns! para a vitria do usurio, Computador venceu a partida, noob! indicando vitria do computador ou ainda Partida terminou empatada indicando que no houve vencedor. Ainda nesta rea, um pouco abaixo do tabuleiro, tambm so exibidos o nmero de pedras conquistadas pelo usurio e pelo computador, variando de zero a 64 para cada um deles. Ao optar por editar as conguraes da partida, uma caixa de dilogo de congurao se abrir para o usurio. Nela o usurio poder denir as caractersticas da partida que deseja jogar como quem comear jogando, qual inteligncia articial ser usada pelo computador e qual o nvel de diculdade ele desejar enfrentar. As conguraes default apontam para um incio aleatrio com Algoritmo Gentico jogando numa diculdade iniciante. A caixa de dilogo de congurao exibida na gura 5.15.

Figura 5.15: Interface grca de congurao do jogo

5.5

Outras Implementaes

Com o objetivo de analisar o desempenho das duas inteligncias articiais estudadas por esse trabalho foi necessrio a implementao de uma classe de benchmark. Essa classe simula vrias partidas entre dois jogadores computador, um usando a tcnica de Poda alfa-beta e o outro usando a tcnica de Algoritmos Genticos, com todas as combinaes de diculdade possveis. Ao m do processamento gerado um relatrio contendo uma srie de dados que sero ao de estudo por este trabalho.

Captulo 6 Estudo de Caso


Ao m da nossa implementao foram realizados inmeros testes com o objetivo de analisar o desempenho das duas inteligncias articiais estudadas por esse trabalho. Assim, com o intuito de descobrir qual foi a IA que melhor se adaptou ao domnio do jogo Othello, realizamos testes explorando as seguintes situaes: Algoritmo Gentico vs Poda alfa-beta Jogador Computador vs Jogador Humano Os testes para Algoritmo Gentico vs Poda alfa-beta foram realizados de forma automtica pela classe de benchmark. Esta classe realiza 10 partidas para cada combinao de inteligncia e diculdade disponvel na aplicao, totalizando 90 partidas disputadas, sendo que cada IA realiza o primeiro lance em metade delas. Ao m da execuo, gerado um relatrio como mostra a tabela 6.1. Nvel Vitrias Vitrias Empates Pontos Pontos Tempos Tempos (AG, )* AG AG** ** AG*** *** (Inic., Inic.) 7 3 0 41,6 17,8 3,1088 0,0172 (Interm., Inic.) 9 1 0 46,5 17,5 4,0114 0,0165 (G. O., Inic.) 9 1 0 43,9 15,5 5,2785 0,0159 (Inic., Interm.) 6 4 0 32,1 31,9 5,2945 0,0840 (Interm., Interm.) 4 6 0 27,8 33,7 5,0939 0,1514 (G. O., Interm.) 8 2 0 37,6 26,4 5,5942 0,1965 (Inic., G. O.) 2 6 2 25,6 38,4 5,6665 0,7285 (Interm., G. O.) 2 8 0 27,8 36,2 5,5079 1,4817 (G. O., G. O.) 6 4 0 33 31 5,7163 2,1493
* = Par de nveis de diculdade do confronto AG vs ** = Mdia de pontos obtidos *** = Mdia de tempo em segundos de cada lance realizado

Tabela 6.1: Resumo dos resultados obtidos aps a execuo da classe de benchmark

53

54 Como podemos ver, cada linha da tabela representa o resultado do confronto entre as IAs e seus respectivos nveis de diculdade. A primeira coluna tem o papel de identicar o confronto como, por exemplo, na linha dois temos o par formado por algoritmos genticos e poda alfa-beta jogando, respectivamente, com nveis de diculdade intermedirio e iniciante. As demais colunas identicam, para cada algoritmo, a quantidade de vitrias, mdia de pontos conquistados e tempo mdio de resposta de uma jogada. Analisando os tempos de resposta de cada IA podemos perceber que o algoritmo gentico responde com um intervalo de tempo bem maior que o apresentado por seu concorrente alfa-beta. No entanto, como podemos ver na gura 6.1, os tempos de resposta do algoritmo gentico apresentam pouca variao na medida em que aumentamos a diculdade do jogo, ou seja, quando aumentamos o tamanho de suas populaes. Por outro lado, a poda alfa-beta nos deixa pistas de um crescimento exponencial de seus tempos de resposta conforme se aprofunda em sua busca, ou seja, quando aumentamos o seu nvel de diculdade. Portanto, esse grco nos faz acreditar que se continussemos a aumentar a diculdade de ambos os algoritmos, segundo os critrios apresentados na seo 5.3 deste trabalho, teramos rapidamente um cenrio onde os tempos de resposta apresentados pela poda alfa-beta ultrapassaria os tempos do algoritmo gentico e possivelmente se tornariam impraticveis pela aplicao.

Figura 6.1: Grco de tempo mdio de resposta dos algoritmos Analisando a quantidade de pontos obtidos pelos algoritmos em cada nvel de diculdade jogado, podemos perceber que o algoritmo gentico se saiu vitorioso em todos os cenrios como mostra a gura 6.2. No entanto, apesar das grandes pontuaes conquistadas pelo por ele, podemos perceber que na medida em os nveis de diculdade foram aumentando a poda alfabeta conseguiu diminuir a diferena para o seu concorrente gentico. Logo, de forma anloga a anlise dos tempos de resposta, acreditamos que em algum ponto no eixo das diculdades a poda alfa-beta ir conseguir superar o algoritmo gentico, entretanto, no temos como especular quando, pois a pontuao de ambos parece crescer de forma semelhante.

55

Figura 6.2: Grco de pontuao mdia dos algoritmos Encerramos nossa anlise sobre o confronto Algoritmo Gentico vs Poda alfa-beta com o grco de vitrias ilustrado na gura 6.3. Nele podemos ver que o algoritmo gentico conquistou uma porcentagem maior de vitrias do que seu concorrente, isso nos faz acreditar que o algoritmo gentico pode ser uma boa alternativa para substituir os tradicionais algoritmos de busca em problemas desse tipo. No entanto, vale apena ressaltar que boa parte desse desequilbrio foi causado pelo fraco desempenho do nvel de diculdade iniciante da poda alfa-beta que no correspondeu a altura dos demais.

Figura 6.3: Grco de vitrias dos algoritmos Para os testes Jogador Computador vs Jogador Humano convidamos Lucas Cherem de Camargo Rodrigues, presidente e criador da Federao Brasileira de Othello (FBOTHELLO). Lucas joga Othello h aproximadamente seis anos e durante esse perodo conquistou vrios ttulos importantes como os campeonatos brasileiros de 2008 e 2010, alm de uma 3o colocao no pan-americano de 2010. Nos testes, Lucas disputou partidas contra todas as combinaes de IA e nveis de diculdade disponveis pela aplicao e se saiu vencedor em todas elas. Ao m ele avaliou o jogo como desaador para jogadores iniciantes e medianos, mas que deixa muito a desejar contra jogadores experientes. Segundo Lucas, a aplicao carece de estratgias avanadas de jogo que priorize a conquista dos cantos do tabuleiro. Por m, ele elegeu o Algoritmo Gentico como sendo a melhor opo de IA dessa aplicao.

Captulo 7 Concluso e Trabalhos Futuros


7.1 Consideraes Finais

Este trabalho sugeriu a utilizao de um algoritmo evolucionrio aplicado diretamente na estrutura de tomada de deciso de jogos eletrnicos com o intuito de avaliar se os tempos de resposta e qualidade do lances retornados so ou no satisfatrios o bastante para adotar essa tcnica no lugar dos tradicionais algoritmos que privilegiam a busca exaustiva pelo melhor lance. Assim, como visto no captulo anterior, nossa implementao de Algoritmos Genticos conseguiu ser bem sucedida ao retornar lances de maior qualidade que nossa implementao para o algoritmo de Poda alfa-beta. Contudo, o AG no conseguiu entreg-los em um intervalo de tempo menor que seu concorrente. Analisando os resultados obtidos e os detalhes da implementao, constatou-se que a natureza instvel do jogo Othello, que permite que viradas de jogo de um lance para o outro, exps as fraquezas da Poda alfa-beta atravs do efeito de horizonte. Por outro lado, o Algoritmo Gentico, por se valer de cromossomos longos que permite a ele aprofundar-se at o ltimo lance do jogo, acabou por conseguir realizar melhores jogadas. No entanto, essa forma de codicao em conjunto com sua funo de aptido tambm apresentou pontos negativos, em especco no que diz respeito aos tempos de resposta do algoritmo. Para se ter idia do gargalo que se forma, imagine que para avaliar a aptido de um nico cromossomo necessrio intercal-lo com todos os cromossomos da populao adversria para em seguida estender a rvore de estados de cada uma deles at o m. O baixo desempenho apresentado contra um jogador humano experiente foi encarado com naturalidade, pois se entende que um problema exclusivo da funo de avaliao dos dois algoritmos que foi concebida por um jogador iniciante e carente de estratgias avanadas de jogo. Tendo em vista os fatos mencionados, consideramos vivel a substituio de algoritmos de busca seqencial por algoritmos evolutivos na tomada de deciso de jogos eletrnicos. No entanto, advertimos os leitores que o sucesso ou fracasso de cada implementao depender

56

7.2. TRABALHOS FUTUROS

57

do domnio do jogo e da habilidade do desenvolvedor para adaptar o Algoritmo Gentico ao problema.

7.2

Trabalhos Futuros

Uma proposta deixada por este trabalho seria uma nova implementao do Algoritmo Gentico fazendo uso de multithread, onde cada thread caria responsvel por calcular o mrito de um determinado cromossomo. Assim, acreditamos que essa nova implementao poderia transpor os problemas de desempenho da aplicao original. Outra proposta deixada seria a de melhorar as funes de aptido e utilidade dos algoritmos anexando a elas estratgias avanadas de jogo que seriam levantadas atravs de entrevistas com jogadores com experincia nesse tipo de jogo.

Referncias Bibliogrcas
ALLIOT, J.-M. & DURAND, N. (1996), Articial Evolution, Springer-Verlag, London, pp. 307319. CARVALHO, L. (2008), Um jogo de damas evolutivo, (trabalho de concluso de curso), Instituto de Computao, Universidade Federal de Alagoas, Macei. CATARINA, A. (2005), Algoritmos evolutivos aplicados ao processo de anlise de dados geogrcos, (trabalho de concluso de curso), Instituto Nacional de Pesquisas Espaciais, So Jos dos Campos. Corel Corporation (1985-2010), Paint Shop Pro Photo X2. URL: http://www.corel.com/, ltimo acesso em 25 de dezembro de 2010 DAVIS, L. (1991), Handbook of Genetic Algorithms, Van Nostrand Reinhold, New York. DEJONG, K. (1975), The analysis and behaviour of a class of genetic adaptive systems, (tese de phd), Department of Computer and Communication Sciences, University of Michigan, Michigan. Eclipse Foundation (2004-2010), Eclipse IDE for Java EE Developers. URL: http://www.eclipse.org/downloads/, ltimo acesso em 25 de dezembro de 2010 GALDINO, C. (2007), Inteligncia articial aplicada no desenvolvimento de jogos de computador, (trabalho de concluso de curso), Universidade Federal de Itajub, Itajub. GOLDBERG, D. (1989), Genetic Algorithms in Search, Optimization, and Machine Learning, Addison-Wesley, Boston. Grow Jogo e Brinquedos S.A. (n.d.), Reversi: Regras. URL: http://www.jogos.antigos.nom.br/regrasesc/othelo.pdf, ltimo acesso em 02 de fevereiro de 2010 HOLLAND, J. (1986), Machine Learning An Articial Intelligence Approach, Vol. 2, Morgan Kaufmann, Palo Alto, pp. 593624.

58

REFERNCIAS BIBLIOGRFICAS

59

KORF, R. (1996), Articial intelligence search algorithms, (trabalho de concluso de curso), Computer Science Department, University of California, Los Angeles. LACERDA, E. & CARVALHO, A. (1999), Sistemas Inteligentes: Aplicaes a recursos hdricos e cincias ambientais, Associao Brasileira de Recursos Hdricos, Porto Alegre, pp. 99 150. LOPES, R. (2003), Um algoritmo gentico baseado em tipos abstratos de dados e sua especicao em z, (tese de doutorado em informtica), Universidade Federal de Pernambuco, Recife. LUGER, G. (2004), Inteligncia Articial: Estruturas e estratgias para a soluo de problemas complexos, 4a edn, Bookmann, Porto Alegre. OBITKO, M. (1998), Uma introduo aos algoritmos genticos com java applets. URL: http://www.professor.webizu.org/ga/, ltimo acesso em 25 de dezembro de 2010 Oracle Corporation (1977-2010), Java SE Development Kit (JDK). URL: http://www.oracle.com/technetwork/java/javase/downloads/index.html, ltimo acesso em 25 de dezembro de 2010 RAMOS, N. & SALGADO, S. (2001), Jogo de xadrez por algoritmos gentico-evolutivos, (trabalho de concluso de curso), Instituto Superior Tcnico, Lisboa. RODRIGUES, L. (2006), FBOTHELLO: Federao Brasileira de Othello. URL: http://www.fbothello.hd1.com.br/index.html, ltimo acesso em 02 de fevereiro de 2010 RUSSUEL, S. & NORVIG, P. (2004), Inteligncia Articial, 2a edn, Editora Campos, Rio de Janeiro. SARTINI, B. & GARBUGIO, G. (2004), Uma introduo a teoria dos jogos, in II Bienal da SBM, Bahia. SCHWAB, B. (2004), AI Game Engine Programming, Charles River Media, Hingham. VIEIRA FILHO, V. (2005), Revolution ai engine: Desenvolvimento de um motor de inteligncia articial para criao de jogos eletrnicos, (trabalho de concluso de curso), Centro de Informtica, Universidade Federal de Pernambuco, Recife. Wikipdia: A enciclopdia livre (n.d.), Reversi/Othello. URL: http://en.wikipedia.org/wiki/Reversi, ltimo acesso em 02 de fevereiro de 2010

Das könnte Ihnen auch gefallen