QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 6430|回复: 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
    直觉的欺骗,三门悖论的模拟
    以下描述来自百度百科: ' w! N2 H5 ^- N/ I, U- |
    三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let's Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机会率?如果严格按照上述的条件,即主持人清楚地知道,哪扇门后是羊,那么答案是会。换门的话,赢得汽车的机率是2/3。
    8 g9 I( J- J: U9 [) n% {9 v6 i+ k5 f$ d' ~# _
    鄙人谈几句话:7 u0 w4 M# D( z# j4 t
    很多人都认为改变选择之后是二选一的情况,认为赢得汽车的概率是1/2,包括伟大的数学家鄂尔多斯都这样认为。但是我们要用事实来证明,如果真实做这个实验,会消耗太多资源,下面由鄙人用计算机编程来模拟这个情形。源码公开,如果有大神觉得不妥,欢迎指正。
      c' \! a4 z* v* E/ G% e
    7 P; T" C$ @6 ^4 H! E  U! r7 X/ h) z以下是鄙人的python模拟程序:
    : ]% b& N4 q% N: Y4 N       #Author : Naupio! |9 @  Z+ B  ]! b% r8 t6 |. k( }
    import random as rd) R+ m1 G; d% N& N8 n
    change = True
    / h+ _: t( Z" U  \' r2 Q6 Rdef moni(times=10000):$ ^9 ?1 o& e* w" A5 e' R
        counts = 0.0! a. t( `: Q9 h  Q8 j' v  e! J  j' n% f
        for i  in range(times):
    " s/ h, J; R* b" a: {        rightaim = int(rd.random()*3)  #汽车所在的门
    4 g4 ~! l! Z. c3 a. l$ b        guss = int(rd.random()*3)      #第一次猜的门+ i# V8 i* z0 N0 d/ Y5 G
            aim=[0,1,2]                    #初始化三个门
    " v: Y- z; H  ?" Z' C2 y7 P               $ Q% T# Z( @* w0 i. ^5 l
            #找出要主持人打开的门
    * p" @1 w) J  k( t% a8 c$ t, R        for j in aim:! }$ F& I3 C9 P5 T
                if (j!=guss and j!=rightaim):. m% l) D( {( P  `5 N
                    openaim = j
    3 G! A% O) w6 w- B                break0 T2 C  f7 V* ^  }4 o
      ' z# ?4 {7 @. J( Y8 m  W$ {. X! c! [% {
            #找出另一个门
    3 \7 @; }" U+ j1 S/ s4 w" f! R+ s        for j in aim:
    ! }3 K. F" l9 P$ ]2 e1 j, L/ l8 V            if (j!=guss and j!=openaim):
    - _; _' p1 o+ f3 S1 \                otheraim =j
    3 o* ~0 i$ B" k4 s+ h1 J3 F4 X6 y" J& H                break
    8 N5 D. G0 C9 S" _% w/ [% `2 q
    & H3 Y% V3 L& o7 p
    5 y- b7 d0 @6 S8 Z) Q        #改变选择
    # l! ~. a- q4 ?' g1 O8 a1 t        if change:
    3 P* ^- Y8 i- d            guss = otheraim0 J- r8 ]/ O1 X( T. M& r0 U8 J) f
             
    ' _4 I& y1 \1 J  c* `. _/ z        #改变选择之后猜中汽车的次数统计 / h6 o6 p" Y9 v% D
            if guss==rightaim:
    % h. V3 L) q0 x6 _( o            counts+=1" c8 x" v5 i* ?) K( B
            
    , K1 h+ g7 K: d6 \' M7 ~8 R; Z            #返回改变选择之后猜中汽车的概率 8 w( S& n. ]/ G$ c0 ~+ U4 ^& f1 D
        return counts/times
    / H# a4 t+ `  w4 w2 eprint "改变选择之后的模拟一千次结果是:",moni(1000)+ d0 A8 Q( A  R6 G$ r
    print "改变选择之后的模拟一万次结果是:",moni(10000)
    7 f; M7 Z9 |" M5 bprint "改变选择之后的模拟十万次结果是:",moni(100000)6 @  t9 F6 e: |
    print "改变选择之后的模拟一百万次结果是:",moni(1000000)1 ?& c" x. c( S0 u8 j: l0 K$ k# f$ {
    print "改变选择之后的模拟一千万次结果是:",moni(10000000) ' ?2 Y  w' Z- m) T/ F$ D1 ^1 W
    0 M! e9 {1 f: _7 [, z. \& e" n
    以下是模拟效果截图: % S4 L! {; U3 W' h- R3 z% N
    2 {) n& J0 B5 p4 t$ u
    6 O2 e4 y0 A: b  N0 }$ T2 H# I
    鄙人最后说几句:
    6 W/ @" U( b- w' E' u) C 从模拟的结果上来看还算是成功的,随着模拟的次数越来越多,结果越来越接近2/3,本来想打算再提高模拟次数的,但由于我的本本比较渣,会卡爆,所以只模拟到一千万次。* r+ D6 x7 W( o$ [4 l) o7 o- C
    @百年孤独 @数学中国—罂粟 @madio ; b5 {( g4 N: F) X+ W0 N4 \# e
    ps:不排除有错误,欢迎指正,欢迎交流,转载请注明出处,版权所有。
    ) M% v. W! g1 k. T- N. M

    4 U7 @9 `1 m. K  e2 O/ C

    * ~4 W0 v, h7 w2 g& R* X4 b5 L- y0 F6 W% I8 k- Z* w$ O: d& b
    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-9-3 19:57 , Processed in 1.366947 second(s), 50 queries .

    回顶部