QQ登录

只需要一步,快速开始

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

    0 m) o* a6 k* ?鄙人谈几句话:
    ' D' e4 h3 b/ ?  S5 j, [# r' k很多人都认为改变选择之后是二选一的情况,认为赢得汽车的概率是1/2,包括伟大的数学家鄂尔多斯都这样认为。但是我们要用事实来证明,如果真实做这个实验,会消耗太多资源,下面由鄙人用计算机编程来模拟这个情形。源码公开,如果有大神觉得不妥,欢迎指正。2 |6 i+ D; W% v+ j" L4 p- Q

    : e/ [$ F6 K/ M" {* h& F以下是鄙人的python模拟程序: , ?% G# f5 \* @7 t; H! [
           #Author : Naupio% J. ]/ O. l) f, f8 v, @: k6 O
    import random as rd3 T2 O* E, c4 h$ ]- b' r9 b
    change = True  x, Z  W7 I) a( A! O6 H* U' K
    def moni(times=10000):
    $ S7 m0 I: X; b$ @    counts = 0.0
    8 y4 A7 T. u1 ~  R  D- x+ O+ ]$ J5 Y    for i  in range(times):
      F5 w7 l# U5 k- i1 ~( c$ Z3 n# K- |        rightaim = int(rd.random()*3)  #汽车所在的门
    1 h+ @) d- Y* t: g% c  P        guss = int(rd.random()*3)      #第一次猜的门
    : X. f- `& |9 H: @6 G# b' ?  o        aim=[0,1,2]                    #初始化三个门
    ; }/ q8 P7 Q' [- U3 h               
    7 P9 i. z* t6 g/ }: I  z        #找出要主持人打开的门 8 M# b+ G! M" N
            for j in aim:
    & |6 e( s* r# W4 n            if (j!=guss and j!=rightaim):- u; m4 I- m/ q1 G( Z3 C& |6 r
                    openaim = j, |$ r  r6 L* J8 S2 S6 d1 r' y' z
                    break1 K- L( H% R' T5 _3 y( X( L4 k, k
      
    ) t  n' l* j3 u' q' a# Z( D1 n        #找出另一个门
    ( t$ @/ [4 N6 c- a" q3 R' \1 R( t        for j in aim:8 q7 d( {7 ~3 b; T, Z; @
                if (j!=guss and j!=openaim):+ H( S3 T! z% S" `+ E
                    otheraim =j
    4 u$ E" ]. [' t# F* l' p; L) u                break7 S, ?6 x' S. B
    * K- H! V% K' R5 f/ l

    : V/ j) k; P' n) \* G/ ^+ T        #改变选择 ; x2 Y) j) l) Y' m8 ?
            if change:: b0 q! C. V% K2 i* n' D
                guss = otheraim9 L( \. I  r% W( }$ |, f
             
    ( j% ~# n) w+ q+ M1 @4 l        #改变选择之后猜中汽车的次数统计   N* H0 r# T0 A# ^0 s* ~& f/ Z: U
            if guss==rightaim:1 O) ^. l8 }3 F% P4 G
                counts+=1. M8 [9 l! ?$ V& I; F  D8 i! X
            
    0 V2 v) \' }: ^& s0 r            #返回改变选择之后猜中汽车的概率 5 L5 \6 G7 Z' l- H" Q7 r5 j; c
        return counts/times6 y. y" J& A6 |2 S4 v! P
    print "改变选择之后的模拟一千次结果是:",moni(1000)
    ( \: r# e% ~# w4 T1 mprint "改变选择之后的模拟一万次结果是:",moni(10000)
    * }4 w4 L( r( r* W; [print "改变选择之后的模拟十万次结果是:",moni(100000)1 A) ], I  A7 i' M8 `) g
    print "改变选择之后的模拟一百万次结果是:",moni(1000000)$ k# p  Z' ~# N0 Y3 ]5 |; F; D
    print "改变选择之后的模拟一千万次结果是:",moni(10000000)
    . D6 e) V/ w( ?6 M3 G; v! Q' \3 v* n1 t1 g& ~6 E: U" G5 Z1 B8 s% C
    以下是模拟效果截图: 5 M7 r: D' E9 [* C7 n

    8 }0 X" H% K! S1 C: m# r6 {2 V9 o
    鄙人最后说几句:
    ; Z1 X% ^) z! Y0 `/ } 从模拟的结果上来看还算是成功的,随着模拟的次数越来越多,结果越来越接近2/3,本来想打算再提高模拟次数的,但由于我的本本比较渣,会卡爆,所以只模拟到一千万次。
    $ R0 `8 h4 q1 y7 k* G
    @百年孤独 @数学中国—罂粟 @madio ) Y" J. C: G6 V6 j
    ps:不排除有错误,欢迎指正,欢迎交流,转载请注明出处,版权所有。

    & C% Y9 i0 T, N; ~$ T
    / f, ?2 |" x4 M; j, I: r! d1 Z
    % R6 t( W+ ]4 h- I
    , x3 z: D1 s6 o) H
    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-4-19 16:47 , Processed in 0.426256 second(s), 49 queries .

    回顶部