BING
斯是陋室,唯吾芳馨
原创

三门问题变体

共 3,043 字,需阅读 8 分钟2018/08/08 上午5,321 次阅读

#百万英雄

#背景:

你参加了一个游戏,在你面前有4张100万支票,其中1张是真的。游戏开始,你选了一张,之后主持人在剩下的3张里,选择一个展示出来,验证后发现是假的。

#问题:请分情况理性分析,此时,你的参赛权的价格

  • 情况1:不允许改之前选择
  • 情况2:有重新选择的权力

#回答:请用下面两种方式分别作答

  • 方式1(理论推导):请给出理论推导及计算过程,情况2需说明如何行使权力。
  • 方式2(编程模拟):请用一个你不熟悉的脚本语言,客观、准确、完整的模拟上述两种情况下(例如:模拟1万次),选手平均获得的奖金,得到参赛权的价格。

注意事项

  1. 编程模拟时,请不要引入任何主观想法,确保模拟客观、准确、完整,并与理论推导独立,即使是2选一,50%概率这种也不要在代码中体现,而应随机模拟二选一,避免把代码变成理论推导的公式计算器,能够达到相互验证的作用。
  2. 时间不限。考验的是交付能力,请确保在交付时已彻底解决,有100%自信能够面对与自己解答不符的观点,并通过讨论指出其中的问题。

#我的瞎几把答:

这个问题非常类似 “三门问题”、Monty Hall problem。

#我对问题做出两个前提:

  1. 问题中所描述的 “你选了一张,之后主持人在剩下的3张里,选择一个展示出来,验证后发现是假的”,我暂且认为主持人一定会选择一张假的,而不是随机选择一张。
  2. 问题是求 “参赛权的价格”,我暂且认为是求中奖的概率,而价格我们则统一认为它的计算公式是 [ 参赛权的价格 = 参赛的唯一最大利益 * 中奖几率 ]

#情况一:不允许改之前选择

理论推导:

四张支票,一张真,三张假,所以抽出一张,

在主持人未公布假支票之前,抽出真支票的概率为 1 / 4 = 0.25

主持人公布后,理论上抽中支票的概率变成了 1 / 3 = 0.33

但实际上,在抽的那一刻,是基于 1 / 4 = 0.25 的概率进行风险统计和决策的,所以真正付出的风险是 1 / 4 = 0.25

而且,由于没有改变选择的权利,且,0.25是基于决策的概率,而0.33是基于部分既定结果的概率,所以实际上你赢奖的概率并没有因为概率基数的减少而增大。

所以,在不允许改变选择的情况下,你真正的中奖概率是 1 / 4 = 0.25,参赛权的价格为 100 * 0.25 = 25万

编程模拟:

          
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
import random def game(): # 支票 cheques = [False, True, False, False] # 抽支票并直接返回 return random.choice(cheques) def doGame(): wins = 0 loses = 0 count = 10000 for i in range(count): win = game() if win: wins += 1 else: loses += 1 print('共进行了', count, '次抽奖;') print('中奖场次:', wins, '场', round(wins / count * 100, 2), '%') print('失败场次:', loses, '场', round(loses / count * 100, 2), '%') print('根据概率计算的 参赛权价格约等于', round(wins / count * 100, 2), '万') doGame()

#情况二:有重新选择的权力

理论推导:

同上,主持人公布假支票后,等于减少了一个概率基数,

因为在这一刻,抽奖者拥有了一次重新选择的机会,由于这时基数已减少,所以,理论上,只要再次决策,

接下来的决策胜利的概率则变成了 1 / (4 - 1) = 0.33

前提是,你需要做出决策(重新选择),新的决策会基于 1 / (4 - 1) = 0.33 的概率,中奖的概率会增加 0.33 - 0.25 = 0.08

重新决策 与 不重新决策的区别:

重新决策:基于 1 / (4 - 1) = 0.33 的概率进行选择 不再决策:保持基于 1 / 4 = 0.25 概率做出的选择

所以,0.33 > 0.25,理论上,重新选择的胜率会高于不重新选择的胜率。

但实际上,即便是新的决策,你依然可能会选择当下已选支票;若如此,选择没有任何变化,概率却变了;

所以,概率并不是因为你的重新决策而变化,而是因为客观基数变化而变化;

上面的假设之所以也成立,是因为 “基于上次概率作出的决策结果” 恰恰也是 “本次决策概率的基数之一”;

试想,如果“重新选择”这个问题,改为分别给你两场抽奖机会,一场 0.33,一场 0.25,瞬间就不会觉得概率与事实上的悖论了。

所以,要换,换的话,参赛权的价格为 100 * 0.33 = 33万

编程模拟:

          
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
import random def switchGame(switch): # 支票 cheques = [False, True, False, False] # 抽一支支票 choose = random.choice(cheques) # 主持人公布(删除)一个假支票 cheques.remove(False) # 如果选择更换选择,则重新选择一次 if switch: choose = random.choice(cheques) # 返回抽奖结果 return choose def doGame(switch): wins = 0 loses = 0 count = 10000 for i in range(count): win = switchGame(switch) if win: wins += 1 else: loses += 1 print('共进行了', count, '次', '重选' if switch else '不重选', '抽奖;') print('中奖场次:', wins, '场', round(wins / count * 100, 2), '%') print('失败场次:', loses, '场', round(loses / count * 100, 2), '%') print('根据概率计算的 参赛权价格约等于', round(wins / count * 100, 2), '万') doGame(True) doGame(False)
署名 - 非商业性使用 4.0 国际 https://surmon.me/article/105
6 / 6 条看法
访客身份
在下有一拙见,不知...
  • 狮子
    狮子🇨🇳CNShanghaiMac OSChrome

    “验证后发现是假的” 关键问题在于,这是真验证还是假验证 三门问题是假验证,从而保证主持人抽出来的全是假的 如果是真的,就要考虑主持人抽出真的情况,问题就会变得复杂而不单纯

  • Gmail
    Gmail🇦🇷ARCanalsWindowsChrome

    Great

    • Surmon
      Surmon🇨🇳CNShanghaiMac OSChrome

      回复

      😌

  • 狮子
    狮子🇨🇳CNShanghaiMac OSChrome

    收藏了 🦅爆了

  • Earn
    Earn🇨🇳CNBeijingMac OSChrome

    😃😂😂

  • Surmon
    Surmon🇨🇳CNShanghaiMac OSChrome

    参赛权价格~