我正在尝试以随机方式探索网格。
我可以走的五个可能的方向是北、东、南、西和停留,所有这些都有相同的可能性,至少在开始时是这样。
简单地从上面选择一个随机方向的问题在于,它最终会让我的代理太靠近中心(两个随机方向很容易相互抵消),这完全违背了随机游走的目的。
我想要做的是以整体上无偏见的随机方式生成随机方向,但更有可能选择接近先前选择的方向方向。
换句话说,我需要我的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/