蒙特卡罗模拟
定义
牛顿力学最令人欣慰的一点是,任何事情的发生都有其原因。例如,如果你推杠杆的一端,另一端就会上升。你扔一个物体,它沿抛物线运动。物质世界是一个完全的确定的位置:所有未来的状态都是由之前的状态衍生出来的。几个世纪以来,我们一直有这种普遍的科学智慧,然后出现了由玻尔和海森堡领导的哥本哈根学说。这种学说的支持者认为,在最基本的层面上,一个物理系统的行为是无法确定的。这引发了一场关于因果非决定论有效性的严肃辩论,即每个事件都不是由之前的事件引起的。像爱因斯坦和薛定谔这样的人认为这种哲学是不可接受的,例如爱因斯坦经常重复的评论:“上帝不掷骰子。”因果非决定论的问题仍然没有解决,但有足够的证据证明,某些系统只能通过随机过程.如果一个过程的下一步既取决于之前的状态又取决于某个随机事件,那么这个过程就被称为随机过程。
我们大多数人都能够计算出某些事件发生的基本概率,但我们如何解释得到的结果的意义呢?答案是,在这个快速计算机的时代,我们可以对一个事件进行多次模拟,记录结果,并将结果与数学计算值进行比较!那么我们就可以在自己的眼前看到概率论是多么的强大了!
的蒙特卡罗方法是一种利用统计来解决问题的方法。给定某一事件在特定条件下发生的概率,就可以用计算机反复生成这些条件。
蒙特卡洛过程
直觉
蒙特卡洛过程可能有点难以接受。如果我们只是随机收集数据,这怎么能帮助我们找到正确答案呢?
让我们考虑一枚硬币。我们想知道硬币是否公平。一枚均匀的硬币具有这些特性
如果你抛硬币一个时间,会发生什么?要么正面着地或尾巴。如果你抛硬币,背面朝上,然后你离开,你证明了吗 硬币是不公平的?当然不是!毕竟,一枚均匀的硬币也可以在一次尝试后背面朝上。
也许你再抛一次硬币,结果是正面朝上,从而证明了这一点 这枚硬币是公平的。但你真的证明了这枚硬币是公平的吗?也许硬币并不是完全公平的,但它有时确实落在两边。
也许你会翻转尾巴再一次,你甚至更确信这一点 .遗憾的是,我们仍然不知道,因为均匀硬币和假硬币都有连续两次抛反面的能力。
关键是,在我们确信它是公平的之前,我们需要多次抛硬币。让我们用一些代码来看看。在下面的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次和10万次会更接近我们的目标。
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 15 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