如何使用线性同余生成器

问题描述 投票:0回答:1

我必须在Python中用这个公式Xn+1 = (aXn + b) mod m开发一个线性同余生成器。我想我理解如何生成数字序列,但我不知道如何使用它,例如模拟骰子(我需要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()
python generator lcg
1个回答
0
投票

LCG是伪随机数生成的常用算法。您不能使用m = 6,否则您的LCG周期将会很低。您需要使用选择良好的a,b和m值来确保LCG的周期性不小。

你可以使用a = 1664525,b = 1013904223,m = 2 ** 32

这将产生伪随机整数,你可以得到一个骰子:

骰子= 1 + lcg(a,b,m)%6

© www.soinside.com 2019 - 2024. All rights reserved.