概率编程——Figaro的基础示例

阅读: 评论:0

概率编程——Figaro的基础示例

概率编程——Figaro的基础示例

文章目录

  • 概率编程——Figaro的基础示例
    • 0. 导包
    • 1. 原子元素
    • 2. 复合元素
    • 3. 条件与约束

概率编程——Figaro的基础示例

0. 导包

a.figaro.algorithm.factored.VariableElimination
a.figaro.algorithm.sampling.Importance
a.figaro.language._
a.figaro.inuous.{Normal, Uniform}
a.figaro.library.atomic.discrete.Binomial
a.figaro.librarypound.If

1. 原子元素

  • 离散型
    • Flip
    val sunnyToday = Flip(0.2)
    println(VariableElimination.probability(sunnyToday, true))
    
    • Select
    val language = Select(0.5 -> "Java",0.3 -> "Scala",0.2 -> "Python"
    )
    println(VariableElimination.probability(language, "Scala"))
    
    • Binomial
    val numSunnyDayInWeek = Binomial(7, 0.5)
    println(VariableElimination.probability(numSunnyDayInWeek, 3))
    
  • 连续型
    • Normal 正态分布
    val temperature = Normal(40, 100)
    val greaterThan50 = (d: Double) => d > 50
    println(Importance.probability(temperature, greaterThan50))
    
    • Uniform 连续均匀分布
    val temperature2 = Uniform(10, 81)
    println(Importance.probability(temperature2, greaterThan50))
    

2. 复合元素

  • If
    val sunnyToday = Flip(0.2)
    val greetingToday = If(sunnyToday,Select(0.6 -> "Hello World!", 0.4 -> "Howdy, universe!"),Select(0.2 -> "Hello World!", 0.8 -> "Oh no, not again!")
    )
    println(VariableElimination.probability(greetingToday, "Hello World!"))sunnyToday.observe(true)
    println(VariableElimination.probability(greetingToday, "Hello World!"))
    
  • Dist
    val goodMood = Dist(0.2 -> Flip(0.6),0.8 -> Flip(0.2)
    )
    println(VariableElimination.probability(goodMood, true))
    
  • 原子复合
    val sunnyTodayProbability = Uniform(0, 0.6)
    val sunnyToday2 = Flip(sunnyTodayProbability)
    println(Importance.probability(sunnyToday2, true))val tempMean = Normal(40, 36)
    val temperature = Normal(tempMean, 100)
    println(Importance.probability(temperature, (d: Double) => d > 50))
    
  • Apply
    val sunnyDaysInMonth = Binomial(30, 0.2)
    val getQuality = (i: Int) => if (i > 10) "good" else if (i > 5) "average" else "poor"
    val monthQuality = Apply(sunnyDaysInMonth, getQuality)
    println(VariableElimination.probability(monthQuality, "good"))val teamWinsInMonth = Binomial(5, 0.4)
    val monthQuality2 = Apply(sunnyDaysInMonth, teamWinsInMonth,(days: Int, wins: Int) => {val x = days * winsif (x > 20) "good" else if (x > 10) "average" else "poor"})
    println(VariableElimination.probability(monthQuality2, "good"))
    
  • Chain
    val goodMood2 = Chain(monthQuality,(s: String) =>if (s == "good") Flip(0.9)else if (s == "average") Flip(0.6)else Flip(0.1)
    )
    println(VariableElimination.probability(goodMood2, true))val sunnyToday3 = Flip(0.2)
    val goodMood3 = Chain(monthQuality, sunnyToday3,(quality: String, sunny: Boolean) => {(quality, sunny) match {case ("good", true) => Flip(0.9)case ("average", true) => Flip(0.7)case (_, true) => Flip(0.4)case ("good", false) => Flip(0.6)case ("average", false) => Flip(0.3)case (_, false) => Flip(0.05)}})
    println(VariableElimination.probability(goodMood3, true))
    

3. 条件与约束

  • 条件
    val sunntDayInMonth = Binomial(30, 0.2)
    val monthQuality = Apply(sunntDayInMonth,(i: Int) => if (i > 10) "good" else if (i > 5) "average" else "poor"
    )
    val goodMood = Chain(monthQuality,(s: String) => {if (s == "good") Flip(0.9)else if (s == "average") Flip(0.6)else Flip(0.1)})
    println(VariableElimination.probability(goodMood, true))// 设置条件,会清楚之前所有的条件
    sunntDayInMonth.setCondition((i: Int) => i > 8)
    println(VariableElimination.probability(goodMood, true))// 添加条件
    sunntDayInMonth.addCondition((i: Int) => i % 3 == 2)
    println(VariableElimination.probability(goodMood, true))// 移除条件
    veConditions()
    println(VariableElimination.probability(goodMood, true))
    
  • 约束
    goodMood.setConstraint((b: Boolean) => if (b) 0.5 else 1.0)
    println(VariableElimination.probability(goodMood, true))val result1 = Flip(0.4)
    val result2 = Flip(0.4)
    val result3 = Flip(0.4)val allWins = Apply(result1, result2, result3,(w1: Boolean, w2: Boolean, w3: Boolean) => w1 && w2 && w3
    )
    println(VariableElimination.probability(allWins, true))def makeStreaky(r1: Element[Boolean], r2: Element[Boolean]): Unit = {val pair = Apply(r1, r2, (b1: Boolean, b2: Boolean) => (b1, b2))pair.setConstraint((bb: (Boolean, Boolean)) => if (bb._1 == bb._2) 1.0 else 0.5)
    }makeStreaky(result1, result2)
    makeStreaky(result2, result3)
    println(VariableElimination.probability(allWins, true))
    

本文发布于:2024-02-05 04:48:29,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170724496163171.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:示例   概率   基础   Figaro
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23