eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingtestowanie generatorów liczb losowych (kontynuacja) › Re: testowanie generatorów liczb losowych (kontynuacja)
  • Data: 2016-10-08 02:32:59
    Temat: Re: testowanie generatorów liczb losowych (kontynuacja)
    Od: "M.M." <m...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    On Saturday, October 8, 2016 at 12:25:41 AM UTC+2, M.M. wrote:
    > On Friday, October 7, 2016 at 7:58:16 PM UTC+2, bartekltg wrote:
    > > On 07.10.2016 19:40, M.M. wrote:
    > > > On Friday, October 7, 2016 at 6:02:59 PM UTC+2, bartekltg wrote:
    > > >> Nie. Podałem Ci kontrprzykład.
    > > >> Ciagów bardzo nielosowych, które dają znacznie lepsze oszacowania MC.
    > > > Ok, nie ciągnijmy, bo za dużo obwarowań. Generalnie wiadomo, że ciąg
    > > > doskonale równomierny może dać lepsze oszacowanie całki niż ciąg
    > > > naprawdę losowy - nie o to chciałem się kłócić.
    > > >
    > > >
    > > > Popatrzmy lepiej na wpływ parametru k w dieharder.
    > > >
    > > >
    > > > Upewnijmy się, że mamy ciągle ten sam seed i ten sam ciąg liczb
    > > > pseudo losowych:
    > > >
    > > > x@x:~$ time dieharder -s 1 -S 1234 -d 0 -g 15 -m 1 -k 1
    > > > #===================================================
    ==========================#
    > > > # dieharder version 3.31.1 Copyright 2003 Robert G. Brown
    #
    > > > #===================================================
    ==========================#
    > > > rng_name |rands/second|
    > > > mt19937_1998| 7.99e+07 |
    > > > #===================================================
    ==========================#
    > > > test_name |ntup| tsamples |psamples| p-value |Assessment| Seed
    > > > #===================================================
    ==========================#
    > > > diehard_birthdays| 0| 100| 100|0.92170613| PASSED | 1234
    > > >
    > > > real 0m1.822s
    > > > user 0m1.817s
    > > > sys 0m0.004s
    > > > x@x:~$ time dieharder -s 1 -S 1234 -d 0 -g 15 -m 1 -k 0
    > > > #===================================================
    ==========================#
    > > > # dieharder version 3.31.1 Copyright 2003 Robert G. Brown
    #
    > > > #===================================================
    ==========================#
    > > > rng_name |rands/second|
    > > > mt19937_1998| 8.08e+07 |
    > > > #===================================================
    ==========================#
    > > > test_name |ntup| tsamples |psamples| p-value |Assessment| Seed
    > > > #===================================================
    ==========================#
    > > > diehard_birthdays| 0| 100| 100|0.92170613| PASSED | 1234
    > > > real 0m1.817s
    > > > user 0m1.808s
    > > > sys 0m0.008s
    > > >
    > > > Wynik ten sam z dokładnością do 8 miejsc po przecinku, więc ciąg ten sam.
    > > >
    > > >
    > > >
    > > > Zwiększamy m=100 (10tys testów)
    > > >
    > > > x@x:~$ time dieharder -s 1 -S 1234 -d 0 -g 15 -m 100 -k 0
    > > > #===================================================
    ==========================#
    > > > # dieharder version 3.31.1 Copyright 2003 Robert G. Brown
    #
    > > > #===================================================
    ==========================#
    > > > rng_name |rands/second|
    > > > mt19937_1998| 8.40e+07 |
    > > > #===================================================
    ==========================#
    > > > test_name |ntup| tsamples |psamples| p-value |Assessment| Seed
    > > > #===================================================
    ==========================#
    > > > diehard_birthdays| 0| 100| 10000|0.01512520| PASSED | 1234
    > > >
    > > > real 3m0.888s
    > > > user 3m0.475s
    > > > sys 0m0.436s
    > > >
    > > >
    > > > x@x:~$
    > > > x@x:~$ time dieharder -s 1 -S 1234 -d 0 -g 15 -m 100 -k 0
    > > > #===================================================
    ==========================#
    > > > # dieharder version 3.31.1 Copyright 2003 Robert G. Brown
    #
    > > > #===================================================
    ==========================#
    > > > rng_name |rands/second|
    > > > mt19937_1998| 8.44e+07 |
    > > > #===================================================
    ==========================#
    > > > test_name |ntup| tsamples |psamples| p-value |Assessment| Seed
    > > > #===================================================
    ==========================#
    > > > diehard_birthdays| 0| 100| 10000|0.01512520| PASSED | 1234
    > > >
    > > > real 3m6.036s
    > > > user 3m5.858s
    > > > sys 0m0.104s
    > > >
    > > > Znowu wynik ten sam, więc możemy być pewni że ciąg ten sam.
    > > >
    > > >
    > > > Zmieniam k=1
    > > >
    > > >
    > > > x@x:~$ time dieharder -s 1 -S 1234 -d 0 -g 15 -m 100 -k 1
    > > > #===================================================
    ==========================#
    > > > # dieharder version 3.31.1 Copyright 2003 Robert G. Brown
    #
    > > > #===================================================
    ==========================#
    > > > rng_name |rands/second|
    > > > mt19937_1998| 8.36e+07 |
    > > > #===================================================
    ==========================#
    > > > test_name |ntup| tsamples |psamples| p-value |Assessment| Seed
    > > > #===================================================
    ==========================#
    > > > diehard_birthdays| 0| 100| 10000|0.01514407| PASSED | 1234
    > > >
    > > > real 3m2.390s
    > > > user 3m2.357s
    > > > sys 0m0.052s
    > > >
    > > > Widać malą różnicę w wyniku.
    > > >
    > > > Dajemy k=2
    > > >
    > > >
    > > > x@x:~$ time dieharder -s 1 -S 1234 -d 0 -g 15 -m 100 -k 2
    > > > #===================================================
    ==========================#
    > > > # dieharder version 3.31.1 Copyright 2003 Robert G. Brown
    #
    > > > #===================================================
    ==========================#
    > > > rng_name |rands/second|
    > > > mt19937_1998| 8.43e+07 |
    > > > #===================================================
    ==========================#
    > > > test_name |ntup| tsamples |psamples| p-value |Assessment| Seed
    > > > #===================================================
    ==========================#
    > > > diehard_birthdays| 0| 100| 10000|0.01514407| PASSED | 1234
    > > >
    > > > real 3m5.804s
    > > > user 3m5.475s
    > > > sys 0m0.315s
    > > >
    > > >
    > > > Wynik taki sam jak dla k=1
    > > >
    > > > Teraz k=3
    > > > x@x:~$ time dieharder -s 1 -S 1234 -d 0 -g 15 -m 100 -k 3
    > > > #===================================================
    ==========================#
    > > > # dieharder version 3.31.1 Copyright 2003 Robert G. Brown
    #
    > > > #===================================================
    ==========================#
    > > > rng_name |rands/second|
    > > > mt19937_1998| 6.64e+07 |
    > > > #===================================================
    ==========================#
    > > > test_name |ntup| tsamples |psamples| p-value |Assessment| Seed
    > > > #===================================================
    ==========================#
    > > > diehard_birthdays| 0| 100| 10000|0.00283496| WEAK | 1234
    > > >
    > > > real 3m16.142s
    > > > user 3m15.666s
    > > > sys 0m0.336s
    > > >
    > > > Upssss wynik zupełnie inny.
    > > >
    > > >
    > > > teraz k=4
    > > > x@x:~$ time dieharder -s 1 -S 1234 -d 0 -g 15 -m 100 -k 4
    > > > #===================================================
    ==========================#
    > > > # dieharder version 3.31.1 Copyright 2003 Robert G. Brown
    #
    > > > #===================================================
    ==========================#
    > > > rng_name |rands/second|
    > > > mt19937_1998| 8.05e+07 |
    > > > #===================================================
    ==========================#
    > > > test_name |ntup| tsamples |psamples| p-value |Assessment| Seed
    > > > #===================================================
    ==========================#
    > > > diehard_birthdays| 0| 100| 10000|0.00283496| WEAK | 1234
    > > >
    > > > real 3m12.022s
    > > > user 3m11.777s
    > > > sys 0m0.137s
    > > >
    > > > To samo co dla k=3
    > > >
    > > > Różnic w czasie wykonania dużych nie ma. Mój wniosek: testy mogą być
    > > > liczone na precyzji jaką oferuje sprzętowo procesor, ale wzorek na
    > > > chi-kwadrat powinien być liczony na bignumie. Jeśli wersja szybka
    > > > pada już dla m=100, to wersja dokładna pewnie też padnie dla większych
    > > > wartości m.
    > >
    > > Nie, wersja -k 2 jest stabilna numerycznie.
    > > Tak twierdzi dokumentacja.
    > > A nawet więcewj, wprost mówią, że wynik różni się od dokładnego
    > > tylko o precyzje numeryczną. cyli jaskby uwarunkowanie było 1.
    > >
    > >
    > > @Wersja szybka:
    > > 0 is fast but slightly sloppy for psamples > 4999 (default).
    > > A Ty masz 10 000.
    > >
    > > Na -k 3 szkoda procesora.
    > > 3 is kuiper ks, fast, quite inaccurate for small samples, deprecated.
    > >
    > > pzdr
    > > bartekltg
    >
    > Jeśli testy są dobrze zaimplementowane i jeśli dla k=2 mamy dokładność
    > taką ile cyfr ma typ procesora, to MT nie przechodzi testu dnia urodzin -
    > przynajmniej dla zarodka=1234. Mamy tylko dwie tysięczne procenta że
    > liczby pochodziły z generatora równomiernego:
    >
    > time dieharder -s 1 -S 1234 -d 0 -g 15 -m 1000 -k 2
    > #===================================================
    ==========================#
    > # dieharder version 3.31.1 Copyright 2003 Robert G. Brown #
    > #===================================================
    ==========================#
    > rng_name |rands/second|
    > mt19937_1998| 1.17e+07 |
    > #===================================================
    ==========================#
    > test_name |ntup| tsamples |psamples| p-value |Assessment| Seed
    > #===================================================
    ==========================#
    > diehard_birthdays| 0| 100| 100000|0.00002404| WEAK | 1234
    >
    > real 45m32.815s
    > user 45m26.558s
    > sys 0m4.484s


    Mój genrator też pada - trudno w to uwierzyć:

    time ./rnd | dieharder -d 0 -g 200 -m 1000 -k 2
    #===================================================
    ==========================#
    # dieharder version 3.31.1 Copyright 2003 Robert G. Brown #
    #===================================================
    ==========================#
    rng_name |rands/second| Seed |
    stdin_input_raw| 3.86e+06 | 112439049|
    #===================================================
    ==========================#
    test_name |ntup| tsamples |psamples| p-value |Assessment
    #===================================================
    ==========================#
    diehard_birthdays| 0| 100| 100000|0.00000000| FAILED

    real 64m33.741s
    user 69m51.698s
    sys 1m18.357s


    Nie wiem jak dieharder ma to zaimplementowane. Standardowa funkcja
    tgamma dla wartości powyżej 50 zaczyna dziwne rzeczy zwracać :)
    Albo mają jakąś sprytną implementację, albo używają bignuma, albo
    jednak dieharder nie działa poprawnie dla m > 300. Myślę, że
    dieharder ma problem z dużymi m, a jego źródłem są właśnie
    trudności w liczeniu funkcji gamma.

    Pozdrawiam



Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: