Как использовать линейный конгруэнтный генератор - PullRequest
0 голосов
/ 03 марта 2019

Мне нужно разработать линейный конгруэнтный генератор с этой формулой Xn+1 = (aXn + b) mod m в Python.Я думаю, что понимаю, как генерировать последовательность чисел, но я не знаю, как ее использовать, например, для симуляции игры в кости (мне нужно число от 1 до 6)

def seedLCG(initVal):
  global rand
  rand = initVal

def lcg():
  a = 1664525
  b = 1013904223
  m = 2**32
  global rand
  rand = (a*rand + b) % m
  return rand

seedLCG(1)

for i in range(10):
  print lcg()

1 Ответ

0 голосов
/ 03 марта 2019

LCG - это общий алгоритм генерации псевдослучайных чисел.Вы не можете использовать m = 6, иначе периодичность LCG будет низкой.Вам нужно использовать правильно выбранные значения a, b и m, чтобы гарантировать, что LCG не имеет небольшой периодичности.

Вы можете использовать a = 1664525, b = 1013904223, m = 2** 32

Это даст псевдослучайные целые числа, вы можете получить кубик с:

кубик = 1 + lcg (a, b, m)% 6

...