0% acharam este documento útil (0 voto)
202 visualizações3 páginas

Mersenne Twister

O Mersenne Twister é um gerador de números pseudoaleatórios desenvolvido em 1997 por Makoto Matsumoto e Takuji Nishimura. Ele gera uma longa sequência de números aleatórios e passa em diversos testes estatísticos, porém seu estado grande consome muita memória. O algoritmo inicializa um vetor com o estado atual e gera novos números aleatórios a cada 624 iterações, realizando operações bit a bit no vetor para produzir números "temperados".
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
202 visualizações3 páginas

Mersenne Twister

O Mersenne Twister é um gerador de números pseudoaleatórios desenvolvido em 1997 por Makoto Matsumoto e Takuji Nishimura. Ele gera uma longa sequência de números aleatórios e passa em diversos testes estatísticos, porém seu estado grande consome muita memória. O algoritmo inicializa um vetor com o estado atual e gera novos números aleatórios a cada 624 iterações, realizando operações bit a bit no vetor para produzir números "temperados".
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 3

Mersenne Twister

Eduardo Ferreira Junior, Thawan Fidelis


August 26, 2014
1 Descricao
O Mersenne Twister e um gerador de n umeros pseudo aleatorios.

E de longe o gerador
de n umeros pseudo aleatorios mais utilizado. Muitas linguagens de programacao o trazem
implementado em seus metodos randomicos nativos. Este nome foi escolhido pelo fato do
tamanho do perodo dele ser escolhido para ser um n umero primo de Mersenne.
Foi desenvolvido em 1997 por Makoto Matsumoto e Takuji Nishimura, ambos da Univer-
sidade de Hiroshima. Foi o primeiro gerador de n umeros pseudo aleatorios de alta qualidade.
2 Vantagens e desvantagens
Vantagens: A versao que geralmente e usada do Mersenne Twister, a MT19937, que
produz uma sequencia de inteiros de 32 bits possui caractersticas desejaveis como:
a Possui um perodo bastante grande de 2
199371
. Um perodo enorme sozinho nao
e garantia de um gerador de qualidade, mas perodos pequenos como 2
32
podem
ser problematicos.
b Se sai bem em varios testes estatsticos, inclundo o teste Diehard.
Desvantagens: E outras indesejaveis como:
a O espaco do estado e muito grande e estressa o cache da CPU (Um perodo de
2
512
e suciente para qualquer aplicacao). Os criadores propuseram uma versao
mais leve com piores propriedades estatsticas, mas usando apenas 127 bits de
espaco de estado.
b Para os dias de hoje, ele e um pouco lento, a menos que seja usada a implemen-
tacao SFMT, que e a versao mais leve.
c Ele passa na maioria dos testes de esmagamento, mas nao em todos.
1
3 Detalhamento do algoritmo
// Cria um array de tamanho 624 para armazenar o estado do gerador
int[0..623] MT
int index = 0
// Inicia o gerador com uma semente
function initialize_generator(int seed) {
index := 0
MT[0] := seed
for i from 1 to 623 { // itera em cada elemento do array
MT[i] := lowest 32 bits of(1812433253 * (MT[i-1] xor
(right shift by 30 bits(MT[i-1]))) + i) // 0x6c078965
}
}
// Extrai um numero aleatorio "temperado" baseado no index-esimo valor,
// chamando generate_numbers() a cada 624 numeros
function extract_number() {
if index == 0 {
generate_numbers()
}
int y := MT[index]
y := y xor (right shift by 11 bits(y))
y := y xor (left shift by 7 bits(y) and (2636928640)) // 0x9d2c5680
y := y xor (left shift by 15 bits(y) and (4022730752)) // 0xefc60000
y := y xor (right shift by 18 bits(y))
index := (index + 1) mod 624
return y
}
// Gera o array de 624 numeros "nao-temperados"
function generate_numbers() {
for i from 0 to 623 {
int y := (MT[i] and 0x80000000)
// bit 31 (32nd bit) de MT[i]
+ (MT[(i+1) mod 624] and 0x7fffffff)
// bits 0-30 (primeiros 31 bits) de MT[...]
MT[i] := MT[(i + 397) mod 624] xor (right shift by 1 bit(y))
if (y mod 2) != 0 { // y impar
MT[i] := MT[i] xor (2567483615) // 0x9908b0df
}
}
}
2
4 Referencias bibliogracas
Os links nos quais nos apoiamos para realizar a implementacao foram:
http://www.math.sci.hiroshima-u.ac.jp/
~
m-mat/MT/MT2002/CODES/mt19937ar.c Codigo
fonte na linguagem C, do Makoto Matsumoto.
http://www.math.sci.hiroshima-u.ac.jp/
~
m-mat/MT/ARTICLES/mt.pdf Artigo escrito
pelo Matsumoto e pelo Nishimura.
http://code.activestate.com/recipes/578056-mersenne-twister/ Mersenne Twister
implementado na linguagem Python.
https://jazzy.id.au/2010/09/22/cracking_random_number_generators_part_3.html
Explicacao do pseudo codigo do Mersenne Twister.
3

Você também pode gostar

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy