A Free, Open-source Probabilistic Programming Language for Probabilistic Modeling

Developing a new probabilistic model requires developing a representation for the model and a reasoning algorithm that can draw useful conclusions from evidence, which can be challenging tasks. Furthermore, it can be difficult to integrate a probabilistic model into a larger program.

FigaroTM is a probabilistic programming language that helps address both these issues. Figaro makes it possible to express probabilistic models using the power of programming languages, giving the modeler the expressive tools to create all sorts of models. Figaro comes with a number of built-in reasoning algorithms that can be applied automatically to new models. In addition, Figaro models are data structures in the Scala programming language, which is interoperable with Java, and can be constructed, manipulated, and used directly within any Scala or Java program.

Practical Probabilistic Programming

Figaro is extremely expressive. It can represent a wide variety of models, including:

  • Directed and undirected models
  • Models in which conditions and constraints are expressed by arbitrary Scala functions
  • Models involving inter-related objects
  • Open universe models in which the number of objects is unknown
  • Models involving discrete and continuous elements
  • Models in which the elements are rich data structures, such as trees
  • Models with structured decisions
  • Models with unknown parameters

Figaro provides a rich library of constructs to build these models, and provides ways to extend this library to create your own model elements.

Figaro's library of reasoning algorithms is also extensible. Current built-in algorithms include:

  • Exact inference using variable elimination
  • Belief propagation
  • Lazy factored inference for infinite models
  • Importance sampling
  • Metropolis-Hastings, with an expressive language to define proposal distributions
  • Support computation
  • Most probable explanation (MPE) using variable elimination or simulated annealing
  • Probability of evidence using importance sampling
  • Particle Filtering
  • Factored frontier
  • Parameter learning using expectation maximization
  • Gibbs sampling

Figaro provides both regular and anytime reasoning algorithms. In addition to the built-in algorithms, Figaro provides a number of tools to create your own reasoning algorithms.

Figaro can also represent dynamic models and provides a particle filtering algorithm for such models.

More Information

View the Figaro Product Sheet

For download instructions and FAQs, view the Figaro Release Notes.

For Quick Start instructions, view the Quick Start Guide.

For instructions on using Figaro, view the Figaro Tutorial.

Download Figaro

You can download the software any time using the following links:

Figaro 5.0

Windows 64-bit / Scala 2.12:

Linux 64-bit / Scala 2.12:

Windows 64-bit / Scala 2.11:

Linux 64-bit / Scala 2.11:

Note for Ubuntu Linux: Please use a C Shell when running the installer.

 Mac OS X / Scala 2.12:

Mac OS X / Scala 2.11:

The new Figaro installer was built with InstallBuilder, which was generously donated by BitRock in support of our open source project.

Documentation of the Figaro library interface can be found here.


Figaro Work

Figaro Work is a Simple Build Tool (SBT) project that enables Figaro users to quickly start writing their own Figaro programs. Download and unzip the files, and then follow the instructions in the provided README file:

Figaro Work


Previous Versions of Figaro


Windows 64-bit / Scala 2.11:

Linux 64-bit / Scala 2.11:

Note for Ubuntu Linux: Please use a C Shell when running the installer.

Contact Us