A new paradigm in computing is to take many simple autonomous objects or agents and let them jointly perform a complex task, without having the need for centralized control. In this paradigm, these simple objects interact locally with their environment using simple rules. An important inspiration for this model is nature itself, where many such systems can be found. Applications include optimization algorithms, communications networks, scheduling and decision making, supply-chain management, and robotics.