Cursos / Jogos Digitais / Inteligência Artificial para Jogos / Aula

arrow_back Aula 06 - Máquina de Estados Finitos Alternativa

3. Máquina de Estados Finitos Hierárquica

O exemplo da Figura 02 ilustra uma MEF com apenas 3 estados. Com esse número de estados, dá para ver e entender as transições e os eventos. Ou seja, compreender todo o funcionamento do comportamento do personagem apenas olhando rapidamente o diagrama.

Infelizmente, nem todos os casos de IA são assim. Basta imaginar no cenário do jogo de futebol. Em quantos estados diferentes um jogador pode se encontrar? Nos exemplos da aula passada, você criou algo pontual: fez com que eles fossem capazes de cobrar pênaltis! Só isso já gerou um certo número de estados. E quantos estados seriam necessários para criar o comportamento de um jogo completo?

Para exemplificar melhor, suponha que alguém peça para você descrever o seu comportamento durante um dia qualquer, um dia comum. Se essa descrição for necessária para programar um robô que se comporte de forma similar a você, seria necessário, então, descrever todos os detalhes, desde a ação de se levantar da cama (dar aquela “espreguiçada”! ), percorrer o caminho até o banheiro e assim por diante. Em cada um desses estados, inúmeros eventos podem ocorrer, desde sua mãe falar para você se apressar ou até mesmo você receber um aviso de que não haverá mais aula e que, por isso, não precisa mais se arrumar. Caramba! Coisa de louco, não é mesmo? Simplesmente, não dá para você gerenciar tantos estados e tantas transições assim. Você ficará perdido quando for necessário dar uma manutenção no comportamento do robô se uma MEF clássica for utilizada.

Resumindo, a MEF tal qual descrita na aula passada é excelente e muito usada. Entretanto, basta adicionar um grande número de possíveis estados que o gerenciamento começa a ser intratável. É desejável, portanto, ter um mecanismo mais adequado quando o número de possíveis estados começa a extrapolar a sua capacidade de gerenciá-los.

Pare para pensar um pouco…

E se nas situações complexas, como seu comportamento diário, a descrição inicial para o robô for mais abstrata? Por exemplo, você poderia descrever os estados do seu comportamento em “arrumar-se para ir à escola”, “ir para a escola”, “assistir as aulas na escola”, “voltar para casa” etc. Esses são estados mais abstratos do que os descritos anteriormente. Enquanto o robô que te imita estiver em um determinado estado, pode haver uma descrição mais detalhada dele através de outra MEF. Por exemplo, o estado “arrumar-se para ir para a escola” pode ser detalhado com o estado de se levantar da cama, ir ao banheiro etc. Ou seja, a MEF do robô é definida por estados, que por sua vez podem ser definidos como outras MEFs.

Essa é uma forma bastante utilizada nos jogos para organizar a complexidade de alguns comportamentos. Ela permite pensar inicialmente em estados mais gerais e depois ir especializando cada um desses estados gerais através de outras MEFs até chegar a ações concretas dos personagens.

Dando outro exemplo, mas desta vez sem invadir sua privacidade . Suponha que você esteja construindo o modelo de comportamento de um personagem guerreiro e, à medida que vai se lembrando de casos e situações, vai inserindo estados e transições, chegando a um ponto em que sua MEF fique como a apresentada na Figura 07.

Diagrama de uma Máquina de Estados Finitos de um personagem guerreiro

Nessa MEF, o personagem possui seis possíveis estados: ou ele encontra-se sem fazer nada (ocioso); ou está descansando (procurou um refúgio para recuperar sua saúde); ou está perseguindo um inimigo (alguém está à vista); ou está procurando uma posição de ataque (quando o inimigo estiver ao alcance do ataque); ou está desferindo golpe (quando a posição estiver adequada); ou está se esquivando (quando o inimigo estiver atacando).

As transições de estados são muitas e fica difícil de entender toda a dinâmica, então preste atenção no diagrama para entender quais os eventos que geram as transições. Veja que em algumas situações, o mesmo evento gera uma transição de diferentes estados para um único estado. Quando a saúde está baixa, por exemplo, o personagem procurará abrigo para descansar de qualquer estado em que ele se encontra (exceto quando ele está ocioso). Algo similar ocorre quando o inimigo se encontra fora do alcance, e o personagem precisa persegui-lo. Quando um mesmo evento precisa ser tratado em diferentes estados, está claro que a Máquina começa a ficar complexa e uma saída é criar uma hierarquia.

A saída é generalizar, definindo estados mais abstratos, e criar MEFs para cada um desses estados. Assim, a MEF da Figura 07 poderia ser simplificada para a MEF da Figura 08.

Diagrama simplificado de uma Máquina de Estados Finitos de um personagem guerreiro

Com ela, você consegue entender melhor o comportamento. Porém, o comportamento de atacar o inimigo precisa ser detalhado melhor através de outra MEF, como especificado no diagrama da Figura 09.

Diagrama de uma Máquina de Estados Finitos do estado 'Atacando um inimigo'

É interessante notar que há transições do estado abstrato “Atacando um inimigo” do diagrama da Figura 08, mesmo que haja transições internas “dentro” desse estado. O que acontece então no caso de o personagem desferir um golpe (estado 4.1 - Figura 09) e o inimigo passar a estar fora de alcance (transição do estado 4 para o 2 - Figura 08)?

As transições de um estado mais abstrato são válidas para todo e qualquer sub-estado interno. Então, seja qual for o estado em que o personagem se encontra (4.1, 4.2 ou 4.3 - Figura 09), se a saúde dele passar a estar baixa ou se o inimigo ficar fora de seu alcance, então o personagem irá para o estado 3 ou o 2 (Figura 08), respectivamente.

Nessa variação, um estado é composto de outros estados internos, cada um podendo ser definido também como um conjunto de sub-estados, e assim por diante.

Por que isso é útil?

Retorne ao jogo de futebol que você está desenvolvendo. Praticamente todos jogadores estarão, por vezes atacando, por vezes defendendo. São dois tipos de comportamentos bem diferentes, o que significa que acaba refletindo em dois estados distintos. Porém, não há apenas uma forma de “atacar” ou de “defender”. O jogador pode estar atacando e, de forma mais específica, correndo para que seu colega faça um lançamento em profundidade, ou então saindo para abrir espaço mais para direita etc. Ou seja, mesmo que o estado dele seja “atacando”, é necessário detalhar melhor esse estado através de estados internos a ele. Essa organização de estados dentro de outros estados é chamada de Máquina de Estados Finitos Hierárquica, pois reflete as estruturas hierárquicas nas organizações humanas (chefe – subalterno). Veja o diagrama da Figura 10, ele não está representando as transições entre estados, mas apenas sua hierarquia.

Diagrama de estados hierárquicos

Versão 5.3 - Todos os Direitos reservados