我想在python中做一个自我避免的2D随机游走。想象一下,它就像正方形网格上的圆点,它只能向上、向下、左边或右边,但它不能在同一点上降落两次。我知道怎么做,但是我的编程技巧不是很好(我是个初学者),而且代码也不起作用。
最终产品应该如下所示:在这里输入图像描述
我的想法是创建两个列表:一个是存储x和y的地方(也就是我已经去过的坐标),另一个是与我目前所处位置周围的点(我将其标记为邻居)。我想创建一个新的变量surviving_neighbors。这将是一个坐标的周围点,我还没有去(例如,我目前在(1,1);我已经在(0,1)和(1,2),以便我幸存的邻居将是(1,0 )和(2,1))。我希望使用差分方法获得Surviving_neighbors :我将neighbors.difference(坐标列表)保存在一个变量中,这个变量位于邻居列表中,而不是在我所在的坐标列表中。第一个问题是,我没有一个带有坐标的列表,但是x和y是分开存储的。接下来,我将使用选择(Surviving_neighbors),从而选择新的坐标。这就产生了另一个问题:我可能不能称它为轨迹,但我必须用x和y来重新定义它。老师建议我把x和y作为向量存储,但我不知道怎么做。
代码:
from random import choice
import numpy as np
from matplotlib import pyplot as plt
plt.style.use(['science', 'notebook', 'dark background'])
x, y = 0, 0
coordinates = [(x, y)]
for time in range(10):
dx, dy = choice([(0, 1), (-1, 0), (0, 1), (0, -1)])
x, y = x + dx, y + dy
X.append(x)
Y.append(y)
neighbors = [x+1, y
x-1
y
x, y+1
x, y-1]
surviving_neighbors = neighbors.difference(X, Y)
trajectory = choice(surviving_neighbors)
plt.plot()发布于 2022-11-28 01:06:24
很难知道你要做什么,这里是一个基本的工作例子;
这是无效的,因为他们不存在;
Plt.style.use(“科学”、“笔记本”、“黑暗背景”)
可能的价值是;
‘seaborn_Light2’,‘_mpl_test_修补程序’,‘_mpl-画廊-nogrid’,'bmh',‘经典’,‘暗_背景’,‘快速’,‘五色’,'ggplot',‘灰度’,‘海运-V0_8’,‘海运-V0_8-明亮’,‘海运-V0_8-色盲’,‘海运-V0_8-黑暗’,‘seaborn V0_8-深色调色板,’‘海运-V0_8-色盲’,“海运-V0_8-黑暗网格”、“海运-V0_8-深度”、“海运-V0_8-静音”、‘海运-V0_8-记事本’、‘海运-V0_8-纸张’、‘海运-V0_8-巴斯特尔’、‘海运-V0_8-海报’、‘海运-V0_8-交谈’、‘海运-V0_8-白纸黑字’、‘海运-V0_8-粉饰’、‘海运-V0_8-对话’、‘海运-V0_8-白色’、‘海运-V0_8-粉饰’、‘海运-V0_8-对话’、‘海运-V0_8-白色’、‘海运-V0_8-粉刷’、‘海运-V0_8-对话’、‘海运-V0_8-白色’、‘海运-V0_8-白色’。
from random import choice
from matplotlib import pyplot as plt
plt.style.use('seaborn-v0_8-darkgrid')
print(plt.style.available)
#2D self-avoiding random walk
def dotty(n):
x, y = 0, 0
path = [(x, y)]
for i in range(n):
# pick the closest point but it must complete without crossing itself
x, y = choice([(x+1, y), (x-1, y), (x, y+1), (x, y-1)])
if (x, y) in path:
return path
path.append((x, y))
return path
# show plot
def show_path(path):
plt.figure(figsize=(10, 10))
# draw points
plt.scatter(*zip(*path), s=5, c='k')
# draw lines in red
plt.plot(*zip(*path), c='r')
plt.show()
# main
if __name__ == '__main__':
path = dotty(100000)
show_path(path)输出:

https://stackoverflow.com/questions/74594765
复制相似问题