I. Introduction
Collective Adaptive Systems (CASs) consist of diverse heterogeneous entities (i.e., computers, services, devices, sensors, humans, networks, etc.) that are autonomous but have to cooperate with each other to accomplish collective tasks [12]. As each entity is autonomous, it is characterized by its own behaviour. To enable a collaboration, it can also expose functionalities to the outside world. As such, while entities preserve individuality, they still can participate in a collaboration. As a rule, the environment in which such system operates, continuously changes, starting from the changes of the context in which entities live, to the availability of new entities (or their exit from the system), to changes in the system requirements and preferences. Dynamic changes might affect the operation of a CAS and they have to be properly handled at run time by adapting system configuration and behaviour of constituent entities. This continuous adaptation becomes the key feature of CASs when it comes to operating in continuously changing environment.