python实现蒙特卡洛模拟_蒙特卡洛模拟(Python)深入教程
字幕组双语原文:蒙特卡洛模拟(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)深入教程相关推荐
- Matlab 李萨如图模拟_动态模拟李萨如图形形成过程保存为.GIF动图
九层妖塔 起于垒土 Matlab 李萨如图模拟_动态模拟李萨如图形形成过程保存为.GIF动图 一.数学分析 二.程序设计及使用说明 三.动图 四.代码 一.数学分析 二.程序设计及使用说明 三. ...
- Python中表示偶数_蒙特卡洛模拟(Python)深入教程
译者:大表哥.wiige来源:AI研习社 什么是蒙特卡罗模拟? 蒙特卡罗方法是一种使用随机数和概率来解决复杂问题的技术.蒙特卡罗模拟或概率模拟是一种技术,用于了解金融部门.项目管理.成本和其他预测机器 ...
- python在线模拟_在线模拟运行Python工具/Skulpt工具
Skulpt客户端Python模拟器说明 1. Skulpt是一个完全依靠浏览器端模拟实现Python运行的工具 2. 不需要预处理.插件或服务器端支持,只需编写python并重新载入即可. 3. 由 ...
- python自学到大牛_开始学习Python+一位大牛整理的Python资源
Python基本安装: * http://www.python.org/ 官方标准Python开发包和支持环境,同时也是Python的官方网站: * http://www.activestate.co ...
- 做python的心得体会_实训python的心得体会
如何学习Python的一些总结 C++.Java乃至C#都可以看做是同一类型的语言:C++还算灵活,但纷繁复杂的语法使得生产效率低下,Java提高了生产效率,却损失了灵活性;C#算是在生产效率和灵活性 ...
- python金融量化书籍_超强干货 | Python金融数据量化分析教程+机器学习电子书
如今Python语言的学习已经上升到了国家战略的层面上.Python语言是人工智能的基础语言,国家相关教育部门对于"人工智能普及"格外重视,不仅将Python列入到小学.中学和高中 ...
- jenkins+python+git自动化测试框架_使用jenkins + python + selenium一步步搭建web自动化测试“框架”(1) - 各部件简介...
原先搭建过一个自动化测试框架,迷迷糊糊不求甚解,算是搭建了一个仅限于能用的.根本算不上框架的玩意儿. 现在回过头来好好看看究竟每一步是怎么联系起来的,是怎么运行起来的. 本次博客先说说各部件都是干什么 ...
- python变量定义大全_详解python变量与数据类型
这篇文章我们学习 Python 变量与数据类型 变量 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念,变量可以通过变量名访问.在 Python 中 变量命名规定,必须是大小写英文,数字 ...
- python积木式编程_实例讲解python函数式编程
函数式编程是使用一系列函数去解决问题,按照一般编程思维,面对问题时我们的思考方式是"怎么干",而函数函数式编程的思考方式是我要"干什么". 至于函数式编程的特点 ...
- python怎么求指数_求指数 python
softmax用于多分类过程中最后一层,将多个神经元的输出,映射到(0, 1)区间内,可以看成概率来理解,从而来进行多分类! softmax函数如下: 更形象的如下图表示: softmax 直白来说就 ...
最新文章
- 顶会论文轮番炸场,本周哪些论文最值得读?
- ZooKeeper 特点有哪些?
- tplink 2.4g弱信号剔除_解疑答惑 | 使用无线路由器上网,应使用2.4G频段还是5G频段?...
- 【微软力作】虚拟对抗训练:让预训练模型再次强大!
- U3D NGUI改变GameObject Activity闪烁的问题
- 习题:交换一组数据的位置
- HP LaserJet P1007 装不到驱动
- Java程序设计教程(第3版)雍俊海 全书例程-1
- Spring中的工厂模式
- PDA扫描 Geenk scan 的方法列表
- linux 搜索s开头的文件,Linux文件查找/内容搜索命令
- 常用的空间数据结构(网格/四叉树/八叉树/BSP树/k-d树/BVH/自定义划分)
- 大学计算机李凤霞课本百度云,大学计算机
- [二分查找] [luoguP3500] [POI2010] TES-Intelligence Test
- PMP——第3章 项目经理的角色
- 从定标准到搭流程,看UWA性能保障体系搭建的实例分享
- 这是关于淘宝的一条重磅消息
- 写给大忙人看的_软件测试简历范文
- 计算机网络设备安装检验批,智能建筑工程分为哪些子分部工程与分项工程
- 什么是计算机素质教育,计算机教育在素质教育中的作用