Как использовать линейный конгруэнтный генератор

Я должен разработать линейный конгруэнтный генератор с этой формулой 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 ответ

Решение

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

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

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

кости = 1 + lcg(a,b,m) % 6

Другие вопросы по тегам