O planejamento de ações orientadas a objetivos (ou GOAP, abreviado) é um A. EU. técnica desenvolvida por Jeff Orkin
do MIT no início dos anos 2000.
Foi aplicado com sucesso no jogo
F. E. UMA. R. para controlar o comportamento dos NPCs.
Se você quiser saber mais sobre isso, pode ler os trabalhos de pesquisa disponíveis neste endereço.
O GOAP possui todos os elementos de uma Máquina de Estado Finito, mas trabalha com eles de maneira muito diferente.
Por exemplo, as Máquinas de Estado Finito (como você viu antes) definem
comportamentos e condições para conduzir o NPC a cumprir algum objetivo. Para conseguir isso com uma máquina de estado
finito,
você pode ter um gráfico massivo ou dividi-lo em unidades menores.
O GOAP também usa gráficos para seu processamento, mas difere das Máquinas de Estado Finito, pois as ações
e os objetivos são dissociados.
Ações são 'elementos livres' dentro do sistema que são misturados e combinados para
atingir as metas quando elas são apresentadas. Em vez de ter uma lista definida de ações
que precisam ser executadas para atingir uma meta, o GOAP permite a escolha de várias soluções.
Portanto, em vez de um sistema parecido com este, no GOAP, todos os links são removidos. Então, quando um objetivo é apresentado, um curso de
ação apropriado pode ser escolhido entre todas as tarefas disponíveis, com base no estado do
agente e no mundo.
Por exemplo, se um agente fosse convidado a matar um inimigo e ele não tivesse uma arma, ele poderia escolher uma
luta física.
No entanto, se ele tivesse uma arma, um conjunto diferente de ações se tornaria disponível. Toda ação no GOAP tem uma
'Pré-condição' e um 'Efeito'. A pré-condição é um estado que deve ser atendido antes que
a ação possa ocorrer.
O efeito é como a ação sai do estado do agente (ou do mundo) após a ocorrência. Um conjunto de ações forma um quebra-cabeça
/ conjunto de dominós onde as Condições Prévias podem ser combinadas com Efeitos e os
Efeitos podem ser combinadas com as Pré-condições para criar 'Cadeias de Ação'.
Vejamos um exemplo.
Considere este conjunto de ações.
Se você der uma olhada mais de perto, verá que eles se concentram em comer.
Se você der uma olhada mais de perto, poderá ver dois planos que você pode criar (1 para pedir pizza
e 1 para assar). Um agente com essas
ações não fará nada até que seja apresentado um objetivo.
Nesse caso, vamos acionar o objetivo 'Hungry = false'.
O objetivo é o 'estado final' do agente, NÃO o 'estado inicial'.
Se você pensar bem, um objetivo humano recorrente é ter 'Fome = falso' o mais rápido possível.
Os planos geralmente só podem ocorrer quando o mundo e / ou o agente estão em um estado específico.
Neste exemplo, vamos adicionar 2 ... 'hasIngredients = true' e 'hasPhoneNumber = true'.
A fase de planejamento
no GOAP sempre funciona de trás para frente, para verificar se é possível.
Isso é feito combinando os efeitos com as condições prévias em uma cadeia.
Funciona desde os Estados Unidos.
Se não conseguir encontrar um Estado Mundial correspondente no final, o plano será abandonado.
Neste exemplo, existem 2 planos possíveis disponíveis.
'Peça uma pizza' e 'Faça algo para comer'.
Observe a reutilização da ação 'Comer'.
Ele se encaixa nos dois planos e ilustra como as ações podem ser combinadas e combinadas para formar planos diferentes.
Desde que as Condições prévias e os efeitos se encaixem, qualquer ação pode ser encadeada.
Agora que temos dois planos que atingirão
a meta, qual escolhemos?
Simples! Adicionamos um custo aos planos. Podemos atribuir a cada ação um custo monetário.
Nesse caso, o plano da
pizza fica mais caro, supondo que já tenhamos os ingredientes para assar.
Em vez disso, também podemos optar por um custo com base no tempo.
Isso tornaria a opção de cozimento mais cara. Com os custos atribuídos a cada plano, quando houver
vários, o mais barato pode ser selecionado primeiro. Se houver vários planos com o mesmo
custo mais baixo, um poderá ser escolhido aleatoriamente. Uma conceituação de um sistema GOAP se parece com isso, com Ações, Metas
e Estados Mundiais sendo inseridos em um Planejador.
O Planejador encadeia as Ações de acordo com os Objetivos e os Estados iniciais, para determinar
quais planos são viáveis.
O Planejador usa o algoritmo A * para encontrar o melhor plano usando os valores de custo.
Depois que um plano é gerado, o agente o realiza usando uma Máquina de Estado Finito muito, muito
simples que basicamente move o agente para onde a ação precisa ocorrer e, em seguida, executa
a ação.
O agente trabalha ao longo da cadeia de ações até que uma meta seja alcançada. Antes de cada ação ser executada,
é
sempre verificado se ainda é válido. Caso contrário, todo o plano é descartado e outro
é gerado.
A vantagem do GOAP é que mais e mais ações podem ser adicionadas ao pool disponível para o
agente e essas serão automaticamente selecionadas pelo Planejador.
Isso significa pouquíssima programação extra para reconhecer gráficos como os de configurações completas de máquinas de
estados finitos, pois os gráficos são gerados em tempo real pelo planejador.
Isso torna o GOAP uma opção muito poderosa e flexível para programar os comportamentos dos seus NPCs.