Themes » Aggregate Computing

Aggregate Computing

Short Intro

Aggregate programming provides an alternate approach to the standard device-centered development methodology, aiming to dramatically simplify the design, creation, and maintenance of complex and large scale software systems, specifically in the context of IoT, cyber-physical systems, pervasive computing, robotic swarms, and large-scale situated systems in general. Under this approach, the reference computing machine is no longer the single device, but is instead the aggregate collection of devices that cooperatively carry out a computational process: the details of behaviour, position and number of devices are largely abstracted away, to be replaced with a space-filling computational environment. Hence, with aggregate programming the availability of large, heterogeneous sets of devices becomes less of a concern and more an opportunity to increase the quality (e.g., soundness, stability, efficacy).

Stack of models and technologies

  • Computational fields: maps from devices to values; in our approach "everything is a field"
  • Computational Field Calculus: a tiny language, amenable to formal treatment, describing computations over fields
  • Protelis language: a Java-oriented, Java-enabled programming language to construct aggregate computations based on the computational field calculus
  • Alchemist: a fast simulator, with ability (among the others) of running Protelis, other than importing maps, GPS traces, images and so on 
  • ScaFi: a Scala-based DSL and library for building simulators and systems adopting the Aggregated Computing view


Bibliography (recommendations for readings/citations)


Field Calculus

Aggregate Computing Methodology