to work very closely with one another determining the actual states and the transitions between them (Orkin, 2004).
The layering of behaviour is something that Orkin highlights as a benefit of GOAP (Orkin, 2005). This project layered attack actions on top of a base attack action and while it worked quite well, the same approach could be taken by the FSMs. Houlette explains ‘Polymorphic FSMs’ (Houlette, 2003) which layer FSM states on top of one another in a similar way to what was done for the GOAP system.
Aside from the technical results, the rest of the comparisons have been wholly in favour of the GOAP system. However there are drawbacks involved with development of a GOAP system that the results didn’t highlight.
Debugging the GOAP system proved to be far more challenging than debugging the FSM system during development. There is much more to keep track of and it is very unpredictable. There were times during testing when agents would just stay in the same position as they wouldn’t have any goal active or be executing any action. To debug this, the first task was to identity each possible goal that could be active and see why none were forming plans. Even if a goal is relevant and selected for planning, it may be the case that actions which match the goal fail the checks required for the planner to select them and thus no plan was built and the goal is consequently skipped. This can continue until there were no goals left to check, a plan wasn’t formed and the agent had no action to execute. The next debugging step was to check the context preconditions of all available actions that map to the active goal and find out what may be stopping the planner from selecting the action. Even if a plan was built successfully, something may be occurring once the action was activated that caused the whole plan to be invalidated immediately or very soon after activation. So further debugging checks were required to verify the actions activation and validation functions. All of these checks along with other issues faced while debugging proved troublesome for this