There are different levels of understanding of the problem: informal, theoretical, statistical, and analytical. These provide a good combination of experience:
The description of the task provides an indication of the complexity.
By multiplying the size of the problem parameters together, we obtain the total number of configurations in the domain.
Gathering arbitrary data about the problem enables us to establish usage of values and configurations.
Some parameters depend on each other; this can usually be identified in pairs using covariance.
More complex relationships between variables need to be established analytically.
This understanding enables us to manipulate the problem in two ways:
The AI engineer plays a crucial role in acquiring this understanding and applying it:
Expert features can be ranked by priority, and they can be added or removed as necessary.
Experimentation reveals the importance of features.
Statistical metrics also provide essential hints to the quality of inputs.
This chapter discussed knowledge of the problem in conceptual terms. More than half a dozen problems have already been solved using most of these concepts. These ideas will also enlighten the design of remaining prototypes. The methodology for solving complex problems will become more obvious with further practice.
You can download an animat from http://AiGameDev.com/ that facilitates data collection and analysis. Lumberjack logs everything: most details from the senses and each action executed. The log file can be processed by standard packages or custom scripts when necessary. Lumberjack provides a good framework for putting the ideas in this chapter into practice.