Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.programming > #31098 > unrolled thread

jeden generator liczb losowych do testowania drugiego?

Started by"M.M." <mmarszik@gmail.com>
First post2017-12-17 20:33 -0800
Last post2017-12-21 11:33 -0800
Articles 17 — 3 participants

Back to article view | Back to pl.comp.programming


Contents

  jeden generator liczb losowych do testowania drugiego? "M.M." <mmarszik@gmail.com> - 2017-12-17 20:33 -0800
    Re: jeden generator liczb losowych do testowania drugiego? "M.M." <mmarszik@gmail.com> - 2017-12-18 08:37 -0800
      Re: jeden generator liczb losowych do testowania drugiego? "AK" <nobody@nowhere.net> - 2017-12-20 00:46 +0100
        Re: jeden generator liczb losowych do testowania drugiego? "M.M." <mmarszik@gmail.com> - 2017-12-19 16:52 -0800
          Re: jeden generator liczb losowych do testowania drugiego? "AK" <nobody@nowhere.net> - 2017-12-21 22:53 +0100
            Re: jeden generator liczb losowych do testowania drugiego? "M.M." <mmarszik@gmail.com> - 2017-12-21 15:05 -0800
              Re: jeden generator liczb losowych do testowania drugiego? "AK" <nobody@nowhere.net> - 2017-12-22 09:55 +0100
    Re: jeden generator liczb losowych do testowania drugiego? bartekltg <bartekltg@gmail.com> - 2017-12-18 15:48 -0800
      Re: jeden generator liczb losowych do testowania drugiego? "M.M." <mmarszik@gmail.com> - 2017-12-18 17:24 -0800
        Re: jeden generator liczb losowych do testowania drugiego? bartekltg <bartekltg@gmail.com> - 2017-12-18 20:11 -0800
          Re: jeden generator liczb losowych do testowania drugiego? "M.M." <mmarszik@gmail.com> - 2017-12-18 21:39 -0800
            Re: jeden generator liczb losowych do testowania drugiego? "M.M." <mmarszik@gmail.com> - 2017-12-18 22:22 -0800
          Re: jeden generator liczb losowych do testowania drugiego? "M.M." <mmarszik@gmail.com> - 2017-12-19 23:30 -0800
            Re: jeden generator liczb losowych do testowania drugiego? "M.M." <mmarszik@gmail.com> - 2017-12-20 10:40 -0800
              Re: jeden generator liczb losowych do testowania drugiego? "M.M." <mmarszik@gmail.com> - 2017-12-20 15:46 -0800
                Re: jeden generator liczb losowych do testowania drugiego? "M.M." <mmarszik@gmail.com> - 2017-12-21 00:25 -0800
                  Re: jeden generator liczb losowych do testowania drugiego? "M.M." <mmarszik@gmail.com> - 2017-12-21 11:33 -0800

#31098 — jeden generator liczb losowych do testowania drugiego?

From"M.M." <mmarszik@gmail.com>
Date2017-12-17 20:33 -0800
Subjectjeden generator liczb losowych do testowania drugiego?
Message-ID<1d92e1fb-113f-4be9-96a7-6dcc1d439fc4@googlegroups.com>
Co by było, gdyby rozkład wzorcowy wygenerować innym generatorem, 
albo tym samym z innym zarodkiem? 

Otóż są problemy z liczeniem chi-square, bo inny generator może 
dać w jakimś kubełku zero i by trzeba dzielić przez zero. Założyłem więc, że
jeśli w kubełku wzorcowym jest zero, to tego nie liczę tego kubełka i 
zmniejszam ilość stopni swobody. U mnie na komputerze, dla kilku 
wypróbowanych zarodków, generator Fibonacciego przeszedł testy.

Kod źródłowy:
https://pastebin.com/KXuKNbws


Przykładowy wynik testu:
time ./frnd 
rnd seed1:     1857908775
rnd seed2:     1964250306

--------------------------------------
loops: 100000000
// kubełek      fibonacci         ranlux48        chi-square
    0           60806992           60810278     0.177565312232
    1           30434294           30435295     0.032922335729
    2            7431596            7428134      1.61352016536
    3            1177391            1176480     0.705427206582
    4             136542             136582    0.0117145743949
    5              12269              12265   0.00130452507134
    6                864                911       2.4248079034
    7                 51                 54     0.166666666667
    8                  1                  1                  0
chi-square:        5.13392868943979798
chi-dist:        0.1082081103103416237
chi-dist-cum:    0.2568322098770508233
--------------------------------------


real    130m0.354s
user    129m55.568s
sys     0m3.164s

Generator Fibonacciego naprawdę jest bardzo szybki i dobrze 
przechodzi testy.

Ciekawe jak się zachowa std::mt19937_64 w takim teście.

Pozdrawiam

[toc] | [next] | [standalone]


#31099

From"M.M." <mmarszik@gmail.com>
Date2017-12-18 08:37 -0800
Message-ID<a42c86df-1aea-462c-9024-f4daa49ebceb@googlegroups.com>
In reply to#31098
On Monday, December 18, 2017 at 5:33:04 AM UTC+1, M.M. wrote:
> [...]
> Ciekawe jak się zachowa std::mt19937_64 w takim teście.


Wygląd na to, że std::mt19937_64 dwa testy przeszedł, jeden 
co prawda z p-value równym 0.9984, ale przeszedł. Liczb w
obu testach było około 38mld.


Pozdrawiam


P.S.

Pierwszy test:
time ./frnd 
rnd seed1:     1048344733
rnd seed2:     707250714
--------------------------------------
loops: 302514177
// kubełek     std::mt19937_64   std::ranlux48      chi-square
    0          183946412          183955260     0.425576871246
    1           92094858           92080380      2.27640767773
    2           22458053           22465964        2.785721592
    3            3561951            3558532      3.28493912658
    4             412856             413504      1.01547748027
    5              37076              37688      9.93801740607
    6               2788               2676      4.68759342302
    7                172                162     0.617283950617
    8                 11                 11                  0
chi-square:       25.03101752753471722
chi-dist:      0.000599442989703091512
chi-dist-cum:    0.9984771823024356957
--------------------------------------

^C

real    518m3.047s
user    517m44.904s
sys     0m6.612s


Drugi test:
time ./frnd 
rnd seed1:     1800537340
rnd seed2:     2132837258
--------------------------------------
loops: 301268993
// kubełek     std::mt19937_64   std::ranlux48      chi-square
    0          183192536          183166993      3.56202194683
    1           91701620           91722424       4.7186543609
    2           22376562           22380635     0.741235849653
    3            3547901            3548389    0.0671132730938
    4             410212             410556     0.288233517474
    5              37260              37082     0.854430721105
    6               2726               2730   0.00586080586081
    7                163                176     0.960227272727
    8                 10                  8                0.5
chi-square:       11.69777774763957802
chi-dist:       0.04807272058814565609
chi-dist-cum:    0.8347998915301052147
--------------------------------------

^C

real    510m57.016s
user    510m39.752s
sys     0m6.032s

[toc] | [prev] | [next] | [standalone]


#31113

From"AK" <nobody@nowhere.net>
Date2017-12-20 00:46 +0100
Message-ID<p1c8dq$1224$1@gioia.aioe.org>
In reply to#31099
Użytkownik "M.M." <mmarszik@gmail.com> napisał:
> [...]
> Ciekawe jak się zachowa std::mt19937_64 w takim teście.

> Wygląda na to, że std::mt19937_64 dwa testy przeszedł, jeden
> co prawda z p-value równym 0.9984, ale przeszedł. Liczb w
> obu testach było około 38mld.

...no i  i po cholere cala Twoja robota ?

PS: szczerze: naprawde doceniam aspekt poznawczy tego co zrobiles. Tu szacun.
W kwestii sensownosci juz mniej. Po prostu trzeba bylo wpierw sprawdzic jakosc
(szybkosc tez, ale IMHO to rzecz mniej wazna w znakomitej wiekszosci przypadkow)
standardu (std::mt), a pozniej samemu "odkrywac kolo na nowo"?

AK

[toc] | [prev] | [next] | [standalone]


#31114

From"M.M." <mmarszik@gmail.com>
Date2017-12-19 16:52 -0800
Message-ID<d8ac150b-f690-4a13-944d-80d9a61d100d@googlegroups.com>
In reply to#31113
On Wednesday, December 20, 2017 at 12:47:09 AM UTC+1, AK wrote:
> Użytkownik "M.M." <mmarszik@gmail.com> napisał:
> > [...]
> > Ciekawe jak się zachowa std::mt19937_64 w takim teście.
> 
> > Wygląda na to, że std::mt19937_64 dwa testy przeszedł, jeden
> > co prawda z p-value równym 0.9984, ale przeszedł. Liczb w
> > obu testach było około 38mld.
> 
> ...no i  i po cholere cala Twoja robota ?

Ale konkretnie jaka robota? Po co mi generator Fibonacciego? Po to, że 
jest bardzo szybki i przechodzi lepiej testy niż MT.

> PS: szczerze: naprawde doceniam aspekt poznawczy tego co zrobiles. Tu szacun.
Dziękuję.


> W kwestii sensownosci juz mniej. 
Może dlatego, że zaszło jakieś nieporozumienie?

1) Sens generatora Fibonacciego już opisałem powyżej, czasami 
potrzebuję ekstremalnie szybkiego generatora.

2) W dieharder dobre generatory nie przechodzą testu urodzinowego, musiałem
upewnić się jaka jest tego przyczyna. Policzyłem rozkłady na bignum, itd. 
Ale ok, napisałeś, że w kwestii poznawczej się zgadzasz.

3) Metoda testowania jednego generatora przy pomocy drugiego ma zalety.
Spróbuj zaprojektować jakiś bardzo trudny test o skomplikowanym, ale
znanym rozkładzie. Czujesz że kłóci się już samo w sobie, prawda? Jak coś 
może być jednocześnie trudne, skomplikowane i znane? W przypadku 
metody z dwoma generatorami, jeden generator przygotowuje dowolnie 
trudny rozkład dla drugiego generatora. Jeśli generatory testu nie 
przejdą, to mamy 100% pewności, że przynajmniej jeden generator nie 
jest równomierny. To chyba nieporozumienie, bo sporo w tym sensu?


> Po prostu trzeba bylo wpierw sprawdzic jakosc
> (szybkosc tez, ale IMHO to rzecz mniej wazna w znakomitej wiekszosci przypadkow)
> standardu (std::mt), a pozniej samemu "odkrywac kolo na nowo"?


To na 100% nieporozumienie, bo żadnego koła nie odkryłem. Używam często,
od kilku, a może od kilkunastu lat, generatorów Fibonacciego. Teorię wziąłem 
z książki, nic nie odkrywałem. Używam ich, bo są zarazem szybsze od mt i 
dają lepsze liczby (czytaj: częściej przechodzi testy) niż mt. A mt 
sprawdzałem pierwszy raz... nie pamiętam już kiedy, dawno. Teraz użyłem
mt raczej dlatego, żeby zobaczyć, jakie będą wyniki. Teraz sprawdzałem raczej
program testujący, a nie mt. Jeśli (w miarę) dobry generator by nie
przeszedł testów, to mamy silną przesłankę za tym, aby w kodzie testującym
szukać błędów. 


A tak poza tym, nie tak dawno, to ktoś inny, a nie ja, wywołał temat 
szybkiego generatora liczb losowych, ja tylko trochę rozszerzyłem ;-)

Pozdrawiam

[toc] | [prev] | [next] | [standalone]


#31136

From"AK" <nobody@nowhere.net>
Date2017-12-21 22:53 +0100
Message-ID<p1hahr$h32$1@gioia.aioe.org>
In reply to#31114
Użytkownik "M.M." <mmarszik@gmail.com> napisał:

> > Wygląda na to, że std::mt19937_64 dwa testy przeszedł, jeden
> > co prawda z p-value równym 0.9984, ale przeszedł. Liczb w
> > obu testach było około 38mld.
>
> ...no i  i po cholere cala Twoja robota ?

>> W kwestii sensownosci juz mniej.
>Może dlatego, że zaszło jakieś nieporozumienie?

Nie tyle nieporozumienie, tylko to, ze moje uwagi byly wybitnie
ukierunkowane pod potrzeby "pytacza" ktore sa tak proste/standardowe,
ze nie ma sensu uzywac nic innego jak wlasnie standardowe "randomy",
a juz zupelnie nie ma sensu tworzyc cus w assemblerze w tym ("pytacza") kontekscie.

W kontekscie natomiast Twojego rozwiniecia tematu nie mam
nie tylko najmniejszych zastrzezen, ale po prostu juz "grzrecznie, milcze" bo:
1. przerastacie mnie z Bartkiem na dzis o glowe z wiedza
    (no kiedys gdy na Odrze pisalem "troche" programow symulacyjnych
      gdzie roznego rodzaju generatory -  jednostajny, normalny, Poisona itp itd -
      byly u mnie "na porzadku dziennym" moglibysmy glebiej pogadac
     /choc wtedy Mersene jeszcze nie bylo/ :)
2. Wasz watek jest naprawde interesujacy - skopiowalem kod/rozwiazania
     co mi sie zdarza juz bardzo rzadko. Wcale nie z tego powodu ze "wiem lepiej",
     ale z racji ogolnego znudzenia zawodem i "poziomem"/mialkoscia dzisiejszej Mlodziezy/usnetu.

> 1) Sens generatora Fibonacciego już opisałem powyżej, czasami
> potrzebuję ekstremalnie szybkiego generatora.

j/w: grzecznie ,milcze :)

> A tak poza tym, nie tak dawno, to ktoś inny, a nie ja, wywołał temat
> szybkiego generatora liczb losowych, ja tylko trochę rozszerzyłem ;-)

"Troche" ;) ? Heh.
No wypada sobie zyczyc wiecej takich "troche" :)
Porzadne metodyczne/systematyczne podejscie do tematu.
Z mojej strony bezwarunlowy szacun :)

PS: Co nie znaczy ze gdy ew. w innym termacie walniesz gdzies jakas glupote
nie omieszkam zmieszac Cie z (s)firem :) / no moze az tak to nie ;)/

AK

[toc] | [prev] | [next] | [standalone]


#31137

From"M.M." <mmarszik@gmail.com>
Date2017-12-21 15:05 -0800
Message-ID<9a50767c-da08-456e-ba4d-8ad58f5d500a@googlegroups.com>
In reply to#31136
On Thursday, December 21, 2017 at 10:54:06 PM UTC+1, AK wrote:
> Użytkownik "M.M." <mmarszik@gmail.com> napisał:
> [...]
> j/w: grzecznie ,milcze :)
Ok, rozumiem. Ale ja mam góra podstawową wiedzę statystyczną. Nie wiedziałem
np. że złącza się kubełki gdy przypada mało liczb na kubełek.


> > A tak poza tym, nie tak dawno, to ktoś inny, a nie ja, wywołał temat
> > szybkiego generatora liczb losowych, ja tylko trochę rozszerzyłem ;-)
> 
> "Troche" ;) ? Heh.
No może trochę więcej niż trochę ;-) Zaniepokoiło mnie to że dobre generatory 
nie przechodzą testu urodzinowego w dieharder i pociągnąłem temat.


> No wypada sobie zyczyc wiecej takich "troche" :)
> Porzadne metodyczne/systematyczne podejscie do tematu.
> Z mojej strony bezwarunlowy szacun :)
Dzięki, ale tu nie ma nic zaawansowanego. Są trzy wzory z definicji 
na dużej precyzji. Gamę liczy biblioteka. Do tego jest jedno całkowanie 
trapezami - bardziej lamersko nie można, chyba że prostokątami ;-)
Generator Fibonacciego z lagiem stanowi jedno dodawanie :) Ostatnia
rzecz to procedura generująca dowolny rozkład w kubełkach - mam
nadzieję że to jest dobra procedura robiąca test urodzinowy. 
Reszta to wyświetlanie wyników i "formatowanie kodu w c++".


> PS: Co nie znaczy ze gdy ew. w innym termacie walniesz gdzies jakas glupote
> nie omieszkam zmieszac Cie z (s)firem :) / no moze az tak to nie ;)/
Ale na spokojnie też zrozumiem, albo... nie zawsze za pierwszym razem ;-)


Pozdrawiam

[toc] | [prev] | [next] | [standalone]


#31138

From"AK" <nobody@nowhere.net>
Date2017-12-22 09:55 +0100
Message-ID<p1ihab$4lq$1@gioia.aioe.org>
In reply to#31137
Użytkownik "M.M." <mmarszik@gmail.com> napisał:

> Użytkownik "M.M." <mmarszik@gmail.com> napisał:
> [...]
> j/w: grzecznie ,milcze :)
> Ok, rozumiem. Ale ja mam góra podstawową wiedzę statystyczną.

No i co z tego? Porzadnie "zalapales" temat i mysle ze niedlugo staniesz sie specjalista w tej 
domenie :)

> > A tak poza tym, nie tak dawno, to ktoś inny, a nie ja, wywołał temat
> > szybkiego generatora liczb losowych, ja tylko trochę rozszerzyłem ;-)
>
>> "Troche" ;) ? Heh.
> No może trochę więcej niż trochę ;-) Zaniepokoiło mnie to że dobre generatory
> nie przechodzą testu urodzinowego w dieharder i pociągnąłem temat.

Tu tez mi sie podoba, ze nie potratowales "aksjomatycznie" tzw standardow :)
Zarowno biblioteki kompilatorow nie sa doskonale jak i inne "standardy".
Pisza je zwykli (tacy sami) jak my ludzie.
Bardzo czesto (ostatnio juz wylacznie:) spotykam postawe ze to co z USA to jest
_bezwzglednie_ doskonale, a to co nasze (polskie) to z zasady beee.
Tymczasem w dziedzinie szeroko pojetej inz.programowania akurat Europa historycznie
ma wiekszy dorobek i nie mozna miec idiotycznych kompleksow.
Pisze to bardzo ceniac USA (o wiele bardziej niz... Kur...rope - szczegolnie pragmatyzm USA)
i.. swiadomie "zbaczam" z tematu aby kolejny raz "wlozyc kij w mrowisko"...

>> No wypada sobie zyczyc wiecej takich "troche" :)
>> Porzadne metodyczne/systematyczne podejscie do tematu.t
>> Z mojej strony bezwarunlowy szacun :)
> Dzięki, ale tu nie ma nic zaawansowanego. Są trzy wzory z definicji
> na dużej precyzji.

Nie o to chodzi jak zaawansowane matematycznie/merytorycznie jest zagadnienie.
Chodzi o Twoj sposob podejscia do tematu. Nie "fanatyczny/uczuciowy" lecz
taki stricte inzynierski/profesjonalny.
Dzis coraz rzadszy nie tylko w usenecie lecz i w "normalnej" zawodowej rzeczywistosci.

AK

[toc] | [prev] | [next] | [standalone]


#31100

Frombartekltg <bartekltg@gmail.com>
Date2017-12-18 15:48 -0800
Message-ID<df89446d-9f33-4313-aa65-2ecbe99c2585@googlegroups.com>
In reply to#31098
On Monday, December 18, 2017 at 5:33:04 AM UTC+1, M.M. wrote:
> Co by było, gdyby rozkład wzorcowy wygenerować innym generatorem, 

Powinno być w miarę dobrze, tyle, że to test na to, że oba generatory
daj ten sam rozkład, nie na to, że generatory sa dobre!
Do Twoich celów musiałbyś więc założyć, że jeden z nich jest dobry;-)
a to może zostać odebrane jako mętne. 

Pamiętaj, że te testy mają test i chi^2. Ten pierwszy też może
być chi^2, ale nie musi (np kołgomorowa-kogośtam dla ciągłych). 
Rozumiem, że mówisz o zastąpieniu właśnie tego pierwszego testu?
Czy drugiego? 

Jeśli pierwszgo, to znany asymptotyczny rozkład (o dystrybuancie F) 
używamy tylko do rozsądnego podziału kubełków, generujemy właściwy 
test, wychodzi x, liczym y = F^-1(x), i ładujemy do odpowiedniego kubełka.
Teraz testujemy (np chi^2) czy oba generatory miały ten sam rozkład
(w oryginale - czy jest to rozkład jenostajny). 
Chyba standardowy chi^2 na porównanie wystarczy (ten, gdzie się porównuje
do rozkładów brzegowych
https://en.wikipedia.org/wiki/Chi-squared_test#Example_chi-squared_test_for_categorical_data
)

BTW, trochę zgaduję, bo nie opisałeś, co i w którym momencie robisz.
Kod jest i z niego wszytko wynika, ale... przeczytanie kody zajęłoby
mi znacznie więcej czasu niż informacji o podstawach w poście;>

> albo tym samym z innym zarodkiem? 

Bardzo zły pomysł. Ten sam generator dla róznych seedów pewnie ma
ten sam rozkład. Niekoniecznie dobry. Nic takim testem nie wykryjesz,
poza bardzo złymi generatorami;-)


>Otóż są problemy z liczeniem chi-square, bo inny generator może 
>dać w jakimś kubełku zero i by trzeba dzielić przez zero. 

To źle dobrane kubełki.
Dobór kubełków powinien być dobrany do oczekiwanej liczby
pomiarów. 


pzdr 
bartekltg

[toc] | [prev] | [next] | [standalone]


#31101

From"M.M." <mmarszik@gmail.com>
Date2017-12-18 17:24 -0800
Message-ID<b2214f68-1e85-4335-a2c2-69dddbf375f4@googlegroups.com>
In reply to#31100
On Tuesday, December 19, 2017 at 12:48:30 AM UTC+1, bartekltg wrote:
> On Monday, December 18, 2017 at 5:33:04 AM UTC+1, M.M. wrote:
> > Co by było, gdyby rozkład wzorcowy wygenerować innym generatorem, 
> 
> Powinno być w miarę dobrze, tyle, że to test na to, że oba generatory
> daj ten sam rozkład, nie na to, że generatory sa dobre!
Oczywiście, to tak naprawdę test na to, że oba dają ten sam rozkład.
Można tym też testować ten sam z innym zarodkiem.


> Do Twoich celów musiałbyś więc założyć, że jeden z nich jest dobry;-)
> a to może zostać odebrane jako mętne. 
Tak.

> Pamiętaj, że te testy mają test i chi^2. 
1) Najpierw jest test urodzinowy. Zliczane jest w kubełkach jak często
   było zero powtórzeń, jedno powtórzenie, dwa... N-1.
2) Potem jest liczone chi-kwadrat.
3) Potem chi-kwadrat podstawiane jest do rozkładu - co w sumie nie jest
   tutaj przydatne.
4) Ostatecznie jest liczona całka rozkładu (dystrybuanta) od zera do 
   chi-kwadrat - wychodzi p-value.

> Ten pierwszy też może być chi^2, 
> ale nie musi (np kołgomorowa-kogośtam dla ciągłych). 
Nie rozumiem. Pierwszy to jest test urodzinowy, jakaś całka, czy
cokolwiek co daje znany rozkład.


> Rozumiem, że mówisz o zastąpieniu właśnie tego pierwszego testu?
> Czy drugiego? 
Chyba pierwszego, bo nie bardzo rozumiem jak można zastąpić drugi. 
W pierwszym teście dwa generatory budują jakiś rozkład, tutaj konkretnie
rozkład dla testu urodzinowego. W drugim, jeden generator jest traktowany 
tak, jakby był teoretycznie idealny i są liczone powyższe punkty od 2 do 4.


> Jeśli pierwszgo, to znany asymptotyczny rozkład (o dystrybuancie F) 
> używamy tylko do rozsądnego podziału kubełków, generujemy właściwy 
> test, wychodzi x, liczym y = F^-1(x), i ładujemy do odpowiedniego kubełka.
Właśnie tutaj miałem problem. Niby rozkład teoretyczny jest znany dla
testu urodzinowego. Liczyłem poissonem, wartość oczekiwaną brałem z tej 
strony:

https://pl.wikipedia.org/wiki/Test_Birthday_Spacings

[
BFloat lambda = 1;
lambda *= n_births;
lambda *= n_births;
lambda *= n_births;
lambda /= 4;
lambda /= l_year;
]

Wartość rozkładu poissona poniżej. Zmienna poisson przechowuje
wartość dla i-tego kubełka.
[
BFloat poisson = boost::multiprecision::exp( lambda * -1.0 );
    BFloat chi = 0;
 
    for( unsigned int i=0 ; i<n_births ; i++ ) {
        if( i > 0 ) {
            poisson *= lambda;
            poisson /= i;
        }
        BFloat E = poisson * loops;
        BFloat tmp =  sums[i] - E;        // (test - E)
        tmp = tmp * tmp / E;              // (test - E)^2 / E
        if( E >= 0.001 || sums[i] > 0 ) {
            std::cout << std::setw( 5) <<       i << "   " ;
            std::cout << std::setw(11) << sums[i] << "   " ;
            std::cout << std::setw(16) << std::setprecision(12) << E << "   ";
            std::cout << std::setw(16) << std::setprecision(12) << tmp << std::endl;
        }
        chi += tmp;
    }
]

Rozkład chi-kwadrat tutaj:
[
BFloat chi_dist( BFloat x , BFloat n ) {
    return
    boost::multiprecision::pow(  x , n / 2 - 1 )
      *
    boost::multiprecision::exp( x / -2 )
      /
    boost::math::tgamma( n / 2 )
      /
    boost::multiprecision::pow( BFloat(2) , n / 2 );
}
]

Skumulowany (dystrybuanta) tutaj:
[
BFloat chi_dist_cum( BFloat x , BFloat n , const int steps=10000 ) {
    BFloat sum = 0;
    BFloat step = x / steps;
    BFloat x1 = 0;
    BFloat x2 = step;
    BFloat y1 = chi_dist( x1 , n );
    while( x2 <= x ) {
        BFloat y2 = chi_dist( x2 , n );
        sum += step * ( y1 + y2 ) / 2;
        x1 = x2;
        x2 += step;
        y1 = y2;
    }
    return sum;
}
]

Ale... nie wiem czy warto się w to wczytywać, bo wolfram i arkusz 
kalkulacyjny dawały bardzo podobne wartości dla chi-square, gamy, 
poissona, itd.

Prędzej test urodzinowy robię źle. Jedna pętla testu jest tutaj:
[
template<class TRnd>
static void loopBirthdaySpacings(
    TRnd                   &rnd,     // generator
    const unsigned int     l_year,   // length of year
    const unsigned int     n_births, // number of briths
    QVector<unsigned int>  &sums,    // sums
    QVector<unsigned int>  &births,  // work memory
    QSet<unsigned int>     &dupl     // work memory
) {
    births.clear();
    dupl.clear();
    for( unsigned int i=0 ; i<n_births ; i++ ) {
        births.append( rnd() % l_year );
    }
    qSort(births);
    unsigned int sum = 0;
    for( unsigned int i=0 ; i<n_births ; i++ ) {
        const unsigned int dist = i==0 ? births[0] : births[i] - births[i-1];
        if( ! dupl.contains( dist ) ) {
            dupl.insert( dist );
        } else {
            sum ++;
        }
    }
    sums[ sum ] ++;
 
}
]

W sums są kubełki. Jeśli było N powtórzeń, to sums[N]++;
dla 0 <= N < ilość urodzeń.

Reszta kodu to wyświetlanie, albo zdublowanie.

W main definiuje się dwa (lub jeden z różnymi seedami) generatory jakie 
chcemy przetestować:

ExactRnd exact_rnd(seed1);
TestRnd  test_rnd(seed2);
 
birthdaySpacings<TestRnd,ExactRnd>( test_rnd , exact_rnd , 1<<20 , 1<<7 , 100000000 );

Podaje się długość roku i ile pierwszych urodzeń w roku chcemy analizować.
Ostatni parametr 100000000 to maksymalna ilość pętli.


> Teraz testujemy (np chi^2) czy oba generatory miały ten sam rozkład
> (w oryginale - czy jest to rozkład jenostajny). 
Tak, taki miałem zamiar.


> Chyba standardowy chi^2 na porównanie wystarczy (ten, gdzie się porównuje
> do rozkładów brzegowych
> https://en.wikipedia.org/wiki/Chi-squared_test#Example_chi-squared_test_for_categorical_data
> )
To chyba robię dobrze, bo testy dla dwóch różnych generatorów udają się.



> 
> BTW, trochę zgaduję, bo nie opisałeś, co i w którym momencie robisz.
> Kod jest i z niego wszytko wynika, ale... przeczytanie kody zajęłoby
> mi znacznie więcej czasu niż informacji o podstawach w poście;>
Mam nadzieję że trochę wyjaśniłem.


> > albo tym samym z innym zarodkiem? 
> 
> Bardzo zły pomysł. Ten sam generator dla róznych seedów pewnie ma
> ten sam rozkład. Niekoniecznie dobry. Nic takim testem nie wykryjesz,
> poza bardzo złymi generatorami;-)
Hmmm, muszę spróbować i przemyśleć na spokojnie.



> >Otóż są problemy z liczeniem chi-square, bo inny generator może 
> >dać w jakimś kubełku zero i by trzeba dzielić przez zero. 
> 
> To źle dobrane kubełki.
> Dobór kubełków powinien być dobrany do oczekiwanej liczby
> pomiarów. 

Hmmm ale przy teście urodzinowym ilość kubełków jest zawsze
równa ilości pierwszych urodzin. 

Mnie się zdaje, że albo źle robię test urodzinowy, albo rozkład 
poissona słabo przybliża rozkład testu urodzinowego. Może trzeba 
wziąć bardzo długi rok (np. miliard dni) i tylko kilka 
najczęstszych kubełków... Nie wiem.


Pozdrawiam







> 
> 
> pzdr 
> bartekltg

[toc] | [prev] | [next] | [standalone]


#31102

Frombartekltg <bartekltg@gmail.com>
Date2017-12-18 20:11 -0800
Message-ID<7c77eae7-0600-4ebe-9428-783b16fe069d@googlegroups.com>
In reply to#31101
On Tuesday, December 19, 2017 at 2:24:09 AM UTC+1, M.M. wrote:
> On Tuesday, December 19, 2017 at 12:48:30 AM UTC+1, bartekltg wrote:
> > On Monday, December 18, 2017 at 5:33:04 AM UTC+1, M.M. wrote:
> > > Co by było, gdyby rozkład wzorcowy wygenerować innym generatorem, 
> > 
> > Powinno być w miarę dobrze, tyle, że to test na to, że oba generatory
> > daj ten sam rozkład, nie na to, że generatory sa dobre!
> Oczywiście, to tak naprawdę test na to, że oba dają ten sam rozkład.
> Można tym też testować ten sam z innym zarodkiem.
> 
> 
> > Do Twoich celów musiałbyś więc założyć, że jeden z nich jest dobry;-)
> > a to może zostać odebrane jako mętne. 
> Tak.
> 
> > Pamiętaj, że te testy mają test i chi^2. 
> 1) Najpierw jest test urodzinowy. Zliczane jest w kubełkach jak często
>    było zero powtórzeń, jedno powtórzenie, dwa... N-1.

OK

> 2) Potem jest liczone chi-kwadrat.
> 3) Potem chi-kwadrat podstawiane jest do rozkładu - co w sumie nie jest
>    tutaj przydatne.

Pewien jesteś, że chi^2 z kubełków? A nie liczba trafień podwójnych,
 potrójnych... w porównaniu do teoretycznej liczby? 
To też będzie chi^2, ale kubełkami będzie liczba dni z jednym,
dwoma, trzema, ...k, "wiecej niż k" trafieniami. 
k dobrane tak, ze nie ma żadnych zer. 
Nie wiem, czy tam nie ma jeszcze innego testu, takiego, co
bierze dużo liczb, sortuje i patrzy na rozkład różnic. 
Tam też nie powinno być zer. 

> 4) Ostatecznie jest liczona całka rozkładu (dystrybuanta) od zera do 
>    chi-kwadrat - wychodzi p-value.

I test powtarza się wieloktornie i robi chi^2 na rozkład tego p,
powinien być jednostajny. 

 
> > Rozumiem, że mówisz o zastąpieniu właśnie tego pierwszego testu?
> > Czy drugiego? 
> Chyba pierwszego, bo nie bardzo rozumiem jak można zastąpić drugi. 
> W pierwszym teście dwa generatory budują jakiś rozkład, tutaj konkretnie
> rozkład dla testu urodzinowego. W drugim, jeden generator jest traktowany 
> tak, jakby był teoretycznie idealny i są liczone powyższe punkty od 2 do 4.


Nie wchodzc w szczgoły. Unikałbym pisania, że zakładasz idealność
jakiegoś rozkładu, czy, ze przetestowałeś tak jakiś generator 
i jest on dobry. Wspomnij o tym raz w trybie przypuszczającym,
a pisz o tym, ze test stwierdził brak różnic w rozkłądach generowanych
oboma genratorami. W ten sposób nie odstraszysz czytelników;-)


> 
> > Jeśli pierwszgo, to znany asymptotyczny rozkład (o dystrybuancie F) 
> > używamy tylko do rozsądnego podziału kubełków, generujemy właściwy 
> > test, wychodzi x, liczym y = F^-1(x), i ładujemy do odpowiedniego kubełka.
> Właśnie tutaj miałem problem. Niby rozkład teoretyczny jest znany dla
> testu urodzinowego. Liczyłem poissonem, wartość oczekiwaną brałem z tej 
> strony:
> 
> https://pl.wikipedia.org/wiki/Test_Birthday_Spacings


O, to ten drugi. To o rozkładzie poissona to tylko przybliżenia
dla dłygiego roku;-) O czym masz w referencjach na tej stronie. 


>
> 
> > Chyba standardowy chi^2 na porównanie wystarczy (ten, gdzie się porównuje
> > do rozkładów brzegowych
> > https://en.wikipedia.org/wiki/Chi-squared_test#Example_chi-squared_test_for_categorical_data
> > )
> To chyba robię dobrze, bo testy dla dwóch różnych generatorów udają się.

Eeee, to tak nie działa, to, że dało wynik OK to kiepska przesłanka;-)

Chyba też nie robisz dokłądnie tak, bo wtedy byś nie miał problemu
z tym, że jeden generator dał 0 w danym kukbełku, bo dzieli się
przez sumę z obu.


> > > albo tym samym z innym zarodkiem? 
> > 
> > Bardzo zły pomysł. Ten sam generator dla róznych seedów pewnie ma
> > ten sam rozkład. Niekoniecznie dobry. Nic takim testem nie wykryjesz,
> > poza bardzo złymi generatorami;-)
> Hmmm, muszę spróbować i przemyśleć na spokojnie.

Jeśli generator G zasedowany s będzie miał nny rozkłąd niż
zaseedowany s', to jest to oczywiście generator zepsuty. 
Ale generator G może mieć ten sam rozkład niezależnie od
seede s, a być ujowym generatorem. 

Weż dobry genrator h i zrób z niego kiepski:
Niech G daje liczbę będącą średnią dwuch odpaleń
generatora h. G nie jest nawet w przybliżeniu jednorodny. 
A Twój test przejdzie. 


> > >Otóż są problemy z liczeniem chi-square, bo inny generator może 
> > >dać w jakimś kubełku zero i by trzeba dzielić przez zero. 
> > 
> > To źle dobrane kubełki.
> > Dobór kubełków powinien być dobrany do oczekiwanej liczby
> > pomiarów. 
> 
> Hmmm ale przy teście urodzinowym ilość kubełków jest zawsze
> równa ilości pierwszych urodzin. 

Nie. Czemu. 

Klasycznie bierzesz np 1024 urodzin i rok na 2^24.  

To daje średnią 16. Masz coś, co z grubsza wygląda jak rozkład 
poissona o średniej 16 i ma 1023 punkty. 
Rozsądne kubełki to tak 7-25. Pozostałe połączyłbym w jeden
to tego typu testów

BTW, moze sie przydać
https://www.jstatsoft.org/article/view/v007i03/tuftests.pdf


> 
> Mnie się zdaje, że albo źle robię test urodzinowy, albo rozkład 
> poissona słabo przybliża rozkład testu urodzinowego. Może trzeba 
> wziąć bardzo długi rok (np. miliard dni) i tylko kilka 
> najczęstszych kubełków... Nie wiem.

Tak. Piszą o tym w przypisach artykułu, który wysłałes;-)

pzdr
bartekltg

[toc] | [prev] | [next] | [standalone]


#31103

From"M.M." <mmarszik@gmail.com>
Date2017-12-18 21:39 -0800
Message-ID<08871785-d6ca-40a2-bca8-d750fac09cfb@googlegroups.com>
In reply to#31102
On Tuesday, December 19, 2017 at 5:11:43 AM UTC+1, bartekltg wrote:
> On Tuesday, December 19, 2017 at 2:24:09 AM UTC+1, M.M. wrote:
> > On Tuesday, December 19, 2017 at 12:48:30 AM UTC+1, bartekltg wrote:
> > > On Monday, December 18, 2017 at 5:33:04 AM UTC+1, M.M. wrote:
> > > > Co by było, gdyby rozkład wzorcowy wygenerować innym generatorem, 
> > > 
> > > Powinno być w miarę dobrze, tyle, że to test na to, że oba generatory
> > > daj ten sam rozkład, nie na to, że generatory sa dobre!
> > Oczywiście, to tak naprawdę test na to, że oba dają ten sam rozkład.
> > Można tym też testować ten sam z innym zarodkiem.
> > 
> > 
> > > Do Twoich celów musiałbyś więc założyć, że jeden z nich jest dobry;-)
> > > a to może zostać odebrane jako mętne. 
> > Tak.
> > 
> > > Pamiętaj, że te testy mają test i chi^2. 
> > 1) Najpierw jest test urodzinowy. Zliczane jest w kubełkach jak często
> >    było zero powtórzeń, jedno powtórzenie, dwa... N-1.
> 
> OK
> 
> > 2) Potem jest liczone chi-kwadrat.
> > 3) Potem chi-kwadrat podstawiane jest do rozkładu - co w sumie nie jest
> >    tutaj przydatne.
> 
> Pewien jesteś, że chi^2 z kubełków? A nie liczba trafień podwójnych,
>  potrójnych... w porównaniu do teoretycznej liczby? 
O ile rozumiem, właśnie to miałem na myśli. W kubełkach mam właśnie 
liczbę trafień. Może niepotrzebnie używam tutaj słowa 'kubełek', bo 
zazwyczaj o kubełkach mówi się gdy zmienną ciągłą dzieli się na przedziały.

W zmiennej 'sums' mam liczbę:
sums[0] - bez powtórzeń
sums[1] - z jednym powtórzeniem
sums[N-1] - z N-1 powtórzeniami

Potem robię:

sum( (sums[i] - e[i])^2 / e[i] )


> To też będzie chi^2, ale kubełkami będzie liczba dni z jednym,
> dwoma, trzema, ...k, "wiecej niż k" trafieniami. 
> k dobrane tak, ze nie ma żadnych zer. 

Czyli żeby kubełki bliskie zeru połączyć z sobą? Myślę, że dobry
pomysł.


> Nie wiem, czy tam nie ma jeszcze innego testu, takiego, co
> bierze dużo liczb, sortuje i patrzy na rozkład różnic. 
> Tam też nie powinno być zer. 

Hmmm formalnie zer nie może być w rozkładzie wzorcowym/teoretycznym.
Jeśli jest zero, to mamy:

( wynik_testu - 0 )^2 / 0

Z poissona nigdy zero nie wyjdzie, ale może wyjść 0.001. Jeśli generator
akurat trafi jedynkę a nie zero, to mamy:

( 1 - 0.001)^2 / 0.001 = 998 <- rozwali każdy test.

> > 4) Ostatecznie jest liczona całka rozkładu (dystrybuanta) od zera do 
> >    chi-kwadrat - wychodzi p-value.
> 
> I test powtarza się wieloktornie i robi chi^2 na rozkład tego p,
> powinien być jednostajny. 

Tego póki co w ogóle nie robiłem. 


> 
>  
> > > Rozumiem, że mówisz o zastąpieniu właśnie tego pierwszego testu?
> > > Czy drugiego? 
> > Chyba pierwszego, bo nie bardzo rozumiem jak można zastąpić drugi. 
> > W pierwszym teście dwa generatory budują jakiś rozkład, tutaj konkretnie
> > rozkład dla testu urodzinowego. W drugim, jeden generator jest traktowany 
> > tak, jakby był teoretycznie idealny i są liczone powyższe punkty od 2 do 4.
> 
> 
> Nie wchodzc w szczgoły. Unikałbym pisania, że zakładasz idealność
> jakiegoś rozkładu, czy, ze przetestowałeś tak jakiś generator 
> i jest on dobry. Wspomnij o tym raz w trybie przypuszczającym,
> a pisz o tym, ze test stwierdził brak różnic w rozkłądach generowanych
> oboma genratorami. W ten sposób nie odstraszysz czytelników;-)

Nie chciałem powiedzieć, że wierzę aby generator był doskonały. Po 
prostu algorytm działa tak, jakby jeden generator był doskonały. W 
ten sposób chciałem tylko opisać działanie algorytmu.

> > https://pl.wikipedia.org/wiki/Test_Birthday_Spacings
> 
> 
> O, to ten drugi. To o rozkładzie poissona to tylko przybliżenia
> dla dłygiego roku;-) O czym masz w referencjach na tej stronie. 

No tak, ale rok w moim teście, podobnie jak w referencjach, też miał 
np. 2^24 dni i też nie przechodziło testu. W deiharderze też nie 
przechodzi jak da się duże m. Gdy porównuję z rozkładem ranluxa, to
nagle przechodzi. Coś mi tutaj się nie podoba... 






> 
> 
> >
> > 
> > > Chyba standardowy chi^2 na porównanie wystarczy (ten, gdzie się porównuje
> > > do rozkładów brzegowych
> > > https://en.wikipedia.org/wiki/Chi-squared_test#Example_chi-squared_test_for_categorical_data
> > > )
> > To chyba robię dobrze, bo testy dla dwóch różnych generatorów udają się.
> 
> Eeee, to tak nie działa, to, że dało wynik OK to kiepska przesłanka;-)
Ale nie jedyna przesłanka, jeszcze wolfrma i arkusz kalkulacyjny 
dla kilku przykładów dały te same wyniki.

> Chyba też nie robisz dokłądnie tak, bo wtedy byś nie miał problemu
> z tym, że jeden generator dał 0 w danym kukbełku, bo dzieli się
> przez sumę z obu.

Hmmm na wiki jest że dzieli się przez wartość oczekiwaną:
https://wikimedia.org/api/rest_v1/media/math/render/svg/f709dc014d7ced59a61000b58cb0ea19ba5926f6



> 
> 
> > > > albo tym samym z innym zarodkiem? 
> > > 
> > > Bardzo zły pomysł. Ten sam generator dla róznych seedów pewnie ma
> > > ten sam rozkład. Niekoniecznie dobry. Nic takim testem nie wykryjesz,
> > > poza bardzo złymi generatorami;-)
> > Hmmm, muszę spróbować i przemyśleć na spokojnie.
> 
> Jeśli generator G zasedowany s będzie miał nny rozkłąd niż
> zaseedowany s', to jest to oczywiście generator zepsuty. 
> Ale generator G może mieć ten sam rozkład niezależnie od
> seede s, a być ujowym generatorem. 

Tak, to działa tylko w jedną stronę. Jeśli test nie wyjdzie, to przynajmniej
jeden z generatorów jest zepsuty. Wnioskowanie w drugą stronę jest ryzykowne.


> Weż dobry genrator h i zrób z niego kiepski:
> Niech G daje liczbę będącą średnią dwuch odpaleń
> generatora h. G nie jest nawet w przybliżeniu jednorodny. 
> A Twój test przejdzie. 
Pewnie by przeszedł.


> > > To źle dobrane kubełki.
> > > Dobór kubełków powinien być dobrany do oczekiwanej liczby
> > > pomiarów. 
> > 
> > Hmmm ale przy teście urodzinowym ilość kubełków jest zawsze
> > równa ilości pierwszych urodzin. 
> 
> Nie. Czemu. 
> 
> Klasycznie bierzesz np 1024 urodzin i rok na 2^24.  
> 
> To daje średnią 16. Masz coś, co z grubsza wygląda jak rozkład 
> poissona o średniej 16 i ma 1023 punkty. 
> Rozsądne kubełki to tak 7-25. Pozostałe połączyłbym w jeden
> to tego typu testów

Odpalę taki test, tamten kod można łatwo dostosować. Z tego co sobie
przypominam wyniki, też nie przejdzie, bo różnice były nawet w 
maksimum rozkładu.

> 
> BTW, moze sie przydać
> https://www.jstatsoft.org/article/view/v007i03/tuftests.pdf
Wygląda ciekawie, dzięki.



> > Mnie się zdaje, że albo źle robię test urodzinowy, albo rozkład 
> > poissona słabo przybliża rozkład testu urodzinowego. Może trzeba 
> > wziąć bardzo długi rok (np. miliard dni) i tylko kilka 
> > najczęstszych kubełków... Nie wiem.
> 
> Tak. Piszą o tym w przypisach artykułu, który wysłałes;-)

Ale co tak? Źle robię test, czy rozkład poissona tak źle 
przybliża Birthday Spacings Test ?


Pozdrawiam

[toc] | [prev] | [next] | [standalone]


#31104

From"M.M." <mmarszik@gmail.com>
Date2017-12-18 22:22 -0800
Message-ID<57990515-34ba-48e9-a39b-cc6149555eab@googlegroups.com>
In reply to#31103
On Tuesday, December 19, 2017 at 6:39:25 AM UTC+1, M.M. wrote:
> > > Mnie się zdaje, że albo źle robię test urodzinowy, albo rozkład 
> > > poissona słabo przybliża rozkład testu urodzinowego. Może trzeba 
> > > wziąć bardzo długi rok (np. miliard dni) i tylko kilka 
> > > najczęstszych kubełków... Nie wiem.
> > 
> > Tak. Piszą o tym w przypisach artykułu, który wysłałes;-)
> 
> Ale co tak? Źle robię test, czy rozkład poissona tak źle 
> przybliża Birthday Spacings Test ?
> 

Rozumiem, że im się tylko wydaje iż rozkład poissona to dobrze 
aproksymuje, że tylko liczne testy to potwierdzają:
[
Theory provides little guidance on speed of the approach to limiting form, but extensive simulation with a
variety of RNG’s provides values of m and n for which the limiting Poisson distribution seems satisfactory.
]

Potem piszą, że w teście biorą tylko 5000 przebiegów:
[
This process is repeated to get a sample of 5000
from that Poisson distribution
]

A ja chciałem testować całą dobę na kilku rdzeniach, czyli na miliardach
przebiegów. Coraz bardziej jestem pewny, że nie mam błędu, a po prostu
poisson się rozjeżdża z Birthday Spacings nawet dla roku o długości 2^24.

Pozdrawiam

[toc] | [prev] | [next] | [standalone]


#31116

From"M.M." <mmarszik@gmail.com>
Date2017-12-19 23:30 -0800
Message-ID<2027339c-574e-44f6-8a51-4217e48a355f@googlegroups.com>
In reply to#31102
On Tuesday, December 19, 2017 at 5:11:43 AM UTC+1, bartekltg wrote:

> [...]
> Weź dobry generator h i zrób z niego kiepski:
> Niech G daje liczbę będącą średnią dwóch odpaleń
> generatora h. G nie jest nawet w przybliżeniu jednorodny. 
> A Twój test przejdzie. 
> [...]

Co myślisz o tym na dole? Porównałem ranlux48 z ranlux48 na innych 
seedach. Długość roku dałem 2^20, ilość urodzin 2^12. Ilość 
kubełków zredukowałem, jak radziłeś. Cały kod:

https://pastebin.com/JhLN12C5


P-value wyszło 0.9999927195600541432. Może jednak taki test jest trochę 
lepszy niż myślimy?


time ./frnd 
rnd seed1:     1163463455
rnd seed2:     1984622677

chi-square:       122.5638184406948564
chi-dist:     1.909341135233440832e-06
chi-dist-cum:    0.9999927195600541432
--------------------------------------

^C

real    102m38.915s
user    102m22.596s
sys     0m10.160s


Kubełki:
    0                475                472    0.0190677966102
    1                153                178      3.51123595506
    2                251                263      0.54752851711
    3                371                375    0.0426666666667
    4                542                515      1.41553398058
    5                846                840    0.0428571428571
    6               1053               1128      4.98670212766
    7               1564               1565   0.000638977635783
    8               2187               2089      4.59741503112
    9               2991               2801      12.8882541949
   10               3862               3926      1.04330106979
   11               5028               5012    0.0510774142059
   12               6667               6637     0.135603435287
   13               8581               8396      4.07634587899
   14              11039              11140     0.915709156194
   15              13611              13763      1.67870377098
   16              16827              16828   5.94247682434e-05
   17              20729              20540      1.73909444985
   18              25058              24955     0.425125225406
   19              29748              29642     0.379056743809
   20              34722              34355       3.9205064765
   21              39962              39966   0.000400340289246
   22              45666              45611    0.0663217206376
   23              50888              51324      3.70384225703
   24              56501              56747      1.06641760798
   25              62241              61824      2.81264557453
   26              66695              66457     0.852340611222
   27              70825              70981     0.342852312591
   28              74429              74460    0.0129062583938
   29              76968              78238      20.6153020271
   30              78476              78737     0.865171393373
   31              79766              80160      1.93657684631
   32              79360              78559      8.16712279942
   33              77508              77537    0.0108464346054
   34              75260              75084     0.412551275904
   35              71362              71280    0.0943322109989
   36              66661              66850     0.534345549738
   37              62177              62491       1.5777631979
   38              56758              56954     0.674509253081
   39              51661              51124      5.64057976684
   40              45815              45673      0.44148621724
   41              40740              40463      1.89627560982
   42              34935              34509      5.25880205164
   43              29703              30088      4.92638261101
   44              25035              25077    0.0703433425051
   45              21068              20974      0.42128349385
   46              17340              17215     0.907638687191
   47              14079              14042     0.097493234582
   48              11251              11209      0.15737353912
   49               8795               8787   0.00728348696939
   50               6710               6883      4.34824930989
   51               5180               5161    0.0699476845573
   52               3882               3948      1.10334346505
   53               2900               2986      2.47689216343
   54               2104               2157      1.30227167362
   55               1572               1628      1.92628992629
   56               1120               1090     0.825688073394
   57                810                781      1.07682458387
   58                500                499   0.00200400801603
   59                372                394      1.22842639594
   60                272                276    0.0579710144928
   61                180                173      0.28323699422
   62                105                120              1.875

Pozdrawiam

[toc] | [prev] | [next] | [standalone]


#31117

From"M.M." <mmarszik@gmail.com>
Date2017-12-20 10:40 -0800
Message-ID<bbd9bc33-9495-42df-98ab-2f61af046bc7@googlegroups.com>
In reply to#31116
On Wednesday, December 20, 2017 at 8:30:32 AM UTC+1, M.M. wrote:
> On Tuesday, December 19, 2017 at 5:11:43 AM UTC+1, bartekltg wrote:
> 
> > [...]
> > Weź dobry generator h i zrób z niego kiepski:
> > Niech G daje liczbę będącą średnią dwóch odpaleń
> > generatora h. G nie jest nawet w przybliżeniu jednorodny. 
> > A Twój test przejdzie. 
> > [...]
> 
> Co myślisz o tym na dole? Porównałem ranlux48 z ranlux48 na innych 
> seedach. Długość roku dałem 2^20, ilość urodzin 2^12. Ilość 
> kubełków zredukowałem, jak radziłeś. Cały kod:
> 
> https://pastebin.com/JhLN12C5
> 
> 
> P-value wyszło 0.9999927195600541432. Może jednak taki test jest trochę 
> lepszy niż myślimy?


MT testowany sam ze sobą raczej też nie przechodzi testu:

test 1
chi-dist-cum:    0.9999997015849526988

test 2
chi-dist-cum:    0.9999228118927154972

[toc] | [prev] | [next] | [standalone]


#31118

From"M.M." <mmarszik@gmail.com>
Date2017-12-20 15:46 -0800
Message-ID<ca24cdbf-454d-4a6b-90eb-dbbc05bdb70b@googlegroups.com>
In reply to#31117
On Wednesday, December 20, 2017 at 7:40:52 PM UTC+1, M.M. wrote:
> On Wednesday, December 20, 2017 at 8:30:32 AM UTC+1, M.M. wrote:
> > On Tuesday, December 19, 2017 at 5:11:43 AM UTC+1, bartekltg wrote:
> > 
> > > [...]
> > > Weź dobry generator h i zrób z niego kiepski:
> > > Niech G daje liczbę będącą średnią dwóch odpaleń
> > > generatora h. G nie jest nawet w przybliżeniu jednorodny. 
> > > A Twój test przejdzie. 
> > > [...]
> > 
> > Co myślisz o tym na dole? Porównałem ranlux48 z ranlux48 na innych 
> > seedach. Długość roku dałem 2^20, ilość urodzin 2^12. Ilość 
> > kubełków zredukowałem, jak radziłeś. Cały kod:
> > 
> > https://pastebin.com/JhLN12C5
> > 
> > 
> > P-value wyszło 0.9999927195600541432. Może jednak taki test jest trochę 
> > lepszy niż myślimy?
> 
> 
> MT testowany sam ze sobą raczej też nie przechodzi testu:
> 
> test 1
> chi-dist-cum:    0.9999997015849526988
> 
> test 2
> chi-dist-cum:    0.9999228118927154972

I generator Fibonacciego z tamtego kodu powyżej ( przypomnę: 
https://pastebin.com/JhLN12C5 ), gdy jest testowany sam ze sobą, 
też nie przechodzi testu urodzinowego. Albo mam błąd, albo to
jest lepszy (bo trudniejszy) test niż można było się spodziewać :)
Ale błędu raczej nie mam, bo ten sam kod generuje oba rozkłady i
inne narzędzia dają tę samą wartość p-value. Mam prośbę, spójrzcie
na tamten kod, może znajdziecie błędy?

Przy założeniu, że nie mam błędu, jakie płyną z tego wnioski? Proszę,
jeden ważny wniosek: Jeśli uruchamiacie symulację na klastrze, jeśli
używacie nawet tak dobrych generatorów jak std::ranlux48 lub 
std::mt19937_64 i w każdym procesie/wątku liczycie to samo zadanie z
innym seedem, to wyniki z poszczególnych wątków/procesów prawdopodobnie
nie są niezależne :)


Ułatwię test. Zrobię rok o długości 2^24 i dam 32 urodziny. Generatory 
powinny przejść ułatwione testy.... zobaczymy. Z jakiś czas dam wyniki.


Pozdrawiam




[toc] | [prev] | [next] | [standalone]


#31120

From"M.M." <mmarszik@gmail.com>
Date2017-12-21 00:25 -0800
Message-ID<264aa68a-cd26-4b58-b33e-9833fd601cb7@googlegroups.com>
In reply to#31118
On Thursday, December 21, 2017 at 12:46:19 AM UTC+1, M.M. wrote:
> On Wednesday, December 20, 2017 at 7:40:52 PM UTC+1, M.M. wrote:
> > On Wednesday, December 20, 2017 at 8:30:32 AM UTC+1, M.M. wrote:
> > > On Tuesday, December 19, 2017 at 5:11:43 AM UTC+1, bartekltg wrote:
> > > 
> > > > [...]
> > > > Weź dobry generator h i zrób z niego kiepski:
> > > > Niech G daje liczbę będącą średnią dwóch odpaleń
> > > > generatora h. G nie jest nawet w przybliżeniu jednorodny. 
> > > > A Twój test przejdzie. 
> > > > [...]
> > > 
> > > Co myślisz o tym na dole? Porównałem ranlux48 z ranlux48 na innych 
> > > seedach. Długość roku dałem 2^20, ilość urodzin 2^12. Ilość 
> > > kubełków zredukowałem, jak radziłeś. Cały kod:
> > > 
> > > https://pastebin.com/JhLN12C5
> > > 
> > > 
> > > P-value wyszło 0.9999927195600541432. Może jednak taki test jest trochę 
> > > lepszy niż myślimy?
> > 
> > 
> > MT testowany sam ze sobą raczej też nie przechodzi testu:
> > 
> > test 1
> > chi-dist-cum:    0.9999997015849526988
> > 
> > test 2
> > chi-dist-cum:    0.9999228118927154972
> 
> I generator Fibonacciego z tamtego kodu powyżej ( przypomnę: 
> https://pastebin.com/JhLN12C5 ), gdy jest testowany sam ze sobą, 
> też nie przechodzi testu urodzinowego. Albo mam błąd, albo to
> jest lepszy (bo trudniejszy) test niż można było się spodziewać :)
> Ale błędu raczej nie mam, bo ten sam kod generuje oba rozkłady i
> inne narzędzia dają tę samą wartość p-value. Mam prośbę, spójrzcie
> na tamten kod, może znajdziecie błędy?
> 
> Przy założeniu, że nie mam błędu, jakie płyną z tego wnioski? Proszę,
> jeden ważny wniosek: Jeśli uruchamiacie symulację na klastrze, jeśli
> używacie nawet tak dobrych generatorów jak std::ranlux48 lub 
> std::mt19937_64 i w każdym procesie/wątku liczycie to samo zadanie z
> innym seedem, to wyniki z poszczególnych wątków/procesów prawdopodobnie
> nie są niezależne :)
> 
> 
> Ułatwię test. Zrobię rok o długości 2^24 i dam 32 urodziny. Generatory 
> powinny przejść ułatwione testy.... zobaczymy. Z jakiś czas dam wyniki.
> 

Generator Fibonacciego na ułatwionym teście zachował się przyzwoicie.
P-value jest równe 0.6862016765421758663. W teście było wygenerowanych 
3E11 liczb pseudo-losowych, ponad 11 godzin obliczeń.

Kod:
https://pastebin.com/1huv7HP5


Test:

time ./frnd 
rnd seed1:     252276773
rnd seed2:     1201639756
 
--------------------------------------
loops: 4763156481
    0          465935620          465937865    0.0108169465901
    1            2253109            2250870      2.22719259664
    2                456                450               0.08
chi-square:       2.318009543230488209
chi-dist:        0.1568991632651941654
chi-dist-cum:    0.6862016765421758663
--------------------------------------

^C
real    679m37.501s
user    679m28.800s
sys     0m2.584s

[toc] | [prev] | [next] | [standalone]


#31127

From"M.M." <mmarszik@gmail.com>
Date2017-12-21 11:33 -0800
Message-ID<ae47d0b1-513e-4251-a9be-6fad2dd02ce1@googlegroups.com>
In reply to#31120
On Thursday, December 21, 2017 at 9:25:55 AM UTC+1, M.M. wrote:
> On Thursday, December 21, 2017 at 12:46:19 AM UTC+1, M.M. wrote:
> > On Wednesday, December 20, 2017 at 7:40:52 PM UTC+1, M.M. wrote:
> > > On Wednesday, December 20, 2017 at 8:30:32 AM UTC+1, M.M. wrote:
> > > > On Tuesday, December 19, 2017 at 5:11:43 AM UTC+1, bartekltg wrote:
> > > > 
> > > > > [...]
> > > > > Weź dobry generator h i zrób z niego kiepski:
> > > > > Niech G daje liczbę będącą średnią dwóch odpaleń
> > > > > generatora h. G nie jest nawet w przybliżeniu jednorodny. 
> > > > > A Twój test przejdzie. 
> > > > > [...]
> > > > 
> > > > Co myślisz o tym na dole? Porównałem ranlux48 z ranlux48 na innych 
> > > > seedach. Długość roku dałem 2^20, ilość urodzin 2^12. Ilość 
> > > > kubełków zredukowałem, jak radziłeś. Cały kod:
> > > > 
> > > > https://pastebin.com/JhLN12C5
> > > > 
> > > > 
> > > > P-value wyszło 0.9999927195600541432. Może jednak taki test jest trochę 
> > > > lepszy niż myślimy?
> > > 
> > > 
> > > MT testowany sam ze sobą raczej też nie przechodzi testu:
> > > 
> > > test 1
> > > chi-dist-cum:    0.9999997015849526988
> > > 
> > > test 2
> > > chi-dist-cum:    0.9999228118927154972
> > 
> > I generator Fibonacciego z tamtego kodu powyżej ( przypomnę: 
> > https://pastebin.com/JhLN12C5 ), gdy jest testowany sam ze sobą, 
> > też nie przechodzi testu urodzinowego. Albo mam błąd, albo to
> > jest lepszy (bo trudniejszy) test niż można było się spodziewać :)
> > Ale błędu raczej nie mam, bo ten sam kod generuje oba rozkłady i
> > inne narzędzia dają tę samą wartość p-value. Mam prośbę, spójrzcie
> > na tamten kod, może znajdziecie błędy?
> > 
> > Przy założeniu, że nie mam błędu, jakie płyną z tego wnioski? Proszę,
> > jeden ważny wniosek: Jeśli uruchamiacie symulację na klastrze, jeśli
> > używacie nawet tak dobrych generatorów jak std::ranlux48 lub 
> > std::mt19937_64 i w każdym procesie/wątku liczycie to samo zadanie z
> > innym seedem, to wyniki z poszczególnych wątków/procesów prawdopodobnie
> > nie są niezależne :)
> > 
> > 
> > Ułatwię test. Zrobię rok o długości 2^24 i dam 32 urodziny. Generatory 
> > powinny przejść ułatwione testy.... zobaczymy. Z jakiś czas dam wyniki.
> > 
> 
> Generator Fibonacciego na ułatwionym teście zachował się przyzwoicie.
> P-value jest równe 0.6862016765421758663. W teście było wygenerowanych 
> 3E11 liczb pseudo-losowych, ponad 11 godzin obliczeń.
> 
> Kod:
> https://pastebin.com/1huv7HP5
> 
> 
> Test:
> 
> time ./frnd 
> rnd seed1:     252276773
> rnd seed2:     1201639756
>  
> --------------------------------------
> loops: 4763156481
>     0          465935620          465937865    0.0108169465901
>     1            2253109            2250870      2.22719259664
>     2                456                450               0.08
> chi-square:       2.318009543230488209
> chi-dist:        0.1568991632651941654
> chi-dist-cum:    0.6862016765421758663
> --------------------------------------
> 
> ^C
> real    679m37.501s
> user    679m28.800s
> sys     0m2.584s

Uproszczony test przechodzą:

Generator std::ranlux48

rnd seed1:     1898900298
rnd seed2:     16827081

loops: 141295617
    0          141229121          141228768   0.000882320236625
    1              66489              66834      1.78090492863
    2                  7                 15      4.26666666667
chi-square:       6.048453915532432401
chi-dist:       0.02429768651465504778
chi-dist-cum:    0.9514046559756827399
-------------------------------------------------------------------


Generator std::mt19937_64

rnd seed1:     1661541351
rnd seed2:     1506358270


loops: 4062183425
    0         4060261981         4060263019   0.000265363104547
    1            1921054            1919983     0.597422477178
    2                390                423      2.57446808511
chi-square:       3.172155925389113521
chi-dist:        0.1023634930368723807
chi-dist-cum:    0.7952730205949993346


Pozdrawiam

[toc] | [prev] | [standalone]


Back to top | Article view | pl.comp.programming


csiph-web