蒙特卡罗模拟
定义
牛顿力学最令人欣慰的一点是,万事皆有因。例如,如果你推杠杆的一端,另一端就会上升。你扔一个物体,它沿抛物线运动。物质世界是一个完全的确定的位置:所有未来的状态都是从之前的状态衍生出来的。几个世纪以来,我们一直拥有这种普遍的科学智慧,然后出现了由玻尔和海森堡领导的哥本哈根主义。这一理论的支持者认为,在最基本的层面上,物理系统的行为是无法确定的。这引发了一场关于因果非决定论有效性的严肃辩论,即每个事件都不是由之前的事件引起的。像爱因斯坦和薛定谔这样的人认为这种哲学是不可接受的,爱因斯坦经常重复的评论就是一个例子:“上帝不玩骰子。”因果非决定论的问题仍未解决,但有足够的证据证明某些系统只能精确地建模随机过程.如果一个过程的下一步既取决于之前的状态又取决于某个随机事件,那么这个过程就被称为随机过程。
我们大多数人都能计算出某些事件发生的基本概率,但我们如何解释所得结果的意义呢?答案是,在这个快速计算机时代,我们可以对一个事件进行多次模拟,记录结果,并将结果与数学计算值进行比较!那么就在我们自己的眼前,我们可以看到概率论是多么强大!
的蒙特卡罗法是一种利用统计学解决问题的方法。给定某一事件在特定条件下发生的概率,可以使用计算机反复生成这些条件。
蒙特卡罗过程
直觉
蒙特卡洛过程可能有点难以接受。如果我们只是随机收集数据,如何帮助我们找到正确答案呢?
让我们考虑一枚硬币。我们想知道硬币是否均匀。均匀硬币具有这些特性
如果你抛硬币一个时间,会发生什么?它要么正面着地或尾巴。如果你抛硬币,硬币背面朝上,然后你离开了,你证明了吗 硬币是不公平的?当然不是!毕竟,一枚均匀的硬币也可以在一次尝试后背面朝上。
也许你再抛一次硬币,结果是正面朝上,这就证明了这一点 ,硬币是公平的。但你真的证明了这个硬币是公平的吗?也许硬币并不完全公平,但有时确实两面都有。
也许你会抛尾巴再一次,你就更相信了 .遗憾的是,我们仍然不知道,因为一枚正常硬币和一枚假硬币都有能力连续两次抛反面。
关键是我们需要多次抛硬币才能确信它是公平的。让我们用一些代码来看看。在下面的Python代码片段中,有一个函数,它接受硬币投掷正面的概率(如果硬币是均匀的,则为o.5)和投掷硬币的次数。然后它返回一个关于硬币公平性的猜测(同样,如果是公平的,它是0.5)。
1 2 3 4 5 6 7 8 9 |
|
我们先看一枚均匀硬币。我们可以抛一次硬币,得到反面,所以这个硬币看起来不公平。然后我们抛了5次,看起来更好了,但我们仍然不能完全相信硬币是完全公平的。即使经过100次试验,也很接近,但不是100%。我们需要抛10万次硬币才能开始相信这枚硬币是公平的(我们应该做更多来完全确定)。
1 2 3 4 5 6 7 8 |
|
现在让我们抛一个假硬币。假设这个硬币朝上的概率是75%(所以是a真的假硬币)。我们抛了一次,结果是反面,远远超出我们的预期!抛5次使我们更接近75%的标记,但抛5次后它和实际的均匀硬币一样远离公平。将它翻转100和100000次,我们离目标更近了。
1 2 3 4 5 6 7 8 |
|
这是蒙特卡罗方法的要点。当有一些概率性的事情(比如抛硬币)我们无法预测时,我们就需要去做很多来确保我们正确理解系统。
实践问题
概率论历史上最有影响力的人物之一是布莱斯·帕斯卡。他对这一领域的兴趣始于一个朋友问他的问题:
“让我们掷24次骰子,赌至少有一次是双6,这有利可图吗?”
写一个函数,使用蒙特卡罗来模拟在24次骰子中得到一对6的概率。
一次摇到一对6的概率是 .因此摇到双6的概率 卷是 .
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16进口随机defrollDie():"""返回1到6之间的随机整数""" "返回随机.选择([1,2,3.,4,5,6])defMonteprob(numTrials):numwins=0.0为我在范围(numTrials):为j在范围(24):d1=rollDie()d2=rollDie()如果d1= =6而且d2= =6:numwins+ =1打破打印numwins/numTrials
现在我们可以测试代码,看看我们进行的试验次数如何影响概率结果。
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21# 100次试验>>>Monteprob(One hundred.)0.52>>>Monteprob(One hundred.)0.55>>>Monteprob(One hundred.)0.54# 10000次试验>>>Monteprob(10000)0.4918>>>Monteprob(10000)0.4875>>>Monteprob(10000)0.4964# 100000次试验>>>Monteprob(100000)0.49017>>>Monteprob(100000)0.49077>>>Monteprob(100000)0.49138
我们做的试验越多,答案就越接近。当试验的次数延伸到无穷大时,我们会趋近于一个答案。在这里,我们可以从上一组蒙特卡洛运行中猜测,答案大约是0.491或49.1%。
数值积分
蒙特卡罗模拟在处理不确定性问题时很有用。然而,有趣的是,蒙特卡罗模拟(和随机算法一般来说)可以用来解决本质上不是随机的问题,即对结果没有不确定性的问题。
让我们想象一个矩形的高度 、宽度 和区域 这样函数 在矩形的边界内。然后计算 随机数对 而且 与 而且 .点的分数 而且 满足条件 是对 矩形的面积。因此有了这个估计 是由
在哪里 命中数是否低于曲线 是矩形上的总命中数。
在数值积分中,方法如梯形法则使用确定性方法。另一方面,蒙特卡洛积分采用了一种不确定的方法:每种实现都提供了不同的结果。在蒙特卡洛,最终结果是正确值的近似值。当涉及到近似时,总是会有一些误差,而蒙特卡洛的近似只是它的近似误差范围.不过,如果收集的样本越来越多,边界可以缩小,这就是蒙特卡洛的力量。
估计π
早在计算机发明之前,法国数学家布丰(1707-1788)和拉普拉斯(1749-1827)就提出使用随机模拟来估计的价值 .想象一下在边长相同的正方形上刻一个圆 ,使半径 的圆长度 .
这是圆的面积 .但是是什么 布冯提出,他可以通过在广场附近丢下大量的针来估计一个圆的面积(他认为这些针在下落时会沿着随机的路径下落)。方形内针尖的针数与圆内针尖的针数之比就可以用来估计圆的面积:
注意,我们在圆上掉落的针越多,我们的近似值就越接近的实际值
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
上述算法模拟了第一次使用掉针的过程随机
得到一对正的笛卡尔坐标(
而且
值)。然后使用勾股定理计算带底直角三角形的斜边
和高度
这是针尖到原点(正方形中心)的距离。因为圆的半径是
,当且仅当与原点的距离不大于时,我们知道针位于圆内
.我们用这个事实来数圆里的针数。
参考文献
- 乔,C。单词查找树.检索2016年6月22日,从https://en.wikipedia.org/wiki/Monte_Carlo_method