译者:大表哥、wiige来源:AI研习社

什么是蒙特卡罗模拟?

蒙特卡罗方法是一种使用随机数和概率来解决复杂问题的技术。蒙特卡罗模拟或概率模拟是一种技术,用于了解金融部门、项目管理、成本和其他预测机器学习模型中风险和不确定性的影响。风险分析几乎是我们做出的每一个决定的一部分,因为我们在生活中经常面临不确定性、模糊性和变化无常。此外,即使我们拥有前所未有的信息获取渠道,我们也不能准确预测未来。蒙特卡洛模拟使我们能够看到决策的所有可能结果,并评估风险影响,从而在不确定的情况下更好地做出决策。在本文中,我们将通过五个不同的例子来理解蒙特卡罗模拟方法。

应用领域:金融、项目管理、能量、制造业、工程学、研究和开发、保险、石油和天然气公司、交通、环境等。

举例:

  • 抛硬币示例
  • 用圆和平方估计PI
  • 三门问题
  • 蒲丰投针问题

  • 为什么赌场总是赚的?

抛硬币示例  

抛硬币中奖的概率是1/2。但是,我们有没有办法从实验上证明这一点呢?在这个例子中,我们将使用蒙特卡罗方法迭代地模拟抛硬币5000次,以找出为什么头部或尾巴的概率总是1/2。如果我们重复抛硬币很多很多次,那么我们可以在概率值的准确答案上获得更高的精确度。在这个例子中,我们将使用Monte-Carlo方法反复模拟抛硬币5000次,以找出头部或尾部的概率始终是1/2的概率。正面和反面,数学表示在抛硬币时:正面和反面硬币的公式示例接下来,我们将用蒙特卡罗方法对这个公式进行实验证明。

Python实现:

1.导入所需的库:为我们的抛硬币示例导入所需的库2.投币功能:一个简单的函数,将结果随机排列在0和1之间,头部为0,尾部为13.检查函数输出:运行Coin_Flip()函数4.主要功能:计算概率并将概率值附加到结果5.调用main函数:调用Monte Carlo主函数,并绘制最终值如图8所示,我们显示在5,000次迭代之后,获得尾部的概率为0.502。因此,这就是我们可以如何使用蒙特卡罗模拟来通过实验找到概率的方法。

使用圆形和正方形估算PI

圆形和正方形的简单面积分别计算圆形和正方形的面积要估计PI的值,我们需要正方形的面积和圆的面积。为了找到这些区域,我们将在表面上随机放置点,并计算落在圆内的点和落在正方形内的点。这将给我们一个估计的面积。因此,我们将使用点数作为面积,而不是使用实际面积。在下面的代码中,我们使用Python的Turtle模块来查看点的随机放置。

python实现:

1.导入需要的库为我们的π示例导入所需的库2.可视化这些点:绘制图形3.初始化部分必填数据:初始化数据值4.主要功能:实现主功能5.绘制数据:绘制数据值6.输出图15:使用蒙特卡罗方法的π近似。值的数据可视化值的数据可视化如上图所示,我们可以看到,经过5000次迭代后,我们可以得到PI的近似值。另外,请注意,随着迭代次数的增加,估计误差也呈指数下降。

三门问题

假设你正在参加一个游戏节目,你可以从三扇门中选择一扇:一扇门后面是一辆汽车;另一扇门后面是山羊。你选了一扇门,假设是1号门,主人,谁知道门后面有什么,就打开另一扇门,比如说3号门,里面有一只山羊。主人然后问你:你是坚持自己的选择,还是选择另一扇门? 选择不同的门对你有好处吗?  事实证明,从概率上说,打开门对我们有利。具体分析:导入所需库2. 初始化数据:初始化代表门的枚举变量和存储概率值的列表3. Main函数:用蒙特卡洛模拟来实现主函数.4. 调用main函数:调用主函数模拟1000次博弈5. 输出:得到坚持自己的选择或换门的近似获胜概率.在上图中,我们发现在1000次模拟后,如果我们换门,获胜概率是0.669。因此,我们确信在本例中换门对我们更有利.

蒲丰投针问题

法国贵族Georges-Louis Leclerc,即蒲丰公爵在1777年提出了这样一个问题:

若在一张绘有等距平行线的纸上随意抛一根短针,求针和任意一条线相交的概率

概率取决于方格纸的线间距(d),和针长度(l)——或者说,它取决于l/d的比值。在这个例子里,我们可以认为针长度l≤d。简而言之,我们假设了针不能同时相交于两条不同的线。令人惊讶的是,蒲丰针问题的答案与PI相关。这里,我们将使用用蒙特卡洛法来解蒲丰投针问题,顺便估计出PI的值。不过在此之前,我们要先展示一下解法是如何推导出来的,这样会更有趣。

定理:

如果一根长为l的短针落在一张纸上,而纸上画有距离d≥l的等距线,那么针与任一条线相交的概率为:

蒲丰投针定理

证明:

蒲丰投针问题的可视化首先,我们需要统计出与任意垂线相交的针的数量。若针与任意一条线相交,对于特定的θ值,针与垂线相交的最大和最小可能值为:最大可能值:最大概率值2. 最小可能值:最小可能值因此, 对于特定的θ值,针在垂线上的概率是:针与垂线相交的概率公式这个概率公式局限于特定θ值,在本实验中,θ的范围是0到pi/2。所以,我们需要对所有的θ值做一个积分,得到投针相交的实际概率.对所有θ值积分的投针相交概率公式PI的估计值

由蒲丰投针问题来估计PI:

接下来,我们要用上面的公式来进行实验求得PI值.求PI值现在,因为我们已经知道了l和d的值,所以只要求得了P的值,我们就可以推知PI的值。而要得到概率P,必须要知道相交针数和总针数, 这里的总针数是已知的.下图是计算相交针数的直观图解.可视化表示如何计算针的数量

Python 实现:

  1. Import 所需的库:

导入所需库2. Main 函数:用蒙特卡洛方法模拟蒲丰投针3. 调用main函数:调用main函数模拟蒲丰投针4. 输出:使用蒙特卡洛方法模拟100次投针的数据如上图所示,经过100次的模拟,蒙特卡洛法就能得出一个非常接近PI的值。

为什么赌场总是赚的?

赌场是怎么赚钱的?诀窍很简单--“你玩得越多,他们赚的就越多。” 让我们通过一个简单的蒙特卡罗模拟示例来看看这是如何工作的。考虑一个假想的游戏,玩家必须从一袋筹码中选择一个筹码。

规则:

  1. 袋子里有数字从1到100的筹码。
  2. 用户可以押注于偶数或奇数筹码。
  3. 在这个游戏中,10和11是特殊的数字。如果我们赌偶数,那么10就算奇数,如果我们赌赔率,那么11就算偶数。
  4. 如果我们赌偶数,我们得了10,那么我们就输了。
  5. 如果我们赌的是奇数,我们得了11,那么我们就输了。

如果我们以赔率下注,我们获胜的概率为49/100。获胜的概率为51/100。因此,对于一个奇数下注,彩池优势为= 51 / 100–49 / 100 = 200/10000 = 0.02 = 2%如果我们打赌偶数,则用户获胜的概率为49/100。获胜的概率为51/100。因此,对于一个奇数下注,彩池优势为= 51 / 100–49 / 100 = 200/10000 = 0.02 = 2%综上所述,每下注1美元,就会有0.02美元下注。相比之下,轮盘上最低的单一0优势是2.5%。因此,我们可以肯定,与轮盘赌相比,您在假想的游戏中获胜的机会更大。

Python 实现

Import所需的库:导入赌场模拟所需的库2. 玩家下注:在下注奇数或偶数3. Main 函数:使用蒙特卡洛方法模拟赌场行为4. 最终输出:计算并展示计算结果5. 模拟1000次试试:模拟1000次6. 下注数 = 5图43:  下注5次时的结果可视化  .7.  下注数 = 10:图44: 下注10次时的结果可视化.8.  下注数 = 1000:下注1000次时的结果可视化  9.  下注数 = 5000:下注5000次时的结果可视化  10.  下注数 = 10000:下注10000次时的结果可视化从上面的实验中,我们可以看到,如果玩家在赌博中下注较少,那么有得赚的机会就比较大。有时候实验会得到负数,这意味着玩家输得倾家荡产负债累累,而不是单车变路虎.请注意, 这些比例源于为促进理解的非真实场景,认不赌为赢.

结论

就像任何预测模型一样 模拟结果只有我们的估计值才是好的 重要的是要记住,蒙特卡洛模拟只代表概率而不是确定性。尽管如此,在预测未知的未来时,蒙特卡洛模拟是一个有价值的工具。

AI研习社是AI学术青年和开发者社区,为大家提供一个顶会资讯、论文解读、数据竞赛、求职内推等的技术交流阵地,欢迎登陆www.yanxishe.com加入我们吧~

投稿、转载、媒介合作联系微信号 | bajiaojiao-sz

商务合作联系微信号 | LJ18825253481

Python中表示偶数_蒙特卡洛模拟(Python)深入教程相关推荐

  1. python中的命名空间_深入理解Python中的命名空间和范围

    Python中的命名空间和范围 在Python中,每个包.模块.类.函数和方法函数都拥有一个"名称空间",其中解析了变量名称.下面本篇文章就来带大家认识一下Python中的命名空间 ...

  2. python中获取文件大小_如何在Python中获取文件大小

    python中获取文件大小 We can get file size in Python using the os module. 我们可以使用os模块在Python中获取文件大小. Python中的 ...

  3. python中输入字符串_简单讲解Python中的字符串与字符串的输入输出

    简单讲解Python中的字符串与字符串的输入输出 发布于 2016-03-26 14:35:42 | 110 次阅读 | 评论: 0 | 来源: 网友投递 Python编程语言Python 是一种面向 ...

  4. python中eval函数调用_如何从Python exec()/eval()调用中获取结果?

    我想用Python编写一个工具,通过为每个模拟运行创建一个文件夹和一个带有一些运行特定参数的配置文件来准备模拟研究.在study/ study.conf run1 run.conf run2 run. ...

  5. values在python中的意思_相当于Python的values()字典方法的Javascript

    相当于Python的values()字典方法的Javascript 这个问题已经在这里有了答案: 如何获取Javascript对象的所有属性值(不知道键)?                       ...

  6. python中add函数_如何使用python中的add函数?

    之前向大家介绍过python中的求和函数sum函数,numpy中的sum函数,对于数组可以指定维度进行相加.numpy中还有另一种求和运算方法,即add函数.add函数不仅作用于numpy中加法运算, ...

  7. 详解python中的用法_详解python中*号的用法

    1.表示乘号 2.表示倍数,例如: def T(msg,time=1): print((msg+' ')*time) T('hi',3) 打印结果(打印3次): hi hi hi 3.单个 * (1) ...

  8. python中index函数_详解python中的index函数用法

    1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...

  9. python中怎么计数_浅谈python中统计计数的几种方法和Counter详解

    1) 使用字典dict() 循环遍历出一个可迭代对象中的元素,如果字典没有该元素,那么就让该元素作为字典的键,并将该键赋值为1,如果存在就将该元素对应的值加1. lists = ['a','a','b ...

最新文章

  1. IBM公司新推一个基于云计算的Web分析工具
  2. java AST 表达式_java 编译时注解-AST 抽象语法树简介
  3. win10系统迁移后系统重装_Win10系统迁移教程
  4. modelsim加入xilinx ISE库的方法
  5. hbuilderx简单网页代码_Python爬取网页数据
  6. Mvc项目解决方案分析
  7. JFFS2文件系统挂载过程优化的分析报告
  8. 苹果切换输入法_日语输入法哪个好
  9. 浅谈SQL Server identity列的操作方法
  10. Python环境搭建之OpenCV(转载)
  11. BZOJ 1406: [AHOI2007]密码箱( 数论 )
  12. kdj买卖指标公式源码_八字kdj股票技术指标公式源码(图解)
  13. 20200308模拟赛
  14. linux下libreoffice增加字体,Linux下Libreoffice增加字体
  15. 天行健---宇宙的生与死
  16. 从818悟空榜看苏宁全场景零售的数据赋能
  17. 【面试题】15.项目相关
  18. 自我介绍(思维导图)
  19. 高省一个了解网络商家和买家心里的APP,它知道你想要什么
  20. 用Cadence Virtuoso IC617仿真V-I特性曲线

热门文章

  1. 最全的C++面试题来啦!(来自各大一线互联网)
  2. java中content啥意思_JSTL标签中的body-content标签体内容输出格式的介绍
  3. html选择器有哪些child,css3选择器child有哪些?css3选择器child用法详解
  4. map for循环_JavaScript 用 for 循环太 low?你是不是有什么误解
  5. linux 查看主板sn_如何在 Linux 上查找硬件规格
  6. php如何解决脏读,php 技术沉淀
  7. 【渝粤教育】电大中专幼儿园课程论 (10)作业 题库
  8. 【渝粤教育】电大中专沟通技巧答案作业 题库
  9. 【渝粤题库】国家开放大学2021春1379人文英语3题目
  10. 标签蛋白_His标签蛋白镍柱纯化后总有一条杂带怎么办?