Tuesday, June 20, 2006

Requirements for materializing Autonomous Agents

A search on “Autonomous Agent” will bring up a lot of references on this topic, including various definitions for the abstraction behind the terminology. For our purposes, an Autonomous Agent is a component with two characteristics.

First, an Autonomous Agent must be able to travel to remote destinations, primarily by self-determination. Second, an Autonomous Agent must retain its state as it travels. The use of AI techniques is desirable but not required.

The first requirement, namely mobility, implies technology independence. The infrastructure is inherently heterogeneous in nature. The purpose of developing expensive agent software is to take advantage of the diversity of infrastructure. It makes little sense to degenerate the infrastructure to homogeneity so Autonomous Agents could be used.

An Autonomous Agent is a technology-neutral process, not a program. An agent starts up as a program, performs initializations and thereafter it continues its life as a traveling process with no technological boundaries. It should be clear that proxy/adaptor technique is not a viable mechanism for achieving Autonomous Agent technology because an agent is not a class.

The move of an agent from node X to node Y is equivalent to blocking/dispatching a process, a function of an operating system. When the agent decides to leave X it is blocked until it arrives at Y and it is dispatched. This high-level semantics of the notion of mobility makes it clear that the prerequisite for achieving Autonomous Agent technology is the existence of a distributed operating system.

The move from point X to point Y should be transparent to the agent. That is, the agent’s implementation should not include code relating to transportation mechanism. Instead, a meta-layer should transport the agent very much like the air transports sound waves. An Autonomous Agent only needs to state its intent of moving to a destination, like the Z++ statement “travel IP-address”.

The requirement that an agent’s travel should resemble blocking/dispatching of processes implies strong mobility. That is, the agent and a snapshot of its state must be transported together. Strong mobility must be supported directly by the meta-layer. Indirect implementations, such as recording the snapshot in a database will not be practical.

In complex situations, however, the state of an Autonomous Agent can be divided into long term and short term. Long-term state could be retained by a database. The long-term state should be used for persistent matters such as large tables of data and rules of inference for expert systems. In other words, long-term state could represent the expertise of the agent, while short-term state is simply the state of agent as a process.

A fancy meta-layer for transporting agents will be of little use unless the agent can interact with legacy software. An efficient and safe method of interoperability with languages like C++ and ADA is through dynamic linkage. Z++ compiler generates dynamic libraries in target languages for interoperability with legacy software.

Z++ is freely available from ZHMicro.