This chapter examines how to build complete, complex agents (CCA). A complete agent is an agent that can function naturally on its own, rather than being a dependent part of a Multi-Agent System (MAS). A complex agent is one that has multiple, conflicting goals, and multiple, mutually-exclusive means of achieving those goals. Examples of complete, complex agents are autonomous robots, virtual reality (VR) characters, personified intelligent tutors or psychologically plausible artificial life (ALife) (2,25,8). Being able to reliably program CCA is of great practical value both commercially, for industrial, educational and entertainment products, and scientifically, for developing AI models for the cognitive and behavioural sciences.
All of the methodologies I describe in this chapter are modular. The advantages of treating a software system as modular rather than monolithic are well understood. Modularity allows for the problem to be decomposed into simpler components which are easier to build, maintain and understand. In particular, the object-oriented approach to software engineering has shown that bundling behavior with the state it depends on simplifies both development and maintenance.
The problem of when to treat a module as an individual actor, an agent, is currently less well understood (3). Unlike most chapters in this volume, this chapter separates the issues of agency from the issues of MAS. This chapter addresses how to develop and maintain a system that pursues a set of goals relatively autonomously, responding to the challenges and opportunities of dynamic environments that are not fully predictable. However, it does this without agent communication languages, negotiation or brokering. The assumption is that the system will be run on a single platform where no module is likely to die without the entire system crashing, and that the system is being developed by a relatively small team who can share code and interfaces. In other words, the assumption is that this is in many respects a normal software engineering project, except that it is producing an intelligent, proactive system.