Jak utworzyć prawidłowo Weyl sequence?

Podzielność. Reszty z dzielenia. Kongruencje. Systemy pozycyjne. Równania diofantyczne. Liczby pierwsze i względnie pierwsze. NWW i NWD.
matemix
Użytkownik
Użytkownik
Posty: 465
Rejestracja: 10 cze 2008, o 19:38
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 12 razy
Pomógł: 1 raz

Jak utworzyć prawidłowo Weyl sequence?

Post autor: matemix »

Definicja Weyl sequence jest następująca:

Kod: Zaznacz cały

https://en.wikipedia.org/wiki/Weyl_sequence


W artykule podano liczbę \(\displaystyle{ 362437}\) do utworzenia 32-bitowej sekwencji. Ale ogółem wystarczy liczba względnie pierwsza z modulusem.

Pytanie dlaczego wzięto akurat taką liczbę? Czy można wziąć też liczbę \(\displaystyle{ 3}\)? Również jest względnie pierwsza z \(\displaystyle{ 2^{32}}\). Ile jest takich liczb, które nadadzą się do utworzenia takiej sekwencji? Czy może to być dowolna liczba nieparzysta?

Nie do końca rozumiem też sens stosowania tej sekwencji. Wiem, że George Marsaglia użył ich do udoskonalenia generatora Xorshift. Z jakichś powodów te sekwencje lepiej nadają się mieszania z wynikami generatora niż zwykły licznik: \(\displaystyle{ 1,2,3,...}\), który też moglibyśmy zastosować. Ale właściwie co czyni je użytecznymi? Bo same w sobie nie produkują wystarczająco losowych wyników. Te sekwencje zostały też zastosowane do ulepszenia generatora Middle Square:



Wyniki sekwencji są po prostu dodawane do wyników klasycznego Middle Square. Ale nie do końca rozumiem jaka teoria za tym stoi i znowu - dlaczego w publikacji przyjęto akurat taką, a nie inną liczbę względnie pierwszą z modulusem? Zarzuty do Midlle Square dobrze podsumowała Mellisa O'Neil:

link w komentarzu

Generator ten tworzy random mapping, a w takim odwzorowaniu cykle są stosunkowo krótkie i mamy bodaj niezerowe prawdopodobieństwo natknięcia się na jakiś fatalny, krótki cykl (co dla generatora liczb pseudolosowych jest dyskwalifikujące). Widynski zaproponował więc mieszanie wyników Middle Square z sekwencjami Weyl, co wydłuża cykl całego generatora. Tylko jak to się dzieje, że zostaje on wydłużony?

Sam pracuję nad pewnym generatorem liczb pseudolosowych, który też działa jak random mapping i 32-bitowa wersja ze względu oczekiwaną długość cyklu ~ 41067 nie zdaje testów. Ale dodawanie do wyników Weyl sequence (stała z artykułu \(\displaystyle{ 362437}\)) poprawia wyniki. Nie rozumiem jednak dlaczego.
Ostatnio zmieniony 3 paź 2021, o 23:47 przez matemix, łącznie zmieniany 2 razy.
matemix
Użytkownik
Użytkownik
Posty: 465
Rejestracja: 10 cze 2008, o 19:38
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 12 razy
Pomógł: 1 raz

Re: Jak utworzyć prawidłowo Weyl sequence?

Post autor: matemix »

Kod: Zaznacz cały

https://www.pcg-random.org/posts/too-big-to-fail.html


Dodano po 11 minutach 2 sekundach:
W tej publikacji piszą, że:


a good choice is an odd integer close to \(\displaystyle{ 2^{w-1}(\sqrt 5 - 1)}\)
Chyba muszę zajrzeć do źródłowej publikacji Hermanna Weyla.
matemix
Użytkownik
Użytkownik
Posty: 465
Rejestracja: 10 cze 2008, o 19:38
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 12 razy
Pomógł: 1 raz

Re: Jak utworzyć prawidłowo Weyl sequence?

Post autor: matemix »

W tej chwili rozumiem już na pewno, że sekwencje Weyla, to w istocie są generatory liczb pseudolosowych, bardzo słabe (jak podejrzewam po konstrukcji), ale jednak generatory. A mieszanie dwóch generatorów, czy to poprzez sumowanie, czy xorowanie, zwykle nie tylko zwiększa losowość wyników, ale powinno chyba też wydłużać cykl.

Pytanie jak w ogóle oszacować co stanie się z długością cyklu random mapping, którego statystyki opisano tutaj:



gdy zxorujemy wyniki lub po prostu zsumujemy z innym generatorem.
ODPOWIEDZ