Você está na página 1de 19

A UTILIZAÇÃO DE ALGORITMOS GENÉTICOS NO

DESENVOLVIMENTO DE JOGOS

Jonatan Medina (Bolsista PIBIC-UEMS), Raquel Márcia Müller (Orientadora)


Universidade Estadual de Mato Grosso do Sul
Cidade Universitária de Dourados, Caixa postal 351, CEP: 79804-970
jonatanmarvel182@hotmail.com , rmmuller@uems.br

RESUMO

Um algoritmo genético pode ser definido como uma técnica utilizada para encontrar soluções
aproximadas em problemas de otimização e busca, pertencente à classe de algoritmos evolutivos.
Um algoritmo genético envolve conceitos típicos da lei da evolução em biologia, como
hereditariedade, mutação, seleção natural e recombinação. Algoritmos Genéticos têm sido
bastante utilizados em jogos de tabuleiros como “Damas” e “Xadrez”. Seguindo este conceito foi
desenvolvido um jogo de tabuleiro, onde o agente inteligente é um AG, gerando populações e
utilizando operadores genéticos, como mutação e grau de adaptação. Os resultados obtidos foram
satisfatórios, mostrando que os AG’s satisfazem as necessidades de um agente inteligente da
melhor maneira possível, com isso podemos concluir que os AG’s são ótimos em problemas que
não conhecemos de antemão a jogada de um adversário.

Palavras – Chaves: Inteligência Artificial. Computação Evolutiva. Evolução

ABSTRACT
A genetic algorithm can be defined as a technique used to find approximate solutions in problems
of optimization and search, belonging to the class of evolutionary algorithms. A genetic
algorithm involves concepts typical of the law of evolution in biology, such as heredity, mutation,
natural selection and recombination. The Genetic Algorithms has been widely used in board
games like "Ladies" and "Chess". Following this concept was developed a board game, where
the intelligent agent is an AG, generating populations and using genetic operators such as
mutation and degree of adaptation. The results were satisfactory, showing that the AG's meet the
needs of an intelligent agent the best possible way and we can conclude that the AG's are in great
trouble we do not know in advance the move of an opponent.

Words – Keys: Artificial Intelligence. Evolutionary Computation. Evolution

1. INTRODUÇÃO
Um algoritmo genético pode ser definido como uma técnica utilizada para encontrar
soluções aproximadas em problemas de otimização e busca, pertencentes à classe de algoritmos
evolutivos (Goldberg, 1989). Um algoritmo genético envolve conceitos típicos da lei da evolução
em biologia, como hereditariedade, mutação, seleção natural e recombinação. De forma mais
simplificada, pode-se afirmar que algoritmos genéticos são utilizados para buscar uma solução
ótima para um dado problema.
Em computação, algoritmos genéticos são implementados simulando-se uma
população de soluções que, ao decorrer de seu desenvolvimento, passa por melhorias, evoluindo
a cada ciclo (Norving & Russel, 1995). A partir daí são criadas uma nova seqüência de soluções
para dar início à fase de evolução; a cada geração há uma adaptação da população, havendo
mutações e recombinações em alguns individuos dessa geração, criando-se, assim, uma nova
população. Quando se cria uma nova população esta é usadas para uma próxima interação do
algoritmo.
Um algortimo genético segue quatro etapas básicas:
1. Uma função, um objetivo, que é o objeto para a otimização. A grande vantagem de
algoritmos evolutivos, é que não é necessário saber para que serve esta função, apenas
é preciso tê-la disponível para ser aplicada nos indivíduos, podendo assim, comparar
os melhores resultados.
2. A evolução, próximo passo do algoritmo, geralmente usa, nessa parte, a seleção por
roleta, onde os indivíduos são ordenados de acordo com sua função e objetivo e são
atribuídos a eles probabilidades decrescentes de serem escolhidos. A escolha é feita de
forma aleatória, de acordo com essas probabilidades. Dessa forma conseguimos
escolher como pais os mais bem adaptados, sem deixar de lado a diversidade dos
menos adaptados. Pode-se tambem utilizar outras formas de seleção, apesar dessa ser
a mais apta.
3. A reprodução é divida em três subcategorias: acasalamento, recombinação e
mutação. Há a escolha de dois induvíduos para se reproduzirem (acasalamento),
partindo do conceito de recombinação, um processo que imita a reprodução sexuada.
Os decendentes recebem parte do código genético dos pais, garantindo assim que os
melhores indivíduos possam trocar, entre si, informações que os levam a ser mais
aptos à sobreviver, gerando assim, indivíduos sem defeitos em seus códigos genéticos.
4. Por último, vêm as mutações, que são feitas com probabilidade a mais baixa
possível, e tem como objetivo permitir maior variabilidade genética na população,
impedindo que a busca fique estagnada em um mínimo local.
As partes mais importantes de um algoritmo genético são o cruzamento e a mutação,
pois todo o desempenho de um algoritmo genético depende desses operadores.
Algoritmos genéticos têm sido usados no desenvolvimento de diversos jogos. Através
deles, o jogador pode, por exemplo, traçar caminhos por onde um objeto do jogo deve
“caminhar”. Este caminho pode ser determinado por um algoritmo genético.
Dentre alguns exemplos de jogos que utilizam algoritmos genéticos, pode-se citar:
− o jogo mastermind, em que um jogador tem que adivinhar uma seqüência de cores
definida pelo adversário;
− o puzzle pentominos, onde o problema pode ser resolvido em cerca de 50.000
avaliações feitas em poucos minutos;
− em jogos de xadrez, o problema n-queens é freqüentemente utilizado para testar o
desempenho de algoritmo genético, especialmente devido ao fato da sua
complexidade ser regulada pelo número de rainhas que se utilizam.
Devido à sua flexibilidade os algoritmos genéticos têm sido utilizados em diversas
áreas de atividade com maior ou menor sucesso dependendo da facilidade de adaptação dos
problemas a este tipo de algoritmo. Sua escolha para aplicação em jogos educativos se justifica
pelo fato de jogos educativos computadorizados possuírem, como uma de suas principais
vantagens, um grande potencial para o processo de ensino e aprendizagem, por despertarem
naturalmente o interesse dos alunos.
1.1. Objetivos
O objetivo geral dessa proposta de pesquisa é o estudo de algoritmos genéticos que
possam ser utilizados no desenvolvimento de jogos educativos ou de tabuleiro e o
desenvolvimento de um jogo simples usando um dos algoritmos pesquisados.
Os objetivos específicos são:
− Pesquisar e definir os conceitos que envolvem algoritmos genéticos;
− Pesquisar e definir etapas que envolvem o desenvolvimento de um jogo educativo;
− Pesquisar os algoritmos genéticos que podem ser utilizados no desenvolvimento
de jogos educativos;
− Desenvolver um jogo educativo, exemplificando toda a sua funcionalidade.

As atividades desta pesquisa podem ser divididas em duas etapas: fundamentos e


desenvolvimento de software. Em fundamentos, estudaremos os conceitos, teorias, algoritmos e
métodos computacionais necessários ao desenvolvimento do jogo educativo. A metodologia
adotada nesta etapa envolve, basicamente, o estudo dos conceitos, teorias, algoritmos e métodos
relacionados ao tema da pesquisa: algoritmos genéticos e desenvolvimento de jogos educativos.
Estes estudos serão baseados em consultas à literatura especializada, ou seja, livros e artigos de
revistas técnicas, bem como consultas a sites da Internet.
A metodologia utilizada na etapa de e desenvolvimento do jogo será baseada nas etapas
propostas por Clua (2005):
• Design Bible. Nesta etapa são definidas as especificações do jogo. Deve ser
composto dos seguintes elementos:
1. Roteiro. Semelhante ao roteiro de um filme. Este é um item fundamental para o
processo de criação e será o elemento crucial para convencer possíveis investidores da
potencialidade do produto. É nesse item que o jogo deve mostrar seu diferencial em relação aos
outros. Devem ter espaço para interferência do usuário no desencadeamento da história. Ao
elaborar o roteiro deve-se considerar qual o estilo do jogo será desenvolvido.
2. Game Design. É a conceituação artística do jogo. Preferencialmente deve ser
escrita por um artista. Dentro deste item deverão ser expostos quais as principais características
dos cenários, esboços de personagens, descrição das texturas fundamentais, mapas e descrições
das fases (também denominado de level design).
3. Game Play. Nesta parte do documento deve descrever-se como será a
jogabilidade. Por jogabilidade entendem-se as regras do jogo e o balanceamento das regras (game
balancing). Nesta descrição deve ficar claro que o jogo é divertido e irá proporcionar desafios
interessantes.
4. Interface Gráfica. Pode-se dividir a interface em ingame e outgame. A primeira
consiste na instrumentação disponível durante o jogo e é responsável pela entrada de dados do
jogador para a aplicação. A interface outgame é a forma de apresentar a introdução do jogo, sua
configuração, instruções, carregar um jogo salvo anteriormente, entre outras operações de
suporte.
• Produção de áudio e imagens 2D. Nessa etapa faz-se uso de ferramentas
para a produção de efeitos sonoros (áudio) e para a composição de imagens
bidimensionais, que serão usadas como texturas e para compor a interface gráfica
ingame e outgame, tais como, botões, janelas, barras de energia e outros
componentes gráficos.
• Definição do Engine. O engine é um componente de software responsável
por lidar com o hardware gráfico, controlar os modelos para serem renderizados,
tratar as entradas de dados do jogador, tratar de todo o processamento de baixo nível
e outras coisas que o desenvolvedor de jogos normalmente não deseja fazer ou não
tem tempo para se preocupar.
• Integração dos aspectos artísticos com os aspectos computacionais.

2. FUNDAMENTAÇÃO TEÓRICA

2.1. Inteligência Artificial


O cérebro humano é a parte mais magnífica do corpo, uma massa acinzentada, composta
em sua maioria por água, é capaz de em milésimos de segundos, tomar decisões, enviar
comandos a todos os membros do corpo, guardar lembranças, distinguir emoções, entre outras
várias magnitudes possíveis a ele. Por muito tempo cientistas tentaram entender como ele
funciona.
Segundo Russel e Norving (2004) a área de IA, vai além do que tentar compreender como
funciona o cérebro, a área de IA procura criar entidades artificiais dotadas de inteligência. É uma
área muito nova, seu estudo começou logo após o fim da Segunda Guerra Mundial, em meados
de 1956, e ela é citada regularmente como “o campo de trabalho em que eu gostaria de estar” por
cientistas de outras áreas.
A IA é a ciência que estuda a melhor maneira de fazer o computador raciocinar, é uma
definição um tanto pobre, pois a Inteligência Artificial vai alem do que buscar o raciocínio para
uma maquina,logo essa definição é um tanto que filosófica, mas por ora, dá para se ter um noção
básica do que essa ciência estuda (Knigth & Rich, 2004).
A Inteligência Artificial é fundamentada em cima de definições teóricas de outras
ciências, tais como (Russel & Norving, 2004). A filosofia, a ciência mais antiga, procura uma
resposta racional para um problema ate então respondidos com argumento míticos, ou que não se
tem idéia de como surgiu. Mas a parte que interessa a IA são:
• Regras formais podem ser usadas para obter conclusões valida?
• Como a mente se desenvolve a partir de cérebro físico?
• De onde vem o conhecimento?
• Como o conhecimento conduz a ação.
A Matemática, considerada a ciência exata ou do raciocínio lógico, ela procura
incansavelmente a verdade, é considerada rigorosa e precisa. A filosofia demarcou a maioria das
idéias para IA, mas o salto para formalidade exigiu a presença de três agentes matemáticos
importantíssimos: probabilidade, lógica e computação.
A Inteligência Artificial evoluiu muito nos últimos anos, e possui um amplo campo de
pesquisas, desde aprendizado e concepção até o diagnóstico de doenças.
Como vimos, a Inteligência Artificial é dividida em vários subcampos de estudos, entre
eles está o de “otimização e busca”, ou “resolução de problemas por meio de busca”, conhecido
por encontrar uma seqüência de ações para a resolução de um impasse ou problema, quando uma
simples ação não é suficiente para resolvê-lo, são os chamados de algoritmos de busca (Russel &
Norving, 2004).
Algoritmos de buscas funcionam da seguinte maneira: recebe um problema, faz uma
busca em todo o espaço de busca, acha as melhores saídas, ou seja relaciona as ações mais
eficientes para a resolução do problema, elimina as ações que não satisfazem, retorna a solução
através de uma seqüencia de atos a serem executados.
Algoritmo de busca:
Função Resolução_de_problemas_simples(percepção) retorna uma ação
Entradas: percepção, uma percepção;
Variáveis estáticas: seq //uma seqüencia de ações de ações inicialmente vazia; estado
//alguma descrição do estado atual;
objetivo //um objetivo inicialmente nulo;
problema // uma formulação de problema;
Estado ATUALIZAR_ESTADO ( estado,percepção);
Se seq esta vazia então faça
objetivo  FORMULAR-OBJETIVO (estado);
problema  FORMULAR-PROBLEMA (estado, objetivo);
seq BUSCA (problema);
fim se
ação  PRIMEIRO (seq);
seq  RESTO(ação);
retornar uma ação;
fim função

Acima temos um exemplo de uma estrutura algorítmica de um “algoritmo de busca”,


executado da seguinte forma: primeiro ele formula um objetivo e um problema, busca uma
seqüencia de ações que resolveriam o problema e depois executa as ações uma a uma. Quando a
seqüencia se completa, ele formula outro objetivo e recomeça. O algoritmo ignora a “percepção”
e supõe que a solução que encontrou sempre funcionará.
Vimos até agora estratégias de buscas sem informações, que encontram soluções para
problemas gerando sistematicamente novos estados testando-os por comparações com a função
objetivo. Infelizmente esta estratégia é ineficiente na maioria dos casos, para isso foi
desenvolvido um sistema de busca utilizando um conhecimento especifico do problema a ser
estudado e melhorado.
Dentre as varias estratégias de busca com informação, a que nos interessa é a estratégia de
“busca local e problemas de otimização”.
Sabemos que os algoritmos de busca foram criados para varrer todo o espaço de busca
necessário para resolução de um problema. A característica de busca sistemática é alçada, ao se
manter um ou mais caminhos na memória e ao registrar as alternativas que foram exploradas em
cada ponto e as que ainda não foram exploradas. Quando um objetivo é alcançado, o caminho até
esse objetivo se torna uma solução para o problema. Mas, no entanto, o caminho até o objetivo
pode ser irrelevante em alguns problemas de busca (Russel & Norving, 2004).
Quando o caminho até o objetivo é irrelevante, pode-se dizer que surge uma classe
diferente de algoritmos, aqueles que de forma alguma se preocupam com o caminho percorrido.
Um algoritmo de busca local opera usando um único caminho (estado corrente) em vez de vários,
normalmente se movimento para seus vizinhos, logo por ser irrelevante, os caminhos não são
guardados. Esses algoritmos possuem duas vantagens, utilizam pouca memória, normalmente O
(1) e freqüentemente eles conseguem alcançar soluções ótimas para resolução de problemas.
Além de encontrar objetivos, esses algoritmos são úteis para resolver problemas de
otimização puros, onde o objetivo é encontrar o melhor caminho de acordo com uma função
objetivo. Maximizam e minimizam soluções para problemas.
Para isso foram desenvolvidos estudos para a otimização de problemas em cima de
conceitos naturais, assim surgiu uma área em IA chamada Computação Evolutiva ou
Evolucionária, inspirada nos métodos de evolução natural, área de utilização dos Algoritmos
Genéticos.

2.2 Algoritmos Genéticos


Entre os vários algoritmos que buscam resolver problemas de busca e otimização, estão os
Algoritmo Genéticos. Não se da á ele o nome Algoritmo Genético ao acaso, o nome genético vem
pelo simples motivo dele ser inspirado no modelo de evolução natural de Charles Darwin. Antes
de entendermos o que é um algoritmo genético vamos entender primeiro a teoria de “seleção natural” de
Darwin.
Para explicar sua teoria vamos recorrer ao exemplo mais famoso de evolucionismo: por
que a girafa tem o pescoço grande? Segundo Darwin em seu livro “A origem das espécies”, de
1859 (Darwin apud Russel & Norving, 2004), não foi a ação prolongada em esticar o pescoço
para colher as folhas mais altas que fez com que certos animais se tornassem girafas. Imaginemos
que alguns tipos de animais foram habitar determinada região onde as melhores opções de
alimentos eram as folhas altas. Destes animais, alguns tinham pescoço um pouco maior, e
colhiam as folhas com mais facilidade, e outros um pescoço um pouco menor, tendo mais
dificuldade em se alimentar. Assim, com o tempo, os animais de pescoço comprido foram
favorecidos pelo ambiente, isto é, foram selecionados naturalmente, e os animais de pescoço
menor acabaram por ser extintos, ou se mudaram para outro local com condições que lhes fossem
mais favoráveis. Isso é chamado de ”seleção natural”. Uma Lei que determina que só os
mais adaptados ao ambiente podem sobreviver, se reproduzir e assim transmitir suas
características adaptativas aos seus descendentes. Portanto, os descendentes não tem o pescoço
maior apenas porque o pescoço de seus pais se desenvolveu, mas sim por que seus pescoços já
eram avantajados, e por isso eles sobreviveram e se reproduziram. Esta idéia foi montada em
cima da idéia de Lamarck, apesar de muitos verem ela como uma critica a essa teoria, grande
maioria do cientista a considera como uma melhoria.
Na natureza os indivíduos competem entre si por recursos como, comida, água e refúgio.
Entre os animais de uma mesma espécie, aqueles que não obtêm êxito tendem provavelmente a
ter um número reduzido de descendentes, tendo assim uma menor probabilidade de seus genes
serem propagados ao longo de sucessivas gerações. A combinação entre os genes dos indivíduos
mais fortes da espécie podem produzir um novo indivíduo muito mais adaptado ao ambiente. A
lei do mais forte. A teoria da evolução natural das espécies conclui, que toda espécie é altamente
capacitada a se adaptar a certos ambientes para preservar sua sobrevivência, ainda que pra isso
seus membros tenham que sofrer mutações genéticas, ou serem escolhidos naturalmente pelas
suas características, sendo que essas características ao serem passadas aos descendentes podem
ser melhoradas.
Os algoritmos genéticos possuem estruturas que representam os cromossomos, sendo que
eles, possuem uma cadeia de bits, que convergem para a melhor solução à um problema estudado
pelo AG. Estes cromossomos representam indivíduos que são levados ao longo de várias
gerações, na forma similar aos problemas naturais, evoluindo de acordo com os princípios de
seleção natural e sobrevivência dos mais aptos. Eles podem resultar em uma busca de azar, mas a
vantagem é que sempre há a segurança de quem nem um ponto do espaço de busca tem chance
zero de ser examinada, diferentemente dos algoritmos de busca tradicionais, os algoritmos
evolutivos trabalham com uma codificação de parâmetros e não com os próprios parâmetros,
trabalham com toda uma população e não apenas com um ponto dela, e utilizam dados
probabilísticos e não deterministas.
As funções de busca e otimização possuem parâmetros como, o espaço de busca, ou seja,
todas as possíveis soluções para um determinado problema, uma função de avaliação, que nada
mais é que a avaliação de todas as soluções possíveis a um determinado problema.
O ponto de partida para o desenvolvimento de Algoritmo Genético, é a representação dos
problemas de maneira adequada, de forma que o algoritmo possa estudá-los corretamente.
Tradicionalmente, os indivíduos são representados por vetores binários, onde cada elemento de
um vetor denota a presença (true) ou ausência (false), de uma determinada característica “ou
ainda representados por números como 0 e 1”. O principio básico de algoritmo genético é a
convergência de um estado problema para a melhor solução possível, ou seja, após varias
interações (gerações) restem somente as soluções mais apropriadas (os indivíduos mais aptos).

função ALGORITMO-GENETICO (população, FN-FITNESS) retorna um individuo


entradas: população // um conjunto de indivíduos,
FN-FITENESS //uma função que mede a adaptação de um individuo
repita
nova-população  conjunto vazio;
para i de1
de até TAMANHO(população) faça
x  SELEÇÃO-ALEATORIA (população, FN-FITNESS);
y  SELEÇÃO-ALEATORIA (população, FN-FITNESS);
filho  REPRODUZ (x,y);
se (pequena probabilidade aleatória) então
filho  MUTAÇÃO (filho);
fim se
adicionar filho a nova-população;
fim para
até algum individuo estar adaptado o suficiente ou até ter decorrido tempo suficiente;
retornar o melhor individuo em população, de acordo com FN-FITNESS;
fim função
função REPRODUZ (x,y) retorna um individuo
entradas: x,y //indivíduos pais;
n  COMPRIMENTO (x);
c  numero aleatório de 1 a n;
retornar CONCATENA(SUBCADEIA (x,1,c), SUBCADEIA (t,c+1,n));
fim função

Basicamente um algoritmo genético é composto por uma “população” uma “função FITNESS (
adequação)”, a operação de escolhas das melhores soluções “seleção”, após a seleção as melhores
soluções estarão sujeitas a “reprodução” e se for necessário sujeita também a “mutações”.
Uma função FITNESS, é o objeto de otimização, um problema a ser resolvido, ao ser passado um
estado para ela, que retorna valores probabilísticos altos para as melhores saídas e baixos para as
menos favoráveis, e assim poder ocorrer a seleção, reprodução e raramente a mutação.
A população é composta por indivíduos, os indivíduos de uma população são portadores do
código genético, logo o código genético é a representação do espaço de busca do problema a ser resolvido.
O código genético precisa ser de tamanho finito, mas necessariamente possível representar todo o espaço
de busca.
Outra parte muito importante do algoritmo é a seleção, geralmente para a seleção dos
indivíduos usa –se algoritmo de seleção por roleta, onde os indivíduos são ordenados de acordo
com a função FITNESS. Dessa forma a escolha consegue escolher os pais mais adaptados, mas
sem deixar de lado a diversidade dos menos aptos.
Após a seleção dos indivíduos, ocorre a reprodução, ela pode ser dividida em três etapas,
o acasalamento, a recombinação e a mutação. No acasalamento ocorre a escolha de dois
indivíduos, como pai e mãe. A recombinação, processo de reprodução sexuada, faz com que o
descendente gerado, receba em seu genótipo parte do código genético do pai e da mãe, isso faz
que os indivíduos mais bem adaptados possam trocar entre si suas características, gerando
indivíduos mais bem adaptados, logo, a cada interação, há sempre uma melhor solução para o
problema estudado. A mutação quando acontece, é feita nas probabilidades mais baixas, ou seja,
em cima dos indivíduos menos aptos, garantido assim a variabilidade da espécie.
A principal vantagem dos Algoritmos Genéticos, se existir, vem da operação de
crossover, que pode ser demonstrado matematicamente que, se as posições do código genético
forem permutadas no começo em ordem aleatória, o crossover não trará nenhuma vantagem.
Logo, a vantagem vem da habilidade do crossover para combinar grandes blocos de genes que
evoluem de forma independente para executar funções úteis, elevando assim o nível de
afunilamento em que a busca opera. Para conseguir alcançar vantagens significativas ao se
utilizar algoritmos genéticos, é necessária uma cuidadosa engenharia na representação.
Os AG’s tiveram um grande impacto sobre problemas de otimização e busca, mas no
momento não esta claro se a atração em utiliza – los esta em seu desempenho ou em suas origens,
esteticamente agradáveis aos conceitos naturais. É necessário, ainda, muito estudo para
identificar sob quais circunstancias eles alcançam os melhores resultados. (Russel, Norving,
2004).

2.3 Jogos educativos


Jogos por computador são aplicações sofisticadas que exploram muitos dos aspectos
oferecidos por um computador, como interfaces que suportam alto nível de interatividade e o uso
de diversas mídias. O potencial tecnológico dos jogos aliado às características lúdicas e de
desafios favorecem o seu uso na educação (Battaiola, 2002).
Jogos usam várias mídias integradas, como textos, animações, vídeo, áudio, etc. O uso
de mídias integradas origina as apresentações multimodais e o efeito da atenção dividida, no qual
o observador divide a sua atenção entre múltiplos meios que apresentam uma informação de
forma complementar ou não. Assim, o uso de mídias integradas passa obrigatoriamente pelo
estudo de conceitos cognitivos que guiam esta integração.
Piaget (1998) relata que a criança que joga desenvolve suas percepções, sua inteligência,
suas tendências à experimentação, seus sentimentos sociais. O jogo é um meio poderoso para a
aprendizagem da criança, e porque não aplicá-lo na iniciação à leitura, ao cálculo, ou à ortografia,
levando as crianças a se apaixonarem por essas ocupações, que de outra forma lhes seriam
“chatas” e incômodas.
Os jogos de computador indicados são aqueles que visam estimular o raciocínio e
motivar a criança para querer aprender. Nesses contextos educacionais, para a interação entre o
saber científico e o jogo, é necessário que na execução da brincadeira o jogo envolva
conhecimentos específicos ao componente curricular.

3. RESULTADOS
3.1 Roteiro
Como foi colocado na metodologia, o objetivo deste projeto é elaborar um jogo educativo
utilizando Algoritmos Genéticos, mais especificamente desenvolver um jogo de tabuleiro
(damas) aproveitando as vantagens trazidas pelos AG’s.
Vários jogos utilizam Algoritmos Genéticos em sua arquitetura, pela sua facilidade e
economia de tempo em problemas de buscas e otimização, são utilizados em jogos que
necessitam buscar soluções ótimas para determinados problemas, tais como os jogos de
tabuleiros, jogos como o de Xadrez tem sido desenvolvidos com utilizando métodos AG’s.
Por se tratar de algo similar ao Xadrez, o jogo de Damas também pode ser desenvolvido
utilizando as técnicas dos AG’s, logo, iremos aplicar as técnicas AG’s, para desenvolver o jogo
de damas. A funcionalidade do jogo de damas é descrita a seguir.
O jogo de damas pratica-se entre dois parceiros, num tabuleiro quadrado, de 64 casas
alternadamente claras e escuras, dispondo de 12 pedras brancas e 12 pretas. O objetivo é capturar
ou imobilizar as peças do adversário. O parceiro que o conseguir mais, ganha a partida.
O tabuleiro deve ser colocado de modo que a casa angular à esquerda de cada parceiro seja
escura.
No início da partida, as pedras devem ser colocadas no tabuleiro sobre as casas escuras, da
seguinte forma: nas três primeiras filas horizontais, as pedras brancas; e, nas três últimas, as
pedras pretas.
A pedra movimenta-se em diagonal, sobre as casas escuras, para frente, e uma casa de
cada vez. A pedra que atingir a oitava casa adversária, parando ali, será promovida a "dama",
peça de movimento mais amplos que a simples pedra. Assinala-se a dama sobrepondo, à pedra
promovida, outra da mesma cor.
A dama pode mover-se de determinada casa para qualquer outra, não obstruída, situada na
mesma diagonal. Quando na casa contígua a uma pedra houver uma peça adversária, com uma
casa imediata vaga, na mesma diagonal, a pedra tomá-la-á passando para a citada casa vaga.
Assim, a pedra toma para frente e para trás, sendo este o único movimento retrógrado da pedra.
Se após a tomada de uma peça, a circunstância se repetir, a pedra continuará a tomada no mesmo
lance, chamando-se a este movimento, tomada em cadeia, ou tomada em serie.
Se, nas diagonais da casa de partida da dama, houver uma peça adversária cuja casa
imediata esteja vaga, a dama toma – a passando para qualquer casa vaga após a peça tomada. A
dama também toma em cadeia ou serie.
A tomada é obrigatória. A pedra e a dama têm o mesmo valor para tomar ou ser tomada.
Se, no mesmo lance, se apresentar mais de um modo de tomar, é obrigatório executar o lance que
tome o maior número de peças (lei da maioria).
A peça que toma poderá passar mais que uma vez pela mesma casa vazia, porém não
poderá tomar qualquer peça mais de uma vez. Não será promovida a pedra que, numa tomada em
cadeia, apenas passe pela oitava casa adversária. As peças tomadas só deverão ser retiradas do
tabuleiro depois de completo o lance.
A partida termina empatada quando:
• Os dois parceiros concordarem com o empate;
• A partir de qualquer ponto da partida, ocorrer 20 (vinte) lances sucessivos de Damas, sem
tomada ou deslocamento de pedra;
• Uma mesma posição se produzir pela terceira vez, cabendo ao mesmo jogador o lance,
deverá o interessado reclamar o empate, antes que a posição se modifique (esta regra só vale se a
partida estiver sendo anotada em uma planilha);
• Na luta de três damas contra uma, o lado maior não conseguir obter vitória em vinte
lances.
O jogo de damas, difundido que foi por todo o mundo, acabou por receber alterações,
dependendo da região em que é jogado. O jogo de damas elaborado neste projeto será montado
em cima das regras gerais do jogo, desprezando suas variações regionais.

3.2 Game design


Por se tratar de um jogo de tabuleiro, sua interface gráfica se torna simples, pelo simples
motivos de não se ter personagens.
Utilizando a biblioteca gráfica Allegro1, o cenário será constituído por um tabuleiro, e as
pedras verdes e vermelhas, sendo que sempre que uma pedra for comida, a mesma desaparecera
do cenário.
O tabuleiro a ser utilizado será o tabuleiro clássico em jogos de tabuleiros, nas cores
pretas e brancas.

1 Allegro é uma biblioteca de programação de jogos para usuários da linguagem de programação C/C++, com
distribuição livre. Maiores informações podem ser obtidas no endereço http://alleg.sourceforge.net/.
Figura 1 – Interface gráfica do jogo.

3.3 Game play


O jogo de damas é constituído por um tabuleiro, 24 peças (12 a 12) e dois jogadores,
humano versus maquina. O código do programa deve ser elaborado para atender as regras do
jogo de damas, assim sendo deve verificar a validade dos lances.
A estrutura tabuleiro deve armazenar as peças que estão em jogo e suas respectivas
posições, alem de receber as instruções do jogador quando desejar movimentar as peças, remover
as peças quando necessários, e inserir novas peças quando se iniciar um novo jogo.
Existem dois tipos de jogadores, um jogador é o usuário (Human Player) e outro é a
maquina (CPU Player). O jogador humano recorre à interface gráfica para visualizar as peças no
tabuleiro, sejam suas peças, seja as peças do adversário e às suas habilidades e conhecimento do
jogo para escolher uma jogada. O programa deve armazenar a informação passada pelo jogador
(lugar onde a peça deve ser movimentada) e executá-la quando esta for válida. O jogador
“máquina” deve recorrer ao Algoritmo Genético para tomar decisões, todas as demais operações
de validação são executadas de forma semelhante à do jogador humano.
O jogado humano tem associado uma pequena base de dados que é criada na primeira
execução do programa/jogo e atualizada sempre que um novo jogo é terminado, algo como que
um banco de dados onde mostra um histórico de vitórias e derrotas do jogador, sendo que sempre
que desejar o jogador pode apagar o histórico antigo e iniciar outro.
A cada jogador são atribuídas doze peças de cores diferentes para cada um no tabuleiro,
cada peça tem como atributos, sua cor, a qual jogador pertence e qual sua posição no tabuleiro.
Toda essa descrição funciona como um motor para o jogo, que é alimentado, ou por
instruções humanas orientadas pela interface gráfica, ou por um AG cuja inteligência varia de
acordo com os parâmetros que lhe são atribuídos.
Veremos agora como funciona o Algoritmo Genético dentro do jogo, este que é
responsável pela inteligência artificial. Temos como parâmetros para o Algoritmo Genético, as
populações, respectivos cromossomos e genes, operadores genéticos.
Os genes têm identificação real e seu tamanho e codificação varia de acordo com o tipo de
peça que identificam. Cada gene representa uma característica de um possível lance, onde estão
representados a identificação da peça e o movimento. Os cromossomos são constituídos de genes.
Um conjunto de vários cromossomos representa uma população de soluções possíveis.
A estrutura do Algoritmo Genético tem a seguinte característica: a função Gera População
gera indivíduos, ou seja, possíveis soluções para o jogo, uma jogada possível. A diferença do
Algoritmo Genético usado neste jogo com o AG tradicional, da - se pelo fato de que os
indivíduos não são gerados aleatoriamente, eles são gerados após uma busca e comparações no
espaço de busca, ou seja, todos os indivíduos gerados são jogadas validas, desprezando a
necessidade de se utilizar uma função “objetivo” para o Algoritmo.
A busca retorna indivíduos aptos para uma determinada situação do jogo, a partir do
momento que uma possível jogada é encontrada, a estrutura AG, responsável por guardar as
populações, é atualizada, cada posição da estrutura é um individuo, cada individuo possui uma
cadeia de gene, cada gene representa situações da jogada como: numero da pedra, nova posição
no tabuleiro, posição antiga, posição da pedra comida, numero da pedra comida e o mais
importante, pontos da jogada.
A cada possível solução encontrada é atribuído a um de seus genes a pontuação da jogada,
se a jogada resulta em perda, se a jogada não resulta em perda de pedra, se a jogada resulta em
comer uma ou mais pedra, se a jogada resulta em dama, isso despreza o uso de uma função de
fintness, pois depois de gerados os indivíduos já têm um índice de adaptação. Após gerar todos os
indivíduos, existe uma função que escolhe a melhor jogada possível. Antes de se iniciar uma
nova população, pega da antiga população os indivíduos que mais se adaptaram e faz uma
mutação em um de seus genes, considerando a possibilidade de que se uma jogada foi
considerada boa antes, ela ainda pode ser boa. Após mutar a antiga população, gera mais uma
população de indivíduos, os mistura e escolhes os mais aptos. Não será usado o operador de
reprodução, somente o de mutação de gene.
Tendo em vista o tamanho final do Algoritmo Genético, fica inviável coloca – lo num
todo neste artigo, mas para demonstração de efeito vamos colocar duas funções principais do
mesmo, a primeira é responsável pela escolha do melhor indivíduo, após a função
__Gerapopulacao() e __Avaliapopulacao() terem sido executadas:
for(int a = 0; a<cont_pop; a++)
{
if(_Ag[a].genes8 > maior)
{
maior = _Ag[a].gene8 ;
i=a;
}
}
E aqui temos o procedimento que realiza a mutação de gene:
void Damas ::__Mutacao()
{
Int i, k;
for (k=0; k< cont_pop; k++)
for (i=0; i <TamCromo; i++)
if (rand(0,1) < Mut)
_Ag[a].gene8 = FLIP(pc[k].cromo);
}

4. DISCUSSÃO
Este trabalho teve por objetivo estudar os Algoritmos Genéticos, seus conceitos e como
são utilizados em diversas áreas da computação. Um algoritmo genético que pode ser definido
como uma técnica utilizada para encontrar soluções aproximadas em problemas de otimização e
busca, pertencentes à classe de algoritmos. Um algoritmo genético envolve conceitos típicos da
lei da evolução em biologia, como hereditariedade, mutação, seleção natural. De forma mais
simplificada, pode-se afirmar que algoritmos genéticos são utilizados para buscar uma solução
ótima para um dado problema
Para demonstrar e dar exemplo de seu funcionamento foi proposto e desenvolvido um
jogo de tabuleiro (Damas). Usando os conceitos dos AG’s para desenvolver o agente inteligente
do game, a biblioteca gráfica Allegro na linguagem C++. Os resultados obtidos foram
satisfatórios, mostrando que os AG’s satisfazem as necessidades de um agente inteligente da
melhor maneira possível, com isso podemos concluir que os AG’s são ótimos em problemas em
que não conhecemos de antemão a jogada de um adversário.

5. AGRADECIMENTOS
Os autores agradecem à instituição UEMS pelo apoio financeiro concedido, sendo
possível assim realizar este trabalho de pesquisa sobre Algoritmos Genéticos, e também por todos
os acadêmicos, coordenadores, professores e técnicos que, diretamente ou indiretamente,
contribuíram para a realização desse trabalho.
6. REFERÊNCIAS

BATTAIOLA, A. L. E.; NASSIM, C.; DOMINGUES, R G. et al. Desenvolvimento de um


Software Educacional com Base em Conceitos de Jogos de Computador. XIII Simpósio
Brasileiro de Informática na Educação. SBC, 2002.
CLUA, E. W. G.; BITTENCOURT, J. R. Desenvolvimento de Jogos 3D: Concepção, Design e
Programação. In: XXIV Jornada de Atualização em Informática. SBC: São Leopoldo, 2005.
GOLDBERG, D. E. Genetic Algorithms in Search, Optimization, and Machine Learning.
EUA: Addison-Wesley, 1989.
NORVIG, P.; RUSSEL, S. Artificial Intelligence: A Modern Aproach. Upper Saddle River,
NJ, EUA: Prentice Hall, 1995.
PIAGET, Jean. Psicologia e Pedagogia. Rio de Janeiro: Forense Universitária, 1998.

SILVEIRA, S. R.; BARONE, D. A. C. Jogos Educativos Computadorizados utilizando a


abordagem de Algoritmos Genéticos. In: IV Congresso RIBIE, Brasília, 1998.

Você também pode gostar