本文写给那些python初学者与对蒙特卡洛算法感兴趣,但却不知该如何理解或应用的人。
(虽然我发现这个貌似有许多人做过了,但是程序都相对复杂,不便于理解,于是我就自己编写了一段程序,海龟的可视化请看下集如果还有的话。)
蒙特卡罗方法,也称统计模拟方法,是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。
蒙特卡罗方法可以将所求解的问题可以转化为某种随机分布的特征数,比如随机事件出现的概率,然后通过随机抽样的方法,以随机事件出现的频率估计其概率,并将其作为问题的解。
假设我们要计算一个不规则图形的面积,那么图形的不规则程度和分析性计算(比如,积分)的复杂程度是成正比的。蒙特卡罗方法基于这样的想法:假設你有一袋豆子,把豆子均匀地朝这个图形上撒,然后数这个图形之中有多少颗豆子,这个豆子的数目就是图形的面积。当你的豆子越小,撒的越多的时候,结果就越精确。借助计算机程序可以生成大量均匀分布坐标点,然后统计出图形内的点数,通过它们占总点数的比例和坐标点生成范围的面积就可以求出图形面积。
——维基百科
蒙特卡洛算法到底是啥?听上去有些复杂,但如果结合实例来看就会简单许多。
在“计算π”这个问题中,可以先把它转化为一个“随机撒豆子”问题。同上面wiki说的,撒豆子的地方的面积可以看成是豆子的数量,于是问题就变为了面积之比的问题。
所以,想要撒豆子,先需要把问题转化为图形的面积之比。我们直接使用一个”框架“:正方形与圆圆与外