选哪扇门得奖金的算法

一道题目:台上有三扇门,其中一扇门后藏有现金100万,主持人叫你选择其中一扇门后,然后主持人在余下的门中排除一个,这时问你要不要更换选择?

下面给出数学说明

不换门是很简单的古典概型
这里写图片描述
换门中奖等价于第一步要选错等价于p=2/3
这里写图片描述
同理四扇门和更一般 的n扇门结果如下:
这里写图片描述

下面提供两种算法,第一种是我做的,第二种来自网上原文链接,计算百万次.

import numpy as np
import random
batch_size=1000000

print('sample:{}'.format(batch_size))

A=np.zeros((batch_size,3))

A[range(batch_size),np.random.choice(3,batch_size)]=1


count=[]
for k in A:
    m=list(k)
    e=[0,1,2]
    random.shuffle(e)

    h=e[0]
    t=m[h]
    if t==0:
        count.append(1)


acco=len(count)/ batch_size     
print('换个门后获胜的概率为=',round(acco,3))


count=[]
for k in A:
    m=list(k)
    e=[0,1,2]
    random.shuffle(e)

    h=e[0]
    t=m[h]
    if t==1:
        count.append(1)


acc1=len(count)/ batch_size     
print('不换门获胜的概率为=',round(acc1,3)) 
sample:1000000
换个门后获胜的概率为= 0.666
不换门获胜的概率为= 0.334


import bumpy as np
batch_size=100000

print('sample:{}'.format(batch_size))

A=np.zeros((batch_size,3))

A[range(batch_size),np.random.choice(3,batch_size)]=1



B=np.zeros((batch_size,3))

B[range(batch_size),np.random.choice(3,batch_size)]=1

acco=np.sum(A+B==2)/batch_size
print('acc0:{}'.format(acco))
I=np.argmin(A+B,axis=1)
C=np.zeros((batch_size,3))

C[range(batch_size),I]=1

F=1-(C+B)
acc1=np.sum(A+F==2)/batch_size

print('acc1:{}'.format(acc1))
sample:100000
acc0:0.33311
acc1:0.66689
posted @ 2022-08-19 22:58  luoganttcc  阅读(3)  评论(0编辑  收藏  举报