用Python实现蒙特卡罗模拟的详细教程( 三 )


在这里,我们将使用布冯的针头问题的解决方案,以实验方式使用蒙特卡罗方法估计PI的价值 。然而,在进入之前,我们将展示解决方案是如何派生的,使其更有趣 。
定理:如果将长度为 l 的短针掉到以相同距离 d ≥ l 的相等空间线裁定的纸张上,则针位于穿过其中一条线的位置的概率为:

用Python实现蒙特卡罗模拟的详细教程

文章插图
> Figure 25: Buffon's needle problem theorem.
 
可视化投针问题
用Python实现蒙特卡罗模拟的详细教程

文章插图
> Figure 26: Visualizing Buffon's needle problem.
 
接下来,我们需要计算穿过任何垂直线的针数 。对于要与其中一条线相交的指针,对于 theta 的特定值,以下是针与垂直线相交的最大值和最小可能值 。
1.最大可能值:
用Python实现蒙特卡罗模拟的详细教程

文章插图
> Figure 27: Maximum possible value.
 
2. 最小可能值:
用Python实现蒙特卡罗模拟的详细教程

文章插图
> Figure 28: Minimum possible value.
 
因此,对于 theta 的特定值,针位于垂直线上的概率为:
用Python实现蒙特卡罗模拟的详细教程

文章插图
> Figure 29: Probability for a needle to lie on a vertical line formula.
 
上述概率公式仅限于一个值;在我们的实验中,theta 的值范围从0到pi/2 。接下来,我们将通过集成它来查找实际概率,以结合所有 to 的值 。
用Python实现蒙特卡罗模拟的详细教程

文章插图
> Figure 30: Probability formula by integrating all possible values for theta.
 
用Python实现蒙特卡罗模拟的详细教程

文章插图
> Figure 31: PI estimation.
 
使用布冯投针问题估算 PI:接下来,我们将使用上述公式来实验找出PI的值 。
用Python实现蒙特卡罗模拟的详细教程

文章插图
> Figure 32: Finding the value of PI.
 
现在,请注意,我们有 l 和 d 的值 。我们的目标是首先找到 P 的值,以便获得 PI 的值 。要找到概率P,我们必须需要打针和总针的计数 。由于我们已经有总针的计数,我们现在唯一需要的东西是打针的计数 。
下面是我们如何计算命中针数的可视化表示 。
用Python实现蒙特卡罗模拟的详细教程

文章插图
> Figure 33: Visual representation to calculate the count of needles.
 
Python 实现:1.导入所需的库:
用Python实现蒙特卡罗模拟的详细教程

文章插图
> Figure 34: Importing the required libraries for our problem.
 
3. 主函数:
用Python实现蒙特卡罗模拟的详细教程

文章插图
> Figure 35: Implementing the Monte Carlo Simulation method to our Buffon problem.
 
3. 调用主函数:
用Python实现蒙特卡罗模拟的详细教程

文章插图
> Figure 36: Calling the Monte Carlo Method's main function to our Buffon's problem.
 
4. 输出:
用Python实现蒙特卡罗模拟的详细教程

文章插图
> Figure 37: Data visualization of 100 iterations using the Monte Carlo Method.

用Python实现蒙特卡罗模拟的详细教程

文章插图
> Source: Pexels
 
5. 为什么庄家总是赢?赌场如何赚钱?诀窍很简单——"你玩得越多,他们赚得越多 。让我们看一下这如何与一个简单的蒙特卡罗模拟示例 。
考虑一个假想的游戏,玩家必须从一袋筹码中选择筹码 。
规则:· 袋子里有1~100个不等的筹码 。
· 用户可以投注偶数或奇数筹码 。
· 在这个游戏中,10 和 11 是特殊数字 。如果我们在偶数上下注,则 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%


推荐阅读