Professional Documents
Culture Documents
< <
=
1
1 0
0 1
0
0 1
0
; 1
;
; 0
) (
x x
x x x
x x
x
x x
x
x x
x f
Equao 5: funo de associatividade (frmula)
34
Geralmente utilizada uma funo de associatividade para cada grupo
de valores que se deseja avaliar. Veja o exemplo abaixo:
Figura 6 mltiplas funes de associatividade
Neste caso, h trs funes de associatividade. Note que existem
inmeras dessas funes, como a trapezoidal, e a triangular, cuja implementao
foge ao escopo deste trabalho. Maiores detalhes sobre tais funes podem ser
encontrados em (MCNEIL e THRO, 1994). O importante salientar que, tendo as
trs funes de associatividade, basta usar os valores de entrada como parmetro
em cada uma delas para obter cada um dos graus de associatividade.
Portanto, para uma dada entrada, podemos encontrar um valor de 0
para fraco, 0,75 para forte e 0,15 para muito forte. Da podemos inferir que o
jogador substancialmente forte.
4.3.5 Sada fuzzy
Depois de fuzzificar os valores de entrada, se faz necessrio produzir
uma sada, que ser a ao tomada pelo computador naquele momento. Isto feito
atravs da avaliao de regras, de maneira semelhante quela feita nos sistemas
baseados em regras. A diferena aqui que todas as regras so avaliadas e
produzem uma resposta cuja intensidade expressa segundo a lgica fuzzy. Os
operadores lgicos fuzzy so os seguintes:
Disjuno: VERDADE(A OU B) = MAX( VERDADE(A), VERDADE(B) )
Conjuno: VERDADE(A E B) = MIN (VERDADE (A), VERDADE(B) )
35
Negao: VERDADE(NO A) = 1 VERDADE(A)
Lembremos que na lgica fuzzy, o valor VERDADE um nmero
real, que varia de 0 a 1. Retomando nosso exemplo, poderamos increment-lo
adicionando novas variveis fuzzy, produzindo o seguinte conjunto de regras:
Se (inimigo.muito_forte E computador.desarmado) then fugir;
Se (inimigo.forte E desarmado) then procurar_arma;
Se (inimigo.fraco OU inimigo.desarmado) then atacar.
Este apenas um exemplo. Inmeras outras regras poderam ser
adicionadas para lidar com todas as possibilidades. O resultado da avaliao destas
regras podera ser o seguinte:
fugir com intensidade 0.5;
procurar arma com intensidade 0.2;
atacar com intensidade 0.76.
A intensidade associada a cada ao representa a fora de cada
regra. Uma maneira de escolher qual ser deciso tomada escolher a de maior
peso (neste caso, atacar). Note que os pesos acima no indicam a intensidade com
que ser feita a fuga, procura da arma ou ataque, e sim o peso de cada deciso. O
clculo intensidade com que a ao dever ser executada, quando necessria, ser
calculada na fase de desfuzzificao.
4.3.6 Desfuzzificao
A desfuzzificao necessria quando se deseja um sada
quantitativa, ou seja, um nmero como sada do sistema nebuloso. Em um caso de
perseguio e fuga, por exemplo, um sistema fuzzy podera indicar ao caador um
36
valor quantitativo de quanto ele devera mudar de direo esquerda ou direita
para interceptar a presa. Exemplos de funes de defuzzificao podem ser
encontrados em (MCNEIL e THRO, 1994).
4.4 Scripts
Scripts so linguagens de programao bastante simplificadas,
escritas especificamente para lidar com tarefas especficas dentro de um jogo,
como controle de fluxo de dilogos, controle de aes, entre outras.
Os scripts ficam em arquivos separados do cdigo principal do
programa, na forma de arquivos de texto simples. Para dificultar a alterao desses
arquivos de script, alguns desenvolvedores criam compiladores para a linguagem,
armazenando os mesmos na sua forma compilada -de modo que sua leitura seja
irreconhecvel ao usurio. Isto evita que os mesmos sejam alterados com intenes
maliciosas.
Uma grande vantagem da utilizao de scripts que, conforme o
tamanho do projeto aumenta, a alterao de constantes dentro do cdigo fica cada
vez mais difcil, j que o tempo de compilao bastante demorado. Armazenando
essas constantes na forma de scripts, o cdigo em linguagem de programao fica
separado do cdigo referente s regras do jogo, e isto permite ainda que pessoas
leigas em programao possam ser incumbidas de tal tarefa. Mas isso no tudo:
Uma linguagem script mais avanada aumenta a interao entre o script e o
executvel, permitindo no apenas inicializar variveis mas criar a lgica do jogo e at
mesmo objetos do jogo, tudo a partir de um ou mais arquivos de script. (BUCKLAND,
2005) (trad.nossa).
37
4.4.1 Construo
Para que os scripts funcionem de maneira independente do programa
executvel, necessrio que este ltimo tenha consigo um interpretador compatvel
com a sua linguagem. Este interpretador ir carregar o arquivo de script para
inicializar as variveis dentro do jogo, como no exemplo abaixo:
Cdigo 5: exemplo de arquivo script
FORCA = 30;
AGILIDADE=10;
VIDAS=2;
O exemplo acima um pequeno arquivo de script que especifica os
atributos de um personagem controlado pelo computador. Veja o exemplo abaixo:
Cdigo 6: exemplo de script controlando a lgica do computador
Se (Jogador.armado=TRUE) ento Fuja();
Seno Ataque();
Repare como a linguagem script pode ser utilizada para controlar
aspectos lgicos do computador. Este exemplo utiliza uma linguagem de alto nvel,
mais prxima linguagem natural. Scripts como este requerem maior tempo gasto
no desenvolvimento de interpretadores e compiladores para a linguagem, mas
permitem a criao de mods.
Mods so extenses de um jogo criadas atravs de scripts pelos
prprios jogadores. Atravs de sua linguagem, o desenvolvedor pode permitir quais
aspectos do jogo o jogador poder alterar, ou criar, dando a ele a oportunidade de
criar novos mundos, armas, inimigos, entre outros. Isto tem sido uma tendncia em
jogos recentes para aumentar o tempo de durao do jogo e alavancar as vendas.
Um grande exemplo de utilizao de mods o jogo Unreal Tournament 2004, da
Epic Games.
38
4.5 Mquinas de Estado Finito
As mquinas de estado finito ou finite state machines (FSMs) tm sido
h muito tempo a principal escolha na hora de implementar a IA de agentes para
jogos. Sua principal idia consiste em dividir o comportamento do agente em vrios
estados, com transies entre eles. A transio de um estado para outro depender
de fatores de entrada, que podem ser estmulos provocados pelo jogador ou pelo
ambiente. Historicamente, um dos mais famosos exemplos de FSM a Mquina de
Turing, que foi proposta por Alan Turing, em 1936.
Existem vrios motivos pelos quais o uso de FSMs tenha sobrevivido
at hoje, entre eles podemos citar:
facilidade de compreenso pois natural para ns humanos
pensarmos nos objetos como estando em um estado ou outro;
so fceis de serem implementados;
facilidade de teste como possuem um nmero finito de
estados, possvel traar a rota de eventos que causaram o
mal-funcionamento do agente defeituoso;
so rpidos h pouca sobregarga de processamento, pois
todas as regras so implementadas via programao e so da
forma se-ento;
so flexiveis estados e regras adicionais podem ser
implementados rapidamente. Alm disso, podem ser
combinadas com tcnicas no-determinsticas da IA, como
redes neurais e lgica nebulosa.
39
4.5.1 Caractersticas
Os elementos bsicos que constituem uma FSM so:
estados: representam uma posio no tempo que,
consequentemente ir influir no comportamento do agente;
transies: so ligaes entre os estados. Podem ser uni ou bi-
direcionais;
eventos: so aes que ocorrem externamente ao agente;
condies: so regras que devem ser preenchidas para que
ocorra a mudana de estado.
Figura 7 mquina de estados finitos (s: estados; t:transies)
4.5.2 Implementao
Para implementar uma FSM, necessrio ter uma varivel de
controle, que indicar o estado atual do agente. O valor inicial desta varivel ir
determinar o estado inicial. A partir disso, a cada interao do agente com seu
ambiente verificado seu estado atual, e, a partir deste, verificado se alguma
condio de transio satisfeita. Caso isto ocorra, a mudana do valor da varivel
de controle indica a mudana de estado. Isto pode ser feito atravs do uso de
condies se-ento ou atravs da declarao switch das linguagens C e Java.
40
A adio de estados adicionais pode resultar na dificuldade do
entendimento do cdigo. Uma soluo para o problema est na utilizao de
tabelas de transio de estados. Tais tabelas so divididas em colunas, que
contm a condio e o novo estado (transio), caso a condio seja satisfeita.
Tabela 1 tabela de transio de dados
Estado Atual Condio Novo estado
Fugindo Seguro Patrulhando
Atacando MaisFracoQueInimigo Fugindo
Patrulhando Ameacado E MaisForteQueInimigo Atacando
Patrulhando Ameacado E MaisFracoQueInimigo Fugindo
4.5.3 Mquinas de estado finito no-determinsticas
Uma grande desvantagem no uso de FSMs o fator previsibilidade,
que acaba tornando o jogo muito fcil para o jogador humano aps algum tempo de
jogo. Uma maneira de tornar as aes praticadas pelo agente mais difceis de se
prever misturar esta com um outra tcnica j mencionada neste trabalho: a lgica
nebulosa.
Deste modo, podemos tornar a FSM menos determinstica, utilizando
as tcnicas abaixo (BROWNLEE, 2005):
fuzzificar as condies de transio de estados. Quando for
encontrado um conflito, escolher a transio de maior valor
fuzzy;
fuzzificar os valores de entrada, representando a fora (peso)
com que determinado evento tenha ocorrido. O sistema ento
utilizaria esses dados numricos, disparando apenas as
transies de estado cujos pesos estiverem acima de um limiar.
41
Outra maneira de tornar o sistema menos determinstico
selecionando os estados de transio aleatriamente dentro de uma grande gama
de estados, criando uma sensao de imprevisibilidade.
4.6 Busca Heurstica
A busca heurstica uma tcnica antiga da IA e muito utilizada em
jogos de tabuleiro e, recentemente na busca de caminhos (pathfinding). Tais jogos
so bastante propcios para a implementao dessas tcnicas de IA, pois possuem
um espao de estados finito, mas suficientemente grande de modo que a busca
exaustiva (busca em largura, busca em profundidade, etc) seja proibitiva, pois no
conseguiriam encontrar uma soluo em um tempo computacional aceitvel.
As heursticas agilizam a busca de uma soluo pois utilizam de
informaes para escolher os ramos, dentre todos os ramos de uma rvore de
espao de estados, que possuem uma maior probabilidade de levarem a uma
soluo aceitvel para o problema (LUGER, 2004). No entanto, elas possuem um
revs, que a possibilidade de no ser encontrada uma soluo tima, ou ento
nem mesmo encontrar-se uma soluo. Isto pode ser contornado utilizando
heursticas ou algoritmos de busca mais eficientes (Garey e Johnson, 1979 apud
LUGER, 2004 pg.134).
Considere o jogo-da-velha. Uma busca exaustiva tera uma quantidade
de 9! ou 362880 jogadas. Esta ainda no uma quantidade to grande se
comparada ao tamanho do espao de busca de um jogo mais complexo como o
xadrez. No entanto, podemos reduzir drasticamente o espao de busca utilizando
uma heurstica simples: supondo que estejamos realizando a jogada do jogador X,
escolhemos sempre a posio que garante a X o maior nmero de vitrias
possvel.
42
Figura 8 heurstica para o jogo da velha
Segundo a heurstica do maior nmero de vitrias, a jogada escolhida
dentre as trs acima devera ser a segunda (4 vitrias). O limite superior
aproximado para a quantidade de estado utilizando essa tcnica de 72 estados
um nmero consideravelmente inferior quantidade inicial de 9! (nove fatorial)
estados.
Um algoritmo que utiliza a heurstica do maior nmero de vitrias a
subida de encosta:
As estratgias de subida de encosta expandem o estado corrente da busca
e avaliam os seus filhos. O melhor filho selecionado para expanso futura; nem os seus
irmos nem os seus pais so considerados. A busca pra quando ela alcana um estado
que melhor que qualquer um de seus filhos (LUGER, 2004).
Um algoritmo heurstico muito utilizado em jogos, principalmente os de
estratgia e tiro em primeira pessoa o A* (l-se A estrela), que ser visto adiante
quando for abordado o tpico pathfinding.
4.7 Pathfinding
Pathfinding, ou busca de caminhos um dos problemas mais comuns
acerca do desenvolvimento de jogos, e est presente na maioria dos gneros. Boa
parte das entidades de IA precisam do pathfinding: sejam elas tanques, pessoas,
veculo ou unidade de combate. E no apenas para movimentao que se aplica
o pathfinding; podemos utiliz-lo tambm para resolver problemas como:
patrulhamento: consiste na movimentao de uma unidade
43
atravs de pontos pr-estabelecidos do cenrio e em ordem.
Isto faz com que as unidades paream mais vivas e aumenta
as suas chances de encontrar inimigos;
desvio de obstculos: requer que a unidade tenha
conhecimento do que est ao seu redor, de modo que evite
colises com este;
perseguio: fazer com que a unidade v em direo ao seu
alvo, como abordado no tpico Perseguio e Fuga;
mirar e atirar: um problema que ocorre quando uma unidade
tenta atingir a outra que obstculos podem interromper a
tragetria. Uma unidade inteligente dever prever a existncia
de um obstculo na rota de coliso do tiro antes de efetu-lo (ou
mesmo mover-se para uma posio aonde o mesmo possa ser
efetuado).
Um algoritmo tpico de pathfinding com desvio de obstculos em
pseudo-cdigo funciona da seguinte maneira:
Cdigo 7: algoritmo de pathfinding em pseudo-cdigo
Incio
ENQUANTO no chegou ao destino
ESCOLHA um local prximo rumo ao destino
SE o local est vazio, mova-se at ele
SENO escolha outra direo segundo estratgia de desvio de obstculos
FIM ENQUANTO
Fim
4.7.1 Estratgias para desvio de obstculos
O problema de pathfinding sera demasiadamente simples se no
houvesse o problema de desvio de obstculos. Os algoritmos estudados
anteriormente no captulo sobre perseguio e fuga poderam ser facilmente
adaptados para o pathfinding. No desvio de obstculos, as seguintes estratgias
44
podem ser adotadas:
escolher uma direo aleatria: se os obstculos forem
pequenos, convexos
7
e distribudos de maneira dispersa, esta
tcnica funciona satisfatriamente e requer pouco
processamento se comparado a outras abordagens. Entretanto,
para cenrios com muitos quartos e passagens estreitas entre
eles, o uso desta tcnica no recomendado, pois pode fazer
com que o agente fique preso ou demore muito tempo para
encontrar o caminho correto;
contornar o obstculo: o agente controlado pelo computador
seguiria utilizando um algoritmo simples de pathfinding at
encontrar um obstculo; ocorrendo isto, o mesmo entraria em
um estado de contorno, seguindo as bordas do obstculo na
tentativa de contorn-lo. O problema aqui consiste em saber
quando o algoritmo deve parar de contornar o objeto, caso
contrrio h o risco de se retornar ao ponto inicial (quando o
agente entrou no estado de contorno). Isto pode ser
solucionado traando uma linha reta entre a posio atual e a
posio de destino, no momento em que o obstculo for
encontrado; logo, quando esta reta for cruzada, o agente saber
que o obstculo foi contornado e assim ele retomar o trajeto
original utilizando o algoritmo de pathfinding.
calcular o caminho antecipadamente: os mtodos anteriores
geralmente so satisfatrios, mas no lidam com problemas
que incluem regies com peso, como terrenos cujos custos das
rotas so variados (STOUT, 1997); estes problemas so
resolvidos com algoritmos de teoria de grafos, como o Breadth-
first search (BFS), Depth-first search e Dijkstra.
_____________
7
Um poliedro convexo aquele que, dados quaisquer dois pontos pertencentes a ele, o segmento
contendo estes pontos nas extremidades dever estar inteiramente contido no poliedro.
45
Figura 9 - problema do ciclo no desvio de obstculos
Figura 10 - problema do ciclo resolvido
46
4.7.2 Algoritmo A*
Este um algoritmo muito importante, tanto pra IA tradicional quanto
para a IA para jogos. Motivo pelo qual um tpico especfico foi dedicado a ele. O A*
(pronuncia-se A estrela) um algoritmo admissvel, ou seja, para qualquer grafo
ele encontrar um caminho timo entre os estados inicial e final, caso exista um
caminho entre esses estados.
Para utilizar o A* em jogos, dividimos o terreno de um cenrio ou mapa
em pequenos quadrados (ladrilhos) de igual tamanho, e consideramos cada ladrilho
como sendo um n no grafo. A distncia total a ser percorrida no pathfinding
corresponde ao nmero de ladrilhos percorridos pela unidade do ponto (estado)
inicial ao final. Os ns-filho de cada n so representados pelos ladrilhos adjacentes
ao ladrilho em questo.
O A* mantm duas listas: a de ns abertos e a de ns fechados. A
primeira armazena todos os ladrilhos que precisam ser verificados, sendo que um
deles ser escolhido como o prximo n-destino da entidade segundo uma
estratgia de escolha; j a segunda, armazena os ns que no precisam mais
serem verificados no momento.
O algoritmo realizado da seguinte maneira:
1) coloca-se o n (ladrilho inicial) na lista de abertos;
2) feito isto, colocamos todos os seus ns adjacentes (filhos)
tambm na lista de abertos, ignorando aqueles ladrilhos que
representam paredes ou outras reas do cenrio que no so
alcanveis, bem como aqueles que j se incluem na lista de
ns fechados;
3) coloca-se o ladrilho inicial na lista de ns fechados;
47
4) escolhe-se um dos ns da lista de abertos para continuar o
algoritmo. O n atual feito pai do n escolhido, para que seja
possvel traar o caminho a ser percorrido pela entidade; a
estratgia para escolher este n ser vista adiante;
5) o processo se repete at que o n-destino seja adicionado
lista de abertos (neste caso, basta fazer o caminho inverso na
rvore de estados para encontrar o caminho, e o algoritmo
termina em sucesso), ou a lista de abertos fique vazia
(indicando falha na busca de um caminho).
O ponto crucial aqui escolher qual dos ns far parte do caminho a
ser percorrido. Isto feito utilizando uma funo de avaliao F(n). Esta funo
resultado da soma da distncia percorrida do n inicial ao n avaliado, G(n), com
uma funo heurstica, H(n), onde n representa o n avaliado:
H(n) G(n) F(n) + =
Equao 6: funo de avaliao do A*
H(n) pode ser estimado de vrias maneiras, no entanto, deve ser
sempre menor ou igual a G(n), subestimando o custo real para chegar ao n-
destino. Um exemplo de funo heurstica calcular a mesma utilizando uma linha
reta entre o n atual e o n-destino, ignorando obstculos intermedirios.
Feito isto, escolhemos, dentre os ns abertos, aquele n que possuir o
menor valor F(n). Se o n escolhido j estiver na lista de abertos, verificamos se o
valor de G, utilizando o n atual para se chegar at ele menor. Se isto for
verdadeiro, fazemos o n atual ser o pai do n escolhido e recalculamos os valores
F e G para este n; caso contrrio, nada precisa ser feito.
Lester (LESTER, 2003), prope o uso de algumas melhorias para o
algoritmo A* se tornar ainda mais eficiente:
custo de terreno varivel: nem sempre o menor custo significa
encontrar a menor distncia entre os dois pontos. Certos mapas
48
possuem certas caractersticas como rampas, relevo
acidentado, armadilhas, entre outras. Pode-se adaptar o
algoritmo acima para este problema adicionando o custo de
atravessar tais empecilhos funo custo G de um dado
ladrilho;
caminhos suaves: o caminho resultante do A* timo, mas nem
sempre o mais visualmente aceitvel. No clculo do caminho,
pode-se penalizar a escolha de ladrilhos que resultariam numa
mudana brusca de direo, adicionando um custo sua
funo G;
lidar com reas inexploradas: dependendo do jogo, sera muito
irrealstico o computador ter conhecimento de toda a topologia
do mapa, sabendo exatamente que caminho percorrer em todas
as ocasies; uma soluo manter um vetor de ns
conhecidos para o computador, ou seja, todos os ns contidos
neste vetor j foram explorados por ele, e o resto do mapa
presumido andvel, at provado o contrrio. Com esta
abordagem, as unidades iro cometer erros, entrar em becos,
at explorarem o espao ao seu redor. Quando o mapa for
explorado em toda sua extenso, o pathfinding ser executado
normalmente;
outras unidades: o A* considera apenas a topologia do terreno,
ignorando outras unidades. Por isso, necessrio adapt-lo
para que detecte a coliso com outros elementos do jogo.
4.8 Redes Neurais
Foi s recentemente que as redes neurais, ou RNs, comearam a ser
utilizadas em jogos comerciais. Devido falta de recursos disponveis tanto nos
PCs quanto nos consoles das geraes passadas, era prefervel utilizar tcnicas
49
mais simples e determinsticas na implementao da IA. Mas conforme o tempo foi
passando, tanto a quantidade de memria quanto de processamento disponvel
evoluiu muito, e agora cada vez mais comum o uso das redes neurais em jogos.
As redes neurais so baseadas no modelo de ligaes entre neurnios
dos seres vivos, onde que cada neurnio possui trs partes bsicas: dendrito, corpo
celular e axnio. O crebro possui aproximadamente 100 bilhes desses neurnios,
que se comunicam atravs de sinais eletro-qumicos. A troca de informaes entre
neurnios denominada sinapse, que a ligao entre o axnio de um neurnio
com o dendrito de outro. Quando um neurnio recebe um sinal, ele executa uma
espcie de clculo, que, ao ultrapassar um limiar, dispara o neurnio, e este envia
um sinal ao prximo neurnio da rede, atravs de seu axnio.
Figura 11 - Estrutura bsica de um neurnio
4.8.1 O neurnio artificial
Redes neurais so formadas por vrios neurnios artificiais. Um
neurnio artificial modelado semelhana de um neurnio biolgico. Cada
neurnio possui um conjunto de entradas, uma funo de ativao e uma sada.
Cada entrada do neurnio possui um peso associado.
O nmero de neurnios do qual a rede formada depende da tarefa
que ela ir desempenhar, podendo variar de poucos neurnios (3 ou 4) a milhares
deles. Em aplicaes da vida real, as RNs so utilizadas no reconhecimento de
50
padres, categorizao, aprendizado, competio, auto-organizao, entre outras
reas.
Uma vez criada a rede, ela dever ser treinada para que funcione da
maneira esperada. Treinar uma rede neural nada mais que ajustar os pesos, ou
seja, a fora entre suas conexes. Cada peso est associado a uma entrada do
neurnio, e representado por um nmero de ponto flutuante negativo ou positivo
(exercendo influncia excitatria ou inibitria) na entrada. Quando uma entrada
apresentada ao neurnio, ela multiplicada pelo seu peso. O neurnio ento soma
todas essas entradas, gerando um valor de ativao. Se este valor for maior que um
certo limiar, o neurnio gera um sinal de sada, que dependendo da topologia da
rede pode ser a sada desejada, ou uma sada que servir como entrada para outro
neurnio.
Figura 12 - neurnio artificial
As principais vantagens das redes neurais so:
tolerncia a falhas: as redes neurais podem ser treinadas para
reconhecerem padres distorcidos e at mesmo incompletos,
alm serem capazes de operar, at certo ponto, mesmo quando
parte da rede for danificada;
compatibilidade com a tecnologia atual: possvel treinar uma
rede para executar uma tarefa especializada e depois
implement-la em um hardware de baixo-custo. Assim, elas
51
poem ser facilmente inseridas em sistemas existentes;
auto-organizao: redes neurais possuem uma capacidade de
aprendizagem adaptativa, auto-organizando as informaes
recebidas. Isto permite que a rede responda satisfatoriamente
mesmo quando forem apresentadas informaes novas.
4.8.2 Redes neurais em jogos
At o momento, no existem tcnicas para modelagem de uma rede
com inteligncia complexa (ao nvel de um animal, por exemplo), mesmo sendo
possvel, com a tecnologia de hoje, montar uma rede com milhares de neurnios. A
maioria das aplicaes atuais de RNs utilizam cerca de uma dzia ou mais
neurnios, e elas so feitas para desempenhar tarefas especficas. E em jogos isto
no diferente. Redes neurais so usadas em conjunto com outras tcnicas,
executando tarefas que necessitam um certo grau de aprendizado ou para realizar
tarefas em que as unidades controladas pelo computador sejam menos previsveis.
Uma das redes mais utilizadas em jogos a rede feedforward de trs
camadas. Ela assim chamada devido ao fato de seus neurnios enviarem suas
sadas prxima camada at que seja obtida a sada final da rede.
Figura 13 - Rede feedforward de trs camadas
52
A rede possui uma camada de entrada, uma camada escondida e uma
camada de sada. No h restries quanto ao nmero de neurnios em cada
camada, e a quantidade ideal deles depende do problema a ser resolvido. Cada
neurnio da camada de entrada ligado a todos os neurnios da camada
escondida, e cada neurnio da camada escondida ligado a todos os neurnios da
camada de sada. Maiores detalhes sobre o clculo de funes de ativao, bem
como de outros tipos de RN pode ser encontrados em FREEMAN 1991.
A rede podera ser utilizada, por exemplo, para controlar a direo de
uma unidade, tendo como entrada as informaes enviadas por seus sensores
visuais e como sada, para qual direo a unidade deve seguir. Observe que
apenas a parte da tomada de deciso controlada pela RN. Para a movimentao
pode-se utilizar um algoritmo simples de perseguio e fuga. Veja abaixo uma
ilustrao para o problema.
Figura 14 - rede feedforward tripla camada controlando uma unidade
4.8.3 Mapeando o problema
Toda rede neural recebe como entrada um conjunto de nmeros reais.
O problema ocorre quando precisamos utilizar outros tipos de valores de entrada,
como enumeraes e valores lgicos verdadeiro/falso o que comum na
implementao de jogos.
53
O mapeamento pode ser feito utilizando os valores 0 (zero) para o
valor lgico falso e 1 (um) para o valor lgico verdadeiro. Quando a varivel for
uma enumerao, utiliza-se um vetor de entrada, sendo que cada posio do vetor
possui valor 0 ou 1. Por exemplo: se temos uma varivel enumerada que pode
assumir os valores espada, revlver e canho, por exemplo, teramos um vetor
de trs posies com os valores {0, 0, 1}, caso o valor desta varivel seja
canho, por exemplo (aqui assumimos que as variveis se excluem mutuamente,
no podendo assumir mais de um valor ao mesmo tempo). Se a enumerao
tivesse um valor revlver, o vetor de entrada sera {0, 1, 0}.
Quando nosso problema j se encontra no domnio contnuo, apenas
precisamos enviar suas variveis como entrada na rede neural. Deve-se atentar
para entradas com diferenas acentuadas entre seus elementos. Por exemplo, se
uma rede possuir uma entrada com valor 20 e outra com valor 200, pode-se obter
um valor influenciado pela entrada de maior valor. Para tal problema, pode-se dividir
ambas as entradas pelo maior valor (200), obtendo valores em termos percentuais.
4.9 Algoritmos Genticos
A pesquisa em algoritmos genticos, assim como as redes neurais,
outra rea da IA influenciada pela biologia. Ela baseada nos estudos sobre a
evoluo das espcies, de Charles Darwin, moldando a populao de indivduos
atravs da sobrevivncia dos membros mais aptos a viver naquele ambiente.
No mundo real, as espcies evoluem constantemente na tentativa de
melhor se adaptarem aos seus ambientes. Os seres mais fortes e capazes de
sobreviver passam adiante suas caractersticas para a prxima gerao. Tais
caractersticas so codificadas nos cromossomos. A gerao resultante fruto da
combinao de dois cromossomos da gerao atual, num processo denominado
crossover. Nessa combinao podem ocorrer mutaes aleatrias, e, se estas
mutaes contriburem para a sobrevivncia da espcie, elas sero tambm
passadas para as geraes futuras.
54
4.9.1 Algoritmos genticos em jogos
No desenvolvimento de jogos, os algoritmos genticos visam a busca
de uma soluo tima para um determinado problema. Cada um dos indivdios
mencionados anteriormente so possveis solues para o problema em questo.
Geralmente, os algoritmos genticos so utilizados quando se deseja uma IA que
atue mesmo em situaes no previstas pelo desenvolvedor, como em tomadas de
deciso de acordo com o comportamento do jogador. Para problemas como o do
pathfinding, (nos quais j existem algoritmos slidos para sua resoluo) no
recomendado o uso dos algoritmos genticos, pois estes so mais custosos
computacionalmente.
A implementao dos algoritmos genticos em jogos pode ser dividida
em quatro etapas, que so a inicializao da populao, validao da aptido,
seleo e evoluo.
1) Inicializao: primeiramente, preciso definir um modo de codificar
os cromossomos da populao de criaturas de IA que iremos criar. Esta codificao
pode ser feita de maneira simples, utilizando um vetor de caracteres; cada ndice do
vetor pode representar uma caracterstica do ambiente externo e o valor contido
nesta posio representa a ao que a criatura dever executar.
Exemplo: Suponha que a populao de criaturas controladas pelo
computador tenham que responder de acordo com a arma em uso pelo jogador
(espada, arco, lana e machado), e as respostas possveis so: usarEscudo (1),
ataqueComEspada (2), fugir (3), esconder (4) e ataqueComArco (5). Ento os
cromomossomos destas criaturas sero representados por um vetor de quatro
posies, onde a posio 1 contm o identificador da ao a ser executada caso o
jogador tenha uma espada, a posio 2 ser executada caso o jogador tenha um
arco, e assim por diante. Cada posio do vetor assume um valor de 1 a 5.
Na etapa de inicializao, espera-se obter uma populao com alto
grau de variabilidade gentica, portanto atribui-se valores aleatrios para os
cromossomos. Veja o exemplo da tabela abaixo.
55
Tabela 2 exemplo de codificao de um cromossomo
Arma Espada Arco Lana Machado
Ao [1..5] [1..5] [1..5] [1..5]
Definidos os mtodos de codificao dos genes da populao,
inicializamos ela conforme descrito acima, com valores aleatrios para os
cromossomos das criaturas. Note que o exemplo acima possui apenas quatro
situaes possveis. Numa aplicao real poderamos ter um nmero muito maior
de situaes a considerar.
2) Validao da aptido: nesta etapa do processo evolucionrio, deve-
se avaliar quais indivduos da populao so os mais aptos a resolver o problema
em questo. Para isto, utilizamos uma funo de avaliao de aptido (tambm
denominada funo fitness). Para o exemplo acima, uma boa funo avaliao
contabilizar a diferena entre o dano que a criatura causou ao jogador e o dano
recebido. As criaturas com a maior aptido segundo esta funo tero a maior
probabilidade de passar seus genes gerao seguinte.
3) Seleo: nesta etapa utilizada a funo calculada na etapa
anterior para que sejam escolhidos os indivduos que participaro do processo
evolucionrio. Na vida real, geralmente dois pais contribuem com seus
cromossomos para a gerao seguinte. J no mundo dos jogos, podemos escolher
qualquer nmero dentre os melhores indivduos (segundo a funo de aptido).
4) Evoluo: nesta ltima etapa, sero criados os novos indivduos que
sero introduzidos no ambiente do jogo. So selecionados os melhores indivduos
e combinados seus genes no processo de crossover. Aqui tambm so introduzidas
mutaes aleatrias. Observe a tabela abaixo.
56
Tabela 3 exemplo de crossover
Pai 1 Pai 2 Filho
5 3 5
4 1 1
3 5 4
4 2 2
Observe que no terceiro cromossomo do indivduo resultante (terceira
linha da tabela) a caracterstica no foi herdada de nenhum dos pais. Isto
resultado de uma mutao aleatria. Por exemplo, na hora do crossover, podemos
fazer com que a caracterstica resultante tenha, digamos, 5% de chances de ser
gerada aleatriamente, ou seja, no estando presente em nenhum dos indivduos
da gerao anterior.
Agora o algoritmo retornar segunda etapa, e a cada iterao, sero
criados indivduos mais aptos a enfrentar o jogador em diferentes situaes.
A implementao do algoritmo gentico resumida abaixo, em
pseudo-cdigo.
Cdigo 8: algoritmo gentico em pseudo-cdigo
Procedimento algoritmo gentico
Incio
Inicialize a populao;
Enquanto a condio de parada no for satisfeita faa
Incio
Avalie a aptido de cada indivduo da populao;
Selecione os membros da populao com base na aptido;
Produza os descendentes destes pares;
Introduza esses descendentes na populao
Fim
Fim
57
4.10 Flocking
bastante comum na implementao de jogos a necessidade de
prover uma movimentao em grupos para personagens controlados pelo
computador, principalmente em jogos de estratgia e RPG. Estes grupos podem ser
de animais, pessoas, unidades de combate, entre outros. claro que tambm
possvel implementar esse tipo de movimentao com scripts bem elaborados, mas
a utilizao de flocking elimina a necessidade de criar um script para controlar cada
criatura do jogo ao invs disso, precisamos de apenas um script para controlar o
grupo como um todo.
Um algoritmo bsico de flocking foi apresentado por Craig Reynolds,
em seu artigo de 1987 intitulado Flocks, Herds, and Schools: A Distributed
Behavioral Model. A idia principal do algoritmo fazer os NPCs moverem-se de
maneira coerciva, como se houvesse um objetivo em comum o oposto de se ter
vrias unidades movendo-se de maneira independente, sem coordenaao alguma.
Para determinar a direo resultante de cada unidade, cada unidade
controlada pelo flocking mantm informaes sobre outras unidades em um raio
circular de tamanho pr-definido, centrado na prpria unidade. Este raio
denominado rio de vizinhana (neighborhood radius) (BUCKLAND, 2005). Ainda
segundo BUCKLAND, flocking tambm bastante utilizado em filmes, como em
Batman Returns e O Senhor dos Anis.
As trs principais regras que regem o algoritmo de flocking so:
separao, alinhamento e coeso:
separao: uma fora que faz com que as unidades
mantenham certa distncia uns dos outros, evitando colises
com seus vizinhos;
alinhamento: mantm a direo de cada unidade alinhada
direo de seus vizinhos. Isto feito calculando-se a mdia dos
58
vetores de direo de cada vizinho e subtraindo-se desta mdia
a direo atual da unidade. O resultado a direo que a
unidade deve seguir para manter-se em rumo com seus
vizinhos;
coeso: um tanto similar regra anterior, mas neste caso a
unidade dirige-se ao centro de massa (posio mdia) de seus
vizinhos. A mdia calculada levando em considerao o vetor
de posies dos vizinhos. O vetor resultante o centro de
massa da vizinhana e indica a posio qual a unidade deve
se dirigir.
Flocking considerado uma rea de estudo da Artificial Life, ou
simplesmente A-Life (vida artificial).
[...] Artificial Life (Alife) basicamente procura estudar a vida e suas
propriedades no computador criando a vida digitalmente dentro do computador,
simulando-a ou ambos. Alife pode ser especialmente interessante para pessoas de outras
reas como a teoria do caos, pois muitos aspectos so comuns entre ambas as reas.
(MATTHEWS, 2002, trad.nossa).
Para emular a vida, a A-Life faz uso de tcnicas como algoritmos
genticos, flocking, sistemas baseados em regras, entre outras. O comportamento
das criaturas dividido em problemas menores, que so mais tarde unidos por uma
hierarquia de decises que cada uma delas possui, determinando que aes devem
ser feitas para satisfazer suas necessidades. Segundo Woodcock (2000):
[...] as interaes que ocorrem entre comportamentos de baixo-nvel,
explicitamente codificados e as motivaoes/necessidades dos personagens causa o
surgimento de um comportamento de alto-nvel, mais inteligente, sem qualquer
programao explicta ou complexa. (trad.nossa).
59
5 ALGORITMOS DE IA PARA JOGOS ESTADO DA ARTE
Com o surgimento de placas aceleradoras grficas 3D para lidar
especificamente com grficos pesados, hoje h uma fatia muito maior da CPU para
processamento da IA. Alm disso, bons grficos deixaram de ser um diferencial e
passaram a ser algo essencial para o sucesso de vendas do produto. Deste modo,
a IA acaba tornando-se esse grande diferencial entre um produto e outro.
Segundo Woodcock, (1999) na maioria das empresas j existem
equipes especializadas em desenvolver a IA para o jogo algo incomum h pouco
tempo atrs. Em estdios menores, onde no h recursos financeiros para tal,
contratado pessoal terceirizado para trabalhar com a IA mostrando uma viabilidade
mercadolgica para pesquisadores de IA neste segmento.
Ultimamente, tem-se procurado muito a implementao de IA no-
determinstica, devido sua menor previsibilidade e de sua capacidade de aprender
com o jogador. Estes, por sua vez, esperam unidades de IA cada vez mais
inteligentes e desafiadoras, sem o uso de cheating.
A seguir, apresentaremos os principais tpicos de estudo da IA para
jogos atualmente.
IA extensvel: presente principalmente nos jogos de tiro em primeira
pessoa, um grande nmero de jogos recentes tem apresentado esta tcnica. Com
ela os jogadores podem criar sua prpria IA, seja atravs de uma linguagem script
criada especialmente para o jogo ou atravs de uma interface mais simples, pela
qual o jogador define o comportamento do computador. Exemplos de sucesso so
os jogos Quake e Unreal. Existem muitos lugares na internet aonde os jogadores
compartilham suas criaturas criadas atravs de IA extensvel aumentando o tempo
de vida til do produto.
Pathfinding: o algoritmo A* continua sendo o mais utilizado para o
pathfinding, seja na sua forma padro ou com a incluso de algumas modificaes
60
a comunidade de jogos considera este problema bem resolvido, e agora busca
implementaes especficas para cada jogo.
Atualmente, o que mais se tem pesquisado nesta rea a incluso da
anlise de terreno em pathfinding. A anlise de terreno procura por caractersticas
naturais do cenrio, como lugares para emboscadas e combates, recursos naturais,
entre outras; tais caractersticas so usadas na criao de um pathfinding mais
robusto.
Formaes: com o crescente sucesso de jogos de simulao militar,
este tpico tem sido alvo de muito estudo por desenvolvedores de IA. O objetivo
fazer grupos de unidades militares comportarem-se de maneira realstica. Sistemas
baseados em regras, flocking, mquinas de estado finito e lgica nebulosa so as
tcnicas preferidas devido a uma maior facilidade na implementao e testes, em
detrimento de tcnicas como algoritmos genticos e redes neurais.
A-Life e seu modo de quebrar o problema em situaes menores
tambm tem sido muito utilizada, dando uma viso hierrquica ao desenvolvimento
da IA. Jogos como Starfleet Command (Interplay) e Force 21 (Red Storm) utilizam
esta tcnica. Nesses jogos, as unidades so divididas em grupos, onde cada um
deles possui um comandante; as ordens cada grupo so interpretadas pelo
comandante, que ento atribui comandos cada unidade individualmente.
Aprendizagem: futuramente, espera-se criar jogos que evoluam
constantemente, aprendendo com o jogador e melhorando suas aptides mesmo
aps sarem das prateleiras. Existem dois principais problemas com relao a isso:
um deles a dificuldade de testar o produto, pois o comportamento de uma rede
neural, por exemplo, pode ser imprevisvel; outro problema a possibilidade de que
a IA, aps certo tempo de treinamento com o jogador possa tornar-se estpida ou
at mesmo difcil demais para o jogador uma soluo podera ser a incluso de
uma opo pela qual o jogador pudesse reiniciar o aprendizado da mquina para
suas configuraes de fbrica.
Outra abordagem para o problema a criao de um banco de dados
61
de situaes passadas, como foi feito no jogo Magic & Mayhem, da Mythos Games.
Diante da necessidade de atacar o jogador, o jogo recorre ao seu banco de dados
procurando aquelas estratgias que surtiram efeito em situaes parecidas que
ocorreram anteriormente.
Alguns jogos utilizam redes neurais que so treinadas pelos prprios
desenvolvedores e que so mais tarde desligadas antes de chegarem ao
consumidor. Tal abordagem pode criar uma boa IA, mas infelizmente anula
qualquer possibilidade de aprendizagem com o jogador.
Tambm importante ressaltar que os algoritmos genticos tm sido
pouco utilizados recentemente, ficando sua implementao mais limitada aos jogos
simuladores de vida. Mas em seu lugar, as tcnicas de flocking e A-Life continuam
sendo bastante utilizadas na IA para jogos.
62
6 CONCLUSO
bastante evidente a importncia que a IA tem mostrado na
implementao de jogos. Devido ao fato dos grficos deixarem de ser um grande
diferencial e devido aos avanos de hardware, h cada vez mais espao para a
implementao de tcnicas outrora consideradas muito acadmicas para uma
implementao comercial. Tambm pode-se observar cada vez mais a utilizao de
tcnicas no-determinsticas em conjunto com j conhecidas tcnicas como as
mquinas de estado finito, scripts e sistemas baseados em regras.
Muito se argumentava sobre a possibilidade da criao de jogos multi-
jogador via rede fazer com que as pesquisas em IA ficassem estagnadas, pois,
jogar contra humanos muito mais desafiador que faz-lo contra o computador. No
entanto, j foi comprovado que, seja por questes financeiras ou mesmo pessoais,
muitos ainda preferem jogar contra a mquina.
Futuramente, espera-se que a IA aprenda cada vez mais com o
jogador, utilizando redes neurais artificiais e at mesmo os algoritmos genticos,
que at o momento tm sido pouco utilizados, salvo em implementaes
especficas. Mesmo em tpicos em que j existem algoritmos de sucesso como o
pathfinding e seu A*, ainda h muito a ser pesquisado, o que torna esta uma rea
de pesquisa bastante promissora. E o resultado dessas pesquisas a criao de
jogos cada vez mais divertidos.
63
REFERNCIAS BIBLIOGRFICAS
BOURG, David; SEEMAN, Glenn. AI for Game Developers. OReilly, 2004.
BROWNLEE, Jason. Finite State Machines (FSM). AI Depot. Disponvel em:
<http://ai-depot.com/FiniteStateMachines/FSM.html>. Acesso em 15 out. 2005.
BUCKLAND, Mat. Programming Game AI by Example. Texas, EUA: Wordware
Publishing, Inc, 2005.
BUCKLAND, Mat. AI Techniques for Game Programming. Cincinnati, Ohio. EUA:
Premier Press, 2002.
CHAMPANDARD, Alex. AI Game Development: Synthetic Creatures with
Learning and Reactive Behaviors. New Riders Publishing, 2003.
FREEMAN, James A.; SKAPURA, David M. Neural Networks: Algorithms,
Applications and Programming Techniques. Loral Space Information Systems
and Adjunct Faculty, School of Natural and Applied Sciences University of Houston at
Clear Lake: Addison-Wesley Publishing Company, 1991.
LESTER, Patrick. A* Pathfinding for Beginners. GameDev.net. Disponvel
em:<http://www.gamedev.net/reference/articles/article2003.asp>. Acesso em 8 mar.
2005.
LUGER, George F. Inteligncia Artificial: estruturas e estratgias para a soluo
de problemas complexos. - 4.ed. - Porto Alegre: Bookmann, 2004.
MCCARTHY, John. What is Artificial Intelligence?. Stanford University, Computer
Science Department, 2004. Disponvel em:<http://www-
formal.stanford.edu/jmc/whatisai/>.
MCNEIL, Martin F.; THRO, Ellen. Fuzzy Logic: A Practical Approach. Chestnut
Hill, MA, EUA: AP Professional, 1994.
RUSSEL, Stuart J.; NORVIG, Peter. Inteligncia Artificial: Uma Abordagem
Moderna. So Paulo: Editora Campus, 2004.
STOUT, Brian. Smart Moves: Intelligent Pathfinding. Gamasutra, 1997. Disponvel
em:< http://www.gamasutra.com/features/19970801/pathfinding.htm>. Acesso em 24
mai. 2005.
WOODCOCK, Steve. Game AI: The State of the Industry. Gamasutra, 1999.
Disponvel em:<http://www.gamasutra.com/features/19990820/game_ai_01.htm>.
Acesso em 18 mai. 2005.
WOODCOCK, Steve. Game AI: The State of the Industry. Gamasutra, 2000.
Disponvel em:<http://www.gamasutra.com/features/20001101/woodcock_01.htm>.
Acesso em 18 mai. 2005.
64
BIBLIOGRAFIA CONSULTADA
CHAMPANDARD, Alex. The Future of Game AI: Intelligent Agents. Disponvel
em:< http://ai-depot.com/GameAI/Agent-Intelligence.html>. Acesso em 16 out. 2005.
FUNGE, John D.; TU, Xiaoyuan. Hardcore AI for Computer Games and
Animation. In: SIGGRAPH, 1998. Wesmont, Illinois. EUA.
LAMOTHE, Andre. Building Brains into Your Games. Gamasutra. Disponvel em:
<http://www.gamasutra.com/features/19970601/build_brains_into_games.htm>.
Acesso em 18 mai. 2005.
MATTHEWS, James.How to Get Started with Artificial Life. Generation5, 2002.
Disponvel em:<http://www.generation5.org/content/2002/howto04.asp>. Acesso em
1 nov. 2005.
PINTO, Paulo. Minimax Explained. AI Depot. Disponvel em:
<http://ai-depot.com/LogicGames/MiniMax.html>. Acesso em 2 nov. 2005.
SALTZMAN, Marc. Game Creation and Careers: Insider Secrets from Industry
Experts. New Riders Publishing, 2004.
SMITH, Leslie. An Introduction to Neural Networks. Centre for Cognitive and
Computational Neuroscience. University of Stirling. Disponvel
em:<http://www.cs.stir.ac.uk/~lss/NNIntro/InvSlides.html>. Acesso em 8 mar. 2005.
65
ANEXOS
ANEXO A Algoritmo de Bresenhan
void ai_Entity::BuildPathToTarget (void)
{
int nextCol=col; //col e row so valores iniciais do caminho
int nextRow=row;
//endRow e endCol so coordenadas de destino
//deltaRow e deltaCol so usados para determinar a direo
int deltaRow=endRow-row;
int deltaCol=endCol-col;
int stepCol, stepRow;
int currentStep, fraction;
for (currentStep=0;currentStep<kMaxPathLength; currentStep++)
{
//inicializao dos vetores do caminho
pathRow[currentStep]=-1;
pathCol[currentStep]=-1;
}
currentStep=0;
pathRowTarget=endRow;
pathColTarget=endCol;
//determina a direo usando os deltas
if (deltaRow < 0) stepRow=-1; else stepRow=1;
if (deltaCol < 0) stepCol=-1; else stepCol=1;
deltaRow=abs(deltaRow*2);
deltaCol=abs(deltaCol*2);
//inicia o caminho com as coordenadas atuais do predador
pathRow[currentStep]=nextRow;
pathCol[currentStep]=nextCol;
currentStep++;
if (deltaCol >deltaRow) //determina qual eixo o mais longo
{
fraction = deltaRow *2-deltaCol;
while (nextCol != endCol)
{
if (fraction >=0)
{
nextRow =nextRow +stepRow;
fraction =fraction -deltaCol;
}
nextCol=nextCol+stepCol;
fraction=fraction +deltaRow;
pathRow[currentStep]=nextRow;
pathCol[currentStep]=nextCol;
currentStep++;
}
}
else
{
66
fraction =deltaCol *2-deltaRow;
while (nextRow !=endRow)
{
if (fraction >=0)
{
nextCol=nextCol+stepCol;
fraction=fraction -deltaRow;
}
nextRow =nextRow +stepRow;
fraction=fraction +deltaCol;
pathRow[currentStep]=nextRow;
pathCol[currentStep]=nextCol;
currentStep++;
}
}
}