【问题标题】:How to generate random directions (N, S, E, W, none) with some kind of "momentum"?如何用某种“动量”生成随机方向(N、S、E、W、无)?
【发布时间】:2014-06-19 08:28:46
【问题描述】:

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

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

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

换句话说,我需要我的 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 random prng random-walk


    【解决方案1】:

    您可以使用turn rightturn leftmove forward 作为可能的移动。

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

    【讨论】:

    • 哦,这很有趣...虽然我不想完全排除向后移动的可能性,但我也可以添加“停留”和“转 180 度”,然后减轻重量在他们!我喜欢这个,我认为它会工作。 +1
    【解决方案2】:

    是否允许在步骤之间存储动量(速度)?

    如果是这样,那么最好的办法可能是在每个时间步选择一个速度(即速度和方向),这会将像一个向量添加到之前的速度。无论如何,这是更现实的物理学,因为力会改变动量。

    (但考虑到你生活在一个网格上,你如何量化事物会很复杂,以至于你最终只能移动 NESW。)

    【讨论】:

    • 这听起来是个好主意,但我如何在 2D 中做到这一点?我是否分别做 X 和 Y,看看向量最接近哪个 NESW?如果是这样,那我怎么知道我应该“停止”还是应该移动?
    • 使用两个方向(基础)向量(x 和 y)并设置最大和最小半径。半径是 sqrt(xx+yy)。如果方向向量的长度变大,请将其截断到最大长度,但保持方向。如果你的方向不符合最小长度,则表示“不要移动”,否则按大方向移动。
    【解决方案3】:

    为什么不直接创建一个随机数 0

    我看到您的问题是随机游走过于随机,我可能会尝试按照您的方向坚持一段时间(您也可以使用随机数来确定多长时间)然后重新决定。在我看来,这至少是基于现实的:通常如果你决定走向某个方向,你会这样做一段时间,不要考虑每隔 x 秒改变主意.

    http://docs.python.org/2/library/random.html 展示了如何使用随机数函数。 random.uniform() 为您提供浮动的均匀分布。将 random.randint() 用于整数结果(我想也是统一的)。

    【讨论】:

    • 我不确定我是否真的想“坚持当前的方向”……在某些情况下,我真的不想完全向后退。相反,我希望方向与之前的方向相似...这样我向北后立即向南走的可能性比我先向东走的可能性要小。在 [0, 4] 上选择一个随机整数的问题是我找不到一个好的方法来让它满足相似性要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2019-12-27
    相关资源
    最近更新 更多