Como posso determinar o período do meu gerador de números pseudo-aleatórios?

14

Suponha que eu esteja usando um gerador de números pseudo-aleatórios lineares congruentes (PRNG). Dada uma semente x0 , o fator multiplicador (a), o fator de deslocamento (c) e o fator de módulo (m), como posso determinar o período do meu PRNG? Eu o determino por algoritmos de detecção de experimentação / padrão ou existe uma fórmula direta para calcular seu período?

Embora minha pergunta seja especificamente sobre o método congruencial linear, estou aberto a saber mais sobre como os períodos são calculados na prática para outros PRNGs também.

Paulo
fonte
BTW, se você estiver usando LFSR , o período será máximo se o polinômio de feedback for primitivo . Nesse caso, o período AFAIK (não me cite; com preguiça de desenterrar minhas anotações do curso) é onde o polinômio de feedback p ( x ) F q [ x ] do grau n e q é o tamanho de o campo de coeficientes. qnp(x)Fq[x]nq
2
Os algoritmos de detecção de ciclo de Floyd e os algoritmos de detecção de ciclo de Brent são maneiras eficientes de detectar ciclos. Ambos retornarão alguns L múltiplos do período e, quando você tiver isso, poderá fatorar L e ver qual é o menor fator que é um período.
Xdavidliu

Respostas:

12

Se você se restringir ao ciclo completo de LCG PRNG s, a resposta é fácil, por definição é simplesmente m .

Para encontrar o período de um LCN PRNG de ciclo não completo para uma determinada semente, basta contar o número de iterações do PRNG até gerar o valor da semente mais uma vez.

Na página da wikipedia mencionada :

Duração do período

O período de um LCG geral é no máximo m e, para algumas opções, muito menos que isso. Desde que c seja diferente de zero, o LCG terá um período completo para todos os valores de sementes se e somente se :

cma .

Historicamente, más escolhas levaram a implementações ineficazes de LCGs. Um exemplo particularmente ilustrativo disso é o RANDU, que foi amplamente utilizado no início da década de 1970 e leva a muitos resultados que estão sendo questionados no momento devido ao uso desse pobre LCG.

Por que você deseja usar um gerador de ciclo completo

Se você não se restringe ao ciclo completo de PRNGs de LCG, está correndo um risco enorme .

Se você não sabe que um determinado LCG é um ciclo completo, pode acabar com um gerador com um número arbitrário de seqüências mutuamente distintas, algumas das quais podem ser embaraçosamente pequenas e com uma aleatoriedade assustadora, possivelmente ainda pior do que o infame RANDU gerador .

Você realmente não precisa verificar todos os valores possíveis para garantir que ele gere uma sequência que seja longa o suficiente para o seu aplicativo.

Leitura adicional

Para um excelente iniciador em geradores de números pseudo-aleatórios, recomendo fortemente que você leia o capítulo Receitas Numéricas sobre Números Aleatórios.

Mark Booth
fonte
Isso é verdade, mas não estou me restringindo aos períodos completos de LCG PRNG ... Estou curioso sobre as más escolhas de a, ce, de modo que os fluxos aleatórios que não atingem o período completo. Eu gostaria de saber com antecedência, considerando alguns a, ce, qual será o período inevitavelmente. Eu sei que é o limite superior de m, mas eu queria saber se podemos fazer melhor do que isso e obter o período exato.
Paul
Eu não acho que isso esteja dividindo os aspectos técnicos: a questão era "como determinar o período de um LCG com parâmetros arbitrários", enquanto essa resposta diz "não use LCGs arbitrários, sempre use LCGs de período inteiro, e supondo que sim , a resposta à sua pergunta seria o período máximo possível, por definição ". O argumento para o uso de LCFs de período completo expostas nesta resposta é perfeitamente convincente, mas a questão é que não é de todo o que a pergunta foi feita.
Xdavidliu 23/07/2018
Desculpe @xdavidliu, mas não vejo como seu novo comentário me ajuda a melhorar minha resposta. Você me chamou a atenção de que eu realmente não respondi à pergunta, editei minha resposta para corrigir isso e depois avisei de uma maneira que pensei que poderia fazer você sorrir (se você é um fã do Futurama). Não vejo que mais precise ser dito.
21718 Mark Booth
Observe que, na troca de pilhas, os comentários não se destinam a discussões estendidas; para isso, use o Computational Science Chat . Os comentários são para ajudar a melhorar perguntas e respostas e são perturbadores, por isso tentamos mantê-los no mínimo. Os comentários devem ser considerados efêmeros; qualquer comentário que não ajude mais ativamente a melhorar uma pergunta ou resposta pode ser excluído a qualquer momento para arrumar uma postagem.
21718 Mark Booth