1.1 Motivation
The spread of the Internet, mobile communications and the proliferation of new market models, such as e-commerce, have resulted in the whole information infrastructure operating as a global dynamic system. Therefore, contemporary software needs to adapt to ever changing requirements, by providing highly customised services to a huge user population. Furthermore, new software maintenance restrictions have to be observed; for example certain types of software need to run continuously, and hence such software must evolve to meet changing requirements. In a large interconnected system this is a task beyond centralised management techniques. At the other end of the scale, latest technological advances, such as ad hoc sensor networks and MEMs devices, are making it possible to embed millions of smart computing agents into the execution environment. In such cases the system needs to be able to recover from constant failures, replacement of its components and changes in the environment, without human intervention. As a result, it has become clear that dynamic adaptation to changes coupled with autonomous, and in most cases decentralised, reorganisation will play an important role in the future of IT systems.
A way to meet these requirements is implementing and utilising self-organising and emergent functionality (also referred to as behaviour ) in software, namely making use of concepts such as self-organisation, self-regulation, self-repair and self-maintenance. The overall functionality delivered by self-organising software typically changes progressively, mainly in a nonlinear fashion, until it reaches (emerges to) a state where it satisfies the system requirements at the time. Self-organisation is in most cases the result of execution of a number of individual application components that locally interact with each other aiming to achieve their individual goals. Examples of such components are software agents and distributed objects. The main characteristic of such systems is their ability to achieve complex collective tasks with relatively simple individual behaviours, and without central or hierarchical control.
However, in artificial systems, environmental pressures and local interactions and control may lead to unpredicted or undesirable behaviour. Understanding how to engineer the correct self-organisation behaviour is thus an issue of major concern. Among major open issues are how to correctly engineer desirable emergent behaviour in self-organising software and how to avoid undesirable one given the requirements and the application environment. Furthermore, additional issues of great concern include validation, verification, exception handling and finally pilot deployment, testing and maintenance of self-organising software in real-world settings.
To engineer artificial self-organising behaviour, approaches originating from diverse areas such as nonlinear optimisation, knowledge-based programming and constraint problem solving have so far been explored. Furthermore, engineers of self-organising software often take inspiration from self-organising systems found in many areas including biology, chemistry, sociology and the physical world. Examples of such systems are those reproducing socially-based insect behaviour, for example the behaviour shown in ant colonies and bird flocks.
These efforts have resulted in advances made both in terms of the definition and study of the relevant concepts and processes and in applying the respective principles and mechanisms in various problem domains. For example, multi-agent simulations and analytic modelling have been used to study self-organising and emergent behaviour in real systems. On the other hand, approaches based on complexity theory have been extensively applied in the engineering of self-organising agent-based and autonomic software systems suitable for real-world applications. The results achieved so far are quite promising, and the work is continuing with strong motivation. However, most of the findings are scattered at research publications making it difficult for the interested reader to get the complete picture.
1.2 The Book Goal
Our decision to produce this book initiated from the fact that at the time there was no book providing a unified view of self-organisation in a neat way so that to be able to be used by instructors and readers in relevant courses as well as by young researchers seeking an introductory and at the same time a comprehensive discussion of the issues involved. To fill this gap, the decision to produce a textbook was taken.
The book intends to provide an integrated view of the most recent advances in self-organising software with particular emphasis on distributed, agent-based software systems.
In this mission, our efforts were directed along four dimensions:
The self-organisation concepts and principles dimension concerning definitions, background and theoretical deliberation on relevant concepts.
The self-organisation mechanisms dimension concerning the principles governing the interactions among individual entities of a self-organising system.
The engineering techniques dimension concerning how self-organising behaviour can be explicitly modelled, analysed and systematically engineered in software component behaviour.
The application dimension focusing on the types of problems that can be solved via self-organising software and on providing examples of such applications that are currently available.
The book comprises chapters covering all four dimensions by synthesising up-to-date research and latest technologies and applications. The chapters are accompanied with solved examples, unsolved exercises and mini-project descriptions, followed by directions for further work. Therefore, the book is suitable both for advanced undergraduate and postgraduate teaching and for research background reading.