python - 如何使用某种 "momentum"生成随机方向(N、S、E、W、无)?

标签 python random prng random-walk

我正在尝试以随机方式探索网格。
我可以走的五个可能的方向是北、东、南、西和停留,所有这些都有相同的可能性,至少在开始时是这样。

简单地从上面选择一个随机方向的问题在于,它最终会让我的代理太靠近中心(两个随机方向很容易相互抵消),这完全违背了随机游走的目的。

想要做的是以整体上无偏见的随机方式生成随机方向,但更有可能选择接近先前选择的方向方向

换句话说,我需要我的RNG有某种“动力”。

我想出了这个算法:

def RandomWithMomentum(n, momentum=0.5):
    from random import uniform
    v = uniform(-1, 1)
    for i in range(n):
        yield v
        v = v * momentum + uniform(-1, 1) * (1 - momentum)

这似乎给出了很好的结果:

-0.04367186243339227
-0.1798381656787107
-0.07608795741137708
-0.0728742899528114
-0.06215075604982321
 0.17952360050689026
 0.016352984710556573
 0.16954506853320414
 0.3947467183848671
 0.12785652121165636

...只不过,虽然该算法保证正数和负数出现的可能性相同,但它不能保证 -1 到 +1 区间内的均匀分布!

(如果您意识到数字不一定受 -1 和 +1 限制,这应该是显而易见的!)

所以我的问题是,如何扩展这个(或其他一些算法)来选择五个方向之一,而不仅仅是正数或负数?

最佳答案

您可以使用右转左转向前移动作为可能的移动方式。

所以现在你需要随机向一个方向两次才能返回。

关于python - 如何使用某种 "momentum"生成随机方向(N、S、E、W、无)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13509103/

相关文章:

objective-c - Objective C 中的多个随机数生成器

c++ - 我应该使用多少个随机数生成器?

python - 测试请求中的延迟时间

python - 在 Windows 10 上安装 fbprophet Python

用于搜索专利数据库的 Python 模块,即 USPTO 或 EPO

php - 唯一、不可预测、12 位数字、整数 id

php - 如何制作5个总和为100的随机数

python - 创建与另一个相同大小的随机 numpy 矩阵。

algorithm - 参数相关的 PRNG

python - 在 Ruby 中逐步将数组拆分为子数组