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)
你可能想看看。至于函数中的最后一步可以帮助您。什么是“自我避免随机行走”?