Generatory liczb pseudolosowych Plan wykładu: 1.Generatory o rozkładzie równomiernym a) liniowe b) kombinowane – generator uniwersalny c) nieliniowe 2. Generatory o dowolnym rozkładzie prawdopodobieństwa a) metoda odwracania dystrybuanty b) metoda eliminacji c) superpozycja rozkładów d) rozkład dyskretny 3.Generatory o rozkładach wielowymiarowych a) rozkład równomierny na sferze i kuli w RM b) dwuwymiarowy rozkład normalny 4.Testowanie generatorów a) testy zgodności z rozkładem: , OPSO b) testy zgodności z rozkładem statystyk: pozycyjne, test sum Generatory o rozkładzie równomiernym generatory liczb losowych fizyczne programowe (komputerowe) Najprostsze generatory liczb losowych to generatory fizyczne wykorzystujące: 1) szumy układów elektronicznych 2) Promieniotwórczość Zalety: dostajemy ciągi liczb losowych (niezależne, nieskorelowane) Wady: wymagana ciągła kalibracja (testowanie parametrów), kłopoty techniczne z obsługą, brak powtarzalności serii. Własności generatorów komputerowych a) łatwość obsługi b) możliwość generowania dowolnego rozkładu c) dowolna liczba wymiarów d) Powtarzalność ciągów generowanych liczb Jak pracują komputerowe generatory liczby? 1) Tworzony jest ciąg liczb nieujemnych (naturalnych) X0 ; X1 ; X2 ; : : : ; Xn o rozkładzie równomiernym według wybranego algorytmu. Liczby ograniczone są od góry przez reprezentację, np. dla k=32 bitowej reprezentacji liczby całkowitej bez znaku, kres górny m = 232 X0 ; : : : ; Xº¡1 Xº ; Xº+1 ; : : : ; Xº+P ¡1 ; Xº+P ; : : : | {z }| {z } Ta To Ta – okres aperiodyczności ciągu T0 – okres ciągu 2) Aby uzyskać liczby „rzeczywiste” dokonujemy przekształcenia U= X ) Ui 2 (0; 1] m 3) Dokonujemy kolejnej transformacji ciągu aby uzyskać ciąg o zadanym rozkładzie prawdopodobieństwa (normalny, wielomianowy, etc.) 2 Generatory liniowe Generatory liniowe tworzą ciąg liczb według schematu: Aby wygenerować ciąg liczb pseudolosowych należy zdefiniować jego parametry. Liczby X0 ; X1 ; X2 ; : : : ; Xk Xn+1 = (a1 Xn + a2 Xn¡1 + : : : +ak Xn¡k+1 + c) mod m gdzie: a1, a2,...,ak, c, m – parametry generatora (ustalone liczby) nazywamy ziarnem generatora (seed). Dla bardziej rozbudowanych generatorów liczby te otrzymujemy z innego generatora lub np. używając zegara systemowego (X0). Najprostszy generator liniowy ma dwie odmiany a) generator multiplikatywny gdy Operację r = (a mod n); a; n; r 2 Z c=0 nazywamy dzieleniem modulo a jej wynikiem jest reszta z dzielenia liczb całkowitych a i n. b) generator mieszany gdy Lub inaczej: r jest kongruentne do a modulo n jeśli n jest dzielnikiem a-r. Maksymalny okres generatora liniowego to (m-1) a ´ r mod n ) r = a ¡ jak n Generator multiplikatywny n Generatory wykorzystujące operację dzielenia modulo to generatory kongruentne lub kongruencyjne. Przykład 19 18 17 16 mod mod mod mod 6 6 6 6 =1 =0 =5 =4 15 mod 6 =3 14 mod 6 =2 13 mod 6 =1 12 mod 6 =0 c 6= 0 Xi+1 =¹aXi¡1 º mod m aXi¡1 ki = ; i¸1 m X1 = aX0 ¡ mk1 X2 = a2 X0 ¡ mk2 ¡ mk1 a X3 = a3 X0 ¡ mk3 ¡ mk2 a ¡ mk1 a2 3 :::::::::::: Xn = an X0 ¡ m(kn + kn¡1 a + : : : + k1 an¡1 ) Ostatnie równanie można zapisać w postaci Xn = an X0 mod m skąd wynika, że wybór X0 determinuje wszystkie liczby w generowanym ciągu (a i m są ustalone) – uzyskany ciąg liczb jest deterministyczny Przykład. Generator multiplikatywny Xi = aXi¡1 mod 11; X0 = 1 Xi a=1 2 3 4 5 6 7 8 9 10 i=0 1 1 1 1 1 1 1 1 1 1 1 1 2 3 4 5 6 7 8 9 10 2 4 9 5 3 3 5 9 4 1 3 8 5 9 4 7 2 6 3 4 5 4 3 9 9 3 4 5 5 10 1 1 1 10 10 10 1 6 9 5 4 3 7 7 8 6 2 8 3 4 9 5 9 6 2 8 7 10 1 1 1 1 4 Okres generatora multiplikatywnego T = minfi : Xi = X0 ; i > 0g Maksymalny okres generatora multiplikatywnego uzyskujemy dla a(m¡1)=p 6= 1 mod m Gdy m jest liczbą pierwszą a p jest czynnikiem pierwszym liczby (m-1). Przykład Wykorzystujemy liczby Marsenne'a (które dość często są liczbami pierwszymi) m = 2p ¡ 1 p = 31 ) m = 231 ¡ 1; a = 75 Okres generatora T = 231 ¡ 2 Liczby U = fUi ; 1 · i · T g występują dokładnie 1 raz w pojedynczym okresie generatora. Odległość pomiędzy najbliższymi sąsiadami 1 ¡10 = 4:657 £ 10 231 ¡ 1 5 Rozkład przestrzenny ciągu Wadą generatorów multiplikatywnych jest nierównomierne pokrycie d-wymiarowej kostki (I d). Generowane liczby lokalizują się na hiperpłaszczyznach, których położenie uzależnione jest od parametrów generatora. Przykład. (U1 ; U2 ; : : : ; Ud ); (U2 ; U3 ; : : : ; Ud+1); : : : (U1 ; U2 ; : : : ; Ud ); (Ud+1 ; Ud+2 ; : : : ; U2d ); : : : Xi = aXi¡1 mod 11 a) X0=1, a=2 b) X0=1, a=8 6 Parametry statystyczne generatora o rozkładzie równomiernym w (0,1)-> U(0,1) Przykład. Przeanalizujmy parametry statystyczne L bitowego generatora Jeśli generowany ciąg liczb jest niezależny to wartość oczekiwana (średnia) powinna wynosić ¹= Z 1 0 ¯ 2 ¯1 x ¯ 1 xdx = = 2 ¯0 2 N 1 X ¹= xi N i=1 natomiast wariancja jest równa ¾2 = Z 0 1 1 (x ¡ ¹)2 dx = 12 N 1 X ¾ ¹= (xi ¡ ¹)2 N i=1 Xi+1 = aXi mod 2L Można nim wygenerować 4 ciągi liczb o okresie T = 2L¡2 Jeden z nich: c ´ 3 mod 8; X0 ´ 1; 3; 9; 11 mod 16 Ciąg liczb pseudolosowych X0 ; X1 ; X2 ; : : : jest permutacją liczb 8j + 1; 8j + 3; j = 0; 1; : : : ; 2L¡3 ¡ 1 Liczby znormalizowane Ui = Średnia Xi Xi = L m 2 1 1 ¹ = ¡ L¡1 2 2 Ponadto współczynniki autokorelacji elementów ciągu powinny wynosić 0. Wariancja Jeśli parametry statystyczne generatora (ciągu generowanych przez niego liczb) odbiegają od powyższych wartości to jest on nieprzydatny (lub warunkowo przydatny). ¾2 = 1 13 ¡ 12 3 ¢ 2m 7 Funkcja autokorelacji opisuje zależność elementów ciągu od wyrazów poprzednich. Definicja ~ r = E[(Xt ¡ ¹)(Xs ¡ ¹)] R ¾2 oraz wzór dla ciągu skończonego (r=s-t) N ¡r X 1 Rr = (Xi ¡ ¹)(Xi+r ¡ ¹) (N ¡ r)¾ 2 i=1 Inaczej: opisuje związek pomiędzy elementami dówch szeregów – danego i przesuniętego o r. Przykłady generatorów liniowych Xi Xi Xi Xi = (1176Xi¡1 + 1476Xi¡2 + 1776Xi¡3) mod (232 ¡ 5) = 213 (Xi¡1 + Xi¡2 + Xi¡3 ) mod (232 ¡ 5) = (1995Xi¡1 + 1998Xi¡2 + 2001Xi¡3) mod (235 ¡ 849) = 219 (Xi¡1 + Xi¡2 + Xi¡3 ) mod (232 ¡ 1629) Ich okresy są maksymalne tj. równe (m-1) Generatory na rejestrach przesuwnych Definiujemy ciąg bitów bi otrzymywanych rekurencyjnie bi = (a1 bi¡1 + : : : + ak bi¡k ) mod 2 i = k + 1; k + 2; : : : Efektywnie funkcję autokorelacji można badać przy użyciu FFT – splot dwóch wektorów. gdzie: Dla analizowanego generatora mieszanego oraz dla r=1 współczynnk autokorealcji można oszacować z poniższej relacji są stałymi binarnymi , a stałe bi A = B = R1 2 1 6c c ¡ (1 ¡ ) a am m a m [A ¡ B; A + B] a1 ; a2 ; : : : ; ak 2 f0; 1g b1 ; b2 ; : : : ; bk 2 f0; 1g tworzą ciąg inicjujący. 8 Inny sposób zapisu relacji rekurencyjnej wykorzystuje operator xor a 0 0 1 1 b a xor b 0 0 1 1 0 1 1 0 Wykorzystujemy ciąg bitów do obliczenia liczby pseudolosowej z przedziału (0,1] (generator Tauswortha) Ui = L X 2¡j bis+j j=1 i Który można zdefiniować = = 0:bis+1 : : : bis+L 0; 1; 2; : : : gdzie: s jest ustaloną całkowitą liczbą nieujemną a xor b = (a + b) mod 2 Jeśli założymy aj1 = aj2 = : : : = ajk = 1 to relację rekurencyjną można zapisać przy użyciu xor bi = bi¡j1 xor bi¡j2 xor : : : xor bi¡jk Jakie są własności takiego ciągu bitów? a) jeśli s<L to do utworzenia Ui oraz Ui+1 wykorzystywane są elementy tego samego podciągu b) jeśli s=L to Ui oraz Ui+1 są tworzone z rozłącznych fragmentów ciągu globalnego Ciąg bitów łatwo generuje się przy użyciu rejestrów przesuwnych oraz bramek logicznych (xor) – łatwa implementacja w języku C. Ciąg jest okresowy o okresie nieprzekraczającym 2k a dokładniej (2k-1) ze względu na wyrzucenie układu bitów złożonych z samych zer. Praktyczną realizacją tego pomysłu jest algorytm wykorzystujący tylko dwa elementy ciągu: bi = bi¡p xor bi¡q ; p > q; p; q 2 N 9 Generator Fibonacciego Punktem wyjścia do konstrukcji generatora są liczby Fibonacciego f0 fn = = Kombinacje generatorów f1 = 1 fn¡2 + fn¡1 Zakładamy że dysponujemy zmiennymi losowymi X i Y określonymi na zbiorze S={1,2,...,n} z rozkładami prawdopodobieństwa a dokładniej ciąg reszt tego ciągu Xi = Xi¡2 + Xi¡1 mod m; Generator charakteryzuje się dużym okresem ale jest wolniejszy np. względem generatorów multiplikatywnych co obecnie nie jest już dużą wadą. i¸2 Powyższy ciąg reszt ma rozkład równomierny ale nie spełnia testów niezależności (autokorelacja). Jego modyfikacja Xi = Xi¡r ¦ Xi¡s mod m i ¸ r; r > s ¸ 1 ¦ = +; ¡; ¤; xor P fX = ig P fY = ig i 8 r L¡1 (2 ¡ 1)2 > > < r (2 ¡ 1)2L¡1 T = r L¡3 (2 ¡ 1)2 > > : (2r ¡ 1) r = (r1 ; r2 ; : : : ; rn ) q = (q1 ; q2 ; : : : ; qn ) Za normę wektora przyjmiemy p-normę krk = F (r; s; +) F (r; s; ¡) F (r; s; ¤) F (r; s; xor) ri qi 1; 2; : : : ; n Z tych liczb możemy utworzyć wektory nie posiada już tej wady. Okres generatora zależy od operacji. Dla m = 2L = = = à n X i=1 rip !1=p Miarą „odległości” danego rozkładu od rozkładu rónomiernego będzie wówczas wyrażenie ±(X) = k(r1 ; r2 ; : : : ; rn ) ¡ (1=n; 1=n; : : : ; 1=n)k 10 Dla określonego działania na zbiorze S tj. +; ¡; ¤; xor rozkład nowej zmiennej losowej X ¦Y będzie bliższy rozkładowi równomiernemu niż rozkłady zmiennych X i Y ±(X ¦ Y ) · minf±(X); ±(Y )g Nowy ciąg ma lepsze własności statystyczne a także większy okres. Jeżeli ciąg X1 ; X2 ; : : : ; Xn ma okres T1, a ciąg Y1 ; Y2 ; : : : ; Yn ma okres T2 i są liczbami pierwszymi to wtedy nowy ciąg liczb Xi ¦ Yj ma okres równy T1T2. Generator uniwersalny Daje jednakowe wyniki na dowolnym komputerze. Jego działanie oparte jest na wykorzystaniu kombinacji kilku generatorów. Un = Vn ¦ cn Pierwszy z nich jest generatorem Fibonacciego F (97; 33; ¦) Vi = Vi¡97 ¦ Vi¡33 Vi 2 [0; 1) działanie jest zdefiniowane następująco x ¦ y = x ¡ y; x¸y x ¦ y = x ¡ y + 1; x<y Inicjalizację generatora tj.wyznaczenie ciągu V1 ; V2 ; : : : ; V97 przeprowadzamy przy pomocy ciągu bitów (24-bitowa mantysa, 16 bitowe liczby całkowite) tj. V1 = 0:b1 b2 : : : b24 V2 = 0:b25 b26 : : : b48 Ciąg bitów generujemy przy użyciu dwóch generatorów yn = (yn¡3 yn¡2 yn¡1 ) mod 179 zn = (52zn¡1 + 1) mod 169 ½ 0; gdy yn zn mod 64 < 32 bn = bn = 1; w pozostalych przypadkach 11 Dla określonego działania na zbiorze S tj. +; ¡; ¤; xor rozkład nowej zmiennej losowej X ¦Y będzie bliższy rozkładowi równomiernemu niż rozkłady zmiennych X i Y ±(X ¦ Y ) · minf±(X); ±(Y )g Nowy ciąg ma lepsze własności statystyczne a także większy okres. Jeżeli ciąg X1 ; X2 ; : : : ; Xn ma okres T1, a ciąg Y1 ; Y2 ; : : : ; Yn ma okres T2 i są liczbami pierwszymi to wtedy nowy ciąg liczb Xi ¦ Yj ma okres równy T1T2. Generator uniwersalny Daje jednakowe wyniki na dowolnym komputerze. Jego działanie oparte jest na wykorzystaniu kombinacji kilku generatorów. Un = Vn ¦ cn Pierwszy z nich jest generatorem Fibonacciego F (97; 33; ¦) Vi = Vi¡97 ¦ Vi¡33 Vi 2 [0; 1) działanie jest zdefiniowane następująco x ¦ y = x ¡ y; x¸y x ¦ y = x ¡ y + 1; x<y Inicjalizację generatora tj.wyznaczenie ciągu V1 ; V2 ; : : : ; V97 przeprowadzamy przy pomocy ciągu bitów (24-bitowa mantysa, 16 bitowe liczby całkowite) tj. V1 = 0:b1 b2 : : : b24 V2 = 0:b25 b26 : : : b48 Ciąg bitów generujemy przy użyciu dwóch generatorów yn = (yn¡3 yn¡2 yn¡1 ) mod 179 zn = (52zn¡1 + 1) mod 169 ½ 0; gdy yn zn mod 64 < 32 bn = bn = 1; w pozostalych przypadkach 12 Generatory muszą być zainicjowane Generatory nieliniowe y1 ; y2 ; y3 2 f1; 2; : : : ; 178g Zaletą generatorów nieliniowych jest to, że ciągi generowanych przez nie liczb nie układają się na hiperpłaszczyznach tak jak w przypadku generatorów liniowych. Wykorzystuje się w nich „odwrotność modulo”: z1 2 f0; 1; : : : ; 168g Okres generatora kombinowanego: 2120. Drugi generator (cn) o rozkładzie równomiernym w (0,1) jest zdefiniowany następująco cn = cn¡1 ¦ n ¸ 2 c1 = µ 7654321 16777216 ¶ 362436 16777216 c ¦ d = c ¡ d; c¦d= c¡d+ Przykład: 5 ¢ 3 mod 7 = 1 a; b; 2 Z; Algorytm: r0 c<d = r1 = ri+1 .. . = c; d 2 [0; 1) Okres tego generatora to 224-3. Okres generatora uniwersalnego (Un): 2144 x=5 x¡1 = 3 Do znalezienia x-1 wykorzystuje się algorytm podziału Euklidesa (poszukiwania największego wspólnego podzielnika dwóch liczb) q; r 2 Z; c¸d 362436 ; 16777216 x ¢ x¡1 mod m = 1 Jeśli b 6= 0; 0 · r < jbj a b a=b¢q+r qi = ¹ ri¡1 ¡ qi ri ; r¡1 ri º 0 · ri+1 < jri j ri+1 = 0; =) gcd(a; b) = ri (gcd-greatest common divisor) 13 Generowanie x-1 algorytmem Aignera: 1) generujemy ciąg liczb: fzn+2 ; zn+1 ; zn ; : : : ; z1 g zn+2 = m; zn+1 = x; z1 = 1 zi = zi+2 ¡ qi+1 zi+1 ; 1 · i · n ¹ º zi+2 qi+1 = zi+1 i wyznaczamy wspołczynniki qi fqn+1 ; qn ; : : : ; q1 g 2) generujemy ciąg liczb fw1 ; w2 ; : : : wn+2 g w1 = 1; w2 = 0 wi = qi¡1 wi¡1 + wi¡2 ; 3 · i · n + 2 x¡1 = (¡1)n+1 wn+2 Uzyskujemy w ten sposób ciąg liczb Xi 2 f0; 1; : : : ; m ¡ 1g o rozkładzie równomiernym. Ui = Xi 2 [0; 1) m Generator Eichenauera-Hermanna Xi = (a(i + i0 ) + b)¡1 mod m; W generatorze tym kolejne elementy ciągu są niezależne od poprzednich – cecha szczególnie przydatna w obliczeniach równoległych. Dla a 2 f1; 2; : : : ; mg generator osiąga okres T=m. Aby generator osiągał maksymalny okres równy m musi być spełniony jeszcze warunek 3) jeśli x=0 to x-1=0 Generator nielinowy Eichenauera-Lehna Xi+1 = (aXi¡1 + b) mod m; i = 0; 1; : : : gdzie: m jest liczbą pierwszą i = 0; 1; : : : m2 ¡ 1 jest najmniejszą liczbą całkowitą dla której zachodzi z m2 ¡1 z2Z ´ 1 mod (z 2 ¡ bz ¡ a) 14 Generatory o dowolnym rozkładzie prawdopodobieństwa Metoda odwracania dystrybuanty Dystrybuanta określonego rozkładu prawdopodobieństwa jest funkcją F :R!R niemalejącą i prawostronnie ciągłą lim F (x) = 0 x!¡1 lim F (x) = 1 x!1 Dystrybuanta jednoznacznie definiuje rozkład prawdopodobieństwa. Związek pomiędzy dystrybuantą a gęstością prawdopodobieństwa f(x): F (x) = Z x f (y)dy ¡1 Jeśli uda nam się znaleźć F-1 to: U = F (x) ! x = F ¡1 (U ) zmienna losowa x ma rozkład o dystrybuancie F 15 U jest zmienną losową o rozkładzie równomiernym w przedziale (0,1). Nową zmienną losową będzie X =F P fX · xg = = = ¡1 Można wygenerować przy użyciu ciągu U1 ; U2 ; : : : ; Un 2 (0; 1) korzystając ze wzoru ( (U ) P fF ¡1 (U ) · xg P fU · F (x)g F (x) Xn = min k : Un · k X i=0 pi ) ; n = 1; 2; : : : Odwracanie dystrybuanty sprawia często duże trudności numeryczne. Generujemy więc ciąg liczb pseudolosowych U1 ; U2 ; : : : ; Un 2 (0; 1) który przekształcamy w ciąg X1 ; X2 ; : : : ; Xn 2 (¡1; 1) Liczby Xi mają rozkład prawdopodobeństwa o dystrybuancie F. Odwracanie dystrybuanty można wykorzystać także w przypadku rozkładów dyskretnych. Przykład - rozkład jednomianowy x 2 [0; 1] n = 1; 2; 3; : : : f (x) = xn F (y) = Z 0 y y n+1 x dx = =U n+1 n y = ((n + 1)U ) Np. ciąg zmiennych X1 ; X2 ; : : : ; Xn 1 n+1 y 2 [0; 1] o rozkładzie pk = P fX = kg; k = 0; 1; 2; : : : 16 Przykład - rozkład wykładniczy gęstość prawdopodobieństwa f (x) = e¡x ; x 2 [0; 1) Dystrybuanta F (x) = Z x Przykład - rozkład normalny N(0,1) µ ¶ y¡¹ x= p 2¾ ¡x2 f (x) = e Z F (x) = x e ¡x02 dx0 = erf (x) ¡1 0 e¡x dx0 0 F (x) = 1 ¡ e¡x = U e¡x = 1 ¡ U F ¡1 (x) = x = ¡ln(1 ¡ U ) U 2 (0; 1) ! x 2 (0; 1) 17 Szukanie funkcji odwrotnej erf(x) jest kosztowne. Częściej stosuje się metodę Boxa-Mullera: 2 +y2 ¡x f (x; y) = f (x) ¢ f (y) = e 2 x; y 2 (¡1; 1) chcemy policzyć prawdopodobieństwo p(x; y) = f (x; y)dxdy x = rcos(µ) r 2 [0; 1) y = rsin(µ) µ 2 [0; 2¼] p = f (x; y)dxdy = f (r; µ)drdµ =2 z 2 [0; 1) p(z; µ) = e¡z dzdµ = f (z)dz ¢ dµ f (z) = e¡z r 2 = x2 + y 2 2 r2 z= ! dz = rdr 2 Dostajemy rozkład wykładniczy Wprowadzamy nowe zmienne p(r; µ) = r ¢ e¡r Wprowadzamy nową zmienną drdµ Przejście z = ¡ln(1 ¡ U1 ); U1 2 (0; 1) Ponieważ µ = U2 ¢ 2¼; U2 2 (0; 1) Dla pary (U1,U2) dostajemy (x,y) z rozkładu N(0,1) p x = rcos(µ) = ¡2ln(1 ¡ U1 )cos(2¼U2 ) p y = rsin(µ) = ¡2ln(1 ¡ U1 )sin(2¼U2 ) x 2 N (0; 1) ! X 2 N (¹; ¾) X =x¢¾+¹ 18 Metoda eliminacji (von Neumann) Chcemy wygenerować ciąg zmiennych losowych o gęstości prawdopodobieństwa f w przedziale [a,b]. Wartość f jest w przedziale [a,b] ograniczona od góry przez stałą d. Sposób otrzymania ciągu zmiennych losowych o rozkładzie f(x) jest następujący: 1) Losujemy dwie zmienne o rozkładzie równomiernym U1 2 [a; b] U2 2 [0; d] 2) jeżeli U2 · f (U1 ) ) X = U1 3) gdy powyższy warunek nie jest spełniony wówczas odrzucamy parę U1, U2 4) wykonujemy czynności 1-3 aż do uzyskania odpowiednio licznego ciągu Wygenerowana zmienna losowa X ma rozkład prawdopodobieństwa f. 19 Generowanie ciągu liczb pseudolosowych o zadanym rozkładzie algorytmem Metropolisa Modyfikujemy metodę eliminacji. W standardowej postaci jest ona mało wydajna – bo nierzadko odrzucamy większość wyników. Dzięki algorytmowi Metropolisa nie odrzucamy żadnego. Akceptację nowego położenia (nowej liczby w ciągu) dokonujemy zgodnie z formułą czyli: h(xi¡1 ; xi ) = min(1; f (xi ) ) f (xi¡1 ) 1) Jeśli f(xi) > f(xi-1) to nowe położenie akceptujemy zawsze. 2) W przeciwnym wypadku akceptacja następuje z prawdopodobieństwem f(xi)/f(xi-1). Jeśli nie akceptujemy nowego punktu to zatwierdzamy stary (każdy krok generuje nowy element ciągu). Uwaga: w naszym przykładzie aby zachodził warunek pij=pji xi+1 xnew = xi + (2 ¢ U (0; 1) ¡ 1) 8 () xnew < 0 < xi xi () xnew > 0 u 2 U (0; 1) > h = : xnew () xnew > 0 u 2 U (0; 1) < h 20 Superpozycja rozkładów Naszym zadaniem jest uzyskanie ciągu liczb pseudolosowych o gęstości f(x), którą możemy wyrazić w postaci f (x) = Z 1 gt (x)h(t)dt oraz gdzie: gt(x) oraz h(t ) są również gęstościami prawdopodobieństwa – funkcje znane. Rozkład prawdopodobieństwa f(x) nazywamy rozkładem złożonym. Algorytm generowania liczb o rozkładzie f(x) jest następujący: 1) generujemy zmienną T o rozkładzie h 2) dla wartości t zmiennej losowej T generujemy zmienną losową X dla rozkładu gęstości gt(x) W praktyce całkę często zastępuje się sumą f (x) = pi gi (x) = i=1 pi ¸ 0; K X i K X i=1 pi = 1 pi = Z f (x)dx Ai ¡1 1 X Przedział [a,b] w którym generujemy ciąg zmiennych z rozkładem f(x) dzielimy na sumę K rozłącznych podprzedziałów. W każdym z nich (Ai) wyznaczamy pi gi (x) gi (x) = 1 Ai f (x) pi gdzie: 1Ai jest funkcją przynależności do podzbioru A i. Algorytm generacji ciagu zmiennej X jest wówczas następujący: 1) Losujemy zmienną losową I 2 f1; 2; : : : ; Kg 2) Dla wygenerowanej wartości i zmiennej I generujemy X z rozkładem gęstości gi (x) = 1 Ai f (x) pi Dla dostatecznie wąskich przedziałów można h(t) przybliżyć wielomianem niskiego stopnia. 21 Przykład – rozkłady o gęstościach wielomianowych M X cn ¸ 0 f (x) = cn xn n=1 x 2 [0; 1] Z 1 f (x)dx = 1 = 0 M X cn n+1 n=1 Przykład – rozkład Beta Eulera 1 xp¡1 (1 ¡ x)q¡1 B(p; q) f (x; p; q) = x 2 [0; 1] B(p; q) = Algorytm generowania zmiennej losowej: 1. Generujemy indeks k 2 f1; 2; 3; : : : ; M g z rozkładem prawodopodobieństwa cn P fk = ng = n+1 2. Wylosować zmienną losową X o rozkładzie fn (x) = (n + 1)xn Zmienna X ma zadany rozkład wielomianowy. ¡(x) = Z p; q > 0 ¡(p)¡(q) ¡(p + q) 1 tx¡1 e¡t dt 0 Jeśli dwie zmienne g1 i g2 mają rozkłady g1 2 ¡(p) g2 2 ¡(q) f¡ (x; p) = xp¡1 e¡x =¡(p) To zmienna Z: g1 Z= g1 + g 2 ma rozkład f(x;p,q) 22 Rozkład dyskretny b) Metoda równomiernego rozbicia przedziału a) metoda odwracania dystrybuanty Zakładamy że zmienna losowa X przyjmuje określone wartości z pewnym prawdopodobieństwem W rozkładzie dyskretnym mamy określone prawdopodobieństwo wylosowania danej liczby P fX = kg = pk ; P fX = kg = pk ; Przedział (0,1) dzielimy na K+1 podprzedziałów o jednakowej długości µ k = 0; 1; 2; : : : ; M wraz z warunkiem M X pk = 1 i¡1 i ; K +1 K+1 ¶ ; [(K + 1)U + 1] Algorytm generowania ciągu zmiennych o rozkładzie dyskretnym: Konstruujemy dwa ciągi 1) X=0, S=p0 2) Losujemy zmienną U o rozkładzie równomiernym z przedziału [0,1] 3) Sprawdzamy warunek qi = i X pj ; i = 0; 1; : : : ; K ½ ¾ j=0 i gi = max j : qj < K +1 U >S a)Iteracyjnie obliczamy S = S + px dopóki warunek jest spełniony b) W przeciwym wypadku akceptujemy X 4) Kroki 1-3 wykonujemy aż do uzyskania odpowiednio licznego ciągu X1,X2,X3,... i = 1; 2; : : : ; K + 1 Zmienna U wpada do przedziału k=0 X = X + 1; k = 0; 1; 2; : : : ; K ; q¡1 = 0 i = 1; 2; : : : ; K + 1 23 Algorytm Generatory o rozkładach wielowymiarowych 1) Generujemy zmienną U o rozkładzie równomiernym w (0,1) Zadanie można sformułować następująco: Należy wygenerować ciąg wielowymiarowych zmiennych losowych 2) Obliczamy X = [(K + 1)U + 1] X = gX + 1 3) Iteracyjnie obliczamy X =X ¡1 dopóki jest spełniony warunek qX¡1 > U 4) Jeśli qX¡1 < U to akceptujemy X 5) Kroki 1-4 powtarzamy aż do uzyskania odpowiednio licznego ciągu X1,X2,... Powyższy algorytm zapewnia to, że warunek qX¡1 > U będzie sprawdzany conajwyżej dwukrotnie. X = (X1 ; X2; : : : ; Xk ) których rozkład prawdopodobieństwa ma gęstość f (x1 ; x2 ; : : : ; xk ) Do generacji takiego ciągu można stosować metodę eliminacji czy superpozycji rozkładów. Przy użyciu metody elminacji w najprostszej postaci pojawiają się problemy. Przykład. Określić prawdopodobieństwo akceptacji wielowymiarowej zmiennej losowej o rozkładzie równomiernym na kuli jednostkowej (Kk(0,1)) . Algorytm. Losujemy m zmiennych niezależnych o rozkładzie równomiernym w (-1,1) i konstruujemy zmienną wielowymiarową U = (U1 ; U2 ; : : : ; Uk ) Zmienną akceptujemy jeśli U k2 · 1 kU 24 Prawdopodobieństwo akceptacji zmiennej jest równe ilorazowi objętości kuli i opisanej na niej kostki [-1,1]k Rozkład równomierny na sferze Jeżeli k-wymiarowa zmienna losowa X = (X1 ; X2; : : : ; Xk ) ma rozkład równomierny na sferze to Średnia liczba wylosowanych punktów N m potrzebnych do realizacji jednej zmiennej wynosi Nm 8 9 k < = X Sk = (x1 ; : : : ; xk ) : x2j = 1 : ; j=1 1 = pm m pk Nk 2 7.854 x 10-1 1.27 5 1.645 x 10-1 6.08 10 2.490 x 10-3 4.015 x 102 20 2.461 x 10-8 4.063 x 107 50 1.537 x 10-28 6.507 x 1027 Modyfikacją usprawniającą powyższy algorytm jest podział kostki na rozłączne podobszary i przeprowadzenia losowania w każdym z nich z osobna. k-wymiarowa zmienna X ma rozkład sferycznie konturowany jeżeli jej gęstość prawdopodobieństwa gX (x1 ; x2 ; : : : ; xk ) = f (kxk) zależy tylko od kxk2 = k X x2j j=1 25 Wniosek: mając do dyspozycji odpowiedni rozkład sferycznie konturowany można go użyć do generowania zmiennej losowej o rozkładzie równomiernym na powierzchnii kuli. Przykład. m-wymiarowy rozkład normalny opisuje gęstość µ ¶ 1 1 2 gX (x1 ; : : : ; xk ) = exp ¡ k~ x k 2 (2¼)k=2 Algorytm generowania rozkładu równomiernego na sferze w m wymiarach: 1) Generujemy m-wymiarową zmienną losową X o rozkładzie normalnym 2) Obliczamy x X = xk kx Rozkład nowej zmiennej X będzie równomierny na sferze Sk. Rozkład równomierny na sferze Sk i Sk+1 Tw. Jeżeli zmienna X = (x1 ; x2 ; : : : ; xk ) ma rozkład równomierny na k-wymiarowej sferze S k, R jest zmienną o rozkładzie h(r) = ( k¡1 pr ; 1¡r 2 0 0·r·1 r2 = [0; 1] a s jest losowym znakiem P fs = 1g = P fs = ¡1g = 1 2 to (k+1)-wymiarowa zmienna losowa p Z = (Rx1 ; Rx2 ; : : : ; Rxk ; s 1 ¡ R2 ) ma rozkład równomierny na (k+1) wymiarowej sferze. Rozkład równomierny w kuli Kk Długość wektora wodzącego R zmiennej X jest także zmienną losową i ma ona rozkład h(r) = (2k ¡ 1)rk¡1 ; 0·r·1 26 Testowanie generatorów liczb pseudolosowych Wystarczy więc wygenerować punkt Z = (Z1 ; Z2 ; : : : ; Zk ) leżący na sferze Sk a następnie obliczyć X = (RZ1 ; RZ2 ; : : : ; RZk ) Ponieważ wszystkie generatory o dowolnym rozkładzie bazują na wykorzystaniu ciągów liczb losowych o rozkładzie równomiernym więc istotne jest badanie tylko generatorów liczb o takim właśnie rozkładzie. Testowanie generatora jest procesem złożonym: Zmiena X leży wewnątrz kuli jednostkowej Kk i ma w tym obszarze rozkład równomierny. 1) Dla ustalonej liczby n, generujemy n kolejny ch liczb startując od losowo wybranej liczby początkowej Po co rozkład w kuli Kk(0,1)? 2)Obliczamy wartość statystyki testowej (T) Pewne obiekty wielowymiarowe możemy przedstawić w postaci prostych transformacji liniowych współrzędnych. 3)Obliczamy F(T) czyli dystrybuantę statystyki T, gdy weryfikowana hipoteza jest prawdziwa Taką transformację reprezentuje macierz ~ = AX ~ Z 4) Kroki 1-3 powtarzamy N-krotnie obliczając statystyki: T1,T2,...,TN. Jeśli weryfikowana hipoteza jest prawdziwa to F (T1 ); F (T2 ); F (T3 ); : : : ; F (TN ) Przykład – hiperelipsoidę w R otrzymamy transformując Kk(0,1). k jest ciągiem zmiennych niezależnych o rozkładzie równomiernym. Testowanie generatora kończy się sprawdzeniem tej hipotezy. 27 Testy zgodności z zadanym rozkładem Statystyką testu jest Â2k¡1 = Test chi-kwadrat k X (ni ¡ npi )2 npi i=1 Jest najczęściej stosowanym testem. Badamy w nim hipotezę że generowana zmienna losowa X ma rozkład prawdopodobieństwa o dystrybuancie F. Dla dużego n statystyka ta ma rozkład 2 o (k-1) stopniach swobody. Jeżeli Możemy tak dobrać szerokości przedziałów aby otrzymać zależność F (a) = 0 F (b) = 1 pi = to możemy dokonać następującego podziału zbioru wartości zmiennej X wówczas statystyka przyjmuje prostszą postać a < a1 < a2 < : : : < ak = b pi = P fai¡1 < X · ai g; i = 1; 2; : : : Generujemy n liczb 1 k k Â2k¡1 kX 2 = n ¡n n i=1 i X1 ; X2 ; : : : ; Xn Sprawdzamy ile z nich spełnia warunek ai¡1 < X · ai Ich liczbę oznaczamy ni. 28 Test OPSO (overlapping-pairs-sparse-occupancy) Testy zgodności rozkładów statystyk Jeżeli wygenerowany ciąg zmiennych losowych Generujemy ciąg liczb X1 ; X2 ; : : : ; Xn X1 ; X2 ; : : : ; Xn Jeśli z każdej weźmiemy k bitów to możemy utworzyć ciąg liczb całkowitych I1 ; I2 ; : : : ; In Jest ciągiem zmiennych niezależnych to możemy z elementów tego ciągu utworzyć wektory (X1 ; X2 ; : : : ; Xm ); (Xm+1 ; Xm+2 ; : : : ; X2m ); : : : które też będą zmiennymi losowymi ale o rozkładzie równomiernym w kostce jednostkowej (0,1) m. z zakresu {0,1,...,2 -1}. r Następnie tworzymy ciąg kolejnych nakładających się par Możemy zatem zdefiniować pewną funkcję y = h(x1 ; x2 ; : : : ; xm ) (I1 ; I2 ); (I2 ; I3 ); : : : ; (In¡1 ; In ) Jeśli przez Y oznaczymy liczbę takich par f(i; j) : i; j = 0; 1; : : : ; 2b ¡ 1g które nie pojawiły się w ciągu (I i,Ii+1), to ta zmienna ma rozkład normalny N() – oczywiście dla odpowiednio dużego n. Przykładowe parametry testu OPSO b n 10 11 12 221 222 223 141909 1542998 567639 290.26 638.75 580.80 określoną w kostce jednostkowej. W ten sposób tworzymy ciąg nowych zmiennych losowych Yj j = = h(X(j¡1)m+1 ; X(j¡1)m+2 ; : : : ; Xjm ) 1; 2; : : : o jednakowym rozkładzie i dystrybuancie G(y) = P fYj · yg Testowanie generatora polega na sprawdzeniu hipotezy że ciąg Y1,Y2,... jest próbką z populacji o dystrybuancie G. 29 Testy oparte na statystykach pozycyjnych Test sum Definiujemy funkcję Dla wektorów losowych w kostce (0,1) definiujemy funkcje m y = x1 + x2 + : : : + xm u = maxfx1 ; x2 ; : : : ; xm g Wygenerowana zmienna losowa Y ma rozkład o gęstości v = minfx1 ; x2 ; : : : ; xm g Dla m=2 r = u¡v g2 (y) = co generuje nowe zmienne U; V; R Nowe zmienne mają następujące rozkłady m P fUj · ug = u ; 0·u·1 P fVj · vg = 1 ¡ (1 ¡ v)m ; 0·v·1 P fRj · rg = mrm¡1 ¡ (m ¡ 1)rm ; 0 · r · 1 Testowanie generatora polega na sprawdzeniu hipotezy o zgodności rozkładów zmiennych U,V,R z powyższym. Testy przeprowadza się dla niewielkich wartości m=2,3,...,10. ½ y 2¡y 0·y·1 1<y·2 Dla m=3 g3 (y) = 8 < : y2 2 1 2 2 (y 1 2 2 (y 2 ¡ 3(y ¡ 1) ) ¡ 3((y ¡ 1)2 + 3(y ¡ 2)2 )) 0·y·1 1<y·2 2<y·3 Testowanie generatora polega na weryfikacji hipotezy, że zmienna losowa Y ma rozkład zgodny z gm(y). Zazwyczaj m nie przekracza 5. 30