<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>An Actor-Based Software Framework for Developing and Simulating Complex Systems</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Agostino Poggi</string-name>
          <email>agostino.poggi@unipr.it</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Dipartimento di Ingegneria dell'Informazione</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Università degli Studi di Parma Parma</institution>
          ,
          <country country="IT">Italy</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>-ASiDE is an actor-based software framework that has the goals of simplifying the development of large and distributed complex systems and of guarantying an efficient execution of applications. This software framework provides a flexible actor implementation that simplifies the writing of the actors by delegating the management of events (i.e., the reception of messages) to the execution environment, and allowing the choice between an active thread solution (i.e., each actor has its own thread) and a passive thread solution (i.e., several actors share the same thread). In particular, the second thread solution is suitable to implement systems whose behavior should be modeled through the use of a large number of actors. ASiDE is currently used for proving its advantages for the development of agent based modeling and simulation tools.</p>
      </abstract>
      <kwd-group>
        <kwd>- Actor model</kwd>
        <kwd>software framework</kwd>
        <kwd>concurrent programming</kwd>
        <kwd>distributed systems</kwd>
        <kwd>ABMS</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>INTRODUCTION</p>
      <p>Computing architectures are getting increasingly
distributed, from multiple cores in one processor and multiple
processors in a computing node, to many computing nodes. It
demands a bigger need for distributed and concurrent
programming because sequential programming models are not
suitable to such kinds of architectures.</p>
      <p>
        Distributed and concurrent programming is hard and is not
like that of sequential programming. Programmers have more
concerns when it comes to taming parallelism. Distributed and
concurrent programs are usually bigger than equivalent
sequential ones. Models of distributed and concurrent
programming languages are different from familiar and popular
sequential languages [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ][
        <xref ref-type="bibr" rid="ref18">18</xref>
        ].
      </p>
      <p>
        Message passing models seems be the more appropriate
given that they can cope with all the problems caused from the
sharing of data among the concurrent parts of a system. One of
the well-known theoretical and practical models of message
passing is the actor model. Using such a model, programs
become collections of independent active objects (actors) that
exchange messages and have no mutable shared state [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ][
        <xref ref-type="bibr" rid="ref2">2</xref>
        ][
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
Actors can help developers to avoid issues such as deadlock,
live-lock and starvation, which are common problems for
shared memory based approaches. There are a multitude of
actor oriented libraries and languages, each of which
implements some variant of actor semantics. However, such
libraries and languages had to choose between to make simple
the writing of the code (by using the thread based programming
model) and to allow the development of efficient large systems
(by using the event based programming model).
      </p>
      <p>
        Simulation models are increasingly being used to solve
problems and to aid in decision-making. The size and
complexity of systems which are usually modeled (e.g.,
communication networks, biological systems, weather
forecasting, manufacturing systems, etc.) is ever increasing.
Modeling and simulation of such systems is challenging in that
it requires suitable and efficient simulation tools that take
advantage of the power of current computing architectures and,
of course, of programming languages and software frameworks
that can exploit such kinds of architecture and that offer the
features useful for the development of such kinds of system. In
particular, agent-based modeling and simulation (ABMS) tools
and techniques seem be the most suitable means to exploit the
power of such computing architectures [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ][
        <xref ref-type="bibr" rid="ref19">19</xref>
        ].
      </p>
      <p>This paper presents an actor based software framework,
called ASiDE (Actor based Simulation and Development
Environment), that has the features for simplifying the
development of large and distributed complex systems and for
guarantying an efficient execution of applications. The next
section introduces related work. Section three describes the
software models that are the basis of the framework. Section
four describes the features of its current implementation.
Section five introduces its initial experimentation for agent
based modeling and simulation. Finally, section six concludes
the paper by discussing its main features and the directions for
future work.</p>
      <p>II.</p>
      <p>Several actor oriented libraries and languages have been
proposed in last decades and a large part of them use Java as
implementation language. A lot of work has also been done in
the field of agent-based modeling and simulation. Moreover,
some works used the actor model for the modeling and
simulation of complex system. The rest of the section presents
some of the most interesting works presented in the previous
three fields.</p>
      <p>
        Salsa [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ] is an actor-based language for mobile and
Internet computing that provides three significant mechanisms
based on actor model: token-passing continuations, join
continuations, and first-class continuations. In Salsa each actor
has its own thread, and so scalability is limited. Moreover,
message passing performance suffers from the overhead of
reflective method calls.
      </p>
      <p>
        Kilim [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ] is a framework used to create robust and
massively concurrent actor systems in Java. It takes advantage
of code annotations and of a byte-code post-processor to
simplify the writing of the code. However, it provides only a
very simplified implementation of an actor model where each
actor (called task in Kilim) has a mailbox and a method
defining its behavior. Moreover, it does not provide remote
messaging capabilities.
      </p>
      <p>
        Scala [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] is an object-oriented and functional programming
language that provides an implementation of the actor model
unifying thread based and event based programming models. In
fact, in Scala an actor can suspend with a full thread stack
(receive) or it can suspend with just a continuation closure
(react). Therefore, scalability can be obtained by sacrificing
code writing simplicity. In particular, Scala has been used for
the development of Scalation [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. Scalation is a domain
specific language which supports multi-paradigm simulation
modeling, including dynamics, activity, event, process and
state oriented models.
      </p>
      <p>
        Jetlang [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] provides a high performance Java threading
library that should be used for message based concurrency. The
library is designed specifically for high performance
inmemory messaging and does not provide remote messaging
capabilities.
      </p>
      <p>
        Swarm is the ancestor of many of the current ABMS
platforms [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. The basic architecture of Swarm is the
simulation of collections of concurrently interacting agents,
and this paradigm is extended into the coding, including agent
inspector actions as part of the set of agents. So in order to
inspect one agent on the display, you must use another hidden,
non-interacting agent. Swarm is a stable platform, and seems
particularly suited to hierarchical models. Moreover, it supports
good mechanisms for structure formation through the use of
multi-level feedback between agents, groups of agents, and the
environment (all treated as agents).
      </p>
      <p>
        Repast is a well-established ABMS platform with many
advanced features [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]. It started as a Java implementation of
the Swarm toolkit, but rapidly expanded to provide a very full
featured toolkit for ABMS. Although full use of the toolkit
requires Java programming skills, the facilities of the last
implementations allow the development of simple models with
little programming experience [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ].
      </p>
      <p>
        MASON is a Java ABMS tool designed to be flexible
enough to be used for a wide range of simulations, but with a
special emphasis on “swarm” simulations of a very many (up
to millions of) agents [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. MASON is based on a fast,
orthogonal, software library to which an experienced Java
programmer can easily add features for developing and
simulating models in specific domains.
      </p>
      <p>
        The Adaptive Actor Architecture [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] is an actor-based
software infrastructure designed to support the construction of
large-scale multi-agent applications by exploiting distributed
actor
actor space
connections
computing techniques to efficiently distribute agents across a
distributed network of computers. This software infrastructure
uses several optimizing techniques to address three
fundamental problems related to agent communication between
nodes: agent distribution, service agent discovery and message
passing for mobile agents.
      </p>
      <p>
        An actor based infrastructure for distributing RePast
models [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] is proposed in [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. This solution allows, with
minimal changes, to address very large and reconfigurable
models whose computational needs (in space and time) can be
difficult to satisfy on a single machine. Novel in the approach
is an exploitation of a lean actor infrastructure implemented in
Java. In particular, actors bring to RePast agents migration,
location-transparent naming, efficient communication, and a
control-centric framework.
      </p>
      <p>
        Statechart actors [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] are an implementation of the actor
computational model that can be used for building a
multiagent architecture suitable for the distributed simulation of
discrete event systems whose entities have a complex dynamic
behavior. Complexity is dealt with by specifying the behavior
of actors through “distilled” statecharts [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. Distribution is
supported by the theatre architecture [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. This architecture
allows the decomposition of a large system into sub-systems
(theatres) each hosting a collection of application actors,
allocated for execution on to a physical processor.
      </p>
      <p>III.</p>
    </sec>
    <sec id="sec-2">
      <title>ASIDE</title>
      <p>ASiDE (Actor based Simulation and Development
Environment), is an actor based software framework that has
the goals of simplifying the development of large and
distributed complex systems and of guarantying an efficient
execution of applications. This software framework provides a
flexible actor implementation that simplifies the writing of the
actors by allowing the choice between an active thread solution
(i.e., each actor has its own thread) and a passive thread
solution (i.e., several actors share the same thread), and by
delegating the management of events (i.e., the reception of
messages) to the execution environment on the basis of the
current thread solution (i.e., actors execution is simply blocked
for waiting for messages when the active thread solution is
used, actors execution is scheduled only when they receive new
messages when the passive thread solution is used.</p>
      <sec id="sec-2-1">
        <title>A. Actors</title>
        <p>In ASiDE a system is based on a set of interacting actors
that perform tasks concurrently.</p>
        <p>An actor is an autonomous concurrent object which
interacts with other actors by exchanging asynchronous
messages. Communication between actors is buffered:
incoming messages are stored in a mailbox until the actor is
ready to process them.</p>
        <p>Each actor has a unique mail address which is used to
specify a target for communication. After its creation, an actor
can change several times its behavior until it kills itself. Each
behavior has the main duty of processing a set of specific
messages. Therefore, if an unexpected message arrives, then it
is maintained in the actor mailbox until a next behavior will be
able to process it.</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>An actor can perform five types of action:</title>
    </sec>
    <sec id="sec-4">
      <title>It can send messages to other actors or to itself. It can create new actors. It can update its local state. It can change its behavior.</title>
      <p>It can kill itself.
such a timeout: its implementation will autonomously observe
the firing of the timeout and then will execute the actions for its
management.</p>
      <sec id="sec-4-1">
        <title>B. Actor Spaces</title>
        <p>Depending on the complexity of the system and on the
availability of computing and communication resources, actors
can be aggregated in one or more actor spaces. Figure 1 shows
a graphical representation of the architecture of an ASiDE
system.</p>
        <p>An actor space is a concurrent object that acts as container
of a set of actors. In particular, an actor space supports a
transparent communication between local actors and remote
actors (i.e., the actors of the other actor spaces) and enhances
their functionalities through a set of services (e.g., the
broadcasting of messages to local actors and the migration of
local actors to other actor spaces).</p>
        <p>Actors can require the execution of such services by
sending a message to an actor space. Therefore, even an actor
space has a unique name (address) and a mailbox. Moreover,
local actors know a priori the address of their actor space and
remote actors can receive the address of the other actor spaces
of a system through some messages.</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>IV. IMPLEMENTATION</title>
      <p>ASiDE is implemented by using the Java language and
takes advantage of preexistent Java software libraries and
solutions for supporting concurrency and distribution.</p>
      <p>The architecture of an ASiDE application can be divided in
an application and a runtime layer. The application layer is
represented by the specific actors and actor spaces of the
application. The runtime layer implements the ASiDE
middleware infrastructures to support the development of
applications based on several actors distributed on a set of
different actor spaces.</p>
      <p>The current implementation, besides building the
components of the runtime layer, provides some components
(i.e., interfaces, concrete and abstract classes) to simplify the
development of the actors of an application.</p>
      <p>The design of the software has been planned with the goal
of guaranteeing an easy development of several
implementations of the components of the runtime layer that
take advantages of different technologies and algorithms
without the need of modifications to the application layer (i.e.,
the code of the actors). This feature is important for enabling
the use of different solutions for the management of the
execution of the actors running inside the same actor space, but
also for supporting the communication among actors of
different actor spaces.</p>
      <p>An actor is composed of two main parts: a plugger and a
behavior. A plugger is a component of the runtime layer that
provides the main functionalities of an actor (i.e., the threading
solution, the way in which it is executed and the
implementation of its actions). A behavior is a component of
the application layer that defines the actions that an actor will
perform during a specific part of its life. Therefore, the
An actor has not direct access to the local state of another
actor and can exchange data with another actor only when it
creates a new actor or when it sends a message. However, it is
its implementation that will (or will not) guarantee that actor
creation and message passing actions do not allow the sharing
of mutable data.</p>
      <p>An actor can send messages only to the actors of which it
knows the address, that is, the actors it created and the actors of
which it received their addresses through a message. An actor
can send messages that require or not an answer and that are
replies to the messages of other actors. In particular, an actor
can perform four different actions for sending messages:
It can send a message to another actor without requiring an
answer.</p>
      <p>It can send a message to another actor requiring an answer.
It can reply to a message of another actor without requiring
an answer.</p>
      <p>It can reply to a message of another actor requiring an
answer.</p>
      <p>An actor has not explicit actions for the reception of
messages, but its implementation will autonomously manage
the reception of messages and then will execute the actions for
their processing.</p>
      <p>An actor has the possibility of setting and then modifying a
timeout within its current behavior must receive a message.
However, it has not explicit actions for managing the firing of
input/ouput
messages
development of an application involves, besides the
deployment of the actors in different actor spaces, the
configuration of the pluggers used in the application and the
development of the code of the behaviors used by the actors of
the application. Figure 2 shows a graphical representation of
the architecture of an actor.</p>
      <p>In ASiDE, an actor is defined by extending the Actor
abstract class and by implementing the methods driving its
behavior. In particular, this kind of implementation implies that
when an actor moves from a behavior to another one, an actor
object is replaced by another one. Of course, the sequence of
actor objects that drive the life of an actor share the same
address and mailbox objects. To do it, ASiDE implements the
creation of actors through a factory that creates a plugger
(containing the address and the mailbox of the actor) and
passes it to the actor constructor, and implements the change of
behavior through the actor plugger that passes its reference to
the constructor of the next actor.</p>
      <p>Field name
Identifier
Sender
Receiver
Content
Time
NeededReply
InReplyTo</p>
      <p>The original actor model associates a behavior with the task
of messages processing. In ASiDE, a behavior can perform
three kinds of tasks: an initialization task, the management of
message reception timeouts, and the processing of messages.
Initialization is performed by the initialize method and
timeouts management is performed by the getTimeout,
setTimeout and timeout methods. In particular, the initialize
and timeout methods can be overridden for defining specific
behaviors.</p>
      <p>The processing of messages is performed by some case
objects. A case has the goal of processing the messages that
match a specific (and fixed) message pattern. In ASiDE, a case
is defined by extending the ActorCase abstract class and by
implementing its process method. The code of the methods that
drive the behavior of an actor (i.e., initialize, timeout and
process) is built on a set of methods that implement the actions
for sending messages, for creating other actors, for changing
the behavior and for killing itself. Of course, the updating of
the local state can obtained through the use of either the simple
operators of the Java language or through the methods
implementing the actor actions.</p>
      <p>A plugger acts as interface between an actor and the
runtime layer and provides the implementation of the actions
that an actor can perform. ASiDE provides different
configurable implementations of a plugger. Therefore, the use
of the possible different implementations and configurations of
a plugger allow providing different behaviors and
performances for the same application. In particular, the
current plugger implementations and configurations allow: i) to
have two different thread solutions (i.e., actor of an actor space
either have their own thread or share a single thread), ii) to
enable the logging of the main actor activities (e.g., the sending
of messages and the processing of messages and timeouts), iii)
to impose the exchange of only immutable objects between
actors, and iv) to use different scheduling algorithms in the
case that actors share a single thread.</p>
      <p>A message is an object that contains a set of fields
maintaining the typical header information and a field
maintaining the exchanged data. TABLE 1 introduces a short
description of the field of a message.</p>
      <p>Constraint name
All(c, O)
And(C, o)
IsDifferent(o1, o2)
IsEqual(o1, o2)
IsHigher(o1, o2)
IsInstance(t, o)
IsLower(o1, o2)
IsNull(o)
IsOneOf(O, o)
Matches(p, o)
Not(c, o)
Or(C, o)
Some(c, O)</p>
      <p>As introduced above, an actor processes the received
messages through a set of case objects and each of them can
process only the messages that match a specific message
pattern. In ASiDE, a message pattern is an object of the
MessagePattern class that can apply constraints on the value of
all the fields of a message. A constraint is also an object of one
of a predefined set of classes that implement the Constraint
interface. TABLE 2 introduces a short description of the
possible constraints.</p>
      <p>This kind of representation of a message pattern allows a
very sophisticate filtering of messages. Moreover, the use of
input messages
output messages
mailbox</p>
      <p>Services
the Matches constraint allows a specialization of the filtering
for all the message fields and in particular for the content of the
message. The current implementation of ASiDE provides an
additional pattern, implemented by the RegularExpression
class. This pattern allows the filtering of the messages by
matching the string representation of the value of a field with a
specific regular expression.</p>
      <p>New types of pattern and constraint can be added. Of
course, it requires working at the application and runtime
layers. At the application layer, it is necessary to develop the
classes representing such patterns and/or constraints. At the
runtime layer, it is necessary to develop the software
components able to uses such patterns and/or constraints for
filtering messages.</p>
      <p>An actor space is a component of the runtime layer that, as
introduced, above, has the duty of both supporting the
communication between local actors and remote actors and to
provides them a set of services. Figure 3 shows a graphical
representation of the architecture of an actor space.</p>
      <p>The implementation of the actor space allows the
deployment of a system with different communication
technologies and with different set of services. However, while
all the actor spaces of a system need to use the same
communication technology; anyone of them can provide a
different set of the services. In fact, services are divided in
mandatory and optional, and an actor space must provide all
the mandatory services and can choose what of the others to
provide. New kinds of service can be added. Of course, it
requires working at the application and runtime layers. At the
application layer, it is necessary to develop the classes
representing the service requests that actors need to send to the
actor spaces. At the runtime layer, it is necessary to develop the
software components able to perform the services.</p>
      <p>The current implementation of ASiDE allows building both
standalone and distributed applications and associated an actor
space with a Java virtual machine. A standalone application is
based on a single actor space created with an initial agent that
will start the application execution. A distributed application is
based on more than one actor space. Each actor space can have
an initial agent, but usually a distributed application start with a
set of empty actor spaces and an “initiator” actor space with an
initial actor that also starts one or more actors on the other
actor spaces.</p>
      <p>The performances of an application, its behavior and the
possibility of monitoring and debugging its execution depend
on its configuration. In fact, the configuration step allows the
choice of:</p>
      <p>The threading solution for each actor space: active, actors
have their own thread, or passive, actors share a single
thread.</p>
      <p>The algorithm used for scheduling the actors of each actor
space (in the case of passive threading solution).</p>
      <p>The services provided by each actor space.</p>
      <p>The communication technology used for connecting the
actor spaces of the application.</p>
      <p>The activities of the actor and actor spaces that must be
logged.</p>
      <p>The choice that mainly determinates the performances of an
application is the threading solution. In fact, while with the
active threading solution each actor of an actor space is
executed in a distinct Java thread, with the passive thread
solution all the actors of an actor space share a single Java
thread and their execution is managed through a scheduler. The
choice of the threading solution may influence the behavior of
the application. In fact, using the active threading solution,
different executions of the application can have different
behaviors because of the different arrival order of messages (of
course, if the application is started with the same initialization
information). Using the passive threading solution, the simplest
scheduling algorithms guarantee the same arrival order of
messages for different execution of the application.</p>
      <p>The features of the actor model and the flexibility of its
implementation make ASiDE suitable for building agent based
modeling and simulation tools. In fact, the use of passive actors
allows the development of applications involving large number
of actors, and the possibility of using different schedulers for
their execution allows the development of schedulers that are
specialized for some specific application domains.</p>
      <p>
        The first experimentation of ASiDE for modeling and
simulating systems has been dedicated to the well-known game
of life [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. The model of such a game is based on a grid of
LifeCell actors that have been created by a Creator actor and
initialized by a set of Initializer actors that send them the
acquaintance (i.e., the address) of the neighbors actors The
behavior of the LifeCell actor is very simple given that it cycles
on the following three tasks:
      </p>
    </sec>
    <sec id="sec-6">
      <title>Get messages from neighbors.</title>
      <p>Compute the new state.</p>
      <p>Send messages to neighbors.</p>
      <p>The implementation of the actor involves the
implementation of the initialize and timeout methods and the
creation of a case for processing of the messages coming from
the neighbors. In particular, while the initialize method sets the
initial state of the cell, the timeout method computes the new
state and then send a message to the neighbor. Finally, the
process method of the case of the actor needs only to count the
messages notifying that a neighbor is living.</p>
      <p>This experimentation gave the opportunity to make some
measures of the performance of the ASiDE software for
developing simulations involving different numbers of actors.
TABLE 3 presents the execution times of two simulations of
the “game of life” having a length of respectively a hundred
and a thousand of cycles and involving from few hundreds to
more than a million of actors. These results were obtained on a
laptop with an Intel Core 2 - 2.80GHz processor, 8 GB RAM,
Windows 7 OS and Java 7 with 4 GB heap size. Moreover, all
the performed experimentations showed that the use of the
passive threading solution provides better performances than
the active one even with a few number of actors.</p>
      <p>Actors number</p>
      <p>256
1.024
4.096
16.384
65.536
262.144
1.048.576</p>
      <p>This paper presented a software framework, called ASiDE,
which uses the most natural programming model for writing
actors code (i.e., the thread based model), but allows also the
development of efficient large systems by combining the
sharing of threads among the actors of the systems with the
delegation of the management of the reception of messages to
the execution environment.</p>
      <p>ASiDE is implemented by using the Java language and its
use can simplify the development of systems in heterogeneous
environments where computers, mobile and sensor devices
must cooperate for the execution of tasks.</p>
      <p>We are using the ASiDE software framework for the
development of some applications in the fields of distributed
information sharing, social networks and ABMS. A first
analysis of the experimentation shows that each computing
node (actor space) can efficiently run more than a million of
actors and the work of a system can be distributed on several
computational nodes with a limited overhead in a local
network.</p>
      <p>Future research activities will be dedicated, besides to
continue the experimentation and validation of the software
framework in the distributed information sharing and for using
ABMS in the field of social networks modeling and analysis,
and to the improvement and the extension of the software
framework. In particular, current activities are dedicated to: i)
allow the mobility of actors between different actor spaces, ii)
provide a passive threading solution that fully take advantage
of the feature of multi-core processors, iii) to define a set of
actors schedulers and supporting tools for performing
simulations and the analysis of the results of the simulations in
some specific application domains, iv) to improve the
scalability of simulations on the number of actors through the
definition of distributed actors schedulers, and v) provide a set
of actor space services to simplify the coordination among the
actors of a system (e.g., group communication protocols) and
to enable the interoperability with Web services and legacy
systems.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>G.A.</given-names>
            <surname>Agha</surname>
          </string-name>
          ,
          <article-title>Actors: A Model of Concurrent Computation in Distributed Systems</article-title>
          . MIT Press, Cambridge, MA,
          <year>1986</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>G.A.</given-names>
            <surname>Agha</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.A.</given-names>
            <surname>Mason</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.F.</given-names>
            <surname>Smith</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.L.</given-names>
            <surname>Talcott</surname>
          </string-name>
          ,
          <article-title>A Foundation for Actor Computation</article-title>
          .
          <source>Journal of Functional Programming</source>
          ,
          <volume>7</volume>
          (
          <issue>1</issue>
          ):
          <fpage>1</fpage>
          -
          <lpage>69</lpage>
          ,
          <year>1997</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>F.</given-names>
            <surname>Cicirelli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Furfaro</surname>
          </string-name>
          , and
          <string-name>
            <given-names>L.</given-names>
            <surname>Nigro</surname>
          </string-name>
          . “
          <article-title>Exploiting agents for modelling and simulation of coverage control protocols in large sensor networks”</article-title>
          .
          <source>The Journal of Systems and Software</source>
          ,
          <volume>80</volume>
          (
          <issue>11</issue>
          ):
          <fpage>1817</fpage>
          -
          <lpage>1832</lpage>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>F.</given-names>
            <surname>Cincirelli</surname>
          </string-name>
          ,
          <article-title>Distributing ResPast simulations using actors</article-title>
          .
          <source>in: Proc. of 23rd European Conference on Modelling and Simulation (ECMS'09)</source>
          ,
          <fpage>9</fpage>
          -
          <lpage>12</lpage>
          June, Madrid,
          <year>2009</year>
          , pp.
          <fpage>226</fpage>
          -
          <lpage>231</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>F.</given-names>
            <surname>Cincirelli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Furfaro</surname>
          </string-name>
          and
          <string-name>
            <given-names>L.</given-names>
            <surname>Nigro</surname>
          </string-name>
          .
          <source>Modeling and Simulation of Complex Manufacturing Systems using Statechart-based Actors. Simulation Modelling Practice and Theory</source>
          , Volume
          <volume>19</volume>
          ,
          <string-name>
            <surname>Issue</surname>
            <given-names>2</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pages</surname>
            <given-names>685</given-names>
          </string-name>
          <source>-703</source>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>M.</given-names>
            <surname>Gardner</surname>
          </string-name>
          ,
          <article-title>The fantastic combinations of John Conway's new solitaire game Life</article-title>
          .
          <source>Scientific American</source>
          <volume>223</volume>
          :
          <fpage>120</fpage>
          -
          <lpage>123</lpage>
          ,
          <year>1970</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>P.</given-names>
            <surname>Haller</surname>
          </string-name>
          and
          <string-name>
            <given-names>M.</given-names>
            <surname>Odersky</surname>
          </string-name>
          , Scala Actors:
          <article-title>Unifying thread-based and event-based programming</article-title>
          .
          <source>Theoretical Computer Science</source>
          ,
          <volume>410</volume>
          (
          <issue>2- 3</issue>
          ):
          <fpage>202</fpage>
          -
          <lpage>220</lpage>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>D.</given-names>
            <surname>Harel</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Naamad</surname>
          </string-name>
          .
          <source>The STATEMATE semantics of Statecharts. ACM Trans. on Soft. Eng. And Methodology (TOSEM)</source>
          ,
          <volume>5</volume>
          (
          <issue>4</issue>
          ):
          <fpage>293</fpage>
          -
          <lpage>333</lpage>
          .
          <year>1996</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>C.E.</given-names>
            <surname>Hewitt</surname>
          </string-name>
          ,
          <article-title>Viewing controll structures as patterns of passing messages</article-title>
          .
          <source>Artificial Intelligence</source>
          ,
          <volume>8</volume>
          (
          <issue>3</issue>
          ):
          <fpage>323</fpage>
          -
          <lpage>364</lpage>
          ,
          <year>1977</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>M.</given-names>
            <surname>Jang</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Gul</given-names>
            <surname>Agha</surname>
          </string-name>
          ,
          <article-title>"Scalable Agent Distribution Mechanisms for Large-Scale UAV Simulations,"</article-title>
          <source>Proc. Int</source>
          . Conf.
          <article-title>of Integration of Knowledge Intensive Multi-Agent Systems</article-title>
          , Waltham, MA,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>C.</surname>
          </string-name>
          <article-title>Leopold, Parallel and Distributed Computing: A Survey of Models, Paradigms and Approaches</article-title>
          . John Wiley &amp; Sons, Inc., New York, NY,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>S.</given-names>
            <surname>Luke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Cioffi-Revilla</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Panait</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Sullivan</surname>
          </string-name>
          , and G. Balan,
          <source>MASON: A Multiagent Simulation Environment. Simulation</source>
          <volume>81</volume>
          ,
          <issue>7</issue>
          ,
          <year>2005</year>
          ,
          <fpage>517</fpage>
          -
          <lpage>527</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>C.M. Macal</surname>
            and
            <given-names>M.J. North,</given-names>
          </string-name>
          <article-title>Tutorial on agent-based modelling and simulation</article-title>
          ,
          <source>Journal of Simulation</source>
          (
          <year>2010</year>
          )
          <volume>4</volume>
          ,
          <fpage>151</fpage>
          -
          <lpage>162</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>J.A.</given-names>
            <surname>Miller</surname>
          </string-name>
          , J. Han, and
          <string-name>
            <given-names>M.</given-names>
            <surname>Hybinette</surname>
          </string-name>
          , “
          <article-title>Using Domain Specific Language for Modeling and Simulation: ScalaTion as a Case Study,"</article-title>
          <source>In Proc. of the 2010 Winter Simulation Conference</source>
          , pp.
          <fpage>741</fpage>
          -
          <lpage>752</lpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>N.</given-names>
            <surname>Minar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Burckhart</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Langton</surname>
          </string-name>
          , and
          <string-name>
            <given-names>V.</given-names>
            <surname>Askenasi</surname>
          </string-name>
          ,
          <article-title>The Swarm Simulation System: a Toolkit for Building Multi-Agent Systems</article-title>
          .
          <year>1996</year>
          . Available from http://www.swarm.org/
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <surname>M. J. North</surname>
            ,
            <given-names>T. R.</given-names>
          </string-name>
          <string-name>
            <surname>Howe</surname>
            ,
            <given-names>N. T.</given-names>
          </string-name>
          <string-name>
            <surname>Collier</surname>
            , and
            <given-names>J. R.</given-names>
          </string-name>
          <string-name>
            <surname>Vos</surname>
          </string-name>
          .
          <article-title>The repast simphony runtime system</article-title>
          .
          <source>In Proceedings of the Agent 2005 Conference on Generative Social Processes, Models, and Mechanisms</source>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>M.</given-names>
            <surname>North</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Collier</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Vos</surname>
          </string-name>
          .
          <article-title>Experiences in creating three implementations of the repast agent modeling toolkit</article-title>
          ,
          <source>ACM Transactions on Modeling and Computer Simulation</source>
          ,
          <volume>16</volume>
          (
          <issue>1</issue>
          ):
          <fpage>1</fpage>
          -
          <lpage>25</lpage>
          .
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>M.</given-names>
            <surname>Philippsen</surname>
          </string-name>
          ,
          <article-title>A survey of concurrent object-oriented languages</article-title>
          .
          <source>Concurrency: Practice and Experience</source>
          ,
          <volume>12</volume>
          (
          <issue>10</issue>
          ):
          <fpage>917</fpage>
          -
          <lpage>980</lpage>
          ,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>S.F.</given-names>
            <surname>Railsback</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.L.</given-names>
            <surname>Lytinen</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.K.</given-names>
            <surname>Jackson</surname>
          </string-name>
          .
          <article-title>Agent-based simulation platforms: Review and development recommendations</article-title>
          .
          <source>Simulation</source>
          ,
          <volume>82</volume>
          (
          <issue>9</issue>
          ):
          <fpage>609</fpage>
          -
          <lpage>623</lpage>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>M.</given-names>
            <surname>Rettig</surname>
          </string-name>
          ,
          <article-title>Jetlang software Web site</article-title>
          . Available from http://code.google.com/p/jetlang/.
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>S.</given-names>
            <surname>Srinivasan</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Mycroft</surname>
          </string-name>
          , Kilim:
          <article-title>Isolation-Typed Actors for Java</article-title>
          . In J. Vitek ed. ECOOP 2008
          <string-name>
            <surname>- Object-Oriented</surname>
            <given-names>Programming</given-names>
          </string-name>
          , LNCS,
          <volume>5142</volume>
          , pp.
          <fpage>104</fpage>
          -
          <lpage>128</lpage>
          , Springer, Berlin ,Germany,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>C.</given-names>
            <surname>Varela</surname>
          </string-name>
          and
          <string-name>
            <given-names>G.A.</given-names>
            <surname>Agha</surname>
          </string-name>
          ,
          <article-title>Programming dynamically reconfigurable open systems with SALSA</article-title>
          .
          <source>SIGPLAN Notices</source>
          ,
          <volume>36</volume>
          (
          <issue>12</issue>
          ):
          <fpage>20</fpage>
          -
          <lpage>34</lpage>
          ,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>