Until now, this article has been concerned with agent theory - the construction of formalisms for reasoning about agents, and the properties of agents expressed in such formalisms. Our aim in this section is to shift the emphasis from theory to practice. We consider the issues surrounding the construction of computer systems that satisfy the properties specified by agent theorists. This is the area of agent architectures. Maes defines an agent architecture as:
`[A] particular methodology for building [agents]. It specifies how ... the agent can be decomposed into the construction of a set of component modules and how these modules should be made to interact. The total set of modules and their interactions has to provide an answer to the question of how the sensor data and the current internal state of the agent determine the actions ... and future internal state of the agent. An architecture encompasses techniques and algorithms that support this methodology.' [Maes, 1991].Kaelbling considers an agent architecture to be:
`[A] specific collection of software (or hardware) modules, typically designated by boxes with arrows indicating the data and control flow among the modules. A more abstract view of an architecture is as a general methodology for designing particular modular decompositions for particular tasks.' [Kaelbling, 1991]The classical approach to building agents is to view them as a particular type of knowledge-based system. This paradigm is known as symbolic AI: we begin our review of architectures with a look at this paradigm, and the assumptions that underpin it.