罗兵 2017-04-15 496浏览量
本文使用蒙特卡罗方法验证蒙提霍尔游戏的结论。
以下代码,本人原创!
import random
# 蒙提霍尔游戏
def play_game(strategy='nonchange'):
# 门牌编号
doors = [0,1,2]
# 门后的奖品
gifts = ['goat', 'goat', 'car']
random.shuffle(gifts)
# 观众挑选一扇门(编号)
viewer_choice = random.choice(doors)
# 主持人从剩下的两扇门中,打开门后是是山羊的某一扇门(编号)
host_open = random.choice(list(filter(lambda x:gifts[x]=='goat' and x!=viewer_choice, doors)))
# 顺便,也标记剩下的一扇门(编号)
viewer_lift = list(filter(lambda x:x!=viewer_choice and x!=host_open, doors))[0]
# 观众根据策略获得的奖品
viewer_gift = [gifts[viewer_choice], gifts[viewer_lift]][strategy=='change']
# 根据策略成功与否,返回 1、0 (为方便计数)
return [0, 1][viewer_gift=='car']
# 游戏次数
n = 10000
# 蒙特卡罗方法,模拟 n 次游戏
# 策略一:不改变选择
p = sum((play_game('nonchange') for _ in range(n))) / n # 频率 ≈ 概率
print('nonchange:', p)
# 蒙特卡罗方法,模拟 n 次游戏
# 策略二:改变选择
p = sum((play_game('change') for _ in range(n))) / n # 频率 ≈ 概率
print('change:', p)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
了解行业+人工智能最先进的技术和实践,参与行业+人工智能实践项目