SCALAble SimulaTION - ScalaTion

Papers | Scaladoc | Source Code

Welcome to ScalaTion, the Scala-based system for Simulation, Optimization and Analytics.

This system, coded in Scala, supports multi-paradigm simulation modeling including 'tableau', 'event', 'process', 'dynamics', 'dynamics_pde', 'activity' and 'state' oriented models.

Scala is a modern object-oriented, functional programming language that is well-suited for developing simulation engines. It is in the Java family of languages and can call Java code. The inclusion of advanced and functional programming capabilities, makes the code much more concise than Java. ScalaTion also supports optimization and analytics as they nowadays go hand-in-hand with simulation modeling. Some of the algorithms come in both sequential and parallel versions.

The ScalaTion 1.3 version defines multiple .par subpackages that contain parallel versions of sequential algorithms. Future directions include completing the 'scala3d' and 'physics' packages.

As of version 1.3, ScalaTion consists of three subprojects: scalation_mathstat, scalation_modeling and sclation_models.

Please read the LICENSE file (an MIT style license).


Installation Instructions

Requires: Scala 2.12.x and Java 8
Recommended: sbt   (see Setup.html)

1. Download one of the following two files

scalation_1.3.tar.gz
OR
scalation_1.3.zip

2. Untar or unzip the file


$ tar xvfz scalation_1.3.tar.gz 
OR
$ unzip scalation_1.3.zip

3. To compile code or run apps, enter sbt and type compile, run-main or exit


$ cd scalation_1.3 
$ cd scalation_models
$ sbt
> compile
> run-main apps.process.Bank
> run-main scalation.analytics.RegressionTest
> exit

ScalaTion 1.3 is set up to use the Simple Build Tool sbt.

ScalaTion 1.3 uses the following build specification files build.sbt, build.sbt and build.sbt. Source packages are in the src/main/scala directory, class files are in the target/scala-2.12/classes directory, and documentation files are in the target/scala-2.12/api directory. Data file input, output or analytics are stored in subdirectories of data, while database files are stored in store.


To develop using an IDE:

  1. Download Scala IDE for Eclipse
  2. Extract the downloaded .zip/.tar.gz file
  3. Start eclipse by running the eclipse command or clicking eclipse application from the file manager
  4. Create and run HelloWorld.scala, see tutorial

For more information about the source code, see src/README_src.hmtl.


Papers/Documentation

  1. John A. Miller, Jun Han and Maria Hybinette, "Using Domain Specific Languages for Modeling and Simulation: ScalaTion as a Case Study," Proceedings of the 2010 ACM/IEEE Winter Simulation Conference (WSC'10), Baltimore, Maryland (December 2010) pp. 741-752.

  2. Michael E. Cotterell, John A. Miller, Tom Horton, "Unicode in Domain-Specific Programming Languages for Modeling & Simulation: ScalaTion as a Case Study," Arxiv preprint arXiv:1112.175 (December 2011) pp. 1-10.

  3. Michael E. Cotterell, John A. Miller, Jun Han and Tom Horton, "Extending ScalaTion, a Domain-Specific Language for Modeling & Simulation, for Simulation Optimization," Proceedings of the AlaSim International Modeling and Simulation Conference & Exhibition (AlaSim'12), Huntsville, Alabama (May 2012) pp. 1-1.

  4. Yung Long Li, "Evaluation of Parallel Implementations of Dense and Sparse Matrices for the ScalaTion Library," Technical Report, University of Georgia (December 2012) pp. 1-60.

  5. John A. Miller, Michael E. Cotterell and Stephen J. Buckley, "Supporting a Modeling Continuum in ScalaTion: From Predictive Analytics to Simulation Modeling," Proceedings of the 2013 ACM/IEEE Winter Simulation Conference (WSC'13), Washington, DC (December 2013) pp. 1191-1202.

  6. Matthew Saltz, Ayushi Jain, Abhishek Kothari, Arash Fard, John A. Miller, and Lakshmish Ramaswamy, "DualIso: An Algorithm for Subgraph Pattern Matching on Very Large Labeled Graphs," Proceedings of the 3rd IEEE International Congress on Big Data (BigData'14), Anchorage, Alaska (June-July 2014) pp. 498-505.
    Online supplement


Source Packages (doc)

Overall scaladoc generated API for ScalaTion

~/scalation_1.3/target/scala-2.12/api
Package Description
MATH AND STAT
scalation.util A package of utilities needed by the other packages.
- scalation.util.bld A subpackage of for building util implementations.
scalation.scala2d A package supporting 2D graphics based on Java 2D.
scalation.math A package of mathematical objects and operations needed for analytics, simulation and optimization.
scalation.linalgebra A package of implementations for linear algebra (e.g., for vectors and matrices). Vectors and matrices of real (Double), rational and complex numbers are supported.
- scalation.linalgebra.bld A subpackage for building implementations for linear algebra (e.g., for vectors and matrices).
- scalation.linalgebra.gen A subpackage of generic implementations for linear algebra (e.g., for vectors and matrices). Vectors and matrices of types implementing Numeric can be instantiated.
- scalation.linalgebra.mem_mapped A subpackage for memory mapped linear algebra (e.g., for vectors and matrices).
- - scalation.linalgebra.mem_mapped.bld A sub-subpackage for building implementations for memory mapped linear algebra (e.g., for vectors and matrices).
- scalation.linalgebra.par A subpackage of parallel implementations for linear algebra.
scalation.relalgebra A package of implementations for columnar relational algebra.
scalation.plot A package for displaying basic plots and histograms.
scalation.random A package for random numbers and random variates (Normal distribution, etc.)
scalation.stat A package of statistical objects and operations needed for simulation, including implementations for summary statitistics and ANOVA.
MODELING
scalation.model A package defining the general form of a model.
scalation.scala3d A package supporting 3D graphics based on JavaFX 3D (Under development).
scalation.animation A package supplying a general purpose animation engine.
scalation.calculus A package for computing derivatives, gradients and Jacobians.
scalation.minima A package supporting simulation optimization (minimization).
scalation.maxima A package supporting simulation optimization (maximization).
scalation.analytics A package supporting analytics, including regression, time series analysis and clustering.
- scalation.analytics.par A subpackage supporting parallel analytics, including regression, time series analysis and clustering.
- scalation.analytics.classifier A subpackage supporting analytics, including several types of classifier.
-- scalation.analytics.classifier.par A subpackage supporting parallel analytics, including several types of classifier.
scalation.graphalytics A package supporting graph analytics, including shortest path, subgraph isomorphism, etc.
- scalation.graphalytics.mutable A package supporting graph analytics, including shortest path, subgraph isomorphism, etc. using mutable graphs.
scalation.queueingnet A package supporting queueing network models.
scalation.tableau A simulation engine for tableau oriented (spreedsheet like) models.
scalation.event A simulation engine for event oriented models such as Event Scheduling or Event Graphs.
scalation.process A simulation engine for process oriented models such as Process-Interaction Models.
scalation.dynamics A simulation engine for systems dynamics (continuous simulation), which includes general-purpose Ordinary Differential Equation (ODE) solvers.
scalation.dynamics_pde A simulation engine for systems dynamics (continuous simulation), which includes category-specific Partial Differential Equation (PDE) solvers.
scalation.physics A physics engine for simulation based games (Under development).
scalation.activity A simulation engine for activity oriented models such as Petri Nets.
scalation.state A simulation engine for state oriented models such as Markov Chains.
APPLICATIONS
apps.activity Example models for activity oriented models such as Petri Nets.
apps.analytics Example analytics problems.
apps.dynamics Example models for systems dynamics (continuous simulation).
apps.event Example models for event oriented models such as Event Graphs.
apps.game Example simulation-oriented games.
apps.montecarlo Example Monte Carlo simulation.
apps.optimization Example optimization problems.
apps.process Example models for process oriented models such as Process-Interaction Models.
apps.simopt Example simulation optimization problems.
apps.state Example models for state oriented models such as Markov Chains.
apps.tableau Example models for tableau oriented (spreadheet like) models.

Source Packages (src)

Package Description
MATH AND STAT MODULE
scalation.util A package of utilities needed by other packages.
- scalation.util.bld A subpackage of for building util implementations.
scalation.scala2d A package supporting 2D graphics based on Java 2D.
scalation.math A package of mathematical objects and operations needed for analytics, simulation and optimization.
scalation.linalgebra A package of implementations for linear algebra (e.g., for vectors and matrices). Vectors and matrices of real (Double) and complex numbers are supported.
- scalation.linalgebra.bld A subpackage for building implementations for linear algebra (e.g., for vectors and matrices).
- scalation.linalgebra.gen A subpackage of generic implementations for linear algebra (e.g., for vectors and matrices). Vectors and matrices of types implementing Numeric can be instantiated.
- scalation.linalgebra.mem_mapped A subpackage for memory mapped linear algebra (e.g., for vectors and matrices).
- - scalation.linalgebra.mem_mapped.bld A sub-subpackage for building implementations for memory mapped linear algebra (e.g., for vectors and matrices).
- scalation.linalgebra.par A subpackage of parallel implementations for linear algebra.
scalation.relalgebra A package of implementations for columnar relational algebra.
scalation.plot A package for displaying basic plots and histograms.
scalation.random A package for random numbers and random variates (Normal distribution, etc.)
scalation.stat A package of statistical objects and operations needed for simulation, including implementations for summary statitistics and ANOVA.
MODELING MODULE
scalation.model A package defining the general form of a model.
scalation.scala3d A package supporting 3D graphics based on JavaFX 3D (Under development).
scalation.animation A package supplying a general purpose animation engine.
scalation.calculus A package for computing derivatives, gradients and Jacobians.
scalation.minima A package supporting simulation optimization (minimization).
scalation.maxima A package supporting simulation optimization (maximization).
scalation.analytics A package supporting analytics, including regression, time series analysis and clustering.
- scalation.analytics.par A subpackage supporting parallel analytics, including regression, time series analysis and clustering.
- scalation.analytics.classifier A subpackage supporting analytics, including several types of classifiers.
-- scalation.analytics.classifier.par A subpackage supporting parallel analytics, including several types of classifiers.
scalation.graphalytics A package supporting graph analytics, including shotest path, subgraph isomorphism, etc.
- scalation.graphalytics.mutable A package supporting graph analytics, including shotest path, subgraph isomorphism, etc. using mutable graphs.
scalation.queueingnet A package supporting queueing network models.
scalation.tableau A simulation engine for tableau oriented (spreedsheet like) models.
scalation.event A simulation engine for event oriented models such as Event Scheduling or Event Graphs.
scalation.process A simulation engine for process oriented models such as Process-Interaction Models.
scalation.dynamics A simulation engine for systems dynamics (continuous simulation), which includes general-purpose Ordinary Differential Equation (ODE) solvers.
scalation.dynamics_pde A simulation engine for systems dynamics (continuous simulation), which includes category-specific Partial Differential Equation (PDE) solvers.
scalation.physics A physics engine for simulation based games (Under development).
scalation.activity A simulation engine for activity oriented models such as Petri Nets.
scalation.state A simulation engine for state oriented models such as Markov Chains.
APPLICATIONS
apps.activity Example models for activity oriented models such as Petri Nets.
apps.analytics Example analytics problems.
apps.dynamics Example models for systems dynamics (continuous simulation).
apps.event Example models for event oriented models such as Event Graphs.
apps.game Example simulation-oriented games.
apps.montecarlo Example Monte Carlo simulation.
apps.optimization Example optimization problems.
apps.process Example models for process oriented models such as Process-Interaction Models.
apps.simopt Example simulation optimization problems.
apps.state Example models for state oriented models such as Markov Chains.
apps.tableau Example models for tableau oriented (spreadheet like) models.
UNIT TESTS
testing.util Tests for package of utilities needed by other packages.
testing.scala2d Tests for package supporting 2D graphics based on Java 2D.
testing.math Tests for package of mathematical objects and operations needed for analytics, simulation and optimization.
testing.linalgebra Tests for package of implementations for linear algebra (e.g., for vectors and matrices). Vectors and matrices of real (Double) and complex numbers are supported.
testing.relalgebra Tests for package of implementations for columnar relational algebra.
testing.plot Tests for package for displaying basic plots and histograms.
testing.random Tests for package for random numbers and random variates (Normal distribution, etc.)
testing.stat Tests for package of statistical objects and operations needed for simulation, including implementations for summary statitistics and ANOVA.

Code Release Process


$ cd scalation_1.3 
$ cd scalation_mathstat
$ sbt
> compile
> package
> test
> run-main scalation.util.RunSpellCheck 'package-directory'
> run-main scalation.GenIndexHtml
> clean
> doc
> exit
Similarly for scalation_modeling and scalation_models. Currently the .jar files need to be copied (copy_jars.sh) into the lib directory of dependent subprojects.