quite high-level, this specification indicates what goals and actions should be able to do and the primary functionality that should be included. While there isn’t a finished interface available as of yet from the group, this specification provides a solid base to start off with.
Orkin’s article in the AI Game Programming Wisdom book (Orkin, 2002) focuses on the design considerations when creating GOAP actions and goals and builds upon the specification from the GOAP working group. It states that goals have a certain number of properties, only one goal can be active at any time, each has a relevancy which is constantly updated, knows when it is satisfied and doesn’t contain a plan – only conditions that must be met. A plan is also defined as being “any valid sequence of actions that move the agent from some starting state to a state that satisfies the goal”. There can be multiple plans to solve a goal and so the planner needs to be directed by giving costs to actions. Each GOAP agent has a reference to a planner which searches the set of actions for the correct sequence that takes the agent from the start state to the goal state.
A* is not only used to search for the correct sequence of actions to satisfy a goal when planning but it is also used to find a path through a virtual world when an agent is navigating. In separate articles, Lester describes the basic theory behind A* pathfinding (Lester, 2007) and Higgins outlines how to create a generic A* machine (Higgins, 2002). The generic A* machine can power A* searches used for navigation and planning. To create a generic A* machine there are four primary components needed: A* node, A* storage, A* goal and A* map. The modifications needed to get each of these components to function for different purposes are also explained however GOAP isn’t specifically mentioned. Orkin recommends using a generic A* machine in his paper (Orkin, 2005) but with different A* goal, A* map and A* node structures for both the navigation and planning systems. The benefit of this system is that it facilitates the re-use of the A* engine code within the game.