zoukankan      html  css  js  c++  java
  • 汽车山羊问题的分析以及Python和MATLAB仿真实验

    汽车和山羊问题

    题目的背景介绍:

    现有三扇门,其中一扇门后是一辆车,另外两扇门后是一头山羊。

    选手从1,2,3号三扇门中选出一扇(仅标记,不打开),接着主持人再从未标记的两扇门中选出一扇打开。

    主持人知道每扇门后放的是什么,所以每次主持人都选择后面是羊的那扇门打开。

    选手有一次改变自己选择的机会。

    最后,打开选手最终选中的那扇门,以选手最终选择的是车为获胜。

    请问选手是否需要改变选择?

    汽车和山羊问题求解

    一、对该问题的枚举分析

    是否更换 选择几号门 如果车在一号门后 如果车在二号门后 如果车在三号门后
    # 不换 一号 (√) (×) (×)
    二号 (×) (√) (×)
    三号 (×) (×) (√)
    # 换 一号 (×) (√) (√)
    二号 (√) (×) (√)
    三号 (√) (√) (×)

    ​ 令更换选择且成功为事件A,不更换选择且成功为事件B,那么显然我们可以得出二者的概率为:

    [P(A)=frac{1}{3}quadquadquad P(B)=frac{2}{3} ]

    二、对该问题的条件概率概率分析

    ​ 令更换选择为事件A,不更换选择为事件B,显然

    [P(A)=P(B)=frac{1}{2} ]

    1. 如果没有更换选择

    ​ 车在一、二、三号门后分别为事件a、b、c,则

    [P(a)=P(b)=P(c)=frac{1}{3} ]

    ​ 令选择一、二、三号门分别为事件1,2,3,则

    [P(1)=P(2)=P(3)=frac{1}{3} ]

    ​ 那么显然没有更换选择且成功的概率设为(P(alpha))就是

    [P(alpha)=P(1cap a)+P(2cap b)+P(3cap c)=1/9+1/9+1/9=1/3 ]

    ​ 故(P(alpha)=1/3)

    2. 如果更换了选择

    ​ 显然我们可知如果更换选择,那么如果刚开始选的是对的则最后是错的,刚开始选的是错的则最后是对的

    ​ 车在一、二、三号门后分别仍设为事件a、b、c,则

    [P(a)=P(b)=P(c)=frac{1}{3} ]

    ​ 令选择一、二、三号门也分别为事件1,2,3,则

    [P(1)=P(2)=P(3)=frac{1}{3} ]

    ​ 那么显然更换选择且成功的概率设为(P(eta))就是

    [P(eta)=P(2cap a)+P(3cap a)+P(1cap b)+P(3cap b)+P(1cap c)+P(2cap c)\ =1/9+1/9+1/9+1/9+1/9+1/9=2/3 ]

    ​ 故(P(eta)=2/3)

    三、基于(MATLAB)的模拟实验

    先用(Python)做了模拟实验

    from random import*
    TIMES = 10000
    nochange=0             			        #初始化不改选择的次数
    change=0           		 		#初始化更改选择的次数
    for i in range(TIMES):
    	Door=randint(0,2)                       #汽车在哪个门
    	guess=randint(0,2)                      #我的选择是哪个门
    	if Door==guess:                         #猜对了
    		nochange+=1    			#不改选择的次数+1
    	else:
    		change+=1   			#更改选择的次数+1
    print("不改选择:{}".format(nochange/TIMES))
    print("更改选择:{}".format(change/TIMES))
    # 以下为测试数据
    # 不改选择:0.332  更改选择:0.668
    # 不改选择:0.3283 更改选择:0.6717
    # 不改选择:0.331  更改选择:0.669
    # 不改选择:0.3308 更改选择:0.6692
    # 不改选择:0.3369 更改选择:0.6631
    

    可以看到模拟实验的频率都稳定在上述分析得出的理论概率附近

    另用(MATLAB)也做了模拟

    n = 100000;						%%n代表随机次数
    nochange = 0;					        %%不改变选择
    change = 0;						%%改变选择
    for i= 1 : n					        %%车在哪个门后
        x = randi([1,3],1);
    	y = randi([1,3],1);			        %%我的选择哪个门
    if x == y						%%选对了
          nochange = nochange + 1;	%%不改选择的次数+1
    end 	
    if x ~= y 						%%选错了
        change = change + 1;		                %%更改选择的次数+1
    end
    end
    disp(nochange/n);				        %%输出不改变选择时的获奖概率
    disp(change/n);					        %%输出改变选择时的获奖概率 
    %%以下为测试数据
    %%不改变0.3342 改变0.6658
    %%不改变0.3286 改变0.6714
    %%不改变0.3351 改变0.6649
    
  • 相关阅读:
    对象,类,封装,继承,多态是什么
    面向对象和非面向对象程序的区别是什么?
    什么是OOA,OOP
    git stash git tag
    从一个远程仓库同步向另一个远程仓库同步代码
    VScode 配置rust开发环境
    IAR ICCARM V8.32.3在Windows Server端进行Ollydbg破解
    阅读笔记
    FP32转FP16能否加速libtorch调用
    阅读笔记-Chained-Tracker
  • 原文地址:https://www.cnblogs.com/QSun77/p/14169116.html
Copyright © 2011-2022 走看看