Desenvolvimento

22 mar, 2018

Aplicações práticas de inteligência artificial em games

Publicidade

Meu intuito aqui é explicar o funcionamento de algum algoritmo de inteligência artificial. Juntamente com a explicação, eu apresento alguns exemplos práticos de aplicação, mas confesso que, por mais práticos e aplicáveis que sejam, às vezes eles estão um pouco longe do nosso cotidiano.

Sendo assim, neste artigo apresentarei algumas aplicações práticas e mais palpáveis desses algoritmos. E de quebra, vou falar de algo pelo qual eu realmente tenho paixão: games!

Menu inicial

Primeiro, temos que ter em mente a seguinte ideia: o objetivo da IA (IA acadêmica), é diferente da IA apresentada nos games (Game AI). A principal diferença entre essas IAs é justamente o seu objetivo. A acadêmica tem como objetivo resolver algum problema complexo, como copiar algum tipo de comportamento humano.

No caso da IA aplicada aos games, o objetivo é puramente lúdico. Aqui, não importa como o sistema “pensa”, o que importa é como o sistema age. O campo de aplicação da IA nos games é um tanto quanto confuso, na verdade.

Alguns acreditam que a interação do jogo com o usuário é um tipo de IA; por outro lado, existem desenvolvedores que acreditam que algoritmos de ações como colisão e movimentos são considerados IA. Mas essa é uma discussão cujo mérito não vamos entrar, pois ela é muito abrangente.

Stage 1- Utilização e evolução

O primeiro jogo eletrônico interativo construído foi desenvolvido por um estudante do MIT chamado Steve Russel, em 1961. Esse jogo se chamava Spacewar, no qual duas pessoas controlavam uma nave cada uma e tinham que combater entre si. De 1961 para cá, são muitos anos, e não vou passar por essa história como um todo, embora ela seja bem interessante. O intuito era apenas esclarecer onde tudo começou.

Para termos ideia de como a IA foi sendo utilizada em alguns jogos de lá para cá, vamos dar uma olhada na tabela abaixo.

 
Ano Descrição IA
1961 Spacewar Nenhuma
1972 Pong Nenhuma
1974 Pursuit Padrões de movimento
1975 Gun Fight Padrões de movimento
1978 Space Invaders Padrões de movimento
1980 Pac-man Padrões de movimento
1990 Herzog Wei Máquina de estados
1993 Doom Máquina de estados
1996 Battle Cruiser: 3000AD Redes Neurais
1998 Half-life Máquina de estados/Script
2001 Black & White Redes Neurais/reinforcement/ observation learning/ Árvores de decisão

Linha do tempo da IA em jogos, fonte: SCHWAB, 2004

Óbvio que essa tabela está defasada em relação aos dias atuais, porém ela é didática para mostrar a evolução através do tempo. A tabela seguinte é dividida em IA utilizada e jogos em que foi aplicada, trazendo alguns exemplos mais próximos da nossa contemporaneidade.

IA Jogo
Máquinas de estado finito Age of Empires, Half Life, Doom, Quake
Scripting Black & White, Unreal, Dark Reign, Baldur’s Gate
Fuzzy Swat 2, Call to Power, Close Combat, Petz, The Sims
Flocking Half Life, Unreal, Enemy Nationsi
Árvores de decisão Black & White
Redes Neurais Black & White, BC3K, Creatures, Heavy Gear
Algorítimos Evolutivos Cloack, Dagger & DNA, Creatures, Return to Fire II

Stage 2 – Algoritmos de IA e suas aplicações

Um dos primeiros algoritmos utilizados foram os determinísticos e padrões de movimentos. São basicamente algoritmos que permitem ao sistema aplicar uma ideia de perseguição, evasão ou aleatoriedade de movimento de uma entidade.

Em seguida, tivemos a utilização das máquinas de estado. A máquina finita define os estados em que um personagem está e quando ele deve mudar, assim como qual o comportamento esperado para cada estado. Esse é um algoritmo bem simples, de fácil implementação e depuração. Um exemplo clássico é sua utilização no jogo Pac Man, no qual o estado define o comportamento padrão dos fantasmas conforme o estado é alterado pelas ações do jogador.

Por outro lado, temos também a lógica fuzzy que, como o próprio nome indica, é um tanto quanto confusa de se entender. Entretanto, ela é bastante utilizada nas próprias máquinas de estado. Aplicando-se a fuzzy nessas máquinas, é possível diminuir o número de ações programáveis manualmente – leia-se if-then-else. Essa lógica permite criar regras em cima de condições imprecisas. Basicamente, a fuzzy é uma lógica baseada no princípio da incerteza.

Outro tipo de algoritmo de extrema importância são os algoritmos de busca. Eles são responsáveis pela fluidez dos personagens dentro do jogo. Imagine que você está em um jogo em que os seus oponentes passam por você e não te enxergam, ou são incapazes de desviar de obstáculos. Isso além de tornar o jogo burro, o torna bem chato, dada a facilidade que ele propõe.

Em games, temos alguns algoritmos de busca utilizados. O mais comum é o A*, mas muito se vê a aplicação do Dijkstra (você achou que este só servia para passar na faculdade, não é?) e waypoints.

Outro tipo de algoritmo que já vimos são os algoritmos genéticos (AG). Nos jogos, esse tipo de algoritmo pode ser utilizado para o desenvolvimento de populações – se você está em uma cidade virtual, como no GTA. Os pedestres, motoristas, etc, não são personagens fixos. Caso contrário, existiria um momento do jogo em que só o seu personagem perambularia pela cidade (eu sei que você sai dando tiro em todo mundo quando está entediado). Então, como a população da cidade é revitalizada?

Um DNA virtual é criado, e ele é representado por um vetor de valores no qual cada valor é um parâmetro da espécie a ser modelada. Outra utilização dos AGs é a evolução dos personagens. Como vimos em edições anteriores da revista, o AG é responsável pela mutação e consequentemente, mas não obrigatoriamente, pela evolução.

As redes neurais são utilizadas quando o sistema precisa aprender a interagir com o jogador de maneira inteligente. Aqui, começamos a falar de uma IA acadêmica sendo implementada em um jogo. A ideia das redes neurais é fazer com que o sistema possa imitar o pensamento do humano e, assim, tornar o jogo mais desafiador, dado que o jogo passa de um patamar passivo para um patamar ativo, no qual ele aprende sobre o usuário.

Outro algoritmo capaz de mudar o comportamento de um NPC (Non Player Character) são os scripts ou extensible AI. Esse algoritmo faz com que cada NPC mude seu comportamento de acordo com o comportamento do usuário atual – é basicamente como um sistema de regras.

Boss

Nas edições anteriores, nós vimos como é desenvolvido um algoritmo de IA, como os problemas são matematicamente modelados. Vimos também que os algoritmos surgem da observação de comportamentos biológicos, e vimos que toda essa observação é modelada matematicamente por meio de cálculos integrais e teorias de grafos. Para acessar as revistas com as edições anteriores dos meus artigos, acesse este link.

Aqui pudemos ver a IA de uma maneira um pouco mais divertida – sem muitos cálculos integrais, treinamentos, camadas, etc. Afinal, se você não é matemático, muitas dessas coisas acabam não sendo muito divertidas, e o único objetivo dos games foi e sempre será a diversão! E aí, bora jogar um FIFA?

***

Artigo publicado na revista iMasters, edição #24: https://issuu.com/imasters/docs/24