Skip to content

Latest commit

 

History

History
140 lines (96 loc) · 4.29 KB

File metadata and controls

140 lines (96 loc) · 4.29 KB
layout home
title Home
order 0
main true
excerpt scafi (Scala with computational Fields) is a field calculus-based DSL and toolkit for Aggregate Programming, providing a support for globally describing and executing self-organising, collective adaptive systems made of a networked set of logical situated devices.

ScaFi Aggregate Programming Toolkit

Introduction

ScaFi (Scala Fields) is a Scala-based library and framework for Aggregate Programming. It implements a variant of the Higher-Order Field Calculus (HOFC) operational semantics, which is made available as a usable domain-specific language (DSL), and provides a platform and API for simulating and executing Aggregate Computing systems and applications.

Learning Resources

Usage

Notes

  • ScaFi >= 0.3.3 cross-compiles for Scala 2.11, 2.12, 2.13.

Steps

  • Add the dependency to scafi in your project, e.g., via sbt (build.sbt):

{% highlight scala %}

val scafiVersion = "{{ site.scafi }}" val scafi_core = "it.unibo.scafi" %% "scafi-core" % scafiVersion val scafi_simulator = "it.unibo.scafi" %% "scafi-simulator" % scafiVersion val scafi_simulator_gui = "it.unibo.scafi" %% "scafi-simulator-gui" % scafiVersion val scafi_platform = "it.unibo.scafi" %% "scafi-distributed" % scafiVersion

libraryDependencies ++= Seq(scafi_core, scafi_simulator_gui, scafi_platform) {% endhighlight %}

or via Gradle (build.gradle.kts):

{% highlight kotlin %} plugins { java scala }

dependencies { val scalaMajor = "2.12" val scafiVersion = "{{ site.scafi }}" implementation("org.scala-lang:scala-library:2.12.14") implementation("it.unibo.scafi:scafi-core_$scalaMajor:$scafiVersion") implementation("it.unibo.scafi:scafi-simulator-gui_$scalaMajor:$scafiVersion") } {% endhighlight %}

  • Use the API (e.g., to set up a simple simulation)

{% highlight scala %} package experiments

import it.unibo.scafi.incarnations.BasicSimulationIncarnation.AggregateProgram

class MyAggregateProgram extends AggregateProgram {

override def main() = gradient(isSource)

def gradient(source: Boolean): Double = rep(Double.PositiveInfinity){ distance => mux(source) { 0.0 } { foldhood(Double.PositiveInfinity)(Math.min)(nbr{distance}+nbrRange) } }

def isSource = senseBoolean def nbrRange = nbrvarDouble }

import it.unibo.scafi.simulation.frontend.{Launcher, Settings}

object SimulationRunner extends Launcher { Settings.Sim_ProgramClass = "experiments.MyAggregateProgram" Settings.ShowConfigPanel = false launch() }

{% endhighlight %}

More information is available in the ScaFi Documentation.

Related tools

People

Main Researchers and Authors

  • Mirko Viroli
  • Roberto Casadei
  • Gianluca Aguzzi

Research Collaborators

  • Danilo Pianini
  • Giorgio Audrito
  • Ferruccio Damiani

References

Contacts

  • roby [dot] casadei [at] unibo.it
  • mirko [dot] viroli [at] unibo.it