Probabilistic programming: Difference between revisions

Content deleted Content added
No edit summary
Tags: references removed Visual edit: Switched
separate list of ppls into another wiki page
Tag: section blanking
Line 17:
PPLs consists of two parts: a frontend ___domain specific language for specifying probabilistic models, and a backend inference engine implementing common inference algorithms. Specifically, the frontend implementations often extend from a basic language. The choice of underlying basic language depends on the similarity of the model to the basic language's [[Ontology (information science)|ontology]], as well as commercial considerations and personal preference. For instance, Dimple<ref name="DMPL"/> and Chimple<ref name="CHMPL"/> are based on [[Java (programming language)|Java]], [[Infer.NET]] is based on [[.NET framework|.NET]],<ref name="INFET"/> while PRISM extends from [[Prolog]].<ref name="PRISM"/> However, some PPLs such as [[WinBUGS]] and [[Stan (software)|Stan]] offer a self-contained language, with no obvious origin in another language.<ref name="BUGS"/><ref name="Stan"/> The choice of backend inference algorithms can often be categorised into gradient-based inference (e.g. Hamiltonian Monte Carlo), simulation-based inference (e.g. Approximate Bayesian Computation, Sequential Monte Carlo), and graph-based inference (e.g. Gibbs sampling in [[WinBUGS]], Message Passing).
 
=== List of probabilistic programming languages ===
{{Overly detailed|date=October 2019}}
 
{| class="wikitable sortable"
|-
! Name !! Extends from !! Host language
|-
| [[Analytica (software)|Analytica]]<ref name="Analytica"/> || || C++
|-
| bayesloop<ref name="bayesloop"/><ref name="bayesloop2"/> || Python || Python
|-
| CuPPL<ref name = "CuPPL"/> || NOVA<ref name="nova"/> ||
|-
| Venture<ref name="Venture"/> || [[Scheme (programming language)|Scheme]] || C++
|-
| Probabilistic-C<ref name="Probabilistic-C"/> || [[C (programming language)|C]] || C
|-
| Anglican<ref name="Anglican"/> || [[Clojure]] || Clojure
|-
| IBAL<ref name="IBAL"/> || [[OCaml]] ||
|-
| BayesDB<ref name="BAYESDB"/> || [[SQLite]], [[Python (programming language)|Python]] ||
|-
| PRISM<ref name="PRISM"/> || [[B-Prolog]] ||
|-
| Infer.NET<ref name="INFET"/> || .NET Framework || .NET Framework
|-
| dimple<ref name="DMPL"/> || [[MATLAB]], [[Java (programming language)|Java]] ||
|-
| chimple<ref name="CHMPL"/> || MATLAB, Java ||
|-
| BLOG<ref name="BLOG"/> || Java ||
|-
| delSAT<ref name="delSAT"/> || [[Answer set programming]], [[Boolean satisfiability problem|SAT (DIMACS CNF)]] ||
|-
| [[Probabilistic SQL|PSQL]]<ref name="PSQL"/> || [[SQL]] ||
|-
| BUGS<ref name="BUGS"/> || ||
|-
| FACTORIE<ref name="FACTORIE"/> || [[Scala (programming language)|Scala]] ||
|-
| PMTK<ref name="PMTK"/> || MATLAB || MATLAB
|-
| Alchemy<ref name="Alchemy"/> || [[C++]] ||
|-
| Dyna<ref name="Dyna"/> || [[Prolog]] ||
|-
| Figaro<ref name="Figaro"/> || Scala ||
|-
| [[Church (programming language)|Church]]<ref name="Church"/> || Scheme || Various: JavaScript, Scheme
|-
| ProbLog<ref name="ProbLog"/> || Prolog ||Python, Jython
|-
| ProBT<ref name="ProBT"/> || C++, [[Python (programming language)|Python]] ||
|-
| [[Stan (software)|Stan]]<ref name="Stan"/> || || C++
|-
| Hakaru<ref name="Hakaru"/> || [[Haskell (programming language)|Haskell]] || Haskell
|-
| [[BAli-Phy]] (software)<ref name="BAli-Phy"/> || Haskell || C++
|-
| ProbCog<ref name="ProbCog"/> || || Java, Python
|-
| Gamble<ref name="Gamble"/> || || Racket
|-
| PWhile<ref name="PWhile"/> || While || Python
|-
| Tuffy<ref name="Tuffy"/> || || Java
|-
|-Pomegranate || Python || Cython
|-
| [[PyMC3]]<ref name="PyMC3"/> || Python, [[Theano (software)|Theano]]|| Python
|-
| [[PyMC4]]<ref name="PyMC4">{{Cite web|url=https://medium.com/@pymc_devs/theano-tensorflow-and-the-future-of-pymc-6c9987bb19d5|title=Theano, TensorFlow and the Future of PyMC|last=Developers|first=PyMC|date=2018-05-17|website=PyMC Developers|access-date=2019-01-25}}</ref> || Python, [[TensorFlow|TensorFlow Probability]]|| Python
|-
|greta<ref>{{Cite web|url=https://greta-dev.github.io/greta/|title=greta: simple and scalable statistical modelling in R|website=GitHub|access-date=2018-10-02}}</ref>
|TensorFlow
|[[R (programming language)|R]]
|-
|pomegranate<ref>{{Cite web|url=https://pomegranate.readthedocs.io/en/latest/index.html|title=Home — pomegranate 0.10.0 documentation|website=pomegranate.readthedocs.io|language=en|access-date=2018-10-02}}</ref>
|Python
|Python
|-
| Lea<ref name="Lea"/> || Python || Python
|-
| WebPPL<ref name="WebPPL"/>||JavaScript||JavaScript
|-
| Picture<ref name="kurzweilai">{{cite news|url=http://www.kurzweilai.net/short-probabilistic-programming-machine-learning-code-replaces-complex-programs-for-computer-vision-tasks|title=Short probabilistic programming machine-learning code replaces complex programs for computer-vision tasks|last=|first=|date=April 13, 2015|work=KurzweilAI|access-date=27 Nov 2017|via=}}</ref>
| Julia
| Julia
|-
| Turing.jl<ref name="Turingjl"/>
| [[Julia (programming language)|Julia]]
| Julia
|-
| Gen<ref>{{Cite web|url=https://probcomp.github.io/Gen/|title=Gen: A General Purpose Probabilistic Programming Language with Programmable Inference|access-date=2019-06-17}}</ref>
| [[Julia (programming language)|Julia]]
| [[Julia (programming language)|Julia]]
|-
|-
| Low-level First-order PPL<ref name="LFPPL"/> || Python, Clojure, Pytorch || Various: Python, Clojure
|-
|Troll<ref name="Troll"/>
|
|Moscow ML
|-
|Edward<ref>{{Cite web|url=http://edwardlib.org/|title=Edward – Home|website=edwardlib.org|access-date=2017-01-17}}</ref>
|[[TensorFlow]]
|Python
|-
|TensorFlow Probability<ref>{{Cite web|url=https://medium.com/tensorflow/introducing-tensorflow-probability-dca4c304e245|title=Introducing TensorFlow Probability|last=TensorFlow|date=2018-04-11|website=TensorFlow|access-date=2018-10-02}}</ref>
|TensorFlow
|Python
|-
|Edward2<ref>{{Cite web|url=https://github.com/tensorflow/probability/tree/master/tensorflow_probability/python/edward2|title='Edward2' TensorFlow Probability module|website=GitHub|language=en|access-date=2018-10-02}}</ref>
|TensorFlow Probability
|Python
|-
|Pyro<ref>{{Cite web|url=http://pyro.ai|title=Pyro|website=pyro.ai|language=en|access-date=2018-02-09}}</ref>
|[[PyTorch]]
|Python
|-
|Saul<ref>{{Cite web | url= https://cogcomp.org/page/software_view/Saul|title=CogComp - Home}}</ref>
|Scala
|Scala
|-
|RankPL<ref>{{Citation|last=Rienstra|first=Tjitze|title=RankPL: A qualitative probabilistic programming language based on ranking theory|date=2018-01-18|url=https://github.com/tjitze/RankPL|accessdate=2018-01-18}}</ref>
|
|Java
|-
|Birch<ref>{{Cite web|url=http://birch-lang.org/|title=Probabilistic Programming in Birch|website=birch-lang.org|access-date=2018-04-20}}</ref>
|
|C++
|-
|PSI<ref>{{Cite web|url=https://psisolver.org/|title=PSI Solver - Exact inference for probabilistic programs|website=psisolver.org|access-date=2019-08-18}}</ref>
|
|D
|}
 
== Difficulty ==