Mersenne Twister Random Generator
The Mersenne Twister is a PRNG developed in 1997 by Makoto Matsumoto and Takuji Nishimura. It provides for fast generation of very high quality pseudorandom integers. The Mersenne Twister was designed specifically to address many of the flaws found in older algorithms. (Matsumoto, 1998)
The Mersenne Twister is a very popular PRNG. It is the “built in” PRNG for Ruby, Python, and R. This book’s examples also contain implementations for other languages. The Mersenne Twister algorithm creates high quality random numbers suitable for Monte Carlo simulations. Mersenne Twister is not a cryptographically secure generator. However, its execution speed and high quality randomness make it a very attractive generator for AI.
O nome Mersenne Twister vem do fato de que o período do Mersenne Twister é sempre escolhido para ser um número primo de Mersenne.
Um número primo é qualquer número que só pode ser dividido igualmente por ele mesmo e um. Por exemplo, 5 é um número primo. Um número primo de Mersenne é qualquer número n onde M também é um número primo, como visto na equação abaixo.
Exemplo em Python
def mersenne_twister(mult=16807,mod=(2**31)-1,period=(2**30),min=0,max=1,seed=123456789, size=1):
"""Pseudorandom number generater"""
MT = []
for i in range(size):
seed = (mult * seed) % mod
MT.append( (max - min) * (seed / mod) + min )
period -= 1
if period == 0:
print("Pseudorandom period nearing!!")
if size == 1:
return MT.pop()
else:
return MT