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

简介: 最近在做 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!

相关文章
|
4月前
【数值分析】迭代法求方程的根(附matlab代码)
【数值分析】迭代法求方程的根(附matlab代码)
|
4月前
【数值分析】二分法求方程的根(附matlab代码)
【数值分析】二分法求方程的根(附matlab代码)
|
算法 UED 索引
Nmslib高维空间最近邻逼近搜索算法介绍
业务场景 上一次介绍图像搜索的基本原理,现在记录下使用的数据包的问题。查询图片先进行特征提取,使用一个向量来表示,之后使用该向量与数据库中所有的商品向量进行计算相似度指标,比如cos距离,欧式距离,汉明距离。
5997 0
|
3月前
|
算法 Java C++
非启发式算法——二分、三分搜索算法
非启发式算法——二分、三分搜索算法
75 0
|
5月前
|
算法
蒙特卡罗算法
蒙特卡罗算法
|
9月前
|
机器学习/深度学习 算法 数据处理
无约束最优化(五) 最小二乘法问题的解法
无约束最优化(五) 最小二乘法问题的解法
110 0
|
存储 算法 Python
基于pythonA*算法两种搜索算法求解八数码问题
基于pythonA*算法两种搜索算法求解八数码问题
211 0
基于pythonA*算法两种搜索算法求解八数码问题
|
算法 Python
秒懂算法 | 蒙特卡罗算法
主元素问题的蒙特卡罗算法分析、设计与Python实战。
163 0
秒懂算法 | 蒙特卡罗算法
|
机器学习/深度学习 传感器 算法
【随机分形搜索算法】一种新的全局数值优化的适应度-距离平衡随机分形搜索算法FDB-SFS附matlab代码
【随机分形搜索算法】一种新的全局数值优化的适应度-距离平衡随机分形搜索算法FDB-SFS附matlab代码
|
机器学习/深度学习 算法 Serverless
非梯度类启发式搜索算法:Nelder Mead
Nelder Mead 算法通常是用来求解非线性(nonlinear)、导函数未知情况下目标函数的最大值或者最小值。学过梯度下降的同学应该知道,梯度下降类算法的每一步都需要计算当前位置的梯度,从而更新当前解使得最终逐渐逼近最优解。但在某一些情况下,目标函数的梯度难以求得或是函数值离散的情况下,这时候便无法直接使用梯度类算法来求解了。
327 0
非梯度类启发式搜索算法:Nelder Mead