ランダムな方法でグリッドを探索しようとしています。
私が進むことができる 5 つの可能な方向は、北、東、南、西、および滞在であり、少なくとも最初のうちは、すべて同じ可能性があります。
上記からランダムな方向を選択するだけの問題は、エージェントが中心に近づきすぎてしまうことです (2 つのランダムな方向が互いに非常に簡単に打ち消し合う可能性があります)。これは、ランダム ウォークの目的を完全に無効にします。
私がやりたいことは、全体として偏りのないランダムな方法でランダムな方向を生成することですが、以前に選択した方向に近い方向を選択する可能性が高くなります。
別の言い方をすれば、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 で区切られているわけではないことを理解していれば、これは明らかです!)
だから私の質問は、これ(または他のアルゴリズム)を、正または負の数だけでなく、5つの方向のいずれかを選択するように拡張するにはどうすればよいですか?