La planificación de la acción orientada a objetivos (o GOAP para abreviar) es una A. YO. técnica que fue ideada por Jeff Orkin
del MIT a principios de la década de 2000.
Se aplicó con éxito en el juego
F. MI. A. R. para controlar el comportamiento de los NPC.
Si desea obtener más información al respecto, puede leer los documentos de investigación disponibles en esta dirección.
GOAP tiene todos los elementos de una máquina de estados finitos, pero trabaja con ellos de manera muy diferente.
Por ejemplo, las máquinas de estado finito (como has visto antes) definen
comportamientos y condiciones para impulsar al NPC a cumplir algún objetivo. Para lograr esto con una máquina de estados
finitos,
podría tener un gráfico masivo o dividirlo en unidades más pequeñas.
GOAP también utiliza gráficos para su procesamiento, pero difiere de las Máquinas de estado finito en que las acciones
y los objetivos están desacoplados.
Las acciones son 'elementos libres' dentro del sistema que se mezclan y se combinan
para cumplir los objetivos cuando se presentan. En lugar de tener una lista establecida de
acciones que deben realizarse para lograr un objetivo, GOAP permite elegir entre numerosas soluciones.
Entonces, en lugar de un sistema que se ve así, en GOAP, se eliminan todos los enlaces. Luego, cuando se presenta un objetivo, se puede elegir
un curso de acción apropiado de todas las tareas disponibles en función del estado del
agente y del mundo.
Por ejemplo, si se le pidiera a un agente que matara a un enemigo y NO tuviera un arma, podría elegir
una pelea física.
Sin embargo, si tuviera un arma, un conjunto diferente de acciones estaría disponible. Cada acción en GOAP tiene una
'Precondición' y un 'Efecto'. La condición previa es un estado que debe cumplirse antes de que la
acción pueda llevarse a cabo.
El efecto es cómo la acción deja el estado del agente (o del mundo) después de que ha ocurrido. Un conjunto de acciones forma un rompecabezas /
conjunto de fichas de dominó donde las condiciones previas se pueden combinar con los efectos y
los efectos combinados con las condiciones previas para crear 'cadenas de acción'.
Veamos un ejemplo.
Considere este conjunto de acciones.
Si observa de cerca, verá que se centran en comer.
Si observa más de cerca, es posible que pueda ver 2 planes que podría formar usted mismo (1 para pedir
pizza y 1 para hornear). Un agente con estas
acciones no hará nada hasta que se le presente un objetivo.
En este caso, activemos el objetivo 'Hambriento = falso'.
El objetivo es el "estado final" del agente, NO el "estado inicial".
Si lo piensa, un objetivo humano recurrente es tener 'Hambre = falso' con la mayor frecuencia posible.
Los planes generalmente solo pueden ocurrir cuando el mundo y / o el agente están en un estado particular.
Para este ejemplo, agreguemos 2 ... 'hasIngredients = true' y 'hasPhoneNumber = true'.
La etapa de planificación en
GOAP siempre funciona hacia atrás desde la meta, para ver si se puede lograr.
Lo hace combinando los efectos con las condiciones previas en una cadena.
Funciona desde los Estados Unidos.
Si no puede encontrar un Estado Mundial que coincida al final, el plan se abandona.
En este ejemplo, hay 2 planes posibles disponibles.
'Pide una pizza' y 'hornea algo para comer'.
Observe la reutilización de la acción 'Comer'.
Se ajusta a ambos planes e ilustra cómo las acciones se pueden combinar para formar diferentes planes.
Mientras las condiciones previas y los efectos encajen, cualquier acción se puede encadenar.
Ahora que tenemos 2 planes para lograr
el objetivo, ¿cuál elegimos?
¡Sencillo! Agregamos un costo a los planes. Podríamos asignar a cada acción un costo monetario.
En este caso, el plan
de pizza funciona más caro, suponiendo que ya tengamos los ingredientes para hornear.
En su lugar, podríamos optar también por un costo basado en el tiempo.
Esto haría que la opción de horneado sea más costosa. Con los costos asignados a cada plan, cuando hay
varios, se puede seleccionar primero el más barato. Si hay varios planes con el mismo costo
más bajo, entonces se puede elegir uno al azar. La conceptualización de un sistema GOAP se ve así, con acciones, objetivos y
estados mundiales que se introducen en un planificador.
El Planificador encadena las Acciones de acuerdo con los Objetivos y los Estados iniciales, para determinar qué
planes se pueden lograr.
El planificador utiliza el algoritmo A * para encontrar el mejor plan utilizando los valores de costo.
Una vez que se ha generado un plan, el agente logra lograrlo utilizando una máquina de estado finito muy
simple que básicamente mueve al agente a donde la acción debe llevarse a cabo y luego realiza
la acción.
El agente sigue su camino a lo largo de la cadena de acciones hasta que se alcanza una meta. Antes de realizar cada acción, siempre
se
verifica para ver si aún es válida. Si no, se descarta todo el plan y se
genera otro.
La belleza de GOAP es que se pueden agregar más y más acciones al grupo disponible para el
agente y estas serán recogidas automáticamente por el Planificador.
Esto significa muy poca programación adicional para reconocer gráficos como los que se encuentran en configuraciones completas de
Máquinas de estado finito, ya que el Planificador genera los gráficos sobre la marcha.
Esto hace que GOAP sea una opción muy poderosa y flexible para programar los comportamientos de tus NPC.