Adaptation of mobile agents occurs without termination of the agent, which is why we speak of dynamic adaptation at runtime in the first place. We assume the trigger for dynamic adaptation is the movement of code, i.e. that each environment ist stable in terms of library support, etc., during the local lifetime of an agent. Hence a new adaptation decision only needs to be taken whenever the agent reaches a new place.
The input to dynamic adaptation is a set of (bigger) environment-dependent implementations, a (small) environment-independent core agent and a description of the local environment. Each environment-dependent part holds enough meta-information to allow a matching process between its requirements and actual features of a local environment. Hence the result of dynamic adaptation is the selection of an appropriate implementation for an environment and the linking of the selected implementation with the core implementation.
Dynamic adaptation differs from static adaptation not only concerning the time of adaptation, but also concerning the adaptation function. Static adaptation typically transforms existing source code into new source code having to be compiled after adaptation. Our style of dynamic adaptation selects a sub-component from an existing set of environment-specific implementations; it exchanges and instantiates these sub-components dynamically.
The mobile agent is divided into several environment-dependent adaptable parts (boxes X, Y in Fig. 2) and a small environment-independent and non-adaptable core. The adaptable parts are exchanged in order to fit into the current environment. The environment-independent core and the environment-dependent adaptable part form the mobile agent executing its task on a host. The agent programmer develops the core and might also develop the environment dependent parts. However adaptable parts are normally built by a component developer who has special knowledge about a particular execution environment. The movement from one host to another is done by the small core agent as a vehicle for the computational flow. The core can be used as bootstrapper for the dynamic adaptation, which may also occur in recursive stages. After the arrival on a new host adaptation is applied delivering the mobile agent with its full functionality according to local needs. Before the mobile agent moves to a new host, the environment-specific implementation is dropped again and the mobile agent is temporarily reset to its small environment-independent core. Thus, only code which is actual needed on particular host migrates over the network towards them.
In the following the architectural parts of the framework and the methodology will be explained. The development tools supporting the building process of adaptable agents will be presented in section IV.