Załóżmy, że używam liniowego kongruencjalnego generatora liczb pseudolosowych (PRNG). Biorąc pod uwagę ziarno , mnożnik (a), współczynnik przesunięcia (c) i współczynnik modułu (m), jak mogę określić okres mojego PRNG? Czy ustalam to za pomocą algorytmów eksperymentów / wykrywania wzorców, czy też istnieje bezpośredni wzór na obliczenie jego okresu?
Chociaż moje pytanie dotyczy konkretnie liniowej metody przystającej, jestem otwarty na więcej informacji na temat tego, jak okresy są obliczane w praktyce również dla innych PRNG.
Odpowiedzi:
Jeśli ograniczasz się do pełnego cyklu LCG PRNG, odpowiedź jest łatwa, z definicji jest to po prostu .m
Aby znaleźć okres niepełnego cyklu PRG dla LCG dla danego materiału siewnego, wystarczy policzyć liczbę iteracji PRNG, aż ponownie wygeneruje wartość materiału siewnego.
Z przywołanej strony wikipedii :
Dlaczego chcesz użyć generatora pełnego cyklu
Jeśli nie ograniczysz się do pełnego cyklu PRNG LCG, podejmujesz ogromne ryzyko .
Jeśli nie wiesz, że dany LCG ma pełny cykl, możesz skończyć z generatorem o dowolnej liczbie wzajemnie różnych sekwencji, z których niektóre mogą być żenująco małe i mieć przerażającą losowość, być może nawet gorszą niż niesławny generator RANDU .
Naprawdę nie chcesz sprawdzać każdej możliwej wartości początkowej, aby upewnić się, że generuje ona sekwencję wystarczająco długą dla twojej aplikacji.
Dalsza lektura
Aby uzyskać doskonały starter na pseudolosowych generatorach liczb, zdecydowanie polecam przeczytanie rozdziału Przepisy liczbowe na temat liczb losowych.
źródło