QQ登录

只需要一步,快速开始

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

    ( x, e! o0 o$ ~0 N0 \鄙人谈几句话:7 s4 u/ k" t' g
    很多人都认为改变选择之后是二选一的情况,认为赢得汽车的概率是1/2,包括伟大的数学家鄂尔多斯都这样认为。但是我们要用事实来证明,如果真实做这个实验,会消耗太多资源,下面由鄙人用计算机编程来模拟这个情形。源码公开,如果有大神觉得不妥,欢迎指正。$ w8 r, W. X2 Q+ B) Z
    4 F/ S% W) f1 r* @0 |
    以下是鄙人的python模拟程序:
    - ?& L9 m) ^; Y- Y& C+ Y4 s       #Author : Naupio0 S; k  W, a  x0 @7 A
    import random as rd
    , Z8 g% T, ?( K  Q1 x7 Q/ mchange = True
      a% e+ X# [, U/ s5 S8 \- S1 p3 pdef moni(times=10000):
    8 e6 m5 J4 @5 F' u+ O2 x( i" R    counts = 0.0
    . I% @9 g* n9 N0 d5 H    for i  in range(times):
    3 D& O" f: Y) o) A' D' \' X        rightaim = int(rd.random()*3)  #汽车所在的门/ i+ K4 R1 a- c3 N: H
            guss = int(rd.random()*3)      #第一次猜的门
      r+ N2 p) H/ H        aim=[0,1,2]                    #初始化三个门# D3 w7 d1 ]: S) N4 _
                   2 ^) \5 V/ ^& V
            #找出要主持人打开的门 7 o( t# W6 P/ ?: G3 ~" j
            for j in aim:
    . @  l% a! `# g1 F6 B) {- j            if (j!=guss and j!=rightaim):
    4 e' g! g8 O: R& a                openaim = j
    % {! n5 k; l6 z- K& B7 E+ E                break0 b6 D+ M5 _, W! ~9 ~
      ' Y" ^6 q" ^8 S, I8 @% M/ f
            #找出另一个门 1 C0 ?* u  o& t% m: N4 \
            for j in aim:
    6 I# k. r3 A" {7 d            if (j!=guss and j!=openaim):5 u9 [6 d5 W- m. \
                    otheraim =j
    7 l- z& f7 H! V) P( b4 }( h                break4 Q" T/ t6 e+ t7 |+ f

    ! J. b, G# p  }6 d# \* g: M
    2 |; h+ b6 S6 J* F/ A7 a$ }' G, m        #改变选择
    + \; K) ?5 ^( T! g# F        if change:
    , y2 P& [$ y) j2 ]& e            guss = otheraim! R% f0 _" u; K
             
    3 V8 \, l/ B7 c' l4 ~- [        #改变选择之后猜中汽车的次数统计
    7 h2 g) v8 F; Y1 G        if guss==rightaim:
    - ^3 ~9 I8 {3 H7 N! Z  u" W$ `/ m            counts+=1
    9 j7 b( a8 }) w% f5 O- k9 X        % c' G7 D2 Q* c4 f) b# |3 K
                #返回改变选择之后猜中汽车的概率 8 M2 f2 D& L' q0 ]0 i, |. y' d
        return counts/times
    ! s6 e. j, Z/ F+ r! Wprint "改变选择之后的模拟一千次结果是:",moni(1000)
    1 I- B# m5 V/ X; c; E( H* y. o2 Cprint "改变选择之后的模拟一万次结果是:",moni(10000)) q  s- Q- U5 S$ s% f3 R& g( d) G
    print "改变选择之后的模拟十万次结果是:",moni(100000)
    # J# D3 k" x0 w( z: q; n* w8 Jprint "改变选择之后的模拟一百万次结果是:",moni(1000000). E/ x: S& R) H5 U. Z3 K  H
    print "改变选择之后的模拟一千万次结果是:",moni(10000000) 4 m# k5 y- Y0 d

    ! _+ B) \* x/ h以下是模拟效果截图:
    . {5 q  e) a; Q) q
    * s( }" d: X5 z$ D% `. \! o  e
    7 V# D% J7 Z3 b. y/ H9 d1 T" F鄙人最后说几句:
    " {( B( [9 R) d" m. p 从模拟的结果上来看还算是成功的,随着模拟的次数越来越多,结果越来越接近2/3,本来想打算再提高模拟次数的,但由于我的本本比较渣,会卡爆,所以只模拟到一千万次。( }2 ?" X! E- m: v, A2 J4 e
    @百年孤独 @数学中国—罂粟 @madio
    * U0 A( F% H: G% ~8 d- Bps:不排除有错误,欢迎指正,欢迎交流,转载请注明出处,版权所有。

    - [. n( z* @, w6 Y, _- g
    8 `6 w4 Q: L' s5 q0 G

    " ]4 F1 @3 c  u
    : n" ]1 v5 u: q/ v! u6 H* T% d$ Y' }
    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 09:08 , Processed in 0.369873 second(s), 50 queries .

    回顶部