Professional Documents
Culture Documents
1. Introduction
A key observation of current and upcoming distributed applications is that autonomous adaptation to dynamically
changing environments is a emerging issue. It is easy to imagine that many people will connect to and disconnect from
running applications via global networks as a part of their daily lives. In other words, future networked applications may be
inherently susceptible to issues of complexity and scale. Additionally, such applications will be confronted with continuous
requests from users or their environments for various reasons.
In nature, biological systems, such as cells, ants, or bees have developed adaptation mechanisms to live and survive in
changing environments. They have developed the ability to enlarge in scale without any centralized control because they
can behave autonomously, influenced by only local conditions and individual interactions with other nearby entities [1].
The social network of bee hives, for example, is that of a distributed system, with each member producing effects that
pervade the hive. The queen bee acts as an egg production specialist rather than a controller that organizes the colony. Each
member of the hive acts as a member of a social group. Within each social group, or network, collections of individuals will
develop associations and communication systems [2]. The behavior of individual insects is directly affected by the behaviors
of and communications with other individual insects. For instance, a bee could enter a hive exhibiting one social role and
leave with an entirely different role. These individual behaviors are called phenotypes and contain a set of measurable traits.
Phenotypes that can be observed at a group level, such as the division of labor, are called emergent properties.
∗ Corresponding address: Intelligence & Interaction Research Center, Korea Institute of Science & Technology, 39-1 Hawolgok 2-dong, Seongbuk-gu,
136-791 Seoul, Republic of Korea.
E-mail address: pragman@gmail.com.
0895-7177/$ – see front matter © 2010 Elsevier Ltd. All rights reserved.
doi:10.1016/j.mcm.2010.06.018
2098 K. Yeom / Mathematical and Computer Modelling 52 (2010) 2097–2117
As social groups coalesce, individuals take on certain tasks while ignoring others. Some particular members of an
association will perform a certain task, making other members of the social group less likely to perform that task. Individuals
assume particular tasks based on their tolerance threshold for neglecting such tasks. For example, some bees will set out
to gather pollen at the first sign of reduced pollen levels in the hive. Other bees will join the gathering task only when the
pollen levels of the hive drop below a certain level. This behavior can be found in individuals in all social networks [3,4].
A Ubiquitous, or Pervasive, computing environment is becoming even more common [5]. In the near future, the
ubiquitous computing calls for the deployment of a wide variety of smart devices throughout our working and living
spaces [6]. Furthermore, many devices will be mobile. They are expected to dynamically discover other devices at a given
location and continue to function even if they are disconnected. The overall goal is to provide users with universal and
immediate access to information and to transparently support them in their tasks [7].
The ubiquitous computing space can thus be envisioned as a combination of mobile and stationary devices that draw on
powerful services embedded in the network to achieve users’ tasks [8]. The result will be a giant, ad hoc distributed system,
with tens of thousands of people, devices, and services coming and going. Therefore, networked applications will need to
become more scalable, autonomous, and adaptive. They will need to be resilient to dynamic changes inside the network such
as changing network traffic and fluctuations in available resources relative to the number of users. They are also expected
to extend the duration of service of applications and reduce maintenance costs [9].
An application can be run on a group of one or more computers to gratify its own requisites, which may be beyond the
capabilities of an individual computer. Such a group has to be reconfigurable during runtime because user devices may vary
depending on what needs to be done, and very often they may connect to and disconnect from the network sporadically.
It is difficult to adapt to changes in user requests or changes in execution environments during runtime such as the
spontaneous addition and removal of components and changing network topology. These factors will be more critical in
both ubiquitous computing environments and large scale distributed systems such as grid computing environments [10,11].
Since computational resources such as processors, storage, and input and output devices are heterogeneous and limited, an
individual system can only support its own applications [12]. Consequently, future networked applications will be expected
to be scalable, autonomous, and adaptive in order to respond to dynamic network environments [13,14].
In the process of realizing future network applications with the aforementioned characteristics, we found that various
biological systems have already developed the mechanisms necessary to achieve the key requirements of future network
applications such as autonomy, scalability, adaptability, and simplicity [13,15]. The proposed architecture is motivated by
the observation of such desirable properties, thereby drawing inspiration from biological systems. The objective of our
long-term research is to develop autonomous adaptive agents for large scale, network-based or Internet-based, ubiquitous,
distributed computing environments. In order to accomplish this goal, we have come up with a novel architecture called
the ‘bio-inspired reconfigurable and adaptive agent framework’, which is attributable to several biological concepts and
mechanisms [15–17].
In this paper, the author describes a self-organizing system framework that allows for highly distributed and dynamic
network applications using autonomous adaptive agents. This paper introduces several key features of the autonomous
adaptive agents in our architecture and depicts functional requirements for our agent-based framework. This paper presents
how the agents can combine and reorganize a collection of components, which may execute on heterogeneous computing
environments, and modify their associated contexts (e.g. locations, tasks, etc.) in accordance with user requirements. We
describe the design and implementation of the framework, showing how the proposed framework satisfies the expected
requirements of future networked applications. In order to explore the scalability and efficiency of the framework, we
present some results from our initial empirical computations.
This paper begins with a brief description of the related work in Section 2. Then we describe the issues that we consider
are necessary for the framework in Section 3, followed by a description of the design goals for the framework in Section 4.
We then describe its design and a prototype implementation in Sections 5 and 6, respectively. In Section 7, we discuss our
simulation results and we conclude with a summary of our work and several future issues in Section 8.
2. Related works
In this section, we describe several biologically inspired approaches to distributed and multi-agent systems. Our platform
is similar to existing mobile agent platforms, such as Aglets, Voyager, JumpingBeans, and Grasshopper [18–20,4], in the
sense that it implements a weak migration mechanism for agents. In contrast, the proposed framework emphasizes the
decentralized combination and reorganization of agents on distributed network environments based on biological concepts.
Most existing agent platforms presuppose the existence of a host controller or of centralized agents. For instance, Hive
deals with decentralized agents [18], but its current implementation is based on a central host and deployment of the remote
message by Java RMI. In contrast, the proposed framework allows agents to organize a virtual network among agents using
their functionalities and relationships. They also carry out distributed discoveries through interactions with each other,
which results in social networking.
There are several platforms which provide social networking functionality such as OceanStore, Pole, and Co-Field [20,4,
21]. The discovery mechanism for them is based on structured peer-to-peer communication with a distributed hash function
on the whole overlay network. Such discovery mechanisms are very expensive, and it is hard to maintain their structure in
dynamic network environments, where individuals frequently join and leave.
K. Yeom / Mathematical and Computer Modelling 52 (2010) 2097–2117 2099
Alternatively, instead of depending on any distributed hash function, our framework is designed on a loosely coupled
virtual network of agents in order to adapt to dynamically changing environments. It also provides a flexible discovery
scheme that allows agents to detect and specify the corresponding cytokine/chemokine (pheromone), which affects the
behavior of other agents of the same type (e.g. attracting them sexually).
In a few attempts, the architecture for real distributed systems have been presented. For example, the Anthill project
established a bio-inspired middleware for peer-to-peer systems, which consists of an aggregation of interconnected
dens [22]. Autonomous agents, called ants, can move around the network to satisfy user requests. The main difference
between Anthill, including its applications, and our proposed framework is that agents are independent objects that can
accomplish their tasks and are flexible components that can be combined with and segregated from each other through the
proposed framework. The Co-Field project suggested the concept of a general coordinator for the movements of agents and
organization of a group of agents, which consist of mobile devices and mobile robots. However, it is only available within
limited simulation environments.
In our framework, there are two key ideas. The first is to implement components as mobile agents that can travel between
computers, regardless of being homogeneous or heterogenous, under their own migration schemes. That is, each component
can autonomously migrate to another computer or duplicate and send its copies of itself to others. The second is to facilitate
the dynamic association of one or more components over distributed systems. The framework supports low-level operating
and networking details (e.g. marshalling and unmarshalling, I/O and concurrency) for agent’s migration and communication.
This architecture also provide agents with seamless runtime services without any system interruption.
The goal of this framework is to provide a general scheme that enables applications on a distributed network environment
to be deployed, migrated, and reconfigured dynamically in order to accomplish some tasks successfully.
The proposed framework presupposes that each application is composed of one or more components as shown in
Fig. 1. Each component has a mobile single-cellular structure (modular agent or motile cell), since it is self-comprised and
self-roving. A collection of components is akin to pseudo-deformation in biology because such a combination can modify
the structure of a group of components. These collections have the ability to move around within a distributed system
and partially relocate their constituent components in accordance with changes in the system, network status, and user
requirements (see Fig. 2).
The framework provides interaction measures for the migration of components. It controls the migration of components
to other computers to accomplish particular requirements or tasks. For instance, when the framework detects any changes
in a user’s positions, it provides necessary migration information to the relevant agents such as the address of destination
computers (which uses the locational information services we presented in [13]). Components then transmigrate to the
destination. If the computing environments have also changed (e.g. from a desktop to a laptop or PDA), a suitable component
which can support user preference is also migrated to the new environments.
Applications should be able to run on any computer in order to satisfy their requirements and tasks. However, it is difficult
to deploy components to appropriate computing devices on any distributed computing environment where computing
devices are dynamically combined and separated [23].
The requirements for accomplishing user requests may vary and the resulting complexity of applications may increase
considerably. For example, mobile users may want to receive consistent service from the current environment. That is,
regardless of the user’s location or other environmental variables, the user wants constant interaction with the computing
environment. Consequently, applications should be able to travel from computer to computer to adequately serve users [24].
Therefore, the proposed framework should enable a group of components to partially or completely (i.e. a complete
2100 K. Yeom / Mathematical and Computer Modelling 52 (2010) 2097–2117
application) migrate to suitable computing devices according to changes in the user’s conditions and associated context
(e.g. user’s location, designated tasks, the overhead of components).
Fig. 3. (a) D.discoideum aggregation of the cells [30]. (b) Inter-cellular exchange in young living lymphocyte cells [31].
freely. They are believed to be the actual motor which pulls the cell forward during the process of cell migration. When
they pull one another, their stretched cortex extends to arbitrary regions. This continues until a lamellipodium creates a
dominant direction (pathway) to move, then it migrates in that direction [25].
The phenomenon of lamellipodia can be regarded as speculative migration, which is used as a basis for the migration of
mobile agent-based components. A component has to migrate to one of the most suitable computing devices under their
own control and constraints to satisfy their requirements and tasks. However, it is not always possible to decide exactly
which destination is the most suitable. For this reason, the proposed framework allows a component to simultaneously
distribute its clones to multiple computing devices. The framework then selects the most suitable clone while the others
naturally vanish. This mechanism corresponds to the expansion process of lamellipodia for migration in mobile cells.
2102 K. Yeom / Mathematical and Computer Modelling 52 (2010) 2097–2117
The framework presented in this paper was implemented in JDK version 1.4.2. It consists of two parts, mobile agents
and agent hosts. The first defines partitioned applications like a client in a server/client architecture. The second, which
corresponds to a server in a server/client architecture, is a middleware and enables components to travel from computer to
computer.
In the proposed framework, each agent consists of a head, a body and activities (see Fig. 4). The head carries descriptive
information regarding an agent (e.g. identifier). The body implements the agent’s functional services.
For instance, one agent may include software code for control of devices, while another agent may implement reservation
services for a hotel, train and airplane in its body. Activities implement non-functional biological behavior that are inherent
to all agents (e.g. reproduction and migration).
Each agent lives on a specific framework to execute its functional service implemented in its body. Our framework runs
on each network node. Through a set of runtime services provided by a local framework, each agent continuously senses
the current surrounding conditions in the network (e.g. network traffic) and performs accordingly. For clarification, Fig. 5
has been redrawn as follows (refer to CCA forum [34]).
Firstly, as shown in Fig. 5, the agent must be bound to the framework for any services or any actions because of security
issues. Secondly, a single component agent may be able to provide a service by itself. Thirdly, the framework should provide
a binding service for component binding in distributed environments. Therefore, the framework has to provide a structure
(i.e. container, Fig. 5(a)) that executes a life activity and combines other components (see Fig. 5(b)). These features are mainly
handled by the agent manager. The framework is implemented in Java, and each framework runs on a Java Virtual Machine
(JVM) (Fig. 4). Each agent is implemented as a Java object and runs on the proposed framework.
The framework, as shown in Fig. 4, is composed of six architectural components. First, Framework Indicator is an object
that represents the framework running on a computing device and runs on a per-framework basis, which means that
multiple framework instances can be executed at the same time. It maintains a table which lists all of the services in the
K. Yeom / Mathematical and Computer Modelling 52 (2010) 2097–2117 2103
a b
Fig. 5. (a) Inner structure of agent. A component based agent has two interfaces to connect with other agents and one channel which is used to communicate
with its host. (b) Framework for components binding. A component has to be inside a container to execute its functionality.
service provider and all of the agents in the agent manager on a local framework along with their names and references. It
is initialized when a framework starts up.
Agent Attribute is an entry point for an agent to access underlying framework instances. If an agent requests a service to
the framework, the framework examines if the requested service is available. If it is, the agent attribute returns a reference to
the service. Each agent attribute performs this lookup for the services through the local framework indicator. Each agent has
its own attributes. An agent attribute is automatically generated and associated with an agent which has the life-cycle service
(one of the services, see Section 3.2.1) when the agent is created, replicated, and reproduced, or completes a migration.
Service Provider provides a set of runtime services that agents use to accomplish their activities. Each service consists of
one or more activities involving agents. The activities which our framework currently supports are migration, replication,
reproduction, agent discovery, resource sensing, and energy transaction.
Agent Manager maintains a table that contains references to all the agents running on a local platform. It also plays a
role to dispatch incoming messages to these agents. The message is delivered by a message transmitter which abstracts
low-level networking and operating details, for example, network I/O, concurrency, messaging, and network connection
management, etc. It follows the message transmission and object adapter of ORB [35] for the object activation and call, and
the table maintenance and message dispatching. It also keeps track of the network traffic load by computing the number of
dispatched messages and received packets.
Message Transporter is to allow different types of information to be sent between networked devices. The main purpose
of a message handling system is to provide a means for transferring messages from one messaging host to another. This
message transfer may occur on the same host, between hosts in the same organization, or between distant hosts in different
networks, etc.
Class Loader is a customized class loader that extends the default class loader of the Java Virtual Machine (JVM). It is used
to dynamically load/unload the object of a agent’s class into a JVM when it is newly produced, destroyed, or migrated.
For the proposed framework, we define two interfaces for agent communication (see Fig. 6).
The send() and receive() methods are used to communicate with each other. The message format for agent communication
follows that of the FIPA [36]. More details are described in [36,37]. The agent communication process is as follows: the agent
sends a message through the interface of send(), it receives a message from another agent. These two message exchange
processes occur asynchronously. That is, during message transmission an agent can accept a message from other agents
simultaneously. The reason why we chose an asynchronous communication manner instead of a synchronous approach
is because it allows for better scalability and more stability in terms of service availability. Specifically, it reduces system
response time, throughput, and system and network load relevant to the agent. The framework allows for continuous service
without any system halt since message transmission does not need to wait for any response.
2104 K. Yeom / Mathematical and Computer Modelling 52 (2010) 2097–2117
The send() operation inserts a received message in the agent’s message queue (Fig. 6). The agent then brings the message
into an individual thread to process it. If there is no available message in the message queue, the thread waits for a new
message. Since all the messages in a queue are included in the agent class object, when an agent migrates to another platform
with unprocessed messages they are also transmitted and processed at the destination [38].
Each agent maintains another thread to carry out its non-functional activities, as mentioned at the beginning of this
section. We assigned different threads for functional and non-functional purposes since these activities operate at different
durations. In other words, from a functional aspect, a thread should be executed the moment a message arrives in the queue;
however, the thread relating to non-functional activities is executed depending on application requirements.
An agent consists of three main parts: Head, Body, and Activities (Fig. 7). The head carries descriptive information
regarding the agent (e.g. agent ID and a description of the type of service it provides). The body implements a service
that the agent provides and contains materials relevant to the service (e.g. data, application code, user profiles). For
instance, one agent may implement control software for a device in its body while another agent may implement a hotel
reservation service. Activities implement non-service-related actions that are innate to all agents. Examples of activities
include migration, reproduction, and energy exchange.
(1) Agent Head: The current design of the framework defines the head information and metadata that all agents have
to maintain. The getHead() operation of an agent is used to obtain head information and metadata of an agent (see Fig. 6).
The essential information for an agent head is (1) the agent’s GUID (globally unique ID), (2) the agent’s reference and the
metadata, (3) the available service, and (4) the energy ratio. A GUID is a special type of identifier used in software applications
to provide a reference number for some entity, which is unique in any context. In our framework, we design the GUID using
32 bits of hexadecimal digits, such as {3F2504E0-4F89-11D3-9A0C-0305E82C3301}, which is generated by the platform
where the agent originates.
An agent’s GUID is unique and does not change throughout the lifetime of an agent. An agent’s reference is the entry point
for communication, which is required for message transmission and acquisition. It includes the encapsulated IP address and
port number of the framework where the agent currently resides. When an agent migrates, the IP address and port number
are renewed to those of the framework which it migrates to. The description of a service is the name of the service that an
agent provides. Energy ratio, which an agent maintains, varies according to the service it provides and its non-functional
activities. For instance, if an agent is created with 100 energy units, when it calls a service that requests 20 energy units
the overall energy level is changed to 80 units. Another example is when an agent, which has only 30 units, is frequently
requested by other agents, its energy unit is automatically increased according to the energy management policy.
(2) Agent Body: The body is the part that defines the service which the user wants to implement. It follows the component
object model (COM) guideline. Therefore, the service that an agent provides is dependent on user or system requirements
(e.g. data, component/application code, user preference or user profiles, etc.). Implementation of the body is left to the
developer and the user of the framework.
(3) Agent Activities: Agents autonomously behave, modeled after simple biological mechanisms. Some examples of the
agent activities are described next.
• Resource and environment sensing: Agents are acutely aware of their surrounding environment. For example,
agents recognize which other agents exist in the environment and what services are available. Agents also sense specific
cytokines/chemokines, which other agents leave on remote frameworks, and resources which include CPU processing
power or memory space on remote frameworks.
• Discovery and relationship management: Agents can establish relationships with other agents and seek agents
with certain attributes by forwarding queries to agents that they have relationships with.
K. Yeom / Mathematical and Computer Modelling 52 (2010) 2097–2117 2105
• Cytokine/chemokine diffusion: Agents can leave a cytokine/chemokine (or a trace) behind on a framework when
they migrate to another framework. This action indicates their presence to other agents. A cytokine/chemokine contains
the agent’s GUID and a reference to the framework that the agent migrated to. Cytokine/chemokines are emitted with
certain strengths and may decay over time. Cytokine/chemokines may have a variety of uses, which include improving
the performance of discovery.
• Communication: Agents may communicate with other agents for the purposes of, for instance, requesting a service,
forwarding a discovery query, or exchanging energy.
• ATP exchange and store: Agents can receive ATP1 from other agents or framework and store energy. They can also
consume energy. For example, agents may expend a certain amount of energy units for a service that they request to
other agents. In addition, when an agent utilizes resources on a framework (e.g. CPU and memory), it may pay energy
units to that framework.
• Migration: Agents can migrate from one framework to another.
• Life-cycle management: Agents can manage their life-cycles. Agents may make a copy of themselves (replication)
with possible mutations with regard to the replication scheme. Two parent agents can create a child agent (reproduction)
with possible crossover and mutation with regards to the reproduction scheme. Agents may also die (death) from a lack
of energy. If the energy expenditure of an agent is not balanced in regards to the energy units it receives by providing
services to other agents, it will not be able to pay for the resources it needs and will consequently die from the lack of
energy. Agents with wasteful behavioral schemes (e.g. replicating or migrating too often) will have a higher chance of
dying from energy deficiency.
The framework implements the activities described above. Each activity is composed of one or more runtime components
and services provided by the framework. When an activity is invoked, corresponding runtime components and services are
also designated.
It is almost impossible to automatically divide existing standalone applications into multiple sub-modules or smaller
independent applications. Therefore, the implementation of this framework is based on the construction methodology of a
component object model (COM) based application. That is, an application is loosely composed of other components, which
may execute on different computing devices. Each component is an assembly of Java Bean objects in standard file format,
which not only migrates from computer to computer but can also duplicate itself and create a different child component
through the combination of two parent components. When components arrive at their destination or are duplicated, each
component can continue working without any loss of their previous work such as the contents of instance variables and
methods in the component’s program at the source computing devices.
A component includes its own GUID and an identifier of the association that it may belong to. It can explicitly specify
the computational capability on its destination hosts by filling the CC/PP (composite capability/preference profiles) form,
which is described by the World Wide Web Consortium [35]. If a component is on a computing device that cannot satisfy
its requirements or tasks, the component is removed from the computing device. In order to remove an agent, the life-
cycle management service provides a destruction operation. The destruction operation frees the resources (e.g. memory
and threads) that a dying agent utilizes, removes components from the energy table in the energy management services,
and unregisters the dying agents from the container of the framework. Of course, the component can leave the host device
without destruction or any energy loss.
The current implementation supports several migration strategies for the mobile components. Although it will be
discussed in the following section, we will present two basic migration strategies here.
• When a component that is connected to other components moves to another destination, the connected components
may also migrate to the destination or to a nearby suitable host (Follow Scheme, Fig. 8(a)).
• When a component that is connected to other components moves to another destination, the connected components
may replicate or reproduce themselves at their current location and then send the copies to the destination or a nearby
host (Replication Scheme, Fig. 8(b)).
Fig. 9 shows an example of the group migration of three components. When component B has a ‘follow scheme’ for
component A, and component C has a ‘replication scheme’ for component A, then if component A moves, component B
moves to component A’s destination host because the host satisfies component B’s requirements. Component C, however,
remains at its source and a copy of component C moves to component A’s destination. Each component may change its
activity schemes while running [38]. Some components within an association may be mobile or stationary according to
their surrounding environments or requirements. That is, they can change their scheme according to changes in their
environments or requirements. This is abstracted from the reversible ‘sol to gel to sol transition’ behavior where the motile
cells change their status with increasing temperature.
1 Adenosine 5’-triphosphate (ATP) is a multi-functional nucleotide that is most important as a ‘‘molecular currency’’ of intracellular energy transfer. It
is produced as an energy source during the processes of photosynthesis and consumed by a multitude of cellular processes including motility and cell
division. ATP is also incorporated into the processes of DNA replication and transcription. In signal transduction pathways, ATP is used to produce the
second messenger molecule.
2106 K. Yeom / Mathematical and Computer Modelling 52 (2010) 2097–2117
Fig. 8. (a) Migration with Follow scheme. (b) Migration with Replicate scheme.
Such schemes may be similar to the dynamic layout of distributed applications in [39]. However, our schemes aim at
allowing a component to describe its own migration and association strategy because, in principle, our framework defines
the components as autonomous entities, which migrate from a computing device to other computing devices under their
own control.
Notably, our approach is free of any conflict because each component is allowed to follow its own behavior scheme as
well as exchange its scheme. Each component can have references to other components in the association that it belongs to.
The reference allows components to interact with other components even when the former and latter components reside
at different computers or move to other computers.
While components are executing, they can maintain their own migration scheme by invoking the setScheme method,
which was explained in the previous section. The first argument (CompProfile cref) is a reference to another component.
K. Yeom / Mathematical and Computer Modelling 52 (2010) 2097–2117 2107
The second argument is an instance of the MigScheme class. When a component migrates from its source to its destination,
the component selects and conducts one of the following actions:
Follow Follow
Replicate Replicate
Reproduce Reproduce
Change Change
Stay Stay
Distribute Distribute
Fig. 11. Basic structure for runtime service. Dotted line shows an example of agent migration and dash–dotted line shows the example of the component
copy operation as a result of agent communication.
The host, which executes actions relating to each component or a collection of components (an application) on a platform,
provides a runtime service for executing and migrating components to other computing devices.
Fig. 11 outlines the basic structure of a runtime system which is modified from ORB architecture (refer to [35] for basic
CORBA architecture). Each host establishes at most one TCP/IP connection to each of its neighboring hosts and exchanges
control messages, components, and inter-component communications with the other hosts through the connection. Since
the host is constructed on the Java Virtual Machine, it can disregard differences between the platform architecture of the
source and destination hosts, such as the operating system and hardware specifications.
Core Kernel of Reflection manages the ‘Core Runtime Service (CRS)’, which is responsible for reacting to any changes in
the environments. The Java standard environment only allows for bytecode transformation at load time. At runtime, it is
only possible to dynamically generate new classes from scratch, not modify existing ones. Furthermore, the possibilities of
class reloading are strongly limited since new members cannot be added to classes. However, the proposed framework uses
‘load-time bytecode transformation’ technology in order to be applicable to binary components and in settings where all
classes are not known until they are actually loaded (e.g. open distributed systems).
To make classes dynamic on runtime, we use a methodology for load-time structural reflection introduced by [40]. As
mentioned in Section 4.1, the framework implements a customized class loader from Java. CRS relies on this class loader.
When requested by the virtual machine, the loader forwards the request to a class pool in charge of locating class definitions.
When a class is located and about to be loaded, the class pool can notify a translator which can then modify the class. To this
end, the translator can obtain reification of classes as CtClass objects. CtClass offers the same introspection capabilities
as those of the standard reflection API of Java plus intercession capabilities (e.g. adding/modifying a member, changing the
superclass, altering method bodies).
Component Runtime Service Component Runtime Service handles all the components inside the framework and maintains
the life-cycle state of each component. That is, when the life-cycle state of a component changes (e.g. when agents are created
or migrate to another host) the runtime service changes the energy units of the component. This is because the components
may have limited life-cycles and they can earn/expend energy units by various activities such as the acquiring/releasing of
resources, migration, replication, reproduction, etc.
The framework offers an RDF based CC/PP profile, which is a description of device capabilities and user preferences.
This is often referred to as a device’s delivery context and can be used to guide the adaptation of content presented to that
device (see Fig. 12). For example, a description contains information regarding the properties of a computing device such as
the vendor and model class (PC, PDA, or phone), screen size, number of colors, CPU, memory, input devices, and secondary
storage.
Each host informs the components that exist inside of the host or neighboring hosts about its CC/PP profile. Then each
of the components may autonomously select and migrate to one of the most suitable destinations. In addition, since each
component can count coexisting components with similar types or functionality at the same host, it can leave the host with
high component density.
2110 K. Yeom / Mathematical and Computer Modelling 52 (2010) 2097–2117
Fig. 12. Example of CC/PP profile fragment referencing externally defined defaults [41].
Component Migration Manager manages component migration from one host to another host based on the mobile agent’s
networking mechanism. When a component is transported over a network, the host, which is sending a component, converts
the component’s object/data code into a byte-stream and then transfers these with state information to the destination
(marshalling). Another host, which receives the marshalled byte-stream code, uses a reverse process to restore the byte-
stream back to its original object/data (unmarshalling). The purpose of this networking process is to transfer an object
between hosts.
Our framework uses Java’s object serialization mechanism for marshalling/unmarshalling the components. There are two
critical elements for communicating with remote objects, stubs and skeletons (generic codes). A stub for a remote object
acts as a client’s local representative or proxy for the remote object. The caller invokes a method on the local stub, which is
responsible for carrying out the method call on the remote object. A stub for a remote object implements the same set of
remote interfaces that a remote object implements. When a stub’s method is invoked, it does the following:
1. initiates a connection with the remote JVM containing the remote object,
2. marshals (writes and transmits) the parameters to the remote JVM,
3. waits for the result of the method invocation,
4. unmarshals (reads) the return value or exception returned, and
5. returns the value to the caller.
The stub hides the serialization of parameters and the network-level communication in order to present a simple
invocation mechanism to the caller. Therefore, the framework does not capture stack frames of threads.
In the remote JVM, each remote object may have a corresponding skeleton (in the Java 2 platform it is substituted by
generic code). The skeleton is responsible for dispatching the call to the actual remote object implementation. When a
skeleton receives an incoming method invocation it does the following:
1. unmarshals (reads) the parameters for the remote method,
2. invokes the method on the actual remote object implementation, and
3. marshals (writes and transmits) the result (return value or exception) to the caller.
Each host has a small database to keep the component states. When a component migrates to a different host, the source
host forwards messages to the component. If the components move to other hosts, it forwards messages to these relocated
components, and the destination host updates the databases of other hosts by multicasting control messages.
6. Prototype implementation
In this section, we introduce the base class, migration schemes of components, and coordination strategy.
In this framework, each component is implemented as a collection of Java objects that are defined as subclasses of the
BioComponent
A component executes the movetoDestination(URL url) method to move to the destination host specified by a url. This
action is managed by the source host in the runtime service. The setTimetoLive() specifies the life-cycle, called Time-To-Live
K. Yeom / Mathematical and Computer Modelling 52 (2010) 2097–2117 2111
(TTL), of the component. The life span decrements the TTL value in accordance with time and energy unit expenditure. If the
TTL value becomes zero, the component is automatically removed from the host. The setGID() method binds the component
to the identifier of the association it belongs to.
The component references are critical for tracking moving components and invoking their methods. This framework
provides the APIs for invoking the methods of components on local or remote computers.
Our programming interface for invoking methods is similar to CORBA’s dynamic invocation interface. It does not have to
statically define any stub or skeleton interfaces through a precompiler approach because our target is a dynamic computing
system (see the example invoking procedure):
This example describes the invoking procedure as a component moves from one host to another. The component receives
a reference at the current, which is given when the host is originally created. The reference is compared with the GID of the
host at the new location. Then other components can invoke the methods of the newly attracted component. In addition,
based on ORB’s publish/subscribe concept, our framework allows users to implement the generic remote publish/subscribe
mechanism that enables subscribers to express their requirements or tasks for an event. As a result, components may easily
recognize whether or not they can accomplish their requirements at the current host.
Each component can specify a requirement on its destination host by invoking the setCompProfile() method, which
provides the requirements of a component. The destination host may then recognize which task is requested by an incoming
component by executing the getCompProfile() method. The isSuitableHost() is a method that specifies whether or not a
particular host can satisfy the requirements of the component. Each component may possess a listenAdapter method,
which is a customized listener interface that catches events relating to any changes, issued by a host’s runtime service,
to surrounding environments.
2112 K. Yeom / Mathematical and Computer Modelling 52 (2010) 2097–2117
Table 1
The protocol for message exchange.
Field Value set
Message header
DeliveryMode The same as that specified on the request
Expiration Derived from the request. Decide whether to degrade for processing time.
Priority Copied from the request
CorrelationID Copied from the request MessageID
Destination Copied from the ReplyTo property in the request
Message properties
RequestURI Copied from the requestURI property in the request message
BindingVersion Copied from the bindingVersion property
ContentType Inferred from the Envelope and presence of attachments
Message body
Body Serialized message according to the media type
This section is non-normative and is intended to give an example of how the agent manager communicate with each
other. To communicate with another agent manager, a sender of source host has to set the values of corresponding host
header fields and a receiver has to validates the values set for the respective message header properties. This specification
assumes that the receiver.
class MSTransporter extends Message {
public void MessageTransport(Context ctx,
MessageProducer producer,
Message BioMessage,
String deliveryModeStr,
String replyToName, int priority,
long timeToLive
)
int deliveryMode = deliveryModeStr.equals("PERSISTENT");
Message.setMSDeliveryMode(deliveryMode );
Destination replyDestination = ctx.lookup(replyToName);
Message.setMSReplyTo(replyDestination);
Message.setMSPriority(priority);
producer.setTimeToLive(timeToLive);
producer.send(BioMessage);
}
<Sample partial codes for communication with message procedure>
The protocol for message exchange consists of 3 Conformation Value, Header, Properties, and Body. The header consists
of 5 fields and the Properties has 3 fields. The body has only one field to envelope serialized message. Table 1 is a brief
summary for Message protocol.
7. Experimental results
This section describes some of the initial measurement results regarding the footprint, efficiency, and scalability of the
proposed framework.
In the empirical evaluation of the framework presented in this section, various measurements were obtained involving
varying numbers of agents (1 to 1000 agents) and frameworks (1 to 6 platforms). Three Windows PCs were used in the
empirical evaluation, each running the Java 2 standard edition JVM (version 1.4.2 from Sun Microsystems). These three PCs
were divided into three groups with two multithreads in each group, according to their CPU speed and memory size, as
shown in Table 2. These PCs were connected through 100 Mb/s Ethernet.
In order to measure elapsed time during agent execution in these experiments, we added several time measurement and
data gathering methods using native functions integrated in the components. In all events, when a component is created, the
time is recorded. The two key methods are readCountofCall() and writeIttoCounter(). The first function returns the number
of calls per second by other components, hosts, etc. The second function writes the current counter value.
K. Yeom / Mathematical and Computer Modelling 52 (2010) 2097–2117 2113
Table 2
Configuration of PCs used in simulation.
Group CPU (GHz) Memory (MB)
Table 3
Average bootstrap overhead and memory footprint.
Framework component Overhead (ms) Footprint (kB)
In every experiment, to measure time duration we warmed up the JVM(s) before the experiment by executing
measurement code for a sufficient amount of time. Since Java byte code is generally optimized at runtime, the first several
experiments were discarded. Before each measurement, our framework and measurement code were optimized through
the JVM warm-up process. Then CPU, memory, and other utilizations were measured.
0.8
0.6
cdf
0.4
0.2
0
0 2 4 6 8 10
Number of hops
Fig. 13. Overhead of environment sensing (cytokine sensing) using cytokine emission services. The major overhead occurs when agent accesses cytokine
list which is maintained by agent host. In general, overhead increases linearly as the distance to remote hosts increases.
Table 4
Average overhead to install and initialize a component.
Activity Overhead (ms)
101
100
Time (sec)
10–1
10–2
10–3 0
10 101 102 103 104 105
The number of agents
Fig. 14. Roundtrip time of message between two components on different frameworks. In general, roundtrip time increases as the number of agents
increases because the experiment was set for an agent to communicate with all agents within a network. However, the maximum time required is within
4 ∼ 6 s.
agents) is deployed on another platform. The sender randomly chooses one of the receivers and sends a component
initialization message to the chosen receiver. Then the receiver sends back an acknowledge message to the sender.
Fig. 15 shows that the roundtrip time is comparable with well-known Java-based distributed object platforms (CORBA
ORB and Java IDL), indicating that the networking interface for message transport is implemented efficiently. Fig. 15 also
K. Yeom / Mathematical and Computer Modelling 52 (2010) 2097–2117 2115
107
106
bytes/sec
105
104
103 1
10 102 103 104
The overall throughput
40000
2nd biRNA agent
1st biRNA agent
30000
20000
10000
0
1 51 101 151 201 251 301 351 401 451 501 551 601 651 701 751 801 851 901 951 10011
shows that the roundtrip time remains relatively constant as the number of receiver agents grows up to 10 000, which
indicates scalability.
Fig. 16 shows the throughput of the proposed framework per component. We measured how many interactions were
exchanged, per second, between two agents. As Fig. 16 shows, two components running on different platforms can
send approximately 30 000 messages to each other per second. Note that the overall throughput dramatically decreases
after peaking at the 214 min mark. This decrease is due to the life-cycle management service. All components have a
level of energy units that may increase or decrease due to the frequency of calls from other components and hosts. So
once a framework instance is initiated, only the components which are optimized or fitted to the environment survive.
Consequently, this behavior can increase the consistency of the system and prepare it for service. This throughput result
shows that our framework is consistent and competitive with existing distributed object platforms. We also believe message
transport and the container structure are fairly efficient.
Table 5
Discovery overhead.
Phase in a discovery process Overhead (ms)
Table 6
Migration overhead.
Size Data size (byte) Execution time (seconds) Migration time (seconds)
Level 1 4 8 1 4 8 1 4 8
1 024 49 316 49 732 50 321 0.534 0.548 0.567 0.018 0.018 0.018
2 048 98 168 99 024 99 675 1.725 1.757 1.778 0.041 0.041 0.047
4 096 193 872 197 788 198 376 4.799 4.821 4.997 0.096 0.103 0.104
8 192 391 480 394 916 399 684 11.021 11.534 11.891 0.179 0.192 0.198
16 384 783 696 787 292 788 120 24.185 24.478 24.729 0.327 0.386 0.394
160 100
90
140
80
120
70
100
60
80 50
40
60
30
40
20
20
10
0 0
0:00
0:11
0:22
0:33
0:44
0:55
1:06
1:17
1:28
1:39
1:50
2:01
2:12
2:23
2:34
we prepared two different PCs and deployed two frameworks respectively. Then multiple components, which were
implemented as internet users with different service levels, were dispatched on the first platform and subsequently moved
to the other. Each component implements a simple data read function that processes the GET request message, defined by
HTTP 1.0. A host implements the response to any component request with the same data size. When a component arrives at
another host, it reads the message in their message queue, saves the response data from the host, and returns to the origin
host. Each component maintains five different files whose sizes are 1 MB, 2 MB, 4 MB, 8 MB, and 16 MB.
This paper presented a middleware system comprised of dynamic collections of components on a distributed system.
Since the middleware enabled each component to migrate over a distributed system under its own scheme, the collection
was mobile and able to transform in a self-organizing manner. With biologically inspired principles and mechanisms,
network applications created based on the proposed architecture satisfy the key requirements of future network
applications such as autonomy, scalability, and adaptability. For example, it permits components to follow other moving
components and deploy their clones at different computers, similar to what happens in the locomotion of motile cells.
We designed and implemented a prototype middleware system and demonstrated its effectiveness in several applications.
Empirical evaluation shows that the platform is efficient, scalable, and reusable. In addition, it significantly simplifies the
development of network applications. There are still further issues that need to be resolved. The final goal of this middleware
is to provide a general test bed for various bio-inspired approaches for adaptive distributed systems. Although the current
implementation focuses on the deployment of components, we plan to extend the framework so that it can be used to
modify the behavior of each component during execution. Also, since the current performance is not satisfactory, further
measurements and optimizations are required. In addition, the current migration scheme for partitioned applications may
still be naive. We have studied some higher-level routings for mobile agents in previous papers and are interested in applying
routing approaches to partitioned applications. We plan to develop a monitoring and testing system for components by using
an approach where we test context-aware applications on mobile computers.
References
[1] T.D. Seeley, When is self-organization used in biological systems? Biological Bulletin 202 (9) (2002) 314–318.
[2] N. Minar, M. Gray, O. Roup, R. Krikorian, P. Maes, Hive: distributed agents for networking things, in: ASA/MA’99.
[3] R. Schoonderwoerd, O. Holland, J. Bruten, Ant-like agents for load balancing in telecommunications networks, in: Conference on Autonomous Agents,
vol. 9.
[4] G.D. Caro, M. Dorigo, Antnet—distributed stigmergetic control for communications networks, Journal of Artificial Intelligence Research, 9.
[5] M. Weiser, The computer for the twenty-first century, Scientific American 265 (3) (1991) 94–104.
[6] M. Esler, J. Hightower, T. Anderson, G. Borriello, The future of computing, Scientific American 281 (2) (1999) 52–55.
[7] R. Grimm, J. Davis, E. Lemar, A. Macbeth, et al., Programming for pervasive computing environments, in: Proceedings of ACM Symposium on Operating
Systems Principles.
[8] M.L. Dertouzos, Next century challenges: data-centric networking for invisible computing, in: Proceedings of the 5th ACM/IEEE International
Conference on Mobile Computing and Networking, 1999, pp. 256–262.
[9] Y. Fan, S. Gauch, Autonomous adaptive agents for information gathering, in: Proceedings of AAAI 96, 1996.
[10] M. Roman, H. Ho, R.H. Campbell, Application mobility in active spaces.
[11] B.L. Brumitt, B. Meyers, J. Krumm, A. Kern, S. Shafer, Easyliving—technologies for intelligent environments, in: Proceedings of International Symposium
on Handheld and Ubiquitous Computing, 2000.
[12] I. Satoh, Building reusable mobile agents for network management, IEEE Transactions on Systems, Man and Cybernetics 33 (3).
[13] K.-W. Yeom, et al., A context-aware system in ubiquitous environment—a research guide assistant, in: Proceedings of IEEE International Conference
on CIS/ROI, 2000.
[14] K. Yeom, J. Park, Bio-inspired self-organization architecture for distributed components, in: Proceedings of International Conference on Ultra Modern
Communications, 2009.
[15] O. Babaoglu, H. Meling, A. Montresor, Load-balancing through a swarm of autonomous agents, in: Proceedings of International Workshop on Agents
and Peer-to-Peer Computing, 2002.
[16] J. Suzuki, T. Nakano, K. Fujii, N. Ikeda, T. Suda, Reconfiguration of network applications and middleware systems in the bio-networking architecture,
in: Proceedings of IEEE LARTES, 2002.
[17] M. Wang, T. Suda, The bio-networking architecture: a biologically inspired approach to the design of scalable, adaptive, and survivable/available
network applications, in: Proceedings of the 1st IEEE SAINT Conference, 2001.
[18] N. Minar, M. Gray, O. Roup, R. Krikorian, P. Maes, Hive—distributed agents for networking things, in: International Symposium on Agent Systems and
Applications/International Symposium on Mobile Agents, 1999, pp. 569–571.
[19] N. Minar, R. Burkhart, C. Langton, M. Askenazi, The swarm simulation system, a toolkit for building multi-agent simulations, Technical Report of
Swarm Development Group.
[20] M. Mamei, L. Leonardi, F. Zambonelli, Co-fields—a unifying approach to swarm intelligence, Lecture Notes in Computer Science 2577 (2003).
[21] P. Bellavista, A. Corradi, C. Stefanelli, Mobile agent middleware to support mobile computing, IEEE Computer 32 (3) (2001).
[22] B. Overeinder, E. Osthumus, F. Brazier, Integrating peer-to-peer networking and computing in agentspace framework, in: IEEE International
Conference on Peer-to-Peer Computing, 2002.
[23] J. Kubiatowicz, et al., Oceanstore: an architecture for global-scale persistent storage.
[24] I. Stoica, R. Morris, D. Karger, M.F. Kaashoek, H. Bala-krishnan, Chord: a scalable peer-to-peer lookup service for internet applications.
[25] B. Alberts, D. Bray, A. Johnson, J. Lewis, Essential Cell Biology, 2nd ed., Garland Science, 2003.
[26] K. Abul, H. Andrew, Cellular and Molecular Immunology, 5th ed., Saunders, 2002.
[27] Lodish Berk, K. Matsudaira, et al., Molecular Cell Biology, fifth ed., Garland Science, 2004.
[28] W. Woo, P. Martin, Structures in focus-filopodia, The International Journal of Biochemistry & Cell Biology 34 (7) (2002) 726–730.
[29] A. Montresor, O. Babaoglu, Biology-inspired approaches to peer-to-peer computing in bison, in: International Conference on Intelligent System Design
and Applications, 2003.
[30] MetaMicrobe, D.discoideum. URL: http://www.metamicrobe.com/dicty.
[31] D.M. Davis, Nature reviews immunology 7. URL: http://www.nature.com/nri/journal/v7/n3/full/nri2020.html.
[32] G.M. Cooper, R.E. Hausman, The Cell: A Molecular Approach, ASM Press, 2003.
[33] C. Szyperski (Ed.), Component Software, Addison-Wesley, 1998.
[34] CCA, The common component architecture forum. URL: http://www.cca-forum.org/.
[35] OMG, The corba specification version 3.0, 2006. URL: http://www.w3.org/Mobile/CCPP/.
[36] FIPA, Fipa the foundation for intelligent physical agents. URL: http://www.fipa.org.
[37] P. Maes, Modeling autonomous adaptive agents, Artificial Life.
[38] A. Fuggetta, G.P. Picco, G. Vigna, Understanding code mobility, IEEE Transactions on Software Engineering 24 (5) (1998).
[39] O. Holder, I. Ben-Shaul, H. Gazi, System support for dynamic layout of distributed applications, in: International Conference on Distributed Computing
Systems, 1999.
[40] S. Chiba, Load-time structural reflection in java, in: Lecture Notes in Computer Science, vol. 1850, 2000.
[41] O.M.G. (OMG), Corba specification in java, 2003. URL: http://www.corba.org.