Secret Agents, man ...
There was a lot of controversy over what constituted an object when object programming was initially introduced. There is a similar controversy over exactly what constitutes an agent.
Many proponents define agents as autonomous continuously executing programs that act on behalf of a user. However, this definition can be applied to some UNIX daemons or even some device drivers.
Others add the requirements that the agent must have special knowledge of the user, must execute in an environment inhabited by other agents, and must function only within the specified environment. These requirements would exclude other programs considered to be agents by some. For instance, many e-mail agents act alone and may function in multiple environments. In addition to agent requirements, various groups in the agent community have introduced terms like softbot, knowbot, 'software broker', and 'smart object' to describe agents. One commonly found definition defines an agent as:
"... an entity that functions continuously and autonomously in an environment in which other processes take place and other agents exist."
Although it is tempting to accept this definition and move on, we cannot because it too easily describes other kinds of software constructions. A look at a more formal source; the FIPA (Foundation for Intelligent Physical Agents) specification defines the term agent accordingly:
"An Agent is the fundamental actor in a domain. It combines one or more service capabilities into a unified and integrated execution model which can include access to external software, human users and communication facilities. "
While this definition has a more structured feel, it also needs further clarification because many servers (some object-oriented and some that are not ) fit this definition. This definition as is would include too many types of programs and software constructs to be useful. In our PADL model we use the five part definition of agents as stated by [Luger,2002]:
1. Agents are autonomous or semi-autonomous. That is each agent has certain responsibilities in problem solving with little or no knowledge either what other agents do or how they do it. Each agent does its own independent piece of the problem solving and either produces a result itself (does something) or reports its result back to others in the community of agents.
2. Agents are situated. Each agent is sensitive to its own surrounding environment and (usually) has no knowledge of the full domain of all agents.
3. Agents are interactional. That is, they form a collection of individuals that cooperate on a particular task. In this sense they may be seen as a "society".
4. The society of agents is structured. In most views of agent-oriented problem solving each individual although having its own unique environment and skill set, will coordinate with other agents in the overall problem solving. Thus a final solution will not only be seen as collective but also cooperative.
5. Although individual agents are seen as possessing sets of skills responsibilities, the overall cooperative result of the society of agents can be viewed as greater than the sum of its individual contributors.
We use the term "multiagent architecture" when we are referring to an agent-based architecture that consists of two or more agents that can execute concurrently if necessary. It should be clear from Luger's definition of agents that multiagent architecture can be used as an extremely flexible approach to patterns of work that require or can benefit from concurrency. Notice in this definition of agents there is not mention of particular computer capabilities, numbers of processors, thread management, etc. There is also no limit on the number of agents involved. There is no complexity constraints on the patterns of work that a collection of agents can perform. If we begin with the blueprint that is consistent with an multiagent architecture we should be able to handle concurrency of any size.
This is an excerpt from our book, "Professional Multicore Programming: Design and Implementation for C++ Developers".