Python:蒙特卡罗方法模拟解决三门问题

2023-10-26

蒙特卡罗方法与三门问题

蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法。是一种统计学的方法、模拟方法,通过大量随机样本模拟问题,从而获得所要计算的值。

三门问题:

三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let's Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机率?如果严格按照上述的条件,即主持人清楚地知道,自己打开的那扇门后是羊,那么答案是会。不换门的话,赢得汽车的几率是1/3。换门的话,赢得汽车的几率是2/3。

蒙特卡洛思想在三门问题上的应用

应用蒙特卡洛重点在使用随机数来模拟类似于赌博问题的赢率问题,并且通过多次模拟得到所要计算值的模拟值。在三门问题中,用0、1、2分别代表三扇门的编号,在[0,2]之间随机生成一个整数代表奖品所在门的编号prize,再次在[0,2]之间随机生成一个整数代表参赛者所选择的门的编号guess。用变量change代表游戏中的换门(ture)与不换门(false):

 这样大量重复模拟这个过程(10000次或者100000次)就可以得到换门猜中的概率和不换门猜中的概率。

使用python(python对缩进有要求,要特别注意),编程实现:

# -*- coding: utf-8 -*-
import random


#玩游戏,change:是否换门
def play(change):
    #奖品为[0,2]之间的一个随机整数
    prize=random.randint(0,2)
    #在[0,2]之间生成一个随机整数作为参赛者猜的门的编号
    guess=random.randint(0,2)
    #假设一开始猜中
    if(prize==guess):
        if(change):
            return False
        else:
            return True
    #假设一开始猜错
    else:
        if(change):
            return True
        else:
            return False

#计算赢率,N代表模拟次数,change代表是否换门
def winRate(change,N):
    win=0
    #range范围为:[0,N)
    for i in range(0,N):
        if (play(change)):
            win=win+1
    print("中奖率为:")
    print(win/N)

N=1000000
print("玩"+str(N)+"次,每一次都换门:")
winRate(True,N)
print('\n')
print("玩"+str(N)+"次,每一次都不换门:")
winRate(False,N)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:蒙特卡罗方法模拟解决三门问题 的相关文章

  • Java 中搜索和排序算法的高效实现

    有没有人有关于常见搜索和排序算法的一组 Java 代码实现的良好参考 剥猫皮的方法有很多种 很容易在网上找到各种算法的 Java 代码 但是 Java 中是否有实现这些不同算法的最有效方法的列表 例如有http www algorithmi
  • 如何将 PriorityQueue 恢复到方法调用之前的初始状态?

    我正在做一道练习题 这个问题基本上是你传入一个 PriorityQueue 和某个 k 并且你要返回该 PriorityQueue 中的第 k 个最小值 您还可以将 PriorityQueue 恢复到其初始状态 并可以使用一个堆栈或队列作为
  • 将均匀分布转换为正态分布

    如何将均匀分布 大多数随机数生成器产生的结果 例如在 0 0 和 1 0 之间 转换为正态分布 如果我想要我选择的平均值和标准差怎么办 方法有很多 Do not使用博克斯穆勒 特别是当你画很多高斯数时 Box Muller 产生的结果被限制
  • 3D 空间:使用鼠标指针沿着对象指向的方向

    给定相机面向的方向的 3D 向量以及 3D 空间中 3D 对象的方位 方向向量 如何计算鼠标指针在屏幕上必须遵循的 2 维斜率 以便在视觉上沿着所述物体的方向移动 基本上 我希望能够单击箭头并通过拖动它来使其前后移动 但前提是鼠标指针沿着箭
  • KMP算法中出现不匹配的文本转移背后的原因是什么?

    我一直在尝试理解KMP算法 但我仍然没有清楚地理解 kmp 算法背后的推理 假设我的文字是bacbababaabcbab模式是abababca 通过使用最长适当前缀的长度规则sub pattern 与正确的后缀匹配sub pattern 我
  • 并行解析器存在哪些概念或算法?

    对于已经以分割格式给出的大量输入数据 并行化解析器似乎很容易 例如单个数据库条目的大列表 或者很容易通过快速预处理步骤进行分割 例如解析大型文本中句子的语法结构 并行解析似乎有点困难 它已经需要相当多的努力来定位给定输入中的子结构 通用编程
  • 完美平衡二叉搜索树

    我有一个理论问题Balanced BST 我想建立Perfect Balanced Tree具有2 k 1节点 从常规unbalanced BST 我能想到的最简单的解决方案是使用排序Array Linked list并递归地将数组划分为子
  • 非不相交集并集的最佳算法是什么?

    假设有两个 非不相交 点集 笛卡尔空间 执行这两个集的并集的最佳情况复杂度算法是什么 由于点坐标是任意的 并且它们之间没有特殊关系 因此我不认为这个问题是一个几何特定问题 这是有效地将 S1 和 S2 合并成新集合 S 的通用问题 我知道有
  • 在 Python 中高效操作笛卡尔坐标列表

    背景 我正在编写一个程序 用于处理与各种规则形状的顶点网络相关的大量数据 我有一个工作生成器 它根据一系列用户输入参数生成与所述形状的顶点相对应的笛卡尔坐标列表 然后 数据被传递到过滤器 过滤器清除重复的条目 对数据进行排序和各种其他功能
  • (x % 64) == (x & 63) 背后的基本原理是什么? [复制]

    这个问题在这里已经有答案了 可能的重复 按位与代替模运算符 https stackoverflow com questions 3072665 bitwise and in place of modulus operator 有人可以解释使
  • 使用 MinMax 和 Alpha-Beta 剪枝找到最佳移动

    我正在为游戏开发 AI 我想使用MinMax算法与Alpha Beta 修剪 我对它的工作原理有一个粗略的了解 但我仍然无法从头开始编写代码 所以我花了两天的时间在网上寻找某种伪代码 我的问题是 我在网上找到的每个伪代码似乎都是基于寻找最佳
  • 二和 Leetcode 解释、Hashmap、Javascript

    我只是想知道谁能一步一步解释这个解决方案的算法 我不知道哈希图是如何工作的 您能否还提供一个使用哈希图的基本示例 以便我理解该算法 谢谢你 var twoSum function nums target let hash for let i
  • 旧的 Top Coder 谜语:通过插入 + 来生成数字

    我正在考虑 给定一串数字 找到该字符串等于某个目标数字所需的最少加法次数 每次添加都相当于在数字字符串中的某处插入一个加号 插入所有加号后 照常计算总和 例如 考虑 303 和目标总和为 6 最佳策略是 3 03 我会用蛮力解决它 如下所示
  • 排序数组中的最小成本路径

    给定一个排序数组A e g 4 9 10 11 19 搬家费用i gt j is abs A j A i 从给定元素开始 例如10 找出成本最低的路径 而无需两次访问同一元素 所以在这个例子中解决方案是10 gt 9 gt 4 gt 11
  • 处理单元测试和集成测试之间的重复

    我有一个由多个类实现的算法 所有类都由单元测试覆盖 我想重构它 这将改变两个类的行为 当我更改一个类及其测试时 所有单元测试都会通过 但在重构完成之前算法会变得不正确 这个例子说明 单元测试的完全覆盖有时是不够的 我需要在输入输出方面对整个
  • Array.Sort 使用重要的比较函数

    考虑以下代码C 5 0 简而言之 p 289 int numbers 1 2 3 4 5 Array Sort numbers x y gt x 2 y 2 0 x 2 1 1 1 这给出了结果 3 5 1 2 4 我在纸上尝试了这个并得到
  • 高效生成所有小于 N 的合数(及其因式分解)

    我想构建一个高效的 Python 迭代器 生成器 它会产生 所有小于 N 的合数 连同他们的质因数分解 我将其称为 composites with factors 假设我们已经有小于 N 的素数列表 或者可以执行相同操作的素数生成器 请注意
  • 3Leetcode求和算法

    我在使用 3sum 算法的以下输入时遇到问题 我是 得到 超过时间限制 我的算法对于这个输入来说太慢了吗 有什么建议如何改进吗 leetcode原题 给定一个由 n 个整数组成的数组 nums nums 中是否存在元素 a b c 使得 a
  • Microsoft 的 STL::list::sort() 使用哪种排序算法?

    注 我不小心发帖了这个问题 https stackoverflow com questions 1717773 which sorting algorithm is used by stls listsort没有指定我正在使用哪个STL实现
  • 如何求能被7整除的数字个数?

    给定一个整数N 如何有效地找到范围内能被 7 整除的数字的个数 其逆序也能被 7 整除 0 10 N 1 Example For N 2 回答 4 0 7 70 77 0到99之间所有能被7整除的数字 它们的倒数也能被7整除 我的方法 简单

随机推荐

  • Kotlin数据类型(一:数据类型)

    一 Boolean Boolean类型有两种类型的 true flase val a Boolean true val b Boolean false 二 Number数据类型 package net println kotlin auth
  • 强化学习 DQN 速成

    强化学习 DQN 速成 这是对 深度强化学习 王树森 张志华 中 DQN 部分的缩写以及部分内容的个人解读 书中的 DQN 是一个相对终极版本的存在 相信体量会比网络上其他资料要大很多 基本概念 我们通过贪吃蛇来引入几个基本概念 符号 中文
  • Flink Windows(窗口)详解

    Windows 窗口 Windows是流计算的核心 Windows将流分成有限大小的 buckets 我们可以在其上应用聚合计算 ProcessWindowFunction ReduceFunction AggregateFunction或
  • MySQL redo log和undo log

    Redo Log REDO LOG称为重做日志 当MySQL服务器意外崩溃或者宕机后 保证已经提交的事务持久化到磁盘中 持久性 InnoDB是以页为单位去操作记录的 增删改查都会加载整个页到buffer pool中 磁盘 gt 内存 事务中
  • Matlab矩阵处理

    一 通用的特殊矩阵 zero m zeros m n zero size A 产生全为零的矩阵 格式下同 ones 产生全为一的矩度阵 eye 产生单位矩阵 rand 产生在 0 1 区间均匀分布的矩阵 randn 产生均值为0 方差为1的
  • C计数问题---2023河南萌新联赛第(三)场:郑州大学

    解析 n 可以分成两个数 记录每个数的因子对数 乘起来即可 注意当因子相同时 只 1 include
  • Java文件类型校验之Apache Tika

    一 背景 判断文件类型一般可采用两种方式 1 后缀名判断 简单易操作 但无法准确判断类型 2 文件头信息判断 通常可以判断文件类型 但有些文件类型无法判断 如word和excel头信息的前几个字节是一样的 无法判断 使用apache tik
  • flink watermark 生成机制与总结

    flink watermark 生成机制与总结 watermark 介绍 watermark生成方式 watermark 的生成值算法策略 watermark策略设置代码 watermark源码分析 watermark源码调用流程debug
  • 你知道几种延迟队列的实现方案?

    在开发中 往往会遇到一些关于延时任务的需求 例如 生成订单30分钟未支付 则自动取消 生成订单60秒后 给用户发短信 对上述的任务 我们给一个专业的名字来形容 那就是延时任务 那么这里就会产生一个问题 这个延时任务和定时任务的区别究竟在哪里
  • Reid训练代码之数据集处理

    本篇文章是对yolov5 reid这篇文章训练部分的详解 该项目目录为 config reid输入大小 数据集名称 损失函数等配置 configs 训练时期超参数定义 data 存储数据集和数据处理等代码 以及yolov5类别名称等 eng
  • 怎样更改itunes备份位置_什么是iTunes备份文件?

    由于它是由Apple创建的 因此iTunes改变了用户组织和播放音乐和视频的方式 iTunes已经允许数百万用户通过iTunes Store下载他们喜爱的曲目 歌曲和视频 值得庆幸的是 iTunes拥有一个先进的备份系统 能够备份和恢复Ip
  • Android libdvm.so 与 libart.so

    Android libdvm so 与 libart so 系统升级到5 1之后 发现system lib 下面没有libdvm so了 只剩下了libart so 对于libart模式 从4 4就在Developer optins里面就可
  • FsonFormat Eclipse Plugin 一键解决复杂JSON ,快速实现JavaBean

    简介 当开发人员或者测试人员在开发或者测试接口中 去获取到接口返回的结果值时 都要通过JSONObject和JSONArray解析json结构 然后再通过For循环遍历相应的Key 最后把value值进行App展示或者校验是否预期结果 编写
  • 有关树莓派+arduino构建小车

    这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中 居左 居右 Sma
  • eclipse中没有runtime environments_Go语言中的panic和recover

    初识别panic和recover 本节将分析两个经常成对出现的关键字 panic 和 recover 这两个关键字都与 defer 有千丝万缕的联系 也都是 Go 语言中的内置函数 但是提供的功能却是互补的 panic 能够改变程序的控制流
  • opencv 图像雾检测_雾的检测算法

    雾的检测算法相对来说文献不是很多 这次和大家介绍两篇相对来说比较容易实现的两篇文章 其中一篇是基于灰度直方图的方式进行分析检测 另一篇是将rgb图像空间转化为hsv空间进行分析检测 1 灰度图检测 首先来说第一片 Fog Detection
  • 如何用ai写文章?这三个软件可以自动生成文章

    随着人工智能技术的不断发展 ai写作已经成为了当今的热门话题 它是指利用机器学习 自然语言处理等技术 让机器能够像人类一样写作 相较于传统写作方式 ai写作大大提高了写作的效率和质量 可以让我们的创意和技术相融合 其应用范围也非常广泛 无论
  • 探索编程世界的宝藏:程序员必掌握的20大算法

    程序员必须掌握哪些算法 文章目录 1 引言 2 冒泡排序算法 编程世界的排序魔法 3 选择排序算法 排序世界的精确挑选器 4 插入排序算法 排序世界的巧妙插珠者 5 快速排序算法 排序世界的分而治之大师 6 归并排序算法 排序世界的合而为一
  • 统计并输出该字符串中26个英文字母

    字符串 第3题 描述 输入一个字符串 统计并输出该字符串中26个英文字母 不区分大小写 出现的次数 输入 输入一个字符串 输出 分行输出26个英文字母 不区分大小写 出现的次数 输入示例 I am a student 输出示例 a 2 d
  • Python:蒙特卡罗方法模拟解决三门问题

    蒙特卡罗方法与三门问题 蒙特 卡罗方法 Monte Carlo method 也称统计模拟方法 是一种统计学的方法 模拟方法 通过大量随机样本模拟问题 从而获得所要计算的值 三门问题 三门问题 Monty Hall problem 亦称为蒙