蒙特卡罗(monteCarlo)

蒙特卡罗(Monte Carlo)是世界著名的赌城,是摩纳哥的标志,与拉斯维加斯、澳门号称世界三大赌城。但是这里我们要讲到的蒙特卡罗并不是,而是一种统计方法。其原理是通过大量随机样本,去了解一个系统,进而得到所要计算的值。它诞生于上个世纪40年代美国的"曼哈顿计划",名字来源于赌城蒙特卡罗,象征概率。

通过蒙特卡罗的概率计算,可以解决许多数学问题及业务问题,其最经典的案例即求解圆周率π。在一个正方形内画出一个跟四边正切的圆,设圆的半径r=1,则可知圆的面积为π·r·r,此时正方形的面积则为2r·2r,如下图:

将圆面积同正方形面积进行对比,可得:π·r·r / 2r·2r = π / 4,由此可知当在正方形中随机生成一个点,它落入圆内的概率为π / 4。假设随机生成100个点,其中94个落入圆中,则可得π = 4 * 94 / 100(随机生成的点越多,π越逼近真实值)。

使用蒙特卡罗求解π:

# --*-- coding: utf-8 --*--
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Circle

def monteCarlo(n):
    o, r = (0., 0.), 1.0  #设置圆心及半径
    a, b = (o[0] - r , o[0] + r), (o[1] - r , o[1] + r)  #设置正方形边长范围

    #在正方形内投点
    x = np.random.uniform(a[0], a[1], n)
    y = np.random.uniform(b[0], b[1], n)

    #获取落入圆内点的数目
    dist = np.sqrt((x - o[0]) ** 2 + (y - o[1]) ** 2)
    goal_dots = len([i for i in dist if i < r])

    pi = 4 * float(goal_dots) / n
    print ‘值为:‘, pi

    #图示化
    fig = plt.figure()
    axes = fig.add_subplot(111)
    axes.plot(x, y, ‘o‘, markersize = 1)
    plt.axis(‘equal‘)
    circle = Circle(o, r, alpha = 0.5)
    axes.add_patch(circle)

    plt.show()

if __name__ == ‘__main__‘:
    monteCarlo(10000)

随机生成10000个点得到图示化效果及π如下:

值为: 3.1416
时间: 2024-12-29 23:12:33

蒙特卡罗(monteCarlo)的相关文章

蒙特卡罗方法计算圆周率

蒙特卡罗方法计算圆周率 前几天读到了一篇网志:蒙特卡罗方法入门,http://www.ruanyifeng.com/blog/2015/07/monte-carlo-method.html 其中介绍了用概率计算圆周率的方法,所以就用程序做了以下尝试. 作为常量的PI值的近似在Math.PI中为3.141592653589793. Ⅰ.方形中的所有像素计算 package yumu.probability.montecarlo; public class CalculatePI { private

Monte-Carlo Dropout

Monte-Carlo Dropout Monte-Carlo Dropout(蒙特卡罗 dropout),简称 MC dropout. 一种从贝叶斯理论出发的 Dropout 理解方式,将 Dropout 解释为高斯过程的贝叶斯近似. 云里雾里的,理论证明看起来挺复杂,有兴趣可以参考论文:Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning. 以及这篇论文的 Appendix.

Introduction to Monte Carlo Tree Search (蒙特卡罗搜索树简介)

 部分翻译自“Monte Carlo Tree Search and Its Applications”. MCTS 结合了传统 MC 随机采样的方法 和 树搜索的方法.MC 方法利用重复的随机采样来得到结果.在 MCTS 中,随机采样的过程是在随机模拟的形式中,用来拓展游戏树.该游戏树紧接着别用来决定下一个 move.MCTS 随着游戏树迭代的生长.每一次迭代,game tree 就 traversed 和 expanded.一段时间之后,game tree 就会收敛.这意味着在每次迭代中都

概率算法 蒙特卡罗算法

/***Date:2014.12.11***/ //概率算法思想:统计学思路. //基本过程:1)将问题转化为应的容易计算面积的几何图形S,问题结果对应几何图形中的某一部分S1: ////////////2)向几何图形中随机撒点: ////////////3)统计几何图形S.S1中的点数,根据二者面积关系以及二者中的点数来计算得到结果: ////////////4)判断结果是否达到需要精度结果,若符合则输出,否则继续(2)步骤. //蒙特卡罗(Monte Carlo)算法 //均匀撒点:利用随机

(转)ROS导航之参数配置和自适应蒙特卡罗定位

我们的机器人使用两种导航算法在地图中移动:全局导航(global)和局部导航(local).这些导航算法通过代价地图来处理地图中的各种信息,导航stack使用两种costmaps http://www.cnblogs.com/zjiaxing/p/5543386.html存储环境的障碍信息.一个costmap进行全局规划,在整个环境做长期的规划,而另一个是用于局部规划和避障. 全局导航: 在已建立的地图上做一个远距离目标的路径规划. 局部导航: 在正在建立的地图上做近距离目标同时要实时避开障碍物

误码率仿真,蒙特卡罗方法,置信度

本文将介绍利用蒙特卡罗方法对误码率进行仿真的基本原理和基本原则. 1. 简介     误码率是通信系统性能评价的一个重要指标,在给定信道.编译码方式下,误码率是一个固定取值.少部分情况下,可以通过理论推导得到理论的误码率,但是在大多数情况下,理论误码率无法推得,这时往往考虑采用蒙特卡罗方法对误码率进行仿真.(误比特率.误码率同理)     蒙特卡罗方法是一种通过随机采样获得数值解的一类计算方法.误码率,即给定条件下传输的错误概率,可以近似计算为错误码数和总码数之间的比值,因此很容易通过蒙特卡罗方

(转)阮一峰-蒙特卡罗方法入门

本文转载自阮一峰-蒙特卡罗方法入门 本文通过五个例子,介绍蒙特卡罗方法(Monte Carlo Method). 一.概述 蒙特卡罗方法是一种计算方法.原理是通过大量随机样本,去了解一个系统,进而得到所要计算的值. 它非常强大和灵活,又相当简单易懂,很容易实现.对于许多问题来说,它往往是最简单的计算方法,有时甚至是唯一可行的方法. 它诞生于上个世纪40年代美国的"曼哈顿计划",名字来源于赌城蒙特卡罗,象征概率. 二.π的计算 第一个例子是,如何用蒙特卡罗方法计算圆周率π. 正方形内部有

用蒙特卡罗方法计算五人传球问题

蒙特卡罗方法百度解释http://baike.baidu.com/link?url=XwVnK6P_gip61_P9RzC9u6T4KQP5hmoZIvx57XBM66hPBONRRl3-yAwldGr3orFe 问题描述: 有A B C D E 五个人,围成一圈,开始球在A的手上,然后由A向与自己相邻的两边的某一人传球,然后要求计算球被传十次,最后又回到A手中的概率. 如上图所示,A只能把球传给B或者E,其几率是相同的. 对每个人来说把球传给左边或者右边的人的几率都是相同的,且为1/2: 这样

ROS导航之参数配置和自适应蒙特卡罗定位

我们的机器人使用两种导航算法在地图中移动:全局导航(global)和局部导航(local).这些导航算法通过代价地图来处理地图中的各种信息,导航stack使用两种costmaps http://www.cnblogs.com/zjiaxing/p/5543386.html存储环境的障碍信息.一个costmap进行全局规划,在整个环境做长期的规划,而另一个是用于局部规划和避障. 全局导航: 在已建立的地图上做一个远距离目标的路径规划. 局部导航: 在正在建立的地图上做近距离目标同时要实时避开障碍物