《树莓派开发实战(第2版)》——2.8 练习

本节书摘来异步社区《概率编程实战》一书中的第2章,第2.8节,作者:【美】Avi Pfeffer(艾维·费弗),更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.8 练习

www.manning.com/books/practical-probabilistic-programming 上可以找到部分练习的解答。

1.扩展Hello World程序,添加表示下床的一侧(正确或者错误)的变量。如果从错误的一侧下床,问候语总为“Oh no, not again!”,如果从正确的一侧下床,问候语的逻辑和之前相同。

2.在原始Hello World程序中,观测到今天的问候语是“Oh no, not again!”,查询今天的天气。现在,观测相同的证据并在练习1中修改的程序上提出相同的查询。查询答案发生了什么变化?能否直观地解释该结果?

3.在Figaro中,可以使用代码x === z作为如下代码的简写:

Apply(x, z, (b1: Boolean, b2: Boolean) => b1 === b2)```
换言之,如果两个参数的值相等,产生一个值为true的元素。如果不运行Figaro,猜测下面两段程序生成的结果:

a) val x = Flip(0.4)
val y = Flip(0.4)
val z = x
val w = x === z
println(VariableElimination.probability(w, true))
b) val x = Flip(0.4)
val y = Flip(0.4)
val z = y
val w = x === z
println(VariableElimination.probability(w, true))`
现在,运行Figaro程序检查您的答案。

4.在下面的练习中,您将发现FromRange元素很有用。FromRange有两个整数参数m和n,生成m~n-1的随机整数。例如,FromRange(0, 3)生成0、1、2的概率相同。编写一段Figaro程序计算掷两个骰子得出总数11的概率。

5.编写一个Figaro程序计算第一个骰子掷出6时,两个骰子总数大于8的概率。

6.在“地产大亨”游戏中,当两个骰子掷出相同数字时可以多玩一个回合。如果连续三次出现这种情况,您就会入狱。编写一段Figaro程序计算任何一个回合中发生这种情况的概率。

7.想象一个游戏,您有一个轮盘和5个面数不同的骰子。轮盘有5个概率相等的结果:4、6、8、12和20。在游戏中,首先转动轮盘,然后滚动面数与轮盘结果相同的骰子。编写一个Figaro程序表现这个游戏。

  a)计算滚动12面骰子的概率。

  b)计算掷出数字7的概率。

  c)已知掷出的是7,计算滚动的是12面骰子的概率。

  d)已知滚动的是12面骰子,计算掷出数字7的概率。

8.现在,修改练习7中的游戏,轮盘有卡住的趋势,在连续两次转动时停在同一个结果处。使用与makeStreaky类似的逻辑,编写一个约束,说明两次相邻的转动得到相同值的概率高于不同值的概率。连续玩该游戏两次。

  a)计算第二次掷骰子得到7的概率。

  b)已知第一次掷骰子得到7,计算第二次掷出7的概率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值