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