Paralela Mersenne Twister para Monte Carlo


10

Recentemente, me deparei com um comentário afirmando que quase todos os pesquisadores que usam os métodos de Monte Carlo estão fazendo errado. Em seguida, foi elaborado que a simples escolha de sementes diferentes para diferentes instâncias de um PRNG, como o Mersenne Twister, não é suficiente para garantir resultados imparciais, pois podem ocorrer colisões ruins . O artigo da Wikipedia sobre o Mersenne Twister parece corroborar:

Múltiplas instâncias do Mersenne Twister que diferem apenas no valor da semente (mas não em outros parâmetros) geralmente não são apropriadas para simulações de Monte-Carlo que requerem geradores de números aleatórios independentes, embora exista um método para escolher vários conjuntos de valores de parâmetros.

Eu tenho que admitir, eu sou culpado como acusado. Mas assim como todas as outras implementações de bibliotecas paralelas de Monte Carlo que eu vi até agora, em particular o ALPS .

O artigo da Wikipedia também faz referência a dois artigos que oferecem remédio:

Ambos os métodos foram co-orientados por Matsumoto e Nishimura, os autores originais do algoritmo Mersenne Twister.

Receio não ter muito conhecimento de teoria dos números ou álgebra e não entender completamente os esquemas acima ou a matemática por trás do Mersenne Twister. Minhas perguntas são principalmente de natureza prática:

  • Quanto realmente preciso me preocupar em introduzir viés nas minhas simulações quando não estou empregando esse esquema se quase ninguém se importa com ele na prática (pelo menos na minha comunidade)?
  • Se eu implementasse uma dessas contramedidas, estou certa em supor que a Jump-Ahead é mais adequada, pois se baseia em uma teoria firme e é o método mais moderno?

1
Esta questão não é específica para o MT? Outros PRNGs têm maneiras bastante mais simples de gerar fluxos independentes, como descrito no outro trabalho de Pierre L'Ecuyer (veja especialmente suas pesquisas, como iro.umontreal.ca/~lecuyer/myftp/papers/parallel-rng-imacs.pdf ).
Kirill

Sim, é um pouco específico para o MT. Eu só usei MT em simulações de MC e é considerada a opção um pouco mais cara, mas mais segura, pelos meus colegas. Não tenho certeza se isso é verdade em geral, mas é o que eu entendi.
Jonas Greitemann 01/04

Respostas:


8

Como você diz, o uso do Mersenne Twister para cálculos paralelos quase sempre é feito incorretamente, pois o método correto é difícil de implementar.

De longe, a melhor e mais fácil resposta seria afastar-se inteiramente do Mersenne Twister e usar algo como a família PCG , que fornece vários fluxos imediatamente .

Sabe-se que o Mersenne Twister falhou em vários testes estatísticos , além de ser mais lento que os RNGs mais recentes, como as famílias PCG e XorShift +.

A razão pela qual o Mersenne Twister é tão amplamente usado hoje em dia é principalmente o resultado dos RNGs antes de serem muito piores, tanto em desempenho quanto em qualidade. Também ajudou que os autores originais abrissem uma implementação de alto desempenho.


2
Vale a pena notar que, no artigo ao qual você vinculou, o MT apenas falhou em dois testes de complexidade linear de seu fluxo de bits, portanto, apenas essa falha não o desqualifica necessariamente do uso, e imagino que existem muitos aplicativos que não são sensíveis a esse tipo particular de falha.
Kirill

Certamente. É perfeitamente adequado para muitas aplicações. Para aplicativos mais antigos, mudar o MT geralmente seria um esforço desperdiçado. No entanto, para novos, ou aplicativos que precisam de múltiplos fluxos de números aleatórios, não há razão para usá-lo.
LKlevin #

1
Os geradores de PCG são impressionantes. Quase bom demais para ser verdade. Talvez seja apenas uma overdose de ceticismo científico ou talvez seja o argumento de vendas pesadas do site. De qualquer forma, é bastante novo. Existem investigações independentes que corroboram suas alegações?
Jonas Greitemann

1
Eles têm um argumento de vendas muito pesado para o PCG, mas isso também é algo herdado do Mersenne Twister. Olha a página inicial do xorshift + para ver outro grupo fazendo o mesmo. Quanto a terceiros, acho que conto, já que não tenho nenhuma afiliação com o grupo PCG e verifiquei suas reivindicações extensivamente (tentando provar meu próprio superior no RNG). Você também pode executar o TestU01 no PCG para testar as reivindicações.
precisa saber é o seguinte

Para meu aplicativo / hardware, achei xorshift+duas vezes mais rápido que um gerador de PCG "equivalente"; portanto, tente ambos se a velocidade for importante. O código PCG principal possui muitos recursos integrados em comparação com o xorshift+código muito leve .
horchler

2

Se você quiser usar o MT, poderá usar o SFMT como salto PRNG e SFMT para gerar vários fluxos.

110602106031060


1

Realmente, apenas você pode responder à pergunta sobre viés de simulação e se é aceitável em seu aplicativo. O procedimento padrão que eu uso:

Defina uma sequência pseudo-aleatória como referência (Monte Carlo padrão) usando um alto número de simulações (no gerenciamento de riscos, 10.000 são frequentemente usados, em outros campos, 100.000 a 1M podem ser usados).

Execute seu RNG nos mesmos dados de entrada para um subconjunto de dados (usamos 1 ano, mas isso geralmente é um exagero).

Compare os resultados usando estatísticas que descrevem características dos dados que você realmente usa para tirar conclusões / decisões. Utilizamos percentis (1,5,25,50,75,95,99), erro absoluto, desvio padrão do erro. Tudo isso é relativo ao seu benchmark.

Agora que você tem a análise, pode usar seu próprio julgamento para determinar se o viés do RNG é aceitável.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.