Mersenne Twister Random Generator

De Augusto Baffa Wiki
Revisão de 10h09min de 30 de dezembro de 2020 por Abaffa (discussão | contribs) (Criou página com '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 Mers...')
Ir para navegação Ir para pesquisar
Outros idiomas:
English • ‎português do Brasil

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)


O Mersenne Twister é um algoritmo muito popular e é usado para implementar o comando "random" em diversas linguagens como Ruby, Python e R. O algoritmo Mersenne Twister cria números aleatórios de alta qualidade adequados para simulações de Monte Carlo. Mersenne Twister não é um gerador criptograficamente seguro. No entanto, sua velocidade de execução e aleatoriedade de alta qualidade o tornam um gerador muito atraente para IA.


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.

[math]M_n = 2 ^ n - 1[/math]

Exemplo em Python

Exemplo com 1 milhão de sorteios
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