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:
- O esquema de criação dinâmica (DC) (1998) seleciona conjuntos de parâmetros para os MTs com base na hipótese de que eles são independentes se os polinômios das características correspondentes forem coprime.
- A Ahead Salte para a -linear RNG (2008). Eu acho que é semelhante ao método de salto de sapo para LCGs.
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?
fonte
Respostas:
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.
fonte
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 oxorshift+
código muito leve .Se você quiser usar o MT, poderá usar o SFMT como salto PRNG e SFMT para gerar vários fluxos.
fonte
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.
fonte