概率编程

概率编程（PP：Probabilistic programming）是一种编程范型，在其中指定了概率模型并自动进行这些模型的推断。它代表了统一概率模型和传统通用编程的一种尝试，使前者更加容易并更广泛的应用Pfeffer, Avrom (2014), Practical Probabilistic Programming, Manning Publications. p.28. 。它可以用于建立系统帮助在面对不确定时作出决定。

用于概率编程的编程语言被称为“概率编程语言”（PPL）。

 应用 
概率推理已经广泛用于各种任务，比如预测股价、推荐电影、诊断计算机、检测网络入侵和图像检查。但是（部份由于计算能力的限制），概率编程范围有限，并且多数推断算法对每个任务都必须手工编写。

尽管如此，在2015年一个50行的概率计算机视觉程序被用于基于人脸的2D图像来生成这些人脸的3D模型。这个程序使用反向（inverse）图作为推断方法的基础，并使用Julia的Picture包来建造。这使得“用50行代码写出过去千行代码的程序”成为可能。Gen概率编程库（也用Julia写成）已经被用于视觉和机器人任务。

，概率编程系统Turing.jl已经被用于各种制药和经济应用。Julia中的概率编程已经结合于可微分编程，通过组合Julia包Zygote.jl和Turing.jl。

 概率编程语言 
概率编程语言（PPL）经常从基础语言扩展而来。底层基础语言的选择依赖于模型与基础语言本体的类似性，还有商业考虑和个人偏好。例如Dimple和Chimple基于了Java，基于了.NET框架，而PRISM扩展自Prolog。但是，一些PPL比如和，提供了独立的语言，没有明显起源自另一种语言。

一些PPL正在活跃开发中，包括在beta测试中的那些。两个最流行的工具是Stan和PyMC。

 关系 
概率关系编程语言（PRPL）专门设计来描述和推论（PRM）的概率编程语言（PPL）。

PRM的开发通常具有一组算法，用于关注的分布的归约、推理和发现，它们被嵌入到对应的PRPL中。

 概率编程语言列表 

 名字  扩展自  宿主语言    C++ bayesloop  Python  Python CuPPL  NOVA  Venture  Scheme  C++ Probabilistic-C  C  C Anglican  Clojure  Clojure IBAL  OCaml  BayesDB  SQLite, Python   PRISM       .NET Framework  .NET Framework dimple  MATLAB, Java  chimple  MATLAB, Java  BLOG  Java  diff-SAT  回答集编程, SAT (DIMACS CNF)  PSQL  SQL  BUGS   Pascal FACTORIE  Scala Scala PMTK  MATLAB  MATLAB Alchemy  C++  Dyna  Prolog  Figaro  Scala Scala   Scheme  各种: JavaScript, Scheme   Prolog Python ProBT  C++, Python     BUGS C++ Hakaru  Haskell  Haskell  (软件)  Haskell   C++ ProbCog    Java, Python Gamble    Racket PWhile  While  Python Tuffy    Java PyMC  Python Python Rainier  Scala ScalagretaTensorFlowRpomegranatePythonPython Lea  Python  Python WebPPLJavaScriptJavaScriptLet's ChanceScratchJavaScript Picture Julia Julia Turing.jl Julia Julia Gen Julia Julia Low-level First-order PPL  Python, Clojure, Pytorch   各种: Python, ClojureTrollMoscow MLEdwardTensorFlowPythonTensorFlow ProbabilityTensorFlowPythonEdward2TensorFlow ProbabilityPythonPyroPyTorchPythonNumPyro JAXPythonSaulScalaScalaStanC++, Python, RRankPLJavaBirchC++PSIDBlangMultiVersePythonPython

 困难 
推理按概率分布的变量给初学编程者带来困难，但是这些困难可以通过使用嵌入到源代码编辑器中的变量分布的贝叶斯网络可视化和图来解决。

参见

 归纳编程


注释

 外部链接 
List of Probabilistic Model Mini Language Toolkits 
Probabilistic programming wiki

Category:概率模型
Category:数学软件
Category:编程范式