“三门游戏”的算法实现与启示

2022-04-29 · [All posts]

三门游戏

或许你早已听说过“三门游戏”,这是美国电视节目主持人蒙提 · 霍尔,在节目“一锤定音”里向参赛者提出的一个问题。

在节目中,蒙提让参赛者在三扇门中选择一扇门,其中只有一扇门后有巨额奖金,另外两扇只有“砰”的一声。参赛者选择一扇门后,蒙提会“砰”的一声打开剩下两扇中的一扇,然后问参赛者是否要用他们最初选中的门与剩下的一扇门交换。

你可以动脑筋想想如何选择,才能使获得巨额奖金的概率最大。

一种分析是,蒙提打开一扇门后,剩下两扇门存在大奖的概率都是50%,所以用不着交换。

你是这么想的吗?接下来我们将用Python模拟这个游戏。

算法实现

不交换

这种情况用算法非常容易实现。模拟一定次数,每次提供三个选择,让巨额奖金随机出现于其中一个,同时随机选择一个,然后验证两者是否相同即可。相同即选中了巨额奖金。

  # 在不交换的情况下
  import random
  wins = 0  # 胜场
  for i in range(5000):  # 模拟五千次
      gift_num = random.randint(0, 2)  # 生成奖金位置
      
      choice_num = random.randint(0, 2)  # 参赛者选择
      
      if gift_num == choice_num:  # 验证
          wins += 1
  print(wins / 5000)  # 打印概率

概率约为33%,毕竟是三选一嘛。

交换

这种情况下,算法相对复杂一些,不过只要我们理清思路就可以了。

  1. 巨额奖金随机出现于一个位置,参赛者随机选择一个位置。这时会有两种情况:

    • 参赛者选到了巨额奖金。显然,交换肯定会失去奖金,算法也就无需继续。
    • 参赛者未选到巨额奖金,交换后仍有机会:
  2. 蒙提“砰”的打开剩下两扇中的一扇门。
  3. 观众选择最后一扇门。

接下来是代码:

  # 在交换的情况下
  wins = 0
  for i in range(5000):
      gift_num = random.randint(0, 2)  # 生成奖金位置
      
      choice_num = random.randint(0, 2)  # 参赛者的最初选择
      if choice_num == gift_num:
          pass  # 选中了大奖后交换必定失败,无需继续
      else:
          # 生成蒙提打开的门,其非观众打开的门和有大奖的门,用while实现
          new_num = random.randint(0, 2)
          while new_num in [choice_num, gift_num]:
              new_num = random.randint(0, 2)

          # 生成参赛者交换后的门,其非最初的选择和蒙提的选择,同样用while实现  
          final_num = random.randint(0, 2)
          while final_num in [choice_num, new_num]:
              final_num = random.randint(0, 2)

          if final_num == gift_num:  # 验证
              wins += 1
  print(wins / 5000)  # 打印概率

概率约为66%,差不多是不交换的两倍。为什么交换后概率会相差这么大?

原理

其实,游戏背后的逻辑很简单。在蒙提总是打开一扇门的前提下,当参赛者第一次选择门时,他赢得大奖的概率是1/3。蒙提“砰”的打开一扇门后,这一概率并没有发生变化,而另外2/3的概率在其余两扇门中。其实蒙提打开一扇无大奖的门已经提供了有用的信息:他帮助在其余两扇门排除了一个选项。也就是说,2/3的概率集中到了最后一扇门中,所以参赛者应该交换!

2/3的概率在一扇门中,这似乎有些难以相信,但你不能忘了最初有三个选项。

真实节目中的大多数参赛者偏好于选择他们最初选择的门。

另一种情况

如果蒙提是吝啬的,他可以选择打开或者不打开一扇门(在真实的节目中就是如此)。现在他打开了一扇门并给出了交换的机会,参赛者应该交换吗?

在这种情况下,参赛者不应交换!

吝啬的蒙提知道大奖的位置并想降低参赛者获胜的概率。如果参赛者未选中,蒙提就不会打开一扇门并提供机会,因为这会提高参赛者获胜的概率,此时蒙提会直接宣布游戏结束;如果参赛者选中了,蒙提提供机会就是为了让参赛者偏离大奖,所以参赛者不应交换!

启示

如果人们对游戏规则和蒙提的决策过程不是十分清楚,就很容易掉进陷阱里。在真实世界中,我们也需要十分了解游戏规则和其他人的想法,这有助于我们做出好的决策。

然而,我们却总是关注不甚重要而忽视重要的信息,这反映了我们”主动意识“的有限性。在生活中,我们大多依靠直觉与记忆行事,这也是我们大脑的主要功能,毕竟思考是件费劲的事。

在这种限制条件下,对于不甚重要的小事,无思即行是重要的,这也是培养好习惯的益处所在。但对于重要的决策,有意识的思考是不可或缺的,比如在”三门游戏“的巨额奖金下,这时我们需要注意到我们的”潜意识“忽略的哪些信息,然后重新审慎思考。