首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python2D自避随机游动

Python2D自避随机游动
EN

Stack Overflow用户
提问于 2022-11-28 00:03:42
回答 1查看 42关注 0票数 -1

我想在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作为向量存储,但我不知道怎么做。

代码:

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

发布于 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-白色’。

代码语言:javascript
复制
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)

输出:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74594765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档