📜  随机游走( Python的实现)

📅  最后修改于: 2021-04-30 02:24:04             🧑  作者: Mango

简介随机游走是一种数学对象,称为随机过程或随机过程,它描述的路径由某些数学空间(例如整数)上的一系列随机步长组成。随机游动的一个基本示例是整数行上的随机游动,它从0开始,并且在每一步以相等的概率移动+1或-1。其他示例包括分子在液体或气体中行进时所追踪的路径,觅食动物的搜索路径,动荡的股票价格以及赌徒的财务状况都可以通过随机行走模型来近似,甚至尽管它们在现实中可能并不是真正随机的。如这些示例所示,随机游走可应用于许多科学领域,包括生态学,心理学,计算机科学,物理学,化学,生物学以及经济学。随机游走解释了在这些领域中观察到的许多过程的行为,因此可以作为记录的随机活动的基本模型。作为更数学的应用,可以通过在基于代理的建模环境中使用随机游走来近似pi的值。

足够无聊的理论。让我们休息一下,同时获得一些代码知识。因此,为了编写随机游走代码,我们基本上将需要Python的一些库来进行数学运算,而另一些库来绘制曲线。

需要图书馆

  1. matplotlib它是一个外部库,可帮助您绘制曲线。要安装此库,请在cmd中键入以下代码。
    pip install matplotlib

    这足以使您完成安装。

  2. numpy也是Python的外部库,它可以帮助您处理数组和矩阵。要安装该库,请在cmd中键入以下代码。
    pip install numpy
  3. random这是Python的内置库,我们将使用它来生成随机点。

一维随机游动随机游动的一个基本示例是整数行上的随机游动,该整数游动从0开始,并且在每一步均以相等的概率移动+1或?1。

因此,让我们尝试在Python实现一维随机游走。

# Python code for 1-D random walk.
import random
import numpy as np
import matplotlib.pyplot as plt
  
# Probability to move up or down
prob = [0.05, 0.95]  
  
# statically defining the starting position
start = 2  
positions = [start]
  
# creating the random points
rr = np.random.random(1000)
downp = rr < prob[0]
upp = rr > prob[1]
  
  
for idownp, iupp in zip(downp, upp):
    down = idownp and positions[-1] > 1
    up = iupp and positions[-1] < 4
    positions.append(positions[-1] - down + up)
  
# plotting down the graph of the random walk in 1D
plt.plot(positions)
plt.show()

输出:

更高的尺寸在更高的尺寸中,一组随机行走的点具有有趣的几何特性。实际上,人们得到了一个离散的分形,即一个在大尺度上表现出随机自相似性的集合。在小范围内,人们可以观察到由于走动的网格而产生的“锯齿状”。下面引用的两本Lawler书籍是有关此主题的很好资料。随机行走的轨迹是所访问点的集合,被视为一个集合,而与行走何时到达该点无关。在一个维度上,轨迹只是步行所达到的最小高度和最大高度之间的所有点(两者平均在ηn的数量级上)。

让我们尝试以2D方式创建随机游走。

# Python code for 2D random walk.
import numpy
import pylab
import random
  
# defining the number of steps
n = 100000
  
#creating two array for containing x and y coordinate
#of size equals to the number of size and filled up with 0's
x = numpy.zeros(n)
y = numpy.zeros(n)
  
# filling the coordinates with random variables
for i in range(1, n):
    val = random.randint(1, 4)
    if val == 1:
        x[i] = x[i - 1] + 1
        y[i] = y[i - 1]
    elif val == 2:
        x[i] = x[i - 1] - 1
        y[i] = y[i - 1]
    elif val == 3:
        x[i] = x[i - 1]
        y[i] = y[i - 1] + 1
    else:
        x[i] = x[i - 1]
        y[i] = y[i - 1] - 1
      
  
# plotting stuff:
pylab.title("Random Walk ($n = " + str(n) + "$ steps)")
pylab.plot(x, y)
pylab.savefig("rand_walk"+str(n)+".png",bbox_inches="tight",dpi=600)
pylab.show()

输出:

应用领域

  1. 在计算机网络中,随机游走可以对服务器中缓冲的传输数据包的数量进行建模。
  2. 在种群遗传学中,随机游走描述了遗传漂移的统计特性。
  3. 在图像分割中,随机游走用于确定与每个像素关联的标签(即“对象”或“背景”)。
  4. 在大脑研究中,随机行走和强化随机行走用于模拟大脑中神经元放电的级联。
  5. 随机游走也已被用来采样大量的在线图,例如在线社交网络。

参考
1.维基百科–随机游走
2. Stackoverflow –随机游走1D
3. matplotlib文档