O planejamento de ação orientado por objetivos ou abreviado é uma técnica de Iowa que foi concebida por Jeff
Orkin do MIT no início dos anos 2000.
Foi aplicado com sucesso no jogo o medo de controlar o comportamento dos NPCs.
Se você quiser saber mais sobre o assunto, você pode ler os trabalhos de pesquisa disponíveis neste endereço.
GO tem todos os elementos de uma máquina de estado finito, mas trabalha com eles de forma muito diferente.
Por exemplo, as máquinas de estado finito, como você já viu antes, definiram comportamentos e condições
para conduzir o NPC a cumprir algum objetivo.
Para conseguir isto com uma máquina de estado finito, você poderia ter um gráfico maciço ou dividido em unidades
menores.
Gopi também usa gráficos para seu processamento, mas difere das máquinas de estado finito em que as ações e objetivos
são desacoplados.
As ações são elementos livres dentro do sistema que são mistos e combinam para atingir os objetivos quando são apresentados.
Em vez de ter uma lista definida de ações que precisam ser realizadas para atingir um objetivo, Gopi permite que
numerosas soluções sejam escolhidas.
Assim, ao invés de um sistema que se parece com este no escopo, 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 do mundo.
Por exemplo, se um agente fosse solicitado a matar um inimigo e ele não tivesse uma arma, ele poderia escolher
uma luta física.
Entretanto, se tivesse uma arma, um conjunto diferente de ações se tornaria disponível.
Toda ação em âmbito tem uma condição prévia e, de fato, a condição prévia é um estado que deve ser atendido
antes que a ação possa ocorrer.
O efeito é como a ação deixa o estado do agente ou o mundo após ter ocorrido.
Um conjunto de ações forma uma espécie de quebra-cabeça ou conjunto de dominós onde as condições prévias podem ser combinadas
com efeitos, e os efeitos combinam com as condições prévias para criar cadeias de ação.
Vejamos um exemplo.
Considere este conjunto de ações.
Se você olhar de perto, você verá que eles se concentram em comer.
Se você olhar mais de perto, talvez consiga ver dois planos que você mesmo poderia formar.
Uma para encomendar pizza e outra para assar.
Um agente com estas ações não fará nada até que seja apresentado com um objetivo.
Neste caso, vamos acionar o objetivo.
Fome é igual a falso.
O objetivo é o estado final do agente, não o estado inicial.
Se você pensar sobre isso, um objetivo humano recorrente é ter fome, igual, falso o mais freqüentemente possível.
Os planos geralmente só podem ocorrer quando o mundo e ou o agente estão em um determinado estado.
Para este exemplo, vamos acrescentar a ter ingredientes é verdade e tem número de telefone é verdade.
A etapa de planejamento no escopo sempre funciona de trás para frente para ver se é possível alcançá-la.
Ele faz isso combinando os efeitos com as condições prévias em uma cadeia.
Funciona até os estados do mundo.
Se não conseguir encontrar um estado mundial correspondente no final, o plano é abandonado.
Neste exemplo, há dois planos possíveis disponíveis.
Encomende uma pizza e cozinhe algo para comer.
Observe a reutilização da ação alimentar.
Ela se encaixa em ambos os planos e ilustra como as ações podem ser misturadas 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 vão atingir o objetivo, qual deles escolhemos?
Simples.
Acrescentamos um custo aos planos.
Podemos atribuir a cada ação um custo monetário.
Neste caso, o plano de pizza funciona mais caro.
Assumindo que já temos os ingredientes para assar, podemos, em vez disso, optar por um custo baseado no tempo
também.
Isto tornaria a opção de cozimento mais cara, com custos atribuídos a cada plano.
Quando há múltiplos, o mais barato pode ser selecionado primeiro.
Se houver vários planos com o mesmo custo mais baixo, então um pode ser escolhido ao acaso.
Uma conceitualização de um sistema se parece com isto com ações, objetivos e estados do mundo sendo alimentados por um
planejador.
O planejador encadeia as ações de acordo com os objetivos e estados iniciais para determinar quais
planos são exeqüíveis.
O planejador usa o algoritmo aStar para encontrar o melhor plano usando os valores de custo.
Uma vez que um plano tenha sido gerado, o agente vai em frente, utilizando uma máquina de estado finito
muito, muito simples, que basicamente move o agente para onde a ação precisa ocorrer e depois executa
a ação.
O agente trabalha seu caminho ao longo da cadeia de ações até que o objetivo seja alcançado antes de cada ação ser
realizada.
É sempre verificado para ver se ainda é válido.
Caso contrário, o plano inteiro é descartado e outro é gerado.
A beleza da esperança é que cada vez mais ações podem ser adicionadas ao pool disponível para o agente, e estas serão
automaticamente capturadas pelo planejador.
Isto significa muito pouca programação extra para reconhecer gráficos como os de conjuntos completos de máquinas
de estado finito, uma vez que os gráficos são gerados na mosca pelo planejador.
Isto torna o escopo uma opção muito poderosa e flexível para programar os comportamentos de seus NPCs.