蒙特卡洛方法与蒙特卡洛搜索树(一)

简介: 最近在做 AIOps 相关的项目时,用到了蒙特卡洛搜索树(MCTS)算法,对蒙特卡洛相关的内容有些兴趣,在此整理些相关的资料。

蒙特卡洛方法

蒙特卡洛方法(Monte Carlo method),也称统计模拟方法,是 1940 年代中期提出的一种以概率统计理论为指导的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。

20 世纪 40 年代,在科学家冯·诺伊曼、斯塔尼斯拉夫·乌拉姆和尼古拉斯·梅特罗波利斯于洛斯阿拉莫斯国家实验室为核武器计划工作时,发明了蒙特卡洛方法。因为乌拉姆的叔叔经常在摩纳哥的蒙特卡洛赌场输钱得名,而蒙特卡洛方法正是以概率为基础的方法。

与它对应的是确定性算法

基本概念

通常蒙特卡罗方法可以粗略地分成两类:

  • 一类是所求解的问题本身具有内在的随机性,借助电脑的运算能力可以直接模拟这种随机的过程。例如在核物理研究中,分析中子在反应堆中的传输过程。中子与原子核作用受到量子力学规律的制约,人们只能知道它们相互作用发生的概率,却无法准确获得中子与原子核作用时的位置以及裂变产生的新中子的行进速率和方向。科学家依据其概率进行随机抽样得到裂变位置、速度和方向,这样模拟大量中子的行为后,经过统计就能获得中子传输的范围,作为反应堆设计的依据。
  • 另一种类型是所求解问题可以转化为某种随机分布的特征数,比如随机事件出现的概率,或者随机变量的期望值。通过随机抽样的方法,以随机事件出现的频率估计其概率,或者以抽样的数字特征估算随机变量的数字特征,并将其作为问题的解。这种方法多用于求解复杂的多维积分问题。

应用

下面主要介绍第二种类型的例子:
1. 蒙特卡洛计算π
image.png

  在上图中,1/4 圆面积与正方形面积之比为π:4. 让程序随机生成两个[0,1]之间的实数 x, y,看以 (x,y) 组成的点是否落在圆内。重复 N 次,统计圆内的点个数和总的点个数,其比值应接近于圆面积于正方形面积之比,即 π:4

2. 还是蒙特卡洛计算π

  布丰投针问题(Buffon's needle problem),是布丰于 18 世纪提出的一个数学问题:   设我们有一个以平行且等距木纹铺成的地板(如下图),现在随意抛一支长度比木纹之间距离小的针,求针和其中一条木纹相交的概率。
image.png
  现假设:木板间距离为 d, 针长度为 s, 已知 s<d.   
  应用蒙特卡洛方法,我们在地面投掷 n 次,观测出针与地面相交的次数 m, 如果实验的次数足够多,则我们可以以 p=m/n 代表针与地板木纹相交的概率。
  标题不是求 π 么,到现在为止好像跟 π 没有什么关系呀,别急,我们考虑下怎么跟随机分布扯上关系。
  因为要求相交的概率,如果知道了针的位置,是不是就能知道有没有相交呢。基于此,我们用变量 (X,Y) 表示针的位置,那 X,Y 分别代表什么呢,如果是在坐标系中,我们可以用向量表示位置,因为向量能确定方向和大小,同样地,我们需要一个变量代表大小,一个变量代表方向。

  如图,我们可以用 X 代表针中点到最近木纹的距离,用 Y代表针与木纹的夹角,如此,就能确定针的位置了。

  由于投掷针是完全随机的,因此:
  - X 服从 [0, d/2] 上的均匀分布;
  - 同理,Y 服从 [0, π/2] 上的均匀分布。
  有了表示针位置的变量,那么如何判断相交呢?如上图,如果针端点与木纹刚好相交时,夹角为 α, 此时,距离X= (s/2) ∗ sinα. 如果不相交时,则对应的距离 X> (s/2) ∗ sinα, 如果是上图左侧示例,则
X< (s/2) ∗ sinα.
  另外,由于 X,Y 相互独立,则有概率密度函数:
  image.png
  由此可计算针与直线相交的概率:
  image.png
  因此,
  2s/dπ = m/n

Surprise!

相关文章
|
6月前
|
算法 数据可视化 数据挖掘
使用Python实现层次聚类算法
使用Python实现层次聚类算法
90 1
|
算法 UED 索引
Nmslib高维空间最近邻逼近搜索算法介绍
业务场景 上一次介绍图像搜索的基本原理,现在记录下使用的数据包的问题。查询图片先进行特征提取,使用一个向量来表示,之后使用该向量与数据库中所有的商品向量进行计算相似度指标,比如cos距离,欧式距离,汉明距离。
6097 0
|
6月前
|
人工智能 算法 Java
【算法设计与分析】— —单源最短路径的贪心算法
【算法设计与分析】— —单源最短路径的贪心算法
|
6月前
|
算法 Java C++
非启发式算法——二分、三分搜索算法
非启发式算法——二分、三分搜索算法
212 0
|
11月前
|
算法
蒙特卡罗算法
蒙特卡罗算法
|
算法 Java
单源最短路径【学习算法】
单源最短路径【学习算法】
75 0
|
算法 搜索推荐
从图到算法【图论】
柯尼斯堡七桥问题是图论中的著名问题。
|
存储 算法 Python
基于pythonA*算法两种搜索算法求解八数码问题
基于pythonA*算法两种搜索算法求解八数码问题
271 0
基于pythonA*算法两种搜索算法求解八数码问题
|
算法 Python
秒懂算法 | 蒙特卡罗算法
主元素问题的蒙特卡罗算法分析、设计与Python实战。
246 0
秒懂算法 | 蒙特卡罗算法
|
存储 算法 C++
秒懂算法 | 图论
图论是一个“巨大”的专题,有大量的知识点,有众多广为人知的问题,有复杂的应用场景。 图论算法常常建立在复杂的数据结构之上。本文讲解了基础的图论考点,帮助大家了解图论专题
222 0
下一篇
无影云桌面