As a general case, it's possible for functionality to emerge from systems. Given a set of simple components connected together, the result is often more complex than a mere combination of its parts. With different interpretations of the definition, algorithms composed of multiple independent phases may be considered emergent. We'll take the perspective that emergence cannot be foreseen, so it shouldn't be possible to devise an algorithm purely based on theory. However, we'll assume that emergence can be designed thanks to experimentation. This approach is more constructive because it means two things:
In many ways, when complex reactive systems (or behaviors) are created, their functionality emerges by design. Game AI development can benefit from emergence in many ways, so any methodology that can help harness such chaos is welcome. In some systems, emergence is debatable, but the methodologies presented here apply equally to both scenarios. Just as intelligence is an emergent phenomenon based on straightforward chemical mechanisms, many believe that complex software programs emerge from simple rules of the computer. Taking this software engineering approach provides practical insights into dealing with the development of AI particularly how to craft simple reactive rules into complex behaviors. Assembling simple components together to produce elaborate emergent functionality is a matter of engineering in different forms:
In practice, agile development is based on the following principles (although not exclusively limited to emergent patterns). Each principle is presented along with its benefits for AI:
These procedures are considered part of evolutionary design. In this case, there's no planned design, but the functionality emerges incrementally. Evolution is thought to be the strongest way to create emergent patterns, and borrowing these methodologies can help us harness the power of emergence as game AI developers. The result is NPCs composed of simple components that interact with simple mechanisms to provide complex functionality. |