选哪扇门得奖金的算法
一道题目:台上有三扇门,其中一扇门后藏有现金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