蒙特卡洛模拟深入教程

发表于:2021-05-31

原标题: 蒙特卡洛 模拟深入教程

字幕组双语原文: 蒙特卡洛 模拟深入教程英语原文: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主函数,并绘制终极值。

如图八所示,我们呈现在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:值的数据可视化。

如图一十七所示,我们可以看到,经过5000次迭代后,我们可以得到 PI 的近似值。 此外,请注目,跟着迭代次数的增补,臆想误差也呈指数下落。

3. 三门问题:要是你正在参加一个游戏节目,你不妨从三扇门中拔取一扇:一扇门后面是一辆汽车;另一扇门后面是山羊。 你选了一扇门,要是是一号门,主人,谁理解门后面有什么,就敞开另一扇门,比如说三号门,内里有一只山羊。 主人然后问你:你是周旋自己的拔取,还是拔取另一扇门?

选取分歧的门对你有甜头吗?  事实证明,从概率上说,打开门对我们有利。具体分析:最初,对付一共的三个门,获得车的概率「P」是相同的「P = 1/3」。

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

当前假若参赛者选拔了门1。接下来,主人开放第三扇门,里面有一只山羊。接下来,主持人问参赛者是否要换门?我们将看到为什么调换门更有利:

图19:门的图示恶果。

在图19中,我们能够看到在主人打开门三之后,拥有一辆车的末了两个门的概率添补到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次投针的数据。

如图三十七所示,原委100次的模拟, 蒙特卡洛 法就能得出一个特殊挨近 PI 的值。

图源: Pexels5. 为什么赌场总是赚的?

赌场是如何获利的? 窍门很单一--“你玩得越多,他们赚的就越多。” 让我们议定一个单一的蒙特卡罗模拟示例来看看这是怎样工作的。

思虑一个假想的游玩,玩家必须从一袋筹码中选拔一个筹码。

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

用户能够押注于偶数或奇数筹码。

在这个游戏中,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%综上所述,每下注一美元,就会有0.02美元下注。 相比之下,轮盘上最低的单一优势是2.5%。 以是,我们没关系势必,与轮盘赌相比,您在假想的嬉戏中告捷的机会更大。

Python 实现:Import所需的库:

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

2. 玩家下注:

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

3. Main 函数:

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

4. 最终输出:

图41: 企图并展示企图结果。

5. 模拟1000次试试:

图42: 模拟1000次。

6. 下注数 = 5:

图43:  下注五次时的恶果可视化。

7.  下注数 = 10:

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

8.  下注数 = 1000:

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

9.  下注数 = 5000:

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

10.  下注数 = 10000:

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

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

请醒目, 这些比例源于为促进明白的非凿凿场景,认不赌为赢。

结论:就像任何预测模型相像 模拟结果只有我们的估计值才是好的 主要的是要记住, 蒙特卡洛 模拟只代表概率而不是确定性。尽管如此,在预测未知的改日时, 蒙特卡洛 模拟是一个有代价的器械。

声明:本文所表达的观念仅代表作者本人,不代表CMU的观念。这些文字并非为终极成品,仅为当下思索记录以促进学习和换得。

雷锋字幕组是一个由AI爱好者组成的翻译团队,聚集五五多位志愿者的气力,分享最新的外洋AI资讯,换取关于人工智能技艺规模的行业转变与技艺创新的意见。

团队成员有大数据人人,算法工程师,图像处理工程师,产品经理,产品运营,IT咨询人,在校师生;志愿者们来自IBM,AVL,Adobe,阿里,百度等知名企业,北大,清华,港大,中科院,南卡罗莱纳大学,早稻田大学等海内外高校研究所。

假如,你也是位尊敬分享的AI爱好者。欢迎与雷锋字幕组一起,学习新知,分享成长。

雷锋网版权文章,未经授权禁绝转载。详情见转载须知。