QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 6182|回复: 0
打印 上一主题 下一主题

用python模拟三门悖论

[复制链接]
字体大小: 正常 放大

7

主题

9

听众

496

积分

升级  65.33%

  • TA的每日心情

    2015-11-11 09:17
  • 签到天数: 234 天

    [LV.7]常住居民III

    社区QQ达人

    群组2013年电工杯B题讨论群

    群组2014年网络挑战赛交流

    跳转到指定楼层
    1#
    发表于 2014-9-18 17:07 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    直觉的欺骗,三门悖论的模拟
    以下描述来自百度百科:
    # z6 K5 o: D) |三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let's Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机会率?如果严格按照上述的条件,即主持人清楚地知道,哪扇门后是羊,那么答案是会。换门的话,赢得汽车的机率是2/3。
    2 u- p# p, t  g# L+ u7 m3 `$ C. b
    鄙人谈几句话:
    ! U2 S9 m6 N  S4 C很多人都认为改变选择之后是二选一的情况,认为赢得汽车的概率是1/2,包括伟大的数学家鄂尔多斯都这样认为。但是我们要用事实来证明,如果真实做这个实验,会消耗太多资源,下面由鄙人用计算机编程来模拟这个情形。源码公开,如果有大神觉得不妥,欢迎指正。
    * h; v( {+ o# c9 T' x2 H% D1 s: m( J9 E, \) ?% E& Z
    以下是鄙人的python模拟程序:
    " o% {4 x% s! M' s4 C# d+ ?) Z+ b$ z       #Author : Naupio
    9 _. `8 _) g8 u7 O4 x  P% Nimport random as rd3 q8 ~# f0 @: Z, v
    change = True( X- s2 F  _% I: X9 J  Q+ ^
    def moni(times=10000):
    , d% f! _; a2 f6 h: A    counts = 0.0
    1 f! J1 y* t5 [; E8 k: X    for i  in range(times):
    9 R7 {4 x3 _9 D. }4 _. ^, P  g        rightaim = int(rd.random()*3)  #汽车所在的门
    , Z/ |# N! z; w3 q6 O  n8 E        guss = int(rd.random()*3)      #第一次猜的门
    * l1 Z; ~0 B, K4 I& b/ u        aim=[0,1,2]                    #初始化三个门
    / O8 s1 o6 }7 r% w3 F. U7 H               3 y) ^3 K0 O7 H7 `
            #找出要主持人打开的门
    $ t% S5 x9 D4 o        for j in aim:1 f, S  X. l( J7 Q0 T" {
                if (j!=guss and j!=rightaim):
    ( N7 V8 N4 I- k/ C+ i                openaim = j
    $ ^+ `0 C) ~- t5 p+ x! V5 w                break0 t0 S7 g( W7 [
      
    0 Q( ^$ e; C: U        #找出另一个门
    % S8 U+ C4 S9 i0 _        for j in aim:0 ]- d7 P; w& J
                if (j!=guss and j!=openaim):4 g; g! ?1 S  U1 R( y' I4 C5 o
                    otheraim =j$ t/ }( Q5 ]- ^0 `' d( m9 q
                    break$ v5 t* c) c" d6 y; |' \

    : y% @: o4 J' r; R
    7 z9 B* Z$ B0 x0 ^) |' A        #改变选择
    7 x# e2 i- z& W        if change:+ Y% N$ S) ?, w# t9 V$ |
                guss = otheraim
    8 h# i2 y2 Q0 D         
    ! h6 h  b% k0 i" r) z% l6 w9 h3 L        #改变选择之后猜中汽车的次数统计 2 P' M8 e: _* ?3 k
            if guss==rightaim:  ?0 r% G) Y# h6 _' k' X
                counts+=1
    ( [5 B7 S# Q3 @' O1 T, a        ) ~/ t" r! O1 ]' ?) q
                #返回改变选择之后猜中汽车的概率 / {) a2 c) k% A! `" \
        return counts/times
    # N( B" ~. _% R6 |5 i$ nprint "改变选择之后的模拟一千次结果是:",moni(1000)
    ' }+ s  H6 @. P" F- m. bprint "改变选择之后的模拟一万次结果是:",moni(10000)
    " |( }* d! t+ z8 y. Aprint "改变选择之后的模拟十万次结果是:",moni(100000); g% w! p% F+ n
    print "改变选择之后的模拟一百万次结果是:",moni(1000000)
    7 |0 m5 d: s1 T0 m) o' E. vprint "改变选择之后的模拟一千万次结果是:",moni(10000000)
    4 t: x7 B& K: _9 Y
    ' d. y$ Y7 a( K& Y* M6 O, @以下是模拟效果截图:
    5 O7 f+ A' k% o* l- m  U) \ $ v' D7 n+ M# e

    & y; n/ K" w. Q3 Q& G鄙人最后说几句:$ I/ z0 G3 ?5 N) z+ D
    从模拟的结果上来看还算是成功的,随着模拟的次数越来越多,结果越来越接近2/3,本来想打算再提高模拟次数的,但由于我的本本比较渣,会卡爆,所以只模拟到一千万次。
    ! j/ j- K# B2 A+ ?
    @百年孤独 @数学中国—罂粟 @madio   d4 E+ x$ E  C$ R; v! |3 N' U
    ps:不排除有错误,欢迎指正,欢迎交流,转载请注明出处,版权所有。

    + n, O3 o/ d( u0 M6 B# s' `7 E# x$ W, W2 k, z, M1 B( Y

    + o# r" @3 \, ^6 K$ q4 }( i( I# `: ]$ C+ k& [( F- D
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-9-17 14:04 , Processed in 0.388239 second(s), 49 queries .

    回顶部