Вы находитесь на странице: 1из 12

MOVIMENTAÇÃO BASEADA EM BUSCA HEURÍSTICA DINÂMICA

DE PERSONAGENS DE JOGO DIGITAL EM PLATAFORMA UNITY

João Marcos Braz Nucci¹. Patrick Pedreira da Silva¹. Elvio Gilberto da Silva¹.
Silas Evandro Nachif Fernandes¹.

¹Centro de Ciências Exatas e Sociais Aplicadas – Universidade do Sagrado Coração – jaomarcos@gmail.com;


patrick.silva@usc.br; egilberto@uol.com.br; silasevandro@gmail.com

RESUMO

O interesse pela área de jogos se justifica pela oportunidade de se analisar a


viabilidade de aplicação de algoritmos de IA em ambiente controlado e preditivo, ao mesmo
tempo em que ocorre a interação com o usuário, utilizando sua percepção como um medidor
da efetividade do sistema. Diante deste contexto o objetivo deste trabalho foi o de aplicar
algoritmos dedicados a simular decisões e comportamentos feitos por Inteligência Artificial
(IA), relacionados à capacidade de orientação e de prever percursos, dinamicamente, em um
contexto de ambiente de jogo digital. Para aplicar a medição da efetividade do sistema, foi
proposto, inicialmente, o levantamento de pesquisa qualitativa junto aos usuários/jogadores, o
que não se mostrou possível dentro do escopo e dos prazos estipulados para este trabalho.
Ainda assim, o processo e a conclusão do produto em si permitiu constatações e elucidações
sobre o tema. O processo se deu utilizando a plataforma Unity e linguagem de programação
C#, desenvolvendo o ambiente e suas funções de maneira a proporcionar interação com o
usuário e permitir a representação da Inteligência Artificial. A base teórica para este trabalho
foi extraída de obras que abordam a técnica e a teoria da IA aplicadas no âmbito da
computação e de jogos digitais. Ao fim, foi possível constatar uma maneira viável e funcional
de programar os agentes com o uso de algoritmo de busca heurística, traçando comparações
entre outras formas de implementação, além de verificar sua eficácia dentro do ambiente
proposto.

Palavras-chave: Inteligência Artificial. Jogo digital. Busca heurística.

1 INTRODUÇÃO

Pode-se definir inteligência como a capacidade de reconhecer e compreender o


ambiente e outros indivíduos. Ao ser capaz de responder e apresentar reações dinâmicas ao
ambiente ou às outras informações, tal sistema é capaz de interagir, demonstrando sua
inteligência a um observador (COPPIN, 2013).
O impacto dessa interação tem sido comprovado pelo uso de agentes inteligentes,
recentemente, em redes sociais, com algoritmos de decisão que definem quais serão as
informações mais adequadas a cada usuário e robôs de conversa (os chamados “chatterbots”)
(OTHERO, MENUZZI, 1978).
O estudo de IA avança baseado na ideia de que um agente inteligente é “tudo que pode
ser considerado capaz de perceber seu ambiente por meio de sensores e de agir sobre esse
ambiente” e que busque sempre o melhor resultado, ou “fazer tudo certo”, dentro da situação
que o ambiente proporciona (NORVIG; RUSSEL, 2004). A interação não é obrigatória para
a criação e definição de tal agente, mas se faz importante para reconhecer e testar sua
inteligência, no sentido de testar sua capacidade de “fazer tudo certo” e buscar sempre o
melhor resultado, pois este seria um conceito subjetivo. E muito humano.
Considerando essas características, observa-se a potencialidade da área de jogos para o
desenvolvimento da IA. O campo de game design considera um jogo como “um sistema
fechado, formal que envolve jogadores em um conflito estruturado e resolve sua incerteza
inerente em um resultado desigual” (FULLERTON, 2008, p. 43). Isto é, um sistema com
fronteiras limitadas, regras, objetivos específicos e ao menos um jogador tentando alcançar
esses objetivos. Um sistema muito apropriado para comportar um agente inteligente.
De maneira recíproca, a área de desenvolvimento de jogos também se beneficia em
muito da IA, uma vez que pode utilizar agentes para proporcionar imersão e diversão ao
usuário, oferecendo sistemas que controlem desafios adequados, personagens e cenários
convincentes e, principalmente, adversários que correspondam às habilidades do jogador.

2 JOGOS DIGITAIS E INTELIGÊNCIA ARTIFICIAL

Parece haver uma relação estreita entre o desenvolvimento da Inteligência Artificial e


dos jogos digitais. Não é uma coincidência. Desde as primeiras máquinas computacionais,
houve tentativas de testar suas capacidades com desafios e tarefas bem definidas, além da
interação com seres humanos. Alan Turing escreveu um programa de computador cuja
pretensão era fazer um computador jogar partidas completas de xadrez, pouco depois de
publicar suas considerações sobre o potencial de uma máquina pensar, em 1951.

A participação em jogos foi uma das primeiras tarefas empreendidas em IA. Por volta
de 1950, quase ao mesmo tempo em que os computadores se tornaram programáveis,
o xadrez foi estudado por Konrad Zuse (o criador do primeiro computador
programável e da primeira linguagem de programação), por Claude Shannon (o
criador da teoria da informação), por Norbert Wiener (o criador da moderna teoria de
controle) e por Alan Turing. (NORVIG; RUSSEL, 2004, p. 157)

Autores sobre a história de jogos digitais costumam fazer uma relação mais forte com
o desenvolvimento da área de computação gráfica, ao invés da IA. Com razão, pois foi essa
área da computação que permitiu uma melhor interface interativa com a máquina. O prefixo
“vídeo” em videogames justifica esse ponto de vista. Há evidências de que o primeiro
videogame criado foi o Tennis for Two (Tênis para Dois, em tradução informal), por William
Higginbotham e Robert V. Dvorak, que funcionava por meio de um osciloscópio ligado a um
computador analógico, em 1958 (RABIN, 2012). Não havia uma IA por parte do computador,
uma vez que se tratava de um jogo em que dois usuários competiam entre si. Por outro lado,
se utilizada a abordagem de jogos cujo foco é programar um computador para competir,
independente da interface envolvida, alguns pesquisadores apontam que foram criados jogos
digitais muito anteriores, tais como Bertie the Brain (Bertie o Cérebro, em tradução
informal), um computador desenvolvido por Josef Kates, para desafiar visitantes em uma
partida de jogo-da-velha, durante a feira chamada de Exibição Nacional Canadense, ocorrida
em 1950 (OTTAWA CITIZEN, 1975). Não existem evidências o bastante, no entanto, que
comprovem que Bertie the Brain possuísse uma estratégia inteligente ou tomasse decisões ao
acaso, tampouco sobre a qualidade de sua interface. Há indícios de que um programa de
computador capaz de competir em uma partida de Nim foi publicado em 1952.
Apesar desse debate histórico, é possível notar que há consenso sobre o pioneirismo da
IA envolvida na programação de Pac-Man, videogame em formato arcade desenvolvido em
1980 por Toru Iwatani, lançado pela empresa Namco (originalmente conhecido como
Puckman, no japão) (KENT, 2001). Nele, o jogador assume o papel do protagonista, Pac-
Man, e deve coletar pontos espalhados por um labirinto enquanto foge de quatro agentes
programados para serem adversários, que assumem a figura de fantasmas, que têm
características similares, mas cada um com algumas particularidades em seu comportamento,
o que passa a sensação de que eles “pensam” de modos diferentes. Millington (2006) garante
que esse é um método de aplicação de IA conhecido como máquina de estados, que estabelece
uma ordem de comportamentos a serem assumidos pelos agentes, de acordo com a situação.
O exemplo do jogo desenvolvido por Iwatani demonstra a possibilidade de se
desenvolver jogos em que o desafio pode ser representado pelo próprio programa, muitas
vezes substituindo um adversário humano, ou vários, ou até mesmo substituir jogadores que
atuam como aliados colaboradores. A IA permite uma experiência satisfatória dentro do
ambiente de jogo, independente da necessidade de haver mais de um participante, o que pode
ser interessante ao usuário.

2.1 PATHFINDING

Considerando um ambiente qualquer, em que o agente deve se deslocar entre sua


posição inicial até o objetivo, uma vez que os algoritmos de busca fazem decisões estipulando
o caminho mais curto a ser percorrido, é razoável dizer que tenham uma tendência a
escolherem o caminho mais semelhante a uma linha reta entre o ponto inicial e o objetivo,
conforme exemplificado na Figura 1. Algoritmos de busca são utilizados justamente pelo fato
de que essa configuração ideal é muito rara, pois ambientes apresentam obstáculos e desvios
que devem ser superados, conforme ilustra a Figura 2.

Figura 1 – Demonstração da aproximação


do caminho ideal a uma linha reta

Fonte: Elaborada pelo autor.

Figura 2 – Representação de pathfinding


através de um mapa com obstáculos

Fonte: Elaborada pelo autor.

O pathfinding é uma técnica de implementação da busca heurística A* para solucionar


tais condições, em ambientes virtuais, principalmente em jogos digitais. O diferencial desta
abordagem são as representações gráficas que podem ser aplicadas sobre o ambiente, servindo
de referência à navegação do agente. São utilizadas duas alternativas nesse sentido: a grade e
a malha de navegação, representadas pelas Figuras 3 e 4.
Figura 3 – Gráfico de grade aplicado
sobre representação do ambiente

Fonte: Rabin (2012, p. 537).

Figura 4 – Malha de navegação comparada ao gráfico de pontos

Fonte: Rabin (2012, p. 538-539).

Sobre a representação em grade, cada quadrado assume um valor fixo de custo,


permitindo ao agente estipular qualquer tipo de rota possível, considerando os quadrados que
não são sobrepostos por obstáculos, e estabelecer um custo de caminho a partir da soma dos
quadrados que serão necessários percorrer para atingir o quadrado onde está o objetivo.
A alternativa da malha de navegação é uma forma de extrapolar o gráfico de pontos,
multiplicando-os e oferecendo uma liberdade de movimento pelo ambiente muito maior, pois
os pontos são substituídos por polígonos convexos dentro dos quais o agente pode se mover.
Nessas duas variações do algoritmo A* há um acréscimo ao custo computacional, uma
vez que será necessário processar muito mais possibilidades, mais vezes durante a execução
do programa.
2.2 BUSCA D*

Considerando a hipótese de um ambiente em que o ponto que o agente está


determinado a atingir, ou seja, seu objetivo, se encontra em movimento, ou se o próprio
ambiente se altera constantemente, com obstáculos em movimento, o agente deve calcular
dinamicamente sua rota até o objetivo. “Pathfinding dinâmico é uma modificação interessante
para o algoritmo pathfinding que permite ao caminhante recalcular somente as partes do
trajeto que podem ter mudado. A versão dinâmica de A* é chamada D*.” (MILLINGTON,
2006, p. 282-283, tradução nossa).

3 METODOLOGIA

A proposta deste trabalho foi o de desenvolver um jogo que comporte algoritmos de


IA de busca (pathfinding), de maneira a estudá-los e desenvolver estratégias através deles,
bem como explorar a interação entre cada agente racional envolvido e como essa dinâmica
pode contribuir ao desafio ou até mesmo à diversão de um jogo.
Foram consultados livros sobre IA e sobre desenvolvimento de jogos, em conjunto
com artigos e trabalhos acadêmicos que tratam de aplicações e análises acerca da IA e sua
implementação em jogos. Tal bibliografia permitiu a definição, histórico e aplicabilidade dos
conceitos propostos: conceituação de IA e seu histórico, definição de agentes racionais,
estratégias de busca e algoritmos de decisão e suas aplicações em jogos digitais.
Por se tratar do desenvolvimento de um software foi utilizado, essencialmente, um
computador provido da plataforma de desenvolvimento do jogo e do IDE (integrated
development environment, traduzido como ambiente integrado de desenvolvimento) que se
relaciona com essa plataforma para a programação.
O computador disponível teve a seguinte configuração: marca Asus, modelo X555UB,
processador Intel Core i7 6500U de 2.50GHz até 2.59 GHz, memória RAM de 8 GB tipo
DDR3 1600MHz, placa de vídeo GeForce 940M 2 GB, disco rígido com capacidade de 1 TB
de armazenamento, sistema operacional Windows 10, pertencente à empresa Microsoft.
A plataforma de desenvolvimento escolhida foi a Unity, nas versões 2017.4.1 em
diante, pertencente a empresa Unity Technologies e adquirida em sua versão gratuita, que
oferece ferramentas adequadas para a execução do trabalho proposto.
A programação foi executada com um IDE integrado à plataforma, o Visual Studio,
versão 2017 em diante, pertencente à empresa Microsoft, em versão gratuita.
A linguagem utilizada para a programação do jogo dentro do IDE foi a C# (C Sharp),
idealizada pela empresa Microsoft. A característica diferencial para a qual foi criada é a
orientação ao objeto, que condiz com as necessidades intrínsecas à programação de jogos.
Para aplicação dos algoritmos de Inteligência Artificial foi necessária a criação de um
ambiente de jogo que contivesse desafios, conflitos e, consequentemente, estratégias e
decisões a serem tomadas. Basicamente, trata-se de um jogo em que o usuário movimenta seu
personagem por um cenário que representa um labirinto, no sentido de ter caminhos e
bifurcações variados, a fim de atingir determinados pontos onde estarão posicionados seus
objetivos. A atuação dos agentes racionais foi no papel de NPCs dedicados a alcançar o
usuário, impedindo-o de alcançar o objetivo, utilizando-se de diferentes algoritmos que
adicionem diferentes comportamentos dentro do contexto do jogo. Com o intuito de projetar
tal ambiente, foi elaborado um documento de jogo (game design document).
Os elementos que compõem o jogo proposto que se relacionam à arte, ao recursos
gráficos, não são o foco do desenvolvimento deste trabalho e demandam uma quantidade
excessiva de tempo dedicado, caso se pretenda apresentar gráficos de alta qualidade. Para
sanar este problema, foram usados recursos já disponibilizados pela plataforma Unity, em sua
ferramenta asset store, ou até mesmo através de outros desenvolvedores.

4 RESULTADOS E DISCUSSÕES

Primeiramente, foi implementado o jogo utilizando o sistema de IA já embutido à


plataforma Unity, chamado de navmesh, que utiliza uma malha de triângulos como forma de
orientação. Tal sistema foi substituído pela forma de navegação a partir de pontos específicos
distribuídos pelo cenário. Após a implementação desse sistema de mapa de nós, foi possível
constatar a inviabilidade de se implementar a forma de busca heurística dinâmica a partir da
grade quadriculada. Em contrapartida, tais reconsiderações sobre essa implementação
alternativa, aliada à falha de cálculo do tempo necessário a ser despendido em tal projeto, não
permitiram o desenvolvimento de todos os agentes racionais propostos e, consequentemente,
também não permitiram um levantamento qualitativo através de pesquisa junto a usuários.

4.1 ALGORITMO BASEADO EM MAPA DE PONTOS

A partir do ambiente construído, foi iniciada a implementação do algoritmo de busca


heurística dinâmica. Parte considerável da implementação envolveu a construção de um mapa
de nós que serve de orientação para o algoritmo. A Figura 5 mostra estes nós representados
pelas esferas verdes. Observe que os nós foram posicionados sempre nos locais de bifurcação
e intersecção de caminhos, pontos onde os agentes precisam decidir qual direção tomar.

Figura 5 – Disposição dos pontos verdes representando o mapa de nós

Fonte: Elaborada pelo autor.

Cada esfera representa um objeto, cuja classe guarda atributos: um vetor de nós que
são adjacentes; outro vetor que guarda os valores das distâncias de cada um desses vizinhos;
funções que calculam a distância entre vizinhos e até o nó final e que identificam colisões
entre o nó e os personagens do jogo. Sobre esse mapa foi feita a programação do algoritmo de
busca heurística.
No modo como foi implementado, a cada vez que o jogador passa por um dos nós, a
função que inicia a busca é chamada e iniciada, ao mesmo tempo que este nó serve como
parâmetro e fica identificado como o nó final, o objetivo a ser atingido pelo algoritmo de
pathfinding. Dessa maneira, o percurso a ser percorrido pelos NPCs será sempre atualizado
tendo como referência a posição mais próxima possível do jogador, mesmo que ele esteja se
movimentando pelo mapa. Somente após atingir o nó objetivo, o robô deve seguir na direção
da posição atual do jogador dentro do mapa.
Esse método de tornar o algoritmo dinâmico é justificado por se assemelhar ao
processo utilizado pela malha de navegação, de sempre identificar a posição do jogador, e
também por ser uma forma de economizar o processamento, pois evita que a função de
pathfinding seja chamada desnecessariamente, caso o jogador esteja parado ou se encontre
num espaço entre dois nós. Ao mesmo tempo, é uma forma eficiente e simples de identificar a
posição do jogador. Dessa forma foi resolvida a questão de se transformar o algoritmo A* em
sua versão dinâmica, o D*.
A próxima adaptação é consequência, em parte, dessa condição de se alterar
constantemente o nó objetivo do algoritmo, mas também se deve, em outra parte à estrutura
do mapa de nós, pois, uma vez que são muitos, fazer a medição do custo heurístico (h(n)) de
cada nó para todos os outros nós, visto que é um grafo fechado, demandaria um esforço
prévio inviável. Para se tornar viável, o cálculo de h(n) foi feito dentro da função que faz a
busca, a partir do valor calculado da distância entre o nó sendo processado e o nó objetivo. No
entanto, isso acarretou mais um problema decorrente da configuração do grafo e das
características do ambiente.
Uma vez que os nós devem criar caminhos que circundem os obstáculos, ocorrem
situações em que o nó atual sendo processado terá um custo heurístico menor do que os nós
subsequentes, se o custo for calculado apenas com base na distância direta (extensão de uma
reta), fazendo com que o algoritmo considere mais custoso fazer o percurso passar pelos nós
vizinhos, ao fazer a comparação. A Figura 6 ilustra uma situação em que isso poderia ocorrer.

Figura 6 – Demonstração do
cálculo de custo heurístico
baseado em distância direta

Fonte: Elaborada pelo autor.

Assim, foi necessário implementar essa etapa do algoritmo de maneira a incluir ao


custo de h(n) do nó atual os custos de distância até o próximo nó vizinho e mais o da distância
até o nó mais próximo do vizinho – além de todo o custo acumulado do caminho percorrido
g(n), lembrando que a fórmula do custo total será f(n) = g(n) +h(n) – antes de se fazer a
comparação entre o f(n) do nó atual e do seguinte, a fim de se confirmar se o caminho
escolhido ainda compensa ou se é melhor retornar a nós de etapas anteriores ainda não
explorados. A Figura 8 demonstra o novo cálculo de h(n), implementado sobre o algoritmo.
Figura 8 – Demonstração do cálculo
de custo heurístico adaptado

Fonte: Elaborada pelo autor.

Com essas adaptações o A* dinâmico foi capaz de simular uma tomada de decisão
efetiva para os NPCs, recebendo ao fim da função uma lista de nós a serem percorridos que
representam o menor caminho para se chegar ao personagem do jogador.

4.2 ALGORITMO BASEADO EM GRADE QUADRICULADA

O volume de trabalho necessário para a execução das tarefas apresentadas


anteriormente foi bem maior do que o estipulado para a execução deste projeto, o que
comprometeu a aplicação do algoritmo de busca sob a forma de grade quadriculada.
Ainda assim é possível fazer considerações a respeito, pois, finalizada a
implementação do método anterior, se tornou evidente a ineficácia do método de aplicação do
algoritmo D* desenvolvido sobre uma grade quadriculada, dada a proposta de jogo: demanda
de processo de decisão em tempo real e cujos NPCs, como agentes racionais, teriam a
condição de ter conhecimento total e também em tempo real do ambiente em que se
encontram e de suas características (como posição do personagem do jogador).
Tudo isso demanda processamento e memória. Para cada momento do tempo de jogo
em que o jogador faz o seu avatar passar por um dos nós e ativar a função de cálculo do
pathfinding cada robô precisa acessar a lista que relaciona todos os nós do grafo, mais de uma
vez, para encontrar o objeto específico ao deve se referenciar. Uma grade quadriculada se
comportaria de uma maneira bastante similar a um mapa de pontos, porém, com cada ponto
sendo imediatamente adjacente ao outro, cercado por outros nós, em uma configuração
similar a uma matriz. Ainda que estivessem adjacentes, precisariam guardar a mesma
quantidade e complexidade de atributos, como um valor necessário para ir de um
ponto/quadrado a outro e o custo heurístico de um dado quadrado até o quadrado objetivo.
Nesse caso, a quantidade de pontos/quadrados necessária para cobrir todo a área navegável do
cenário do labirinto seria enorme e a demanda de processamento teria mesma proporção.
Esse tipo de implementação teria mais vantagens em jogos cujos agentes decidissem
suas ações baseadas em turnos ou que necessitassem explorar o ambiente em que se
encontram. Nesse caso, ao invés da necessidade de se processar todos os quadrados possíveis
dentro de um cenário, um NPC se dedicaria a iniciar o processo somente sobre uma parte do
ambiente, reiniciando o processo até encontrar um ponto de interesse que servisse de objetivo.

5 CONCLUSÕES

O desenvolvimento deste estudo permitiu averiguar a aplicação de um algoritmo de


Inteligência Artificial comparada a decisões racionais por parte do usuário, bem como a sua
viabilidade. Assim como foi discutido durante o referencial teórico, colocar a IA como
desafio para a inteligência humana é atestar e medir sua eficiência.
Foram cumpridos os objetivos propostos de se criar um jogo onde se pudesse aplicar
uma IA pertinente, em ambiente digital que permite a interação com o usuário. No entanto,
alguns dos objetivos não foram cumpridos, sendo: a implementação de comportamentos
diferentes para alguns personagens, o que permitiria uma melhor análise e exploração do
algoritmo de IA (além de mais diversão para o jogador); a implementação de um sistema
viável de grade quadriculada que comportasse o algoritmo; e o levantamento de uma pesquisa
com jogadores, o que atestaria a eficiência do algoritmo.
Portanto, cabem projeções sobre como esta pesquisa pode evoluir. Pretende-se fazer
testes e levantamento de resultados quantos às formas de aplicação dos métodos apresentados
anteriormente, comparando entre eles aspectos de efetividade no objetivo de alcançar os
alvos, movimentação mais intuitiva, aumento de dificuldade sobre o desafio do jogo,
complexidade de implementação, performance de processamento.
Mais implementações sobre as características individuais dos NPCs e sobre o
ambiente são possíveis. Por exemplo, uma vez que eles tem a característica de colidir e serem
incapazes de ocupar o mesmo ponto no mapa, é indicado implementar o algoritmo de busca
de maneira a considerar a melhor rota que não está sendo obstruída por outro robô, naquele
instante, aumentando a dinamicidade da IA.
Um dos desafios atuais dos desenvolvedores de jogos é o de implementar sistemas de
busca que permitam ao agente fazer buscas considerando uma terceira dimensão, como por
exemplo, em ambientes em que os agentes precisem subir uma escada para acessarem um
andar acima. A característica tridimensional do sistema implementado parece tornar isso
viável e um novo ambiente pode ser construído no intuito de se atestar essa capacidade.
Em conclusão, a execução deste trabalho demandou e permitiu a aplicação de variados
campos de estudos, permitindo reconhecer a evolução profissional proporcionada pela ciência
da computação e as possibilidades a serem alcançadas através da Inteligência Artificial

REFERÊNCIAS

COPPIN, B. Inteligência Artificial. Tradução Jorge Duarte Pires Valério. Rio de Janeiro:
LTC, 2013.

FULLERTON, T. Game Design Workshop: a playcentric approach to creating


innovative games. 2nd ed. Burlington, Estados Unidos da América: Morgan Kauffman
Publishers; Elsevier, 2008.

KENT, S. L. The Ultimate History of Video Games. 4. ed. New York, Estados Unidos da
América: Crown Publishing; Three Rivers Press, 2001.

SIMMONS, M. Bertie the Brain programmer heads the science council. The Citizen, Ottawa,
9 out. 1975. p. 17.

MILLINGTON, I. Artificial Intelligence For Games. San Francisco, Estados Unidos da


América: Morgan Kauffman Publishers; Elsevier, 2006.

NORVIG, P; RUSSEL, S. Inteligência Artificial. Tradução Vandenberg D. de Souza. 2. ed.


Rio de Janeiro: Campus; Elsevier, 2004.

OTHERO, G. A; MENNUZZI, S. M. Linguística Computacional, Teoria e Prática. São


Paulo: Parábola Editorial, 2005.

RABIN, S. (Editor). Introdução ao desenvolvimento de games: Volume 2 Programação:


técnica, linguagem e arquitetura. Tradução Oportunty Translations. 2. ed. São Paulo: Cengage
Learning, 2012.

Вам также может понравиться