## 2 Background and Related Work
### Decentralized Self-Adaptation  
A _self-adaptive system_ is one that is equipped with an external feedback loop that tracks the state of the system and its environment and, through adapting it to changes, ensures that a set of goals is achieved, or if necessary, the system is gracefully degraded [35; 36; 37; 38; 39]. In this paper, we are concerned with self-adaptive _software_ systems [40] as well as their deployment, in particular cyber-physical systems. Research on self-adaptive software relates to the field of _autonomic computing_[41]. A self-adaptive (or autonomic) system can be thought as consisting of three main pieces [38]: (i) a _managed system_, which provides the application logic and should be adapted to satisfy its requirements in different circumstances; (ii) an operating _environment_, which is generally characterized by _uncertainty_ in terms of changes that are difficult to predict; and (iii) a _managing system_, (also known as _autonomic manager_[41] or _adaptation engine_[40]), that is responsible for the management of the managed system. A common approach to realize self-adaptation is architecture-based adaptation [42; 37; 43], which leverages architectural models of the system at runtime [44]. The managing system is usually organized around in a feedback loop that realizes four main functions [41]: _Monitoring_, _Analysis_, _Planning_, and _Execution_, that share common _Knowledge_, MAPE-K in short. The work presented in this paper is in particular related to _decentralized self-adaptive systems_, i.e., systems in which there is not a single component responsible for adaptation, but adaptation control is distributed among multiple components [45]. In contrast to a self-organizing system, a decentralized self-adaptive system consists of components that are equipped with feedback loops that interact locally to adapt the underlying components to realize the system goals. Decentralization in control fosters _scalability_ (avoiding bottlenecks), _robustness_ (avoiding single points of failure), and _efficiency through the exploitation of locality_ (avoiding the overhead of non-local interactions). Sometimes, centralized control is simply not an option for a large class of modern distributed systems, because of cost of impact on quality attributes [4; 46]. Despite the high relevance of decentralization of control in self-adaptive systems, existing work remains limited. We highlight a few representative approaches. [PERSON] et al. [47] use an auction-based coordination mechanism to find the appropriate deployment architecture under changing operating conditions. [PERSON] et al. [48] extends MAPE loops with support for inter-loop and intra-loop coordination. [PERSON] and [PERSON] [49] present _EUREMA_ (_ExecUltable RontimE MegAmodels_) that offers support for specifying interacting feedback loops models that then can be directly deployed and interpreted by an interpreter. A related, but formally founded approach is presented in [50]. [PERSON] et al. [51] present _DECIDE_ (_DEcentralized Control In Distributed Self-adaptive software_), an approach to decentralize feedback loops that uses quantitative verification at runtime to assure Quality-of-Service (QoS) requirements in the presence of change. The approach demonstrates better scalability compared to a centralized approach, but only for small component models. [PERSON] and [PERSON] [52] apply self-adaptation in a multi-agent system application for automated guided vehicles. An example of self-adaptive middleware architecture for dynamic service composition is described in [53], and _GoPrime_[54] offers a decentralized middleware for self-assembly of distributed services. A gossip protocol realizes decentralized data dissemination to maintain an assembly of services that fulfils global QoS goals.