I. Introduction
Self-assembly systems are ubiquitous in nature and can be found at all scales. At the microscopic level, protein folding, lipids membranes, nucleic acid structures and other complex cell entities are well-known biological examples of self-assembly. Molecular crystals such as the crystalline form of table sugar and rock candy or colloids such as milk, butter and asphalt are everyday cases of self-assembly where molecules are kept together by interactive forces. On the other hand, swarms, school fish and solar systems are macroscopic dynamic self-assembly systems. Furthermore, information systems are yet another field where self-assembly appears as it plays an important role in novel software development techniques [1].