  Modern distributed software systems often operate in dynamic environments in
which operation conditions change continuously and subsystems may come and go
at will, e.g. intelligent traffic management and multi-robot systems. To manage
these dynamics, these systems have to self-adapt their structures and behaviors
dynamically. While we have witnessed significant progress over the past decade
in the manner in which such systems are designed, persistent challenges remain.
In particular, dealing with distribution and decentralized control remains one
of the major challenges in self-adaptive systems. This report presents an
architecture style that supports software architects with designing
architectures for a family of decentralized self-adaptive systems. The
architecture style structures the software in a number of interacting
autonomous entities (agents) that cooperatively realize the system tasks.
Multi-agent systems derived from the architectural style realize flexibility
(agents adapt their behavior and interactions to variable operating conditions)
and openness (agents cope autonomously with other agents that enter and leave
the system). The architectural style consists of five related patterns that
distill domain-specific architectural knowledge derived from extensive
experiences with developing various multi-agent systems. The architectural
patterns are specified using pi-ADL, a formal architectural description
language supporting specification of dynamic architectures. This specification
provides architects with a rigorous description of the architecture elements of
the patterns, their interactions and behavior. We illustrate how we have
applied the architectural style with excerpts of two cases from our practice:
an experimental system for anticipatory traffic routing and an industrial
logistic system for automated transportation in warehouse environments.
