Mathematics is principally a tool to meditate,rather than to compute.
数学主要是一种思考的工具,而不是计算工具。
蒙特卡罗模拟是现代数学中普遍使用的一种计算方法,广泛应用于金融工程学、宏观经济学、生物医学、计算物理学等各领域。首先数模君来正经科普下蒙特卡罗模拟的由来~~
蒙特卡罗模拟的由来
图为摩纳哥蒙特卡罗赌场,也就是蒙特卡罗模拟名字的由来
蒙特卡洛模拟算法(Monte Carlo Simulation Methods)的一个核心思想就是用事件发生的“频率”来决定事件的“概率”,是以概率统计理论为基础的一种方法。从这个角度来说最早可追溯到18世纪后叶的蒲丰(Buffon)随机投针试验,即著名的蒲丰氏问题。
蒲丰1777年出版的著作中记载有:“在平面上画有一组间距为a的平行线,将一根长度为L(L≤a)的针任意掷在这个平面上n次,观察针与直线相交的次数,记为m。”蒲丰本人证明这个概率为p=2L/pai*a。如果针的长度等于a/2,那么有利于扔出的概率为1/pai。并设计了一个投针游戏,蒲丰在家中请来一些客人玩投针游戏(针长等于平行线距离的一半,即L=a/2),他们共投针2212次,其中704次针与直线相交,2212/704=3.142,这就是pai值。
20世纪40年代,电子计算机的出现实现了大量随机抽样的试验,使得随机试验方法解决实际问题成为可能。其中最具有代表性的工作便是第二次世界大战期间,为了解决原子弹研制工作中,裂变物质的中子随机扩散问题,美国数学家冯·诺依曼(Von Neumann)和马尔钦·乌拉姆(Marcin Ulam)提出了蒙特卡罗模拟方法,由于当时的工作是保密的,就这种方法起了一个代号蒙特卡罗,即摩纳哥的一个赌城的名字。用赌城的名字作为随机模拟的名称,既反映了该方法的部分内涵,又易记忆,因而很快得到人们的普遍接受。
蒙特卡罗模拟算法的基本思路
1. 针对实际问题建立一个简单且便于实现的概率统计模型,使所求的量(或解)恰好是该模型某个指标的概率分布或者数字特征。
2. 对模型中的随机变量建立抽样方法,在计算机上进行模拟测试,抽取足够多的随机数,对有关事件进行统计。
3. 对模拟试验结果加以分析,给出所求解的估计及其精度(方差)的估计。
4. 必要时,还应改进模型以降低估计方差和减少试验费用,提高模拟计算的效率。
下面来举两个栗子来说明蒙特卡罗模拟算法真谛
蒙特卡罗模拟的应用
1.圆周率的计算——低阶入门版
现代数学家们创造了许多方法计算值,蒙特卡罗模拟就是其中最笨的一种方法。
在一个矩形里画一个圆,然后随机的子弹去打击整个画面,设置好画面中任何点被击中的概率相等。经过足够多的次数后,圆内点的数量理论上应该占到所有点的pai/4,用算得比值乘以4即可得到值。
这近乎“蛮力”的一种方法,却能给人以直观感受,相比于一行行的数学公式和符号,这张被子弹打成筛子的图片显然更加形象生动。
2.AlphaGo——高阶进级版
2016年3月AlphaGo1.0同韩国棋手李世石展开了五轮惊世较量。最终这场人机大战总比分定格在1:4,AlphaGo1.0获得比赛胜利。2017年初,AlphaGo化身Master后创造了连续60场对人类不败的恐怖战绩。
其中AlphaGo所应用的核心技术之一就是基于蒙特卡罗算法的蒙特卡罗树搜索(Monte-Carlo Tree Search,MCTS)。蒙特卡罗算法在其中的起到的重要作用就是用来搜索并且确切地挑出下一手落子点。
运行机制:MCTS先挑几个有希望的下一手,然后在这些手的基础上再展开几手,这样就有一个树形结构,到达第L层时,直接用快速展开网络展开到底。这样就把一次模拟做完,这样重复很多次,MCTS可以通过自己的算法挑一个最好的下法,然后落子。简而言之就是在无数种下法在算时间搜索出来最后找一个最有可能赢的下法落子。
了解完以上信息是不是觉得蒙特卡罗算法很实用很有趣呢?😉通常蒙特卡罗模拟通过构造符合一定规则的随机数来解决数学上的各种问题。对于那些由于计算过于复杂而难以得到解析解或者根本没有解析解的问题,蒙特卡罗模拟是一种有效的求出数值解的方法。目前蒙特卡罗模拟可以通过各类计算机语言和计算程序实现,比如matlab、C++、Paython。如果你有兴趣学习关于该算法的相关知识,欢迎关注同济数模协会的相关活动或给后台留言,我们会定期组织微沙龙活动,大家一起学习交流
来源:同济数学建模
--------------------------------------
推荐阅读: