La planificación de la acción orientada a los objetivos, o go for short, es una técnica de Iowa ideada por Jeff Orkin, del
MIT, a principios de la década de 2000.
Se aplicó con éxito en el juego fear para controlar el comportamiento de los NPC.
Si quiere saber más sobre el tema, puede leer los documentos de investigación disponibles en esta dirección.
GO tiene todos los elementos de una máquina de estado finito, pero trabaja con ellos de forma muy diferente.
Por ejemplo, las máquinas de estado finito, como has visto antes, definían comportamientos y condiciones
para conducir al NPC al cumplimiento de algún objetivo.
Para lograr esto con una máquina de estado finito, se puede tener un gráfico masivo o dividido en unidades
más pequeñas.
Gopi también utiliza grafos para su procesamiento, pero se diferencia de las máquinas de estados finitos en que las acciones y los
objetivos están desacoplados.
Las acciones son elementos libres dentro del sistema que se mezclan y combinan para cumplir los objetivos cuando se presentan.
En lugar de tener una lista fija de acciones que hay que realizar para lograr un objetivo, Gopi permite
elegir entre numerosas soluciones.
Así que en lugar de un sistema que se ve así en el ámbito, todos los enlaces se eliminan.
Entonces, cuando se presenta un objetivo, se puede elegir un curso de acción apropiado de entre todas las
tareas disponibles en función del estado del agente y del mundo.
Por ejemplo, si a un agente se le pidiera que matara a un enemigo y no tuviera un arma, podría elegir
una lucha física.
Sin embargo, si tuviera un arma, un conjunto diferente de acciones estaría disponible.
Cada acción en el ámbito tiene una precondición, y en efecto, la precondición es un estado que debe cumplirse
antes de que la acción pueda tener lugar.
El efecto es la forma en que la acción deja el estado del agente o del mundo después de que haya ocurrido.
Un conjunto de acciones forma una especie de rompecabezas o conjunto de fichas de dominó en el que las condiciones previas pueden coincidir
con los efectos, y los efectos coinciden con las condiciones previas para crear cadenas de acciones.
Veamos un ejemplo.
Considere este conjunto de acciones.
Si te fijas bien, verás que se centran en comer.
Si te fijas bien, podrás ver dos planes que podrías formar tú mismo.
Una para pedir pizza y otra para hornear.
Un agente con estas acciones no hará nada hasta que se le presente un objetivo.
En este caso, vamos a activar el objetivo.
Hambre es igual a falso.
El objetivo es el estado final del agente, no el estado inicial.
Si lo piensas, un objetivo humano recurrente es tener hambre, igual, falso con la mayor frecuencia posible.
Por lo general, los planes sólo pueden producirse cuando el mundo y/o el agente se encuentran en un estado determinado.
Para este ejemplo, vamos a añadir a tiene ingredientes es verdadera y tiene número de teléfono es verdadera.
En la fase de planificación del alcance siempre se trabaja hacia atrás desde el objetivo para ver si es alcanzable.
Para ello, hace coincidir los efectos con las precondiciones en una cadena.
Funciona hasta los estados del mundo.
Si no encuentra un estado del mundo que coincida al final, el plan se abandona.
En este ejemplo, hay dos posibles planes disponibles.
Pide una pizza y hornea algo para comer.
Fíjate en la reutilización de la acción de comer.
Encaja en ambos planes e ilustra cómo las acciones pueden mezclarse y combinarse para formar planes diferentes.
Mientras las precondiciones y los efectos encajen, cualquier acción puede encadenarse.
Ahora que tenemos dos planes que lograrán el objetivo, ¿cuál elegimos?
Simple.
Añadimos un coste a los planes.
Podríamos asignar a cada acción un coste monetario.
En este caso, el plan de la pizza resulta más caro.
Suponiendo que ya tenemos los ingredientes para hornear, podríamos optar por un coste basado también en el
tiempo.
Esto haría que la opción de cocción fuera más costosa con los costes asignados a cada plan.
Cuando hay varios, se puede seleccionar primero el más barato.
Si hay varios planes con el mismo coste más bajo, se puede elegir uno al azar.
Una conceptualización de un sistema se parece a esto, con acciones, objetivos y estados del mundo que se introducen en un planificador.
El planificador encadena las acciones en función de los objetivos y los estados iniciales para determinar qué
planes son realizables.
El planificador utiliza el algoritmo aStar para encontrar el mejor plan utilizando los valores de los costes.
Una vez que se ha generado un plan, el agente lo lleva a cabo utilizando una máquina de estados finitos muy,
muy simple, que básicamente mueve al agente hacia el lugar donde debe realizarse la acción y luego la
ejecuta.
El agente recorre la cadena de acciones hasta alcanzar el objetivo antes de realizar cada
acción.
Siempre se comprueba si sigue siendo válida.
Si no, se descarta todo el plan y se genera otro.
Lo bueno de la esperanza es que se pueden añadir más y más acciones al conjunto disponible para el agente, y éstas serán
recogidas automáticamente por el planificador.
Esto significa muy poca programación adicional para reconocer gráficos como los de los conjuntos completos de máquinas
de estado finito, ya que los gráficos son generados sobre la marcha por el planificador.
Esto hace que el alcance sea una opción muy poderosa y flexible para programar los comportamientos de tus NPCs.