QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 6403|回复: 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
    直觉的欺骗,三门悖论的模拟
    以下描述来自百度百科: 2 {7 r: p+ K" J- w9 I: Y# l+ P
    三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let's Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机会率?如果严格按照上述的条件,即主持人清楚地知道,哪扇门后是羊,那么答案是会。换门的话,赢得汽车的机率是2/3。4 }$ Z- A$ X$ ]4 x2 M

    ' k. Q) h. K$ t# O: d鄙人谈几句话:( k4 o( Q3 V1 b$ H% r# X
    很多人都认为改变选择之后是二选一的情况,认为赢得汽车的概率是1/2,包括伟大的数学家鄂尔多斯都这样认为。但是我们要用事实来证明,如果真实做这个实验,会消耗太多资源,下面由鄙人用计算机编程来模拟这个情形。源码公开,如果有大神觉得不妥,欢迎指正。& O, D8 e  ^, b1 {) a+ S
    3 [) R/ D. ^& F. l
    以下是鄙人的python模拟程序:
    ) h, S9 X2 o/ p% \& t- Z9 E8 B) k       #Author : Naupio
    * N& Z9 L$ Q9 U2 himport random as rd. _+ P$ E) l! g3 q" e# O
    change = True3 i! h, ]1 B9 {) U
    def moni(times=10000):
    2 i1 k4 _9 m/ |8 }. V1 ]( A/ D    counts = 0.09 x, f" E9 T. A% D9 q
        for i  in range(times):
    # d0 |! p6 h8 O% M0 `5 n+ u: z        rightaim = int(rd.random()*3)  #汽车所在的门# W' V( I# h$ o, s3 s
            guss = int(rd.random()*3)      #第一次猜的门
    " s3 ~3 O4 ~3 |5 n9 G! @/ N* S        aim=[0,1,2]                    #初始化三个门
    ( Y- R+ c* u1 X0 Z) [- W! I               0 K( ?5 C  ~/ s& H
            #找出要主持人打开的门 $ N/ `8 Z- P$ L* m* \- u+ Y
            for j in aim:
    & z  r% ]6 J# O+ t            if (j!=guss and j!=rightaim):2 V/ y, V4 I2 b% `" |" P6 u3 a1 G
                    openaim = j
    ! q* ^1 f8 c6 H* E2 ^                break
    $ d; D9 D2 `# ~& {, i  3 S7 P2 {( h; h' |' o2 {
            #找出另一个门 ( v- C/ {; ^1 q! o3 f  x, g
            for j in aim:
    6 y. h/ b+ ~/ {            if (j!=guss and j!=openaim):
    ) C- u$ V! d  I& X7 R0 N% i7 L                otheraim =j
    # R+ m! ~; d/ a/ U  A2 R7 ]                break
      B% W  }' w7 \% u
    % n- ^$ D) e% `$ {9 @( Q, j8 Q# x$ h5 |
            #改变选择
    0 w. _- K% |3 P% h; R. }' i        if change:  C. K, J+ d+ y4 U. T
                guss = otheraim
    + j1 X) O! `) F# [6 ~2 }1 T         
    & X! X* f9 ^8 ^4 T/ U" U        #改变选择之后猜中汽车的次数统计 # Q+ p$ h- u5 ~! J! s) v: j8 k* A
            if guss==rightaim:2 Q' H. b+ y6 x$ c! h3 a4 u6 I
                counts+=1# y1 E, X4 r) k6 J6 y, A2 d7 d
            5 S% m/ n- _- e" S, z* @
                #返回改变选择之后猜中汽车的概率
    ( q  r# D7 c5 D& q; e- B    return counts/times
    2 A/ [# F0 t% {  e) `print "改变选择之后的模拟一千次结果是:",moni(1000)7 A  `) m& y" H3 q' U1 O0 Z) F4 l
    print "改变选择之后的模拟一万次结果是:",moni(10000)$ I/ H5 s8 _# C3 r4 k
    print "改变选择之后的模拟十万次结果是:",moni(100000)4 O& ~% Y. w4 S  B! D% O  D$ j
    print "改变选择之后的模拟一百万次结果是:",moni(1000000)& o. u( f2 `3 D7 ~; A
    print "改变选择之后的模拟一千万次结果是:",moni(10000000) , P) t6 _% z3 ~( @: @& t; i

    3 d. H7 ]+ c. t5 l( |以下是模拟效果截图:
    0 b+ c4 R0 Q& z5 l/ g/ F& [1 Q
    8 ~: z; g- B" w( {. U( {7 E) u: L2 W+ j, @$ ]
    鄙人最后说几句:$ U& T7 V( y( K/ y! _
    从模拟的结果上来看还算是成功的,随着模拟的次数越来越多,结果越来越接近2/3,本来想打算再提高模拟次数的,但由于我的本本比较渣,会卡爆,所以只模拟到一千万次。
    " }4 c4 T3 {! U6 n) i+ U
    @百年孤独 @数学中国—罂粟 @madio . U+ k! d, O6 k7 Q7 ]
    ps:不排除有错误,欢迎指正,欢迎交流,转载请注明出处,版权所有。

    : o% I% S' v# W1 \9 O& D! H; N, s5 b# i* e% z' Q0 \
    9 c: v: h9 F/ M6 C5 u

    , Y; E% `2 ]+ a; N
    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, 2026-7-18 12:14 , Processed in 0.391793 second(s), 50 queries .

    回顶部