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

    xiaoxiao2024-05-17  122

    本节书摘来异步社区《概率编程实战》一书中的第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的概率。

    相关资源:树莓派开发实战 第2版 完整书签板.pdf
    最新回复(0)