Python 如何将随机游动改为自回避随机游动

Python 如何将随机游动改为自回避随机游动,python,Python,有人能帮我把随机行走改成自避随机行走吗?我试着这么做,但没有成功。下面是随机行走的代码 这是我的工作代码。 def随机行走3D(N): Nsteps=范围(N) xp,yp,zp=[0],[0],[0] pos=[0,0,0] rand=np.随机.均匀(0,1,N) 对于Nsteps中的i: #根据随机数向右移动 #左上下 如果0.00000我相信这里的主要问题是,自我回避步行并不总是有固定数量的点可以到达。根据定义,任何一点只能访问一次,因此在每一步上可行方向的数量都会有所不同,并且在当前

有人能帮我把随机行走改成自避随机行走吗?我试着这么做,但没有成功。下面是随机行走的代码

这是我的工作代码。

def随机行走3D(N):
Nsteps=范围(N)
xp,yp,zp=[0],[0],[0]
pos=[0,0,0]
rand=np.随机.均匀(0,1,N)
对于Nsteps中的i:
#根据随机数向右移动
#左上下

如果0.00000我相信这里的主要问题是,自我回避步行并不总是有固定数量的点可以到达。根据定义,任何一点只能访问一次,因此在每一步上可行方向的数量都会有所不同,并且在当前代码中它是固定的


您绝对应该以更友好的方式存储访问点的历史记录。我想说,以(x,y,z)的形式列出元组是一种方法。这使您可以更轻松地检查您正在考虑选择的方向是否已经访问过。一般来说,在每一步中,您应该按照以下步骤进行:

  • 确定步行者可以走哪条路
  • 以相等的概率随机选择方向
  • 将该职位保存在历史记录中,以免再次访问
  • 下面是一个简单的代码:

    import random
    
    
    def get_possible_directions(point):
        """Point is in form (x, y, z)"""
        directions = [
            (point[0]+1, point[1], point[2]),  # right
            (point[0]-1, point[1], point[2]),  # left
            (point[0], point[1]+1, point[2]),  # forward
            (point[0], point[1]-1, point[2]),  # backward
            (point[0], point[1], point[2]+1),  # up
            (point[0], point[1], point[2]-1)   # down
        ]
        return directions
    
    
    def random_walk_3D(N):
        Nsteps = range(N)
        current_position = (0, 0, 0)
        visited_points = []
        for _ in Nsteps:
            visited_points.append(current_position)
            all_directions = get_possible_directions(current_position)
            not_visited_directions = [direction for direction in all_directions if direction not in visited_points]
            current_position = random.choice(not_visited_directions)
    
        xp, yp, zp = zip(*visited_points)
        return xp, yp, zp  # returns tuples. If you want lists, just do list(xp), ...
    
    
    if __name__ == "__main__":
        x, y, z = random_walk_3D(10)
        print(x)
        print(y)
        print(z)
    
    
    你可能想看看。至于函数中的最后一步可以帮助您。

    什么是“自我避免随机行走”?