字幕组双语原文:蒙特卡洛模拟(Python)深入教程

英语原文:Monte Carlo Simulation An In-depth Tutorial with Python

翻译:大表哥、wiige

什么是蒙特卡罗模拟?

蒙特卡罗方法是一种使用随机数和概率来解决复杂问题的技术。 蒙特卡罗模拟或概率模拟是一种技术,用于了解金融部门、项目管理、成本和其他预测机器学习模型中风险和不确定性的影响。

风险分析几乎是我们做出的每一个决定的一部分,因为我们在生活中经常面临不确定性、模糊性和变化无常。 此外,即使我们拥有前所未有的信息获取渠道,我们也不能准确预测未来。

蒙特卡洛模拟使我们能够看到决策的所有可能结果,并评估风险影响,从而在不确定的情况下更好地做出决策。

在本文中,我们将通过五个不同的例子来理解蒙特卡罗模拟方法。

资源: Google Colab Implementation | GitHub Repository

应用领域:

金融

项目管理

能量

制造业

工程学

研究和开发

保险

石油和天然气公司

交通

环境

还有其他

举例:

抛硬币示例

用圆和平方估计PI

三门问题

蒲丰投针问题

为什么赌场总是赚的?

a. 抛硬币示例:

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

图2:正面和反面,数学表示。

在抛硬币时:

图3:正面和反面硬币的公式示例。

接下来,我们将用蒙特卡罗方法对这个公式进行实验证明。

Python实现:

1.导入所需的库:

图4:为我们的抛硬币示例导入所需的库。

2.投币功能:

图5:一个简单的函数,将结果随机排列在0和1之间,头部为0,尾部为1。

3.检查函数输出:

图6:运行Coin_Flip()函数

4.主要功能:

图7:计算概率并将概率值附加到结果。

5.调用main函数:

图8:调用Monte Carlo主函数,并绘制最终值。

如图8所示,我们显示在5,000次迭代之后,获得尾部的概率为0.502。 因此,这就是我们可以如何使用蒙特卡罗模拟来通过实验找到概率的方法。

b.使用圆形和正方形估算PI:

图9:圆形和正方形的简单面积。

图10:分别计算圆形和正方形的面积。

要估计PI的值,我们需要正方形的面积和圆的面积。 为了找到这些区域,我们将在表面上随机放置点,并计算落在圆内的点和落在正方形内的点。 这将给我们一个估计的面积。 因此,我们将使用点数作为面积,而不是使用实际面积。

在下面的代码中,我们使用Python的Turtle模块来查看点的随机放置。

python实现:

1.导入需要的库

图10:为我们的π示例导入所需的库。

2.可视化这些点:

图11:绘制图形。

3.初始化部分必填数据:

图12:初始化数据值。

4.主要功能:

图13:实现主功能。

5.绘制数据:

图14:绘制数据值。

6.输出

图15:使用蒙特卡罗方法的π近似。

图16:值的数据可视化。

图17:值的数据可视化。

如图17所示,我们可以看到,经过5000次迭代后,我们可以得到PI的近似值。 另外,请注意,随着迭代次数的增加,估计误差也呈指数下降。

3. 三门问题:

假设你正在参加一个游戏节目,你可以从三扇门中选择一扇:一扇门后面是一辆汽车;另一扇门后面是山羊。 你选了一扇门,假设是1号门,主人,谁知道门后面有什么,就打开另一扇门,比如说3号门,里面有一只山羊。 主人然后问你:你是坚持自己的选择,还是选择另一扇门?

选择不同的门对你有好处吗? 事实证明,从概率上说,打开门对我们有利。具体分析:最初,对于所有的三个门,得到车的概率(P)是相同的(P = 1/3)。

图18:三个门的模拟,展示了每个可能的结果。

现在假设参赛者选择了门1。接下来,主人打开第三扇门,里面有一只山羊。接下来,主持人问参赛者是否要换门?我们将看到为什么转换门更有利:

图19:门的图示结果。

在图19中,我们可以看到在主人打开门3之后,拥有一辆车的最后两个门的概率增加到2/3。现在我们知道第三扇门有一只山羊,第二扇门有一辆车的概率增加到2/3。因此,换门更为有利。现在我们将使用蒙特卡罗方法来多次执行这个测试案例,并通过实验的方式找出它的概率。

Python 实现:

1. Import所需库:

图20: 导入所需库。

2. 初始化数据:

图21: 初始化代表门的枚举变量和存储概率值的列表。

3. Main函数:

图22: 用蒙特卡洛模拟来实现主函数。

4. 调用main函数:

图23: 调用主函数模拟1000次博弈。

5. 输出:

图24: 得到坚持自己的选择或换门的近似获胜概率。

在图24中,我们发现在1000次模拟后,如果我们换门,获胜概率是0.669。因此,我们确信在本例中换门对我们更有利。

4. 蒲丰投针问题:

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

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

概率取决于方格纸的线间距(d),和针长度(l)——或者说,它取决于l/d的比值。在这个例子里,我们可以认为针长度l≤d。简而言之,我们假设了针不能同时相交于两条不同的线。令人惊讶的是,蒲丰针问题的答案与PI相关。

这里,我们将使用用蒙特卡洛法来解蒲丰投针问题,顺便估计出PI的值。不过在此之前,我们要先展示一下解法是如何推导出来的,这样会更有趣。

定理:

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

图25: 蒲丰投针定理。

证明:

图26: 蒲丰投针问题的可视化。

首先,我们需要统计出与任意垂线相交的针的数量。若针与任意一条线相交,对于特定的θ值,针与垂线相交的最大和最小可能值为:

最大可能值:

图27: 最大概率值。

最小可能值:

图28: 最小可能值。

因此, 对于特定的θ值,针在垂线上的概率是:

图29: 针与垂线相交的概率公式。

这个概率公式局限于特定θ值,在本实验中,θ的范围是0到pi/2。所以,我们需要对所有的θ值做一个积分,得到投针相交的实际概率。

图 30: 对所有θ值积分的投针相交概率公式。

图 31: PI的估计值。

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

接下来,我们要用上面的公式来进行实验求得PI值。

图 32: 求PI值。

现在,因为我们已经知道了l和d的值,所以只要求得了P的值,我们就可以推知PI的值。而要得到概率P,必须要知道相交针数和总针数, 这里的总针数是已知的。

下图是计算相交针数的直观图解。

图33: 可视化表示如何计算针的数量。

Python 实现:

Import 所需的库:

图34: 导入所需库。

2. Main 函数:

图35: 用蒙特卡洛方法模拟蒲丰投针。

3. 调用main函数:

图36: 调用main函数模拟蒲丰投针。

4. 输出:

图 37: 使用蒙特卡洛方法模拟100次投针的数据。

如图37所示,经过100次的模拟,蒙特卡洛法就能得出一个非常接近PI的值。

图源: Pexels

5. 为什么赌场总是赚的?

赌场是怎么赚钱的? 诀窍很简单--“你玩得越多,他们赚的就越多。” 让我们通过一个简单的蒙特卡罗模拟示例来看看这是如何工作的。

考虑一个假想的游戏,玩家必须从一袋筹码中选择一个筹码。

规则:

袋子里有数字从1到100的筹码。

用户可以押注于偶数或奇数筹码。

在这个游戏中,10和11是特殊的数字。 如果我们赌偶数,那么10就算奇数,如果我们赌赔率,那么11就算偶数。

如果我们赌偶数,我们得了10,那么我们就输了。

如果我们赌的是奇数,我们得了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所需的库:

图38: 导入赌场模拟所需的库。

2. 玩家下注:

图39: 在下注奇数或偶数。

3. Main 函数:

图 40: 使用蒙特卡洛方法模拟赌场行为。

4. 最终输出:

图41: 计算并展示计算结果。

5. 模拟1000次试试:

图 42: 模拟1000次。

6. 下注数 = 5:

图43: 下注5次时的结果可视化。

7. 下注数 = 10:

图44: 下注10次时的结果可视化。

8. 下注数 = 1000:

图45: 下注1000次时的结果可视化。

9. 下注数 = 5000:

图46: 下注5000次时的结果可视化。

10. 下注数 = 10000:

图47: 下注10000次时的结果可视化。

从上面的实验中,我们可以看到,如果玩家在赌博中下注较少,那么有得赚的机会就比较大。有时候实验会得到负数,这意味着玩家输得倾家荡产负债累累,而不是单车变路虎。

请注意, 这些比例源于为促进理解的非真实场景,认不赌为赢。

结论:

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

声明:本文所表达的观点仅代表作者本人,不代表CMU的观点。这些文字并非为最终成品,仅为当下思考记录以促进学习和交流。

python实现蒙特卡洛模拟_蒙特卡洛模拟(Python)深入教程相关推荐

  1. Matlab 李萨如图模拟_动态模拟李萨如图形形成过程保存为.GIF动图

       九层妖塔 起于垒土 Matlab 李萨如图模拟_动态模拟李萨如图形形成过程保存为.GIF动图 一.数学分析 二.程序设计及使用说明 三.动图 四.代码 一.数学分析 二.程序设计及使用说明 三. ...

  2. Python中表示偶数_蒙特卡洛模拟(Python)深入教程

    译者:大表哥.wiige来源:AI研习社 什么是蒙特卡罗模拟? 蒙特卡罗方法是一种使用随机数和概率来解决复杂问题的技术.蒙特卡罗模拟或概率模拟是一种技术,用于了解金融部门.项目管理.成本和其他预测机器 ...

  3. python在线模拟_在线模拟运行Python工具/Skulpt工具

    Skulpt客户端Python模拟器说明 1. Skulpt是一个完全依靠浏览器端模拟实现Python运行的工具 2. 不需要预处理.插件或服务器端支持,只需编写python并重新载入即可. 3. 由 ...

  4. python自学到大牛_开始学习Python+一位大牛整理的Python资源

    Python基本安装: * http://www.python.org/ 官方标准Python开发包和支持环境,同时也是Python的官方网站: * http://www.activestate.co ...

  5. 做python的心得体会_实训python的心得体会

    如何学习Python的一些总结 C++.Java乃至C#都可以看做是同一类型的语言:C++还算灵活,但纷繁复杂的语法使得生产效率低下,Java提高了生产效率,却损失了灵活性;C#算是在生产效率和灵活性 ...

  6. python金融量化书籍_超强干货 | Python金融数据量化分析教程+机器学习电子书

    如今Python语言的学习已经上升到了国家战略的层面上.Python语言是人工智能的基础语言,国家相关教育部门对于"人工智能普及"格外重视,不仅将Python列入到小学.中学和高中 ...

  7. jenkins+python+git自动化测试框架_使用jenkins + python + selenium一步步搭建web自动化测试“框架”(1) - 各部件简介...

    原先搭建过一个自动化测试框架,迷迷糊糊不求甚解,算是搭建了一个仅限于能用的.根本算不上框架的玩意儿. 现在回过头来好好看看究竟每一步是怎么联系起来的,是怎么运行起来的. 本次博客先说说各部件都是干什么 ...

  8. python变量定义大全_详解python变量与数据类型

    这篇文章我们学习 Python 变量与数据类型 变量 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念,变量可以通过变量名访问.在 Python 中 变量命名规定,必须是大小写英文,数字 ...

  9. python积木式编程_实例讲解python函数式编程

    函数式编程是使用一系列函数去解决问题,按照一般编程思维,面对问题时我们的思考方式是"怎么干",而函数函数式编程的思考方式是我要"干什么". 至于函数式编程的特点 ...

  10. python怎么求指数_求指数 python

    softmax用于多分类过程中最后一层,将多个神经元的输出,映射到(0, 1)区间内,可以看成概率来理解,从而来进行多分类! softmax函数如下: 更形象的如下图表示: softmax 直白来说就 ...

最新文章

  1. 顶会论文轮番炸场,本周哪些论文最值得读?
  2. ZooKeeper 特点有哪些?
  3. tplink 2.4g弱信号剔除_解疑答惑 | 使用无线路由器上网,应使用2.4G频段还是5G频段?...
  4. 【微软力作】虚拟对抗训练:让预训练模型再次强大!
  5. U3D NGUI改变GameObject Activity闪烁的问题
  6. 习题:交换一组数据的位置
  7. HP LaserJet P1007 装不到驱动
  8. Java程序设计教程(第3版)雍俊海 全书例程-1
  9. Spring中的工厂模式
  10. PDA扫描 Geenk scan 的方法列表
  11. linux 搜索s开头的文件,Linux文件查找/内容搜索命令
  12. 常用的空间数据结构(网格/四叉树/八叉树/BSP树/k-d树/BVH/自定义划分)
  13. 大学计算机李凤霞课本百度云,大学计算机
  14. [二分查找] [luoguP3500] [POI2010] TES-Intelligence Test
  15. PMP——第3章 项目经理的角色
  16. 从定标准到搭流程,看UWA性能保障体系搭建的实例分享
  17. 这是关于淘宝的一条重磅消息
  18. 写给大忙人看的_软件测试简历范文
  19. 计算机网络设备安装检验批,智能建筑工程分为哪些子分部工程与分项工程
  20. 什么是计算机素质教育,计算机教育在素质教育中的作用

热门文章

  1. 迪士尼超级IP版图日趋完整
  2. 昂达v80 plus linux,8英寸便携平板 昂达V80 Plus一体工艺来袭
  3. 利用科来网络分析进行三次握手协议分析
  4. Python自动登录QQ
  5. 超好玩的msn自制动画头像
  6. 帝国cms 7.5 wap标签大全
  7. QQ牧场接口协议分析
  8. (转载)CruiseControl配置介绍
  9. 组网学习之什么是链路冗余(二)
  10. 数字通信第六章——信道模型和信道容量