eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › testowanie generatorów liczb losowych (kontynuacja)
Ilość wypowiedzi w tym wątku: 23

  • 21. Data: 2016-10-08 02:32:59
    Temat: Re: testowanie generatorów liczb losowych (kontynuacja)
    Od: "M.M." <m...@g...com>

    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




  • 22. Data: 2016-10-08 09:52:31
    Temat: Re: testowanie generatorów liczb losowych (kontynuacja)
    Od: bartekltg <b...@g...com>

    On 08.10.2016 00:25, M.M. wrote:
    > 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:

    Wróć kilka postrów, wklajałem tam omówienie, co może
    być przyczyną nieprzechodzenia przez poprawne generatory
    testów dla b.dużych próbek.

    pzdr
    bartekltg


  • 23. Data: 2016-10-08 14:00:35
    Temat: Re: testowanie generatorów liczb losowych (kontynuacja)
    Od: "M.M." <m...@g...com>

    On Saturday, October 8, 2016 at 9:52:31 AM UTC+2, bartekltg wrote:
    > On 08.10.2016 00:25, M.M. wrote:
    > > 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:
    >
    > Wróć kilka postrów, wklajałem tam omówienie, co może
    > być przyczyną nieprzechodzenia przez poprawne generatory
    > testów dla b.dużych próbek.
    >
    > pzdr
    > bartekltg

    Tak czy inaczej, test powinien być tak napisany, że nie wywali się nigdy.
    Albo powinien być napisany na GMP, albo nie powinien przyjmować parametrów
    dla których może się wywalić.

    Pozdrawiam

strony : 1 . 2 . [ 3 ]


Szukaj w grupach

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: