Я пытаюсь исследовать сетку случайным образом.
Пять возможных направлений, в которых я могу идти, — это север, восток, юг, запад и останься, все они равновероятны, по крайней мере, изначально.
Проблема с простым выбором случайного направления из вышеперечисленных заключается в том, что в конечном итоге мой агент оказывается слишком близко к центру (два случайных направления могут очень легко компенсировать друг друга), что полностью противоречит цели случайного блуждания.
Что бы я хотел сделать, так это генерировать случайные направления случайным образом, который в целом непредвзят, но который с большей вероятностью выберет направление, близкое к ранее выбранному направлению эм>.
Иными словами, мне нужно, чтобы у моего 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!)
Итак, мой вопрос: как мне расширить этот (или какой-либо другой алгоритм) для выбора одного из пяти направлений, а не просто положительного или отрицательного числа?