There is an ongoing need for improved autonomous virtual characters for military training, particularly in areas such as squad-level scenarios for the Army and Marines. In the past, simulations have often used techniques such as scripting or Finite State Machines for Artificial Intelligence (AI) control of non-player characters. These approaches allow the scenario creator to have precise control over the actions of the characters, but the cost of configuration and the quality of the result scale poorly as the complexity of the AI grows. As a result, they tend to lead to AI behaviors that are rigid and predictable, and thus are insufficiently reactive to unexpected situations and not suitable for replay or repeated use.
In previous papers we have endorsed utility-based AI as our preferred alternative. This approach enables the developer to think in terms of heuristic equations rather than simple black-and-white decisions, and thus to create an AI which can examine the subtle nuance of the situation and select actions accordingly. The resulting characters retain the strong authorial control of previous approaches, but they can be far more believable, adaptable, and reactive to the situation around themselves.
Utility-based AI is flexible and powerful, but newcomers may find guidance useful in the face of such flexibility. In this paper we propose several design patterns that can be applied to the configuration of utility-based AI. Much like design patterns for software engineering, the intent is to share "simple and succinct solutions to commonly occurring design problems" (Gamma et. al., 1994). These patterns can provide a complete solution for simple AI problems, but more importantly they provide a solid foundation on which more complicated logic can be built.