Podstawy symulacji komputerowej Wykład 3 Generatory liczb losowych Wojciech Kordecki wojciech.kordecki@pwsz-legnica.eu Państwowa Wyższa Szkoła Zawodowa im. Witelona w Legnicy Wydział Nauk Technicznych i Ekonomicznych Zakład Informatyki Semestr letni 2018/19 1 / 31
Liczby losowe Idee i przykłady Realizacje Właściwie: liczby pseudolosowe. Ciągi liczby generowanych programowo, deterministycznie, zależnych od początkowego fragmentu ciągu, który może być losowy. Przykład. Generator z kompilatora Turbo Pascal 4.0-5.5. Niech N będzie zmienną losową przyjmującą wartości całkowite k, k = 0, 1,..., m 1 z takimi samymi prawdopodobieństwami: Pr (N = i) = 1 m. Liczba x 1 jest losowa, a kolejne liczby pseudolosowe wg wzoru: x k+1 = (ax k + c) mod m, gdzie a = 134775813, c = 1, m = 2 32. 2 / 31
Okres generatora Idee i przykłady Realizacje Okresem generatora liczb pseudolosowych x i jest najmniejsza liczba k taka, że x i+k = x i począwszy od i m dla pewnego ustalonego m. 3 / 31
Generatory liniowe Idee i przykłady Realizacje x n+1 = (a 1 x n + a 2 x n 1 + + a k x n k+1 + c) mod m. Typowo k = 1. Wtedy x k+1 = (ax k + c) mod m. Jeśli c = 0, to generator multiplikatywny. Jeśli c 0, generator mieszany. Generatory takie są okresowe. 4 / 31
Idea losowości generatora Idee i przykłady Realizacje Ciąg x 1, x 2,..., x n 1, x n = x 1, ma okres n. Jeżeli wylosujemy indeks i, to krótki odcinek długości j, tzn. x i, x i+1,..., x j 1, można uważać za prawdziwy ciąg losowy. Ciąg można uważać za losowy, gdy testy statystyczne nie odrzucają hipotezy o niezależności. 5 / 31
Generatory multiplikatywne Idee i przykłady Realizacje Okres generatora multiplikatywnego nie przekracza liczby m 1. Przykład. x n+1 = 11x n mod 7 daje ciąg 4, 2, 1 lub 5, 6, 3 w zależności od wyboru x 1. daje ciąg o okresie 10. x n+1 = 7x n mod 11 Łatwy w implementacji i szybki jest generator dla m = 2 s, gdzie s jest długością słowa. 6 / 31
Generatory mieszane Idee i przykłady Realizacje Przykład. a c m Źródło 69069 1 2 32 Marsaglia (1972) 40692 0 2 31 249 L Ecuyer (1988) 68909602460261 0 2 48 Fishman (1990) 7 / 31
Generator ZX Spectrum Idee i przykłady Realizacje Generowanie wg wzoru: x n = 75(x n+1 1) 1 mod 2 16 + 1. Liczba 65537 = 2 16 + 1 liczba pierwsza, liczba Fermata. 8 / 31
Generator Scilab Idee i przykłady Realizacje 9 / 31
Generator Marsaglia Idee i przykłady Realizacje 10 / 31
Generator ZX Spectrum (1) Idee i przykłady Realizacje 11 / 31
Generator ZX Spectrum (2) Idee i przykłady Realizacje 12 / 31
Proste generatory Fibonacciego Liczby Fibonacciego: f 0 = 1, f 1 = 1, f n = f n 1 + f n 2 dla n > 2. Generator Fibonacciego: x n = (x n 1 + x n 2 ) mod m spełnia testy równomierności, ale nie spełnia testów niezależności. Wymaga dla inicjacji dwóch liczb losowych x 1 i x 2. 13 / 31
Uogólnione generatory Fibonacciego x n = (x n r + x n s ) mod m, n r, r > s 1. Do inicjacji potrzeba r prawdziwych liczb losowych. Jeszcze ogólniej x n = (x n r x n s ) mod m, n r, r > s 1, gdzie jest pewną operacją. Taki generator jest oznaczamy F (r, s, ). Jeśli m = 2 k, to maksymalny okres generatorów F (r, s, +) i F (r, s, ) jest równy (2 r 1) 2 k 1. Przykład. Generatory F (17, 5, +) i F (17, 5, ) dla m = 2 32 dają ciągi o okresie ( 2 17 1 ) 2 29 = 70368207306752 7.03 10 13. Rok ma 1892160000000 1.89 10 12 milisekund. 14 / 31
Generowanie rozkładu jednostajnego Jeśli x n są liczbami losowymi w zakresie 0,..., m 1, to r n = x n /m sa liczbami losowymi o rozkładzie jednostajnym na odcinku [0, 1]. Uwaga. r n przyjmuje wartości 0 r n < 1, więc pisząc program trzeba uważać, bo może być r n = 0, choć teoretycznie Pr (R = 0) = 0. 15 / 31
Generator MZT G. Marsaglia, A. Zaman, W.W. Tsang, Toward a universal random number generator, Statistics & Probability Letters, 8(1990). Generator MZT ma okres 2 144 = 22300745198530623141535718272648361505980416 2.23 10 43. 16 / 31
Generator MZT G. Marsaglia, A. Zaman, W.W. Tsang, Toward a universal random number generator, Statistics & Probability Letters, 8(1990). Generator MZT ma okres 2 144 = 22300745198530623141535718272648361505980416 2.23 10 43. Pytanie. Ile trzeba czasu, aby przez sieć o przepustowości 10 Gb/s przesłać cały okres w postaci liczb typu float (czterobajtowych)? 16 / 31
Generator MZT G. Marsaglia, A. Zaman, W.W. Tsang, Toward a universal random number generator, Statistics & Probability Letters, 8(1990). Generator MZT ma okres 2 144 = 22300745198530623141535718272648361505980416 2.23 10 43. Pytanie. Ile trzeba czasu, aby przez sieć o przepustowości 10 Gb/s przesłać cały okres w postaci liczb typu float (czterobajtowych)? Odpowiedź. Ponad lat. 2.2 10 31 = 22000000000000000000000000000000 16 / 31
Generator MZT budowa Generator MZT zbudowany z dwóch generatorów: V n i c n. Generator MZT jest postaci: U n = V n c n, gdzie { x y dla x y, x y = x y + 1 dla x < y. Uwaga. Jeśli x, y [0, 1), to również x y [0, 1). 17 / 31
Generator MZT V n Generator V n jest typu F (97, 33, ), gdzie { x y dla x y, x y = x y + 1 dla x < y. Inicjacja generatora: wyznaczenie liczb V 1, V 2,..., V 97 za pomoca ciagu bitów (b n ) takich, że V 1 = 0.b 1 b 2... b 24, V 2 = 0.b 25 b 26... b 48, itd. y n = (y n 3 y n 2 y n 1 ) mod 179, z n = (52z n 1 + 1) mod 169, { 0, jeśli y n z n mod 64 < 32, b n = 1, w przeciwnym przypadku. Potrzebne są liczby y 1, y 2, y 3 {1, 2,..., 178} nie wszystkie równe 1 oraz z 1 {0, 1,..., 168}. Okres tego generatora 2 120. 18 / 31
Generator MZT c n c n = c n 1 (7654321/16777216), n 2 oraz c 1 = 362436/16777216, gdzie { c d dla c d, c d = c d + (16777213/16777216) dla c < d. Okres tego generatora 2 24 3. 19 / 31
Implementacja generatora MZT Generator wymaga inicjacji czterema liczbami. Można tu użyć standardowego generatora liczb losowych inicjowanego przez zegar systemowy. Inna propozycja inicjacji Anderson (1990): X 0 = r + 100 (m 1 + 12 (d 1 + 31 (g + 24 (min + 60s)))), gdzie r ostatnie dwie cyfry roku, m - miesiąc (od 1 do 12), d dzień (od 1 do 31), g godzina (od 0 do 23), min minuta (od 0 do 59), s sekunda (od 0 do 59). Liczby produkowane przez MZT są identyczne we wszystkich komputerach, jeśli liczby całkowite są co najmniej 16 bitowe, a mantysa liczb zmiennoprzecinkowych jest co najmniej 24 bitowa. 20 / 31
Funkcja rnd mzt w Pascalu var v:array[1..97] of double; cd,cm,cn,pom:double; ip,jp:0..97; function rnd_mzt:double; var pom:double; begin pom:=v[ip]-v[jp]; if pom<0 then pom:=pom+1; v[ip]:=pom; dec(ip);if ip=0 then ip:=97; dec(jp);if jp=0 then jp:=97; cn:=cn-cd; if cn<0 then cn:=cn+cm; pom:=pom-cn; if pom<0 then pom:=pom+1; rnd_mzt:=pom; end; 21 / 31
Test MZT Generujemy zmienne R i o rozkładzie jednostajnym na [0, 1]. Wiadomo, że E R i = 1/2 oraz D 2 R i = 1/12, σ = D 2 R i = 1/12. Obliczamy r = n i=1 1 n r i, s = n i=1 1 n r 2 i ( r) 2. Porównujemy r z E R i = 1/2 oraz s z σ = D 2 R i = 1/12 dla n = 100, n = 1000, n = 10000, n = 100000 i n = 1000000. 22 / 31
Odwracanie dystrybuanty Dystrybuanta rozkładu F (x) zmiennej losowej X określona jest wzorem: F (x) = Pr (X < x). Jeśli y = F (x) jest ściśle rosnąca, to istnieje funkcja odwrotna F 1 (y) = x. Twierdzenie. Jeśli R ma rozkład jednostajny na odcinku [0, 1], to F 1 (R) jest zmienną losową o dystrybuancie F (x). Uwaga. Jeśli R ma rozkład jednostajny na odcinku [0, 1], to 1 R ma również rozkład jednostajny na [0, 1]. 23 / 31
Rozkład normalny Problem: dystrybuanta Φ (x) rozkładu normalnego N (m, σ) nie jest funkcja elementarną, więc i funkcja do niej odwrotna, też nie jest funkcja elementarną. Trzeba przybliżyć Φ 1 (x) funkcjami prostszymi. Z centralnego twierdzenia granicznego, jeśli R i sa niezależnymi zmiennymi losowymi o rozkładzie jednostajnym na odcinku [0, 1], to X = R 1 + R 2 + + R 12 6 ma w przybliżeniu rozkład normalny N (0, 1). Jednakże Pr ( X > 6) = 0, chociaż jest tylko Pr ( X > 6) 0. Wniosek. Taki generator nie nadaje się do symulacji zdarzeń rzadkich niepoprawne ogony rozkładu. 24 / 31
Przykład z rozkładem normalnym do pierwszej porażki Jeśli X N (m, σ), to Pr ( X m > 3σ) < 0.01. Zbadajmy, ile razy trzeba średnio generować zmienną losową X N (3, 1), aby otrzymać realizację ujemną. Wiadomo, że p = Pr (X > 0) 0.99865010196837, q = Pr (X < 0) 0.0013498980316301, gdzie q = 1 p. Jeśli Y jest liczbą generacji przed pierwsza generacją ujemną (porażką), to wiadomo, że µ = E Y = p/q oraz D 2 Y = p/q 2, czyli σ Y = p/q. W tym przykładzie µ 739.7967 oraz σ Y 740.2965. 25 / 31
Do pierwszej porażki Scilab Obliczamy ȳ = n i=1 1 n y i. Porównujemy ȳ z µ 739.7967 dla liczby powtórzeń n =rep. s=0; for j=1:rep i=1; x=0; while x>=0 x=grand(1,1,"nor",3,1); i=i+1; end; s=s+x; end; disp(s/rep) 26 / 31
Rozkład wykładniczy zmiennej losowej X Gęstość rozkładu wykładniczego z parametrem λ > 0: Dystrybuanta: Odwracamy dystrybuantę: f (x) = λe λx. F (x) = Pr (X < x) = 1 e λx. y = 1 e λx, czyli skąd więc λx = ln (1 y), ln (1 y) x = λ X = ln R λ. 27 / 31
Parametry rozkładu wykładniczego Zmienna losowa X ma dystrybuantę Parametry: F (x) = Pr (X < x) = 1 e λx. E X = 1 λ, D 2 X = 1 λ 2, σ = 1 λ. 28 / 31
Rozkład Poissona zmiennej losowej X Załóżmy, że kolejne zgłoszenia przybywają losowo i niezależnie od siebie tak, że odstępy T k między zgłoszeniami o numerach k i k + 1 mają rozkład wykładniczy z parametrem λ. T 0 = 0. Pr (T 1 > 0) = e λt Jest prawdopodobieństwem,że do momentu t nie było żadnego zgłoszenia. Prawdopodobieństwo, że do momentu t pojawiło się dokładnie k zgłoszeń jest równe λt (λt)k Pr (X = k) = e. k! Zmienna losowa X ma rozkład Poissona z parametrem λt. 29 / 31
Prosty system obsługi opis W poniższym przykładzie potrzebne są rozkłady inne niż jednostajny na [0, 1]. Przykład. Do systemu obsługi przybywają zgłoszenia, przy czym czasy między zgłoszeniami są niezależne od siebie i mają rozkład wykładniczy z tą sama średnią τ. System na k kanałów obsługi, przy czym obsługa w każdym kanale ma rozkład normalny N, σ, m σ (m jest dużo większe od σ). Do każdego kanału tworzy się kolejka typu FIFO, przy czym zgłoszenie wybiera kanał z najkrótszą kolejką długości n i, i = 1, 2,..., k (bez możliwości przejścia do innej kolejki). Kolejki mają wspólnie ograniczona długość: n i n max. Jeśli długość kolejki w każdym kanale wynosi n max, to zgłoszenie jest tracone. 30 / 31
Prosty system obsługi założenia i zadanie Założenia: Koszt budowy i utrzymania każdego kanału jest znany i wynosi c i. Parametr τ jest znany i nie mamy na niego wpływu. Znany jest też koszt zmniejszenia parametru m. Parametr σ jest znany i niezmienny. Znany jest koszt rezygnacji z utraty zgłoszenia i zysk z obsługi zgłoszenia. Zadanie: Dobrać parametry tak, aby zmaksymalizować średni zysk. 31 / 31