Cursos / Jogos Digitais / Inteligência Artificial para Jogos / Aula
Na seção anterior, foi apresentada uma forma de fazer com que as MEFs não sejam tão determinísticas, ou melhor, que os comportamentos gerados por elas não criem padrões que os jogadores possam identificar. Isso torna os jogos desenvolvidos mais imprevisíveis, às vezes mais realistas, mas principalmente mais divertidos. Só que há outras formas de criar a sensação de imprevisibilidade e realismo usando MEFs. Uma delas é introduzindo a noção de incerteza sobre os eventos.
Se você parar para pensar, faz todo sentido! Veja bem, coloque-se no lugar de um personagem controlado por regras. Quando você vai atravessar a rua, você não segue a regra “se não houver carro até 200 m de distância, então posso atravessar a rua”. No máximo, você segue a regra “se não houver carro próximo, então posso passar atravessar a rua”. Mas, o que é “próximo”? Talvez, para você, “próximo” signifique menos de 200 m, mas para alguns significa menos de 100 m (estes atravessam a rua correndo, e não é interessante fazer isso ), enquanto para outros menos de 500 m (estes são idosos e precisam atravessar a rua lentamente). O termo “próximo” pode, então, assumir diferentes valores em função de inúmeros dados, como idade do personagem, velocidade dos carros que estão vindo, entre outros.
Além da multitude de variáveis, não dá para fazer um cálculo preciso porque há chances de o carro aumentar a velocidade, desviar de um buraco e mudar um pouco de direção etc., ou seja, o resultado do cálculo pode mudar e não dar mais tempo de você sair do meio da rua! Então, é preciso ter uma margem de segurança, mas que margem de segurança é essa? Enfim, são muitas informações imprecisas.
O termo “próximo” não deveria ser modelado através de um valor ou intervalo fixo. Há um certo grau de importância em diferentes valores. Por exemplo, atravessar a rua tendo um carro vindo a 50 m de distância tem a mesma importância de atravessar com um carro a 500 m? Se você considerar um carro vindo em alta velocidade, não seria prudente atravessar a rua com esse carro vindo a uma distância de 50 m, mas com ele a 500 m… bom, nesse caso, talvez seja possível. Atravessar a rua no primeiro caso é bem mais grave que no segundo.
O que eu quero reforçar é que, muitas vezes, você raciocina, não sobre valores exatos, mas sobre graus de importância que você dá aos valores. Para inserir esse mesmo conceito no comportamento dos personagens virtuais, você precisa utilizar algumas ferramentas matemáticas: conceito de conjunto e o de pertinência de conjunto.
Pode-se definir o conceito de “próximo”, denominado aqui de P, por exemplo, através do conjunto de números positivos reais entre 0 e 125 (inclusos) representando as distâncias em metros. Testar se uma distância está “próxima” significa verificar se seu valor pertence ou não ao conjunto P. Então, como você deve saber, valores como 50, 100 e 125 pertencem ao conjunto P, enquanto valores como 150 não pertencem.
Na Figura 04 observe a situação de um pedestre tentando atravessar a rua detalhada por meio do gráfico de uma função para verificar se um valor pertence (se o carro está numa distância próxima ao pedestre) ou não ao conjunto P (se o carro está numa distância mais afastada do pedestre).
Na coordenada Y, há apenas dois possíveis valores: “Sim”, indicando quando um valor da coordenada X pertence ao conjunto P, ou “Não”, quando um valor da coordenada X não pertence ao conjunto P. Veja na figura que os valores até 125 não são distâncias confiáveis para o pedestre atravessar a rua, já os valores acima são.
Espero que as informações presentes na Figura 04 tenham ajudado o seu entendimento, pois irei complicar agora um pouco mais... Para introduzir o grau de importância dos valores de um conjunto, você irá, em vez de ter apenas duas possibilidades no eixo Y, ter diferentes valores. Esses valores indicam o “grau de pertinência” de um valor no conjunto P, ou seja, um valor pode pertencer a P, mas com um grau de pertinência menor do que outro valor.
A Figura 05 mostra uma possível forma de representar os graus de pertinência de diferentes valores para o conjunto P. No caso, o valor 0 tem valor de pertinência 1, o que significa que o carro está realmente próximo (na verdade, já está amassando a lataria)! O valor 50 pertence ao conjunto “próximo” com grau 0,75, enquanto o valor 100 pertence com grau 0,5, o valor 150 pertence com grau 0,25, e os valores 200 e 250 com grau 0, ou seja, não pertencem.
Com esse tipo de representação, você consegue modelar incertezas através dos graus de pertinência de valores nos conjuntos ou “graus de verdade”. Por exemplo, se alguém me perguntasse agora se um carro a 100m de distância está próximo de mim, eu diria que “isso é meia verdade”, pois o grau de verdade dessa afirmação é de 0,5.
Essa forma de modelar as afirmações vai ser bastante útil nas MEFs Fuzzy, pois dois eventos podem ser verdadeiros simultaneamente. Lembra do exemplo apresentado na primeira seção desta aula? Em que foi citado o caso do personagem que precisa defender uma base. Então, ele pode ir atrás do inimigo que começou a atacar a base, pois se encontra próximo a ele, e pode matá-lo; ou voltar para proteger a base, pois ela está sendo atacada e pode ser destruída. As duas condições que geram as transições para os seus respectivos estados podem ser verdadeiras… porém, com graus de pertinência ou de verdade diferentes.
A Figura 06 ilustra o caso descrito. O estado de Patrulha é o estado no qual o personagem volta a sua base para protegê-la. Nesse exemplo, o personagem pode estar próximo o suficiente de um inimigo a ponto de iniciar uma perseguição, mas ao mesmo tempo sua base pode estar em perigo porque está sendo atacada por outros inimigos. O que o personagem deve, então, fazer? Deve testar qual o grau de verdade dessas condições, verificando o grau de pertinência da distância que ele se encontra ao inimigo no conjunto definido por “Próximo”, e também verificar o grau de pertinência do nível de destruição da base em um conjunto, chamado “Perigo”. Com posse desses dois valores de pertinência, ele poderá tomar uma decisão.
Apesar de as MEFs fuzzy representarem uma lógica mais “natural” nos personagens virtuais, elas possuem uma certa desvantagem em relação ao desempenho computacional. Veja que em uma MEF clássica, os testes das condições dos eventos de transição podem ocorrer pontualmente. Por exemplo, no momento que o personagem passar da distância de 199m para 200m, ele muda de estado e não precisa mais ficar fazendo verificações daquela condição (bom, ele terá outras condições para testar, mas não mais aquela). Porém, em uma MEF Fuzzy, em geral, as condições precisam ser testadas continuamente porque as informações são parciais, ou melhor, as verdades parciais, como no caso da proximidade de 100 m que era uma “meia verdade”. Isso faz com que as MEFs requeiram, em geral, mais processamento do computador do que as MEFs clássicas. Se os personagens possuem comportamentos simples, então não há problema. Porém, quando o número de estados e transições começa a aumentar, assim como o número de personagens controlados por elas, então você pode começar a repensar as estratégias.
Uma das MEFs utilizadas em casos de IAs com muitos estados e transições será apresentada na seção seguinte.
Versão 5.3 - Todos os Direitos reservados