概率论历史中的一个有趣问题





5.00/5 (9投票s)
概率中的一个历史问题,带有表面上正确和实际正确的解决方案,以及其 Python 模拟
1. 引言
最近,我正在阅读一本名为《统计漫画指南》的书,作者是 Larry Gonick 和 Woollcott Smith。这本书以一种令人愉快的方式,仅通过漫画解释了统计学和概率论的概念。在这本书的十二个章节中,有一章专门讲概率,我正是从这里开始,而不是理解,而是真正理解了概率的基本概念。
虽然这本书中有几道说明性的问题,但我特别想强调一道特别有趣的问题,它让我接触到了一些基本概率概念。在本文中,我想给出该问题的陈述,给出一个显而易见的(但错误的)解决方案,然后展示正确的解决方案。同时,我还会提供一个模拟这个问题的 Python 程序。希望这个问题和解决方案能激励您阅读这本书,并以一种不同的方式学习和理解统计概念。
2. 问题陈述
在十七世纪,法国有一位名叫Chevalier de Mere的人,据说他是一位赌徒,并且经常玩骰子。他有一个有趣的问题,他向他的朋友,数学家兼物理学家Blaise Pascal提出了这个问题。据说,通过 Pascal 和他的同事数学家Pierre de Fermat之间的几封信件往来,概率论就发展起来了。
Chevalier de Mere 提出的问题如下。给定以下两个随机实验,哪一个发生的概率更高?
- 在单次掷六次骰子(一个普通的六面骰子)的情况下,出现至少一次六的概率。
- 在掷一对骰子二十四次的情况下,出现至少一次双六的概率。
接下来,我们检查显而易见的解决方案,然后是正确的解决方案。
3. 表面解,或显而易见的解决方案
表面解,或显而易见的解决方案是,这两个事件的概率是相同的。“证明”如下:
在接下来的叙述中,我们将事件发生的概率表示为P(event)。
对于上面提出的第一个问题
P(单次掷骰子出现一次六) = 1/6
因此,P(掷四次骰子出现一次六) = 4 * 1/6 = 2/3
对于上面提出的第二个问题
P(掷一对骰子一次出现双六) = 1/36
因此,P(掷一对骰子二十四次出现一次双六) = 24 * 1/36 = 2/3
这“证明”了两个事件的概率相同。这是 Chevalier de Mere 当时的结论。值得注意的是,概率论尚未发展起来,他认为他的结论是正确的。
但是,de Mere 不仅赌了很多,还仔细记录了他的输赢。他的观察是,他在第一次赌博中赢的更多。在下一节中,我们将使用 Python 程序来运行这些实验。
4. Python 模拟
编写了一个 Python 脚本来模拟问题陈述中提到的上述两个事件。这个小程序的主要组成部分是:
4a. 掷一次骰子的函数
这个函数很简单,如下所示:
# Function to roll a single dice once
def roll_dice():
lo = 1
hi = 6
return random.randint(lo, hi)
这里需要注意的一点是,函数random.randint()
返回指定范围内的均匀分布的随机整数,其中lo <= N <= hi
。这里不应使用任何加权分布,否则将模拟加权骰子。
4b. 掷单次骰子 4 次的函数
这只不过是在for
循环中的上述内容。需要注意的一点是,一旦骰子滚动返回6
,该函数就会返回True
,而无需进行任何进一步的滚动。
def four_rolls_single_dice():
for _ in range(4):
if roll_dice() == 6:
return True
return False
4c. 掷一对骰子 24 次的函数
这与上面的函数类似,但在这里,我们会在返回True
之前检查两次骰子滚动的总和是否为12
。
def twenty_four_rolls_two_dice():
for _ in range(24):
if roll_dice() + roll_dice() == 12:
return True
return False
4d. 计算概率
还有两个名为problem1()
和problem2()
的函数,其中通过执行大量(一千万次)实验并记录结果来计算概率。
4e. 输出
Python 脚本的输出如下:
..........
Problem 1 - At least one six in four rolls of a single dice
-----------------------------------------------------------
Computed Probability = 0.5178528
Actual Probability from formula = 0.5177469135802468
..........
Problem 2 - At least one double-six in twenty four rolls of a pair of dice
--------------------------------------------------------------------------
Computed Probability = 0.4914268
Actual Probability from formula = 0.4914038761309034
从输出中可以看出,Python 脚本中也计算了实际概率。还可以看出,通过实验计算出的概率和通过公式计算出的概率非常接近,从而验证了该程序。需要注意的是,每次运行的结果会略有不同,因为它们是模拟随机事件。实际概率计算的公式在下一节中给出。
5. 概率的正确计算
在上面的第 3 节中,我们看到了导致错误结果的表面解。问题陈述中的关键短语是“至少”。这个短语在概率计算中起着关键作用。在本节中,我们计算正确的概率。
5a. 在四次掷单次骰子中至少出现一次六的概率
我们从在单次掷骰子中未出现六的概率开始。该概率为 5/6。换句话说:
P(单次掷骰子未出现六) = 5/6
因此,P(掷四次骰子未出现六) = (5/6)4 = 0.4823
以上使用了乘法公式,即当事件E和F独立时,P(E and F) = P(E) * P(F)。在我们的例子中,一次掷骰子与同一骰子的另一次掷骰子是独立的,它们之间没有关联。
因此,P(掷四次骰子至少出现一次六) = 1 - P(掷四次骰子未出现六) = 1 - 0.4823 = 0.5177
5b. 在掷一对骰子二十四次中至少出现一次双六的概率
与上面一样,我们检查在掷一对骰子一次中未出现双六的概率。该概率为 35/36。换句话说:
P(掷一对骰子一次未出现双六) = 35/36
因此,P(掷二十四次骰子未出现双六) = (35/36)24 = 0.5086
因此,P(掷一对骰子二十四次至少出现一次双六) = 1 - P(掷一对骰子二十四次未出现双六) = 1 - 0.5086 = 0.4914
从上面可以看出,这些概率确实不同,第二个概率更小。这就是 Chevalier de Mere 在第二次赌博中比第一次赌博输得更多的原因。如上所述,这表明他不仅赌了很多,而且还一丝不苟地记录了他的输赢。
如上所述,关键短语是至少。对于第一个事件,这意味着必须将以下概率相加才能得出正确的概率——在四次掷骰子中出现一次六的概率,在四次掷骰子中出现两次六的概率,在四次掷骰子中出现三次六的概率,以及在四次掷骰子中全部出现六的概率。这将是 1 - 完全未出现六的概率。对于第二个事件,必须相加等效的概率才能得出正确的概率。感谢 CodeProject 会员 Marius Bancila 建议将此内容纳入文章。
6. 结语
本文考虑了一个概率上的有趣问题——一个涉及掷骰子的问题。考虑了两个事件并比较了它们的概率。在第一个事件中,掷单个骰子四次,并检查了至少出现一次六的概率。在第二个事件中,掷一对骰子二十四次,并检查了至少出现一次双六的概率。我们首先看到了一个表面解,它表明这两个概率相同。然后,我们通过了一个模拟这两个事件的 Python 程序,发现第一个事件的概率更高。然后,我们展示了这两个概率如何不同,并论证了 Python 程序得出的结论。
真诚希望您觉得这个分析问题很有趣。还希望本文能激发您阅读本文顶部提到的《统计漫画指南》,并以一种全新的方式探索统计学。
历史
- 2018年6月7日:版本 1.0