《树莓派开发实战(第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的概率。

相关文章
|
1月前
|
Java Linux 网络安全
树莓派的开发环境搭建教程
本教程详细介绍如何在树莓派上搭建开发环境,包括系统安装、配置网络、设置开发工具等步骤,适合初学者快速上手。
|
数据安全/隐私保护 开发工具 git
|
网络安全 网络架构
树莓派快速入门指南
不需要密码了还觉得每次输入一大串麻烦,有的时候记不住IP地址,还有更简单的方法吗?当然有了,往下看:
1388 0
|
物联网 Python 数据安全/隐私保护