Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki pl u s. p l Kierunek: Informatyka .a Metody Komputerowe w Technice w .d zy sz la Temat: Generatory liczb losowych – algorytmy z wykorzystaniem S-funkcji w programie MATLAB w Autor: Dawid Najgiebauer w Informatyka w elektroenergetyce, rok 2006/07, sem. VII, (Śr. g. 12.50) O P O L E Prowadzący: dr inż. R. Stanisławski Ocena: ................................................ Uwagi: ................................................. 2 0 0 6 Spisy 2 1. Spisy 1.1. Spis treści 5. 1.2. Spis tabel..................................................................................................................................................... 2 1.3. Spis równań ................................................................................................................................................ 3 1.4. Spis rysunków............................................................................................................................................. 3 1.5. Spis zawartości załączonej płyty CD .......................................................................................................... 4 s. p l Opis tematu ............................................................................................................................................................ 5 2.1. Założenia .................................................................................................................................................... 5 2.2. Znaczenie liczb losowych ........................................................................................................................... 5 Opis badanych generatorów liczb losowych.......................................................................................................... 6 3.1. Generator liniowy i afiniczny ..................................................................................................................... 6 3.2. Generator inwersyjny.................................................................................................................................. 7 3.3. Generator reszt potęgowych ....................................................................................................................... 8 3.4. Metoda eliminacji von Neumanna .............................................................................................................. 9 pl u 4. Spis treści.................................................................................................................................................... 2 Realizacja generatorów liczb losowych w module SIMULINK programu MATLAB przy użyciu S-Funkcji ... 13 .a 3. 1.1. 4.1. Generator afiniczny .................................................................................................................................. 13 4.2. Generator inwersyjny................................................................................................................................ 14 4.3. Generator reszt potęgowych ..................................................................................................................... 15 4.4. Metoda eliminacji von Neumanna ............................................................................................................ 16 zy sz la 2. Spisy ...................................................................................................................................................................... 2 Badanie i testowanie generatorów ....................................................................................................................... 19 5.1. Generator afiniczny .................................................................................................................................. 19 5.2. Generator inwersyjny................................................................................................................................ 20 5.3. Generator reszt potęgowych ..................................................................................................................... 22 5.4. Metoda eliminacji von Neumanna ............................................................................................................ 24 .d 1. Wnioski z testowania generatorów ...................................................................................................................... 27 7. Bibliografia .......................................................................................................................................................... 28 w w 6. w 1.2. Spis tabel Tabela 3.1. Przykładowy wynik działania generatora afinicznego z parametrami a=5, b=1 i M=16. ......................... 7 Tabela 3.2. Przykładowy ciąg generatora inwersyjnego dla a=5, b=1 i M=17............................................................ 8 Tabela 3.3. Przykładowy ciąg uzyskany z generatora BBS, dla p=11 i q=11 oraz s=5. ............................................... 9 Tabela 3.4. Przykładowy ciąg po zastosowaniu filtra von Neumanna......................................................................... 11 Tabela 4.1. Zdefiniowane funkcje rozkładu generatora Neumanna............................................................................. 17 Tabela 5.1. Tabela zależności długości okresu generatora inwersyjnego od parametrów równania.......................... 21 Spisy 3 1.3. Spis równań Równanie 3.1. Równanie generatora liniowego. ........................................................................................................... 6 Równanie 3.2. Równanie generatora afinicznego. ........................................................................................................ 6 Równanie 3.3. Równanie generatora inwersyjnego. ..................................................................................................... 7 Równanie 3.4. Równanie inwersyjnego dzielenia modulo............................................................................................. 7 Równanie 3.5. Wzór generatora BBS. ........................................................................................................................... 8 Równanie 3.6. Uogólniony wzór generatora potęgowego reszt. ................................................................................... 9 1.4. Spis rysunków s. p l Rysunek 3.1. Porównanie histogramu otrzymanych liczb losowych z wykresem zadanej funkcji w zależności od liczby losowań........................................................................................................................................................................ 10 Rysunek 3.2. Histogram rozkładu liczb losowych uzyskanych algorytmem Neumanna. ............................................. 12 Rysunek 4.1. Wygląd okna "S-Funtion Builder" oraz jego parametry. ....................................................................... 13 Rysunek 4.2. Schemat oraz przykładowe parametry i wyniki dla generatora afinicznego.......................................... 14 pl u Rysunek 4.3. Schemat oraz przykładowe wyniki generatora inwersyjnego................................................................. 15 Rysunek 4.4. Schemat oraz wyniki symulacji generatora reszt potęgowych. .............................................................. 16 Rysunek 4.5. Schemat i przykładowe wyniki wykorzystywany w badaniu generatora Neumanna. ............................. 18 .a Rysunek 5.1. Wykres zależności kolejnych liczb ciągu generatora afinicznego dla a=5, b=1, M=16........................ 19 Rysunek 5.2. Wykres zależności długości okresu od parametrów a i b przy stałym M=16......................................... 19 Rysunek 5.3. Histogram liczb uzyskanych z generatora afinicznego przy parametrach a=5, b=1, M=16................. 20 zy sz la Rysunek 5.4. Histogram liczb uzyskanych z generatora afinicznego przy parametrach a=3, b-3, M=16 (nie maksymalny okres)....................................................................................................................................................... 20 Rysunek 5.5. Wykres zależności kolejnych liczb pseudolosowego ciągu dla generatora inwersyjnego przy parametrach a=3, b=7 i M=17. .................................................................................................................................. 21 Rysunek 5.6. Wykres zależności długości okresu od parametrów generatora inwersyjnego. ..................................... 21 Rysunek 5.7. Histogram ciągu pseudolosowego uzyskanego generatorem inwersyjnym przy parametrach a=3, b=4, M=17. .......................................................................................................................................................................... 22 .d Rysunek 5.8. Histogram ciągu pseudolosowego uzyskanego generatorem inwersyjnym przy parametrach a=3, b=5, M=17 (nie maksymalny okres)..................................................................................................................................... 22 Rysunek 5.9. Histogram liczb ciągu pseudolosowego uzyskanego z generatora potęgowego reszt przy parametrach p=11, q=11, s=25 oraz w=2, przy analizie ostatniej cyfry dziesiętnej........................................................................ 23 w Rysunek 5.10. Histogram liczb ciągu pseudolosowego uzyskanego z generatora potęgowego reszt przy parametrach p=11, q=11, s=25 oraz w=2, przy analizie reszt z dzielenia przez 4. ......................................................................... 23 w Rysunek 5.11. Histogram liczb ciągu pseudolosowego uzyskanego z generatora potęgowego reszt przy parametrach p=307, q=311, s=25 oraz w=2, przy analizie ostatniej cyfry dziesiętnej.................................................................... 23 w Rysunek 5.12. Zależność kolejnych liczb pseudolosowych w generatorze potęgowym reszt przy parametrach p=307, q=311, s=25 oraz w=2, przy analizie ostatniego bitu (reszta z dzielenia przez 2)...................................................... 24 Rysunek 5.13. Histogram otrzymanych wyników generatora potęgowego reszt przy parametrach p=307, q=311, s=25 oraz w=2, przy analizie ostatniego bitu (reszta z dzielenia przez 2). ................................................................. 24 Rysunek 5.14. Wykres kolejnych liczb pseudolosowych uzyskiwanych po zastosowaniu filtra Neumanna................. 25 Rysunek 5.15. Histogram otrzymanych liczb pseudolosowych w wyniku zastosowania filtru von Neumanna dla 40 liczb wyjściowych......................................................................................................................................................... 25 Rysunek 5.16. Histogram otrzymanych liczb pseudolosowych w wyniku zastosowania filtru von Neumanna dla 10 000 liczb wyjściowych............................................................................................................................................. 26 Spisy 4 1.5. Spis zawartości załączonej płyty CD Katalog/plik docs\Generatory liczb losowych.doc Opis docs\Generatory liczb losowych.pdf Dokumentacja projektu w formacie Adobe Acrobat (PDF) matlab\inwersyjny.mdl Dokument modułu SIMULINK programu MATLAB 6.5 R13 zawierający wykonanie generatora inwersyjnego (p. 4.2) matlab\liniowy.mdl Dokument modułu SIMULINK programu MATLAB 6.5 R13 zawierający wykonanie generatora afinicznego (p. 4.1) matlab\neumann.mdl Dokument modułu SIMULINK programu MATLAB 6.5 R13 zawierający wykonanie generatora z wykorzystaniem filtru Neumanna (p. 4.4) matlab\potegowy.mdl Dokument modułu SIMULINK programu MATLAB 6.5 R13 zawierający wykonanie generatora potęgowego reszt (p. 4.3) matlab\src\ Katalog z kompletnymi źródłami oraz skompilowanymi przez program MATLAB 6.5 R13 plikami wykorzystanymi w badaniach nad generatorami; nazwy z kodami źródłowymi w C wykorzystanych S-Funkcji znajdują się w plikach gen_<nazwa>.c, gdzie <nazwa> wskazuje na rodzaj generatora. w w w .d zy sz la .a pl u s. p l Dokumentacja projektu w formacie MS Word Opis tematu 5 2. Opis tematu Przedmiotem pracy jest scharakteryzowanie, analiza i implementacja za pomocą S-funkcji w programie MATLAB czterech algorytmów generatorów liczb losowych: - generator liniowy, generator inwersyjny, potęgowy generator reszt, metoda eliminacji von Neumanna l 2.1. Założenia s. p Należy opracować algorytmy realizujące zadane generatory przy użyciu języka programowania C/C++ z wykorzystaniem programu do analizy matematycznej MATLAB. Program ten pozwala na złożone i sekwencyjne obliczenia zadanych wzorów z wykorzystaniem czytelnych schematów blokowych przy użyciu modułu SIMULINK. Można w nim realizować m.in. układy dyskretne, jakimi są generatory liczb losowych. pl u Ponadto program MATLAB umożliwia badania statystyczne rozkładów i generowanie wykresów, dzięki którym będzie można zbadać poprawność działania oraz skuteczność opracowanych generatorów. .a Choć program posiada własne wbudowane komponenty generatorów liczb losowych a także przekształceń matematycznych układów dyskretnych, to jednak ze względu na temat pracy należy skorzystać z możliwości wykorzystania zewnętrznych funkcji napisanych w języku C/C++, które mogą współpracować z modułem SIMULINK. zy sz la 2.2. Znaczenie liczb losowych W otaczającym nas świecie wiele zjawisk zachodzi w sposób zupełnie, lub w znacznym stopniu, losowy. Czasami Przebieg danego procesu jest uzależniony od tak wielu parametrów, że w uproszczeniu można przyjąć, iż zachodzi od w sposób przypadkowy. W celu ułatwienia obserwacji i analizy takich procesów powstał dział matematyki, zajmujący się statystyką i pozwalający próbować opisać dane zjawisko przy użyciu prawdopodobieństwa. .d Zjawiska takie zachodzą m.in. w fizyce (np. zderzanie się i rozchodzenie cząstek gazu lub cieczy), przyrodzie a także matematyce (np. rozkład liczb pierwszych w ciągu liczb naturalnych, który do dziś dnia nie udało opisać się przy użyciu żadnego deterministycznego równania). w w w W celu ułatwienia modelowania lub symulacji zjawisk, które zachodzą stochastycznie, podjęto próby matematycznego opisu generowania liczb losowych, przy minimalnym nakładzie obliczeń. Choć natura matematyki sprawia, że nie można przy użyciu stałych wzorów uzyskać liczb całkowicie losowych, dlatego mówi się o losowości wtedy, gdy ciąg liczb jest niemożliwy do zapisania za pomocą algorytmu w postaci krótszej od niego samego. Na podstawie takiego ciągu nie można stworzyć żadnych reguł, które pozwalałyby odtworzyć ten ciąg bez znajomości wszystkich jego wyrazów. Wadą jest – przy użyciu tych samych założeń i parametrów – otrzymywanie za każdym razem identycznego ciągu, którego wszystkie wyrazy są powiązane ze sobą. Dlatego mówimy o tzw. ciągach pseudolosowych, które jednak w wielu sytuacjach można traktować jako ciąg liczb losowych. Własności te w świecie techniki i komputerów są szeroko wykorzystywane, poza wspomnianymi wcześniej sytuacjami, w dziedzinie kryptografii. Poza tym, liczby losowe przydają się także do badań statystycznych (losowanie próby), w tym ekonomicznych, społecznych, marketingowych, medycznych, naukowych itp. Można przy ich użyciu modelować zjawiska, które wyłącznie obciążone elementem losowości mogą pomóc w analizie skomplikowanego procesu. Liczby losowe stosowane są także przy kreowaniu sztucznej inteligencji oraz wirtualnych światów w grach stwarzając w ten sposób wrażenie realizmu. Opis badanych generatorów liczb losowych 6 3. Opis badanych generatorów liczb losowych Już w przeszłości zauważono potrzebę istnienia liczb losowych. Pierwszym sposobem uzyskania liczby losowej była tablica z zapisanymi liczbami losowymi. Tablice takie tworzono w oparciu o obserwowane zjawiska lub przeprowadzane badania statystyczne. Następnie generowano takie liczby wykorzystując np. tablice logarytmiczne, które poddawano przekształceniom. Współcześnie bada się metody algorytmiczne, które wykorzystują wzory matematyczne oraz zależności pomiędzy kolejnymi liczbami. Wadą tej metody jest powtarzalność, a w przypadku prostych algorytmów – pewna przewidywalność. Dlatego wciąż trwają badania nad zmniejszeniem przewidywalności wyników, dzięki czemu możemy otrzymywać ciągi pseudolosowe znacznie lepiej imitujące losowość. s. p l 3.1. Generator liniowy i afiniczny Otrzymywanie liczb o równomiernym rozkładzie prawdopodobieństwa jest ważnym elementem generatorów liczb losowych. Dzięki takim liczbom możliwe jest otrzymywanie kolejnych ciągów liczb także o zadanym rozkładzie prawdopodobieństwa. pl u Celem takiego generatora jest uzyskanie ciągu liczb całkowitych z przedziału [0;M] w taki sposób, by wszystkie liczby występowały z jednakowym prawdopodobieństwem oraz by częstotliwość występowania liczb z każdego z podprzedziałów tego przedziału była w przybliżeniu jednakowa w czasie. Równanie 3.1. Równanie generatora liniowego. 1 zy sz la X n+1 = (a × X n ) mod M .a Do osiągnięcia tych celów do dziś najczęściej wykorzystywanym jest generator liniowy. Kolejne liczby losowe są obliczane przy wykorzystaniu wzoru rekurencyjnego: Potrzebnymi parametrami jest określenie warunku początkowego (X0) oraz współczynnika a a także M, które definiuje zakres maksymalny uzyskiwanych liczb. Zarówno X0 jak i a muszą być z przedziału [1;M-1]. We wzorze 3.1 można zauważyć pewną niepożądaną cechę – w przypadku, gdy któryś z wyrazów osiągnie wartość 0 (czyli wynikiem iloczynu wyrazu poprzedniego i wartości a będzie wartość równa wartości M), generator przestanie tworzyć kolejne liczby. Z tego względu stworzono pewne uogólnienie generatora liniowego jest generator afiniczny, który opisany jest wzorem: .d Równanie 3.2. Równanie generatora afinicznego. w X n +1 = (a × X n + b) mod M , gdzie 0 < a, b < M Okres obu przedstawionych generatorów zależy od wartości parametrów równania i opisują twierdzenia: Jeżeli M = 2m, dla m ≥ 3, to maksymalny okres generatora liniowego wynosi N = 2m-2, gdy a ≡ 3 mod 8 lub a ≡ 5 mod 8. w 1. w 2. Jeżeli M jest liczbą pierwszą, to generator liniowy posiada okres maksymalny równy M, gdy a jest pierwiastkiem pierwotnym M.2 Przykładowymi parametrami generatora afinicznego, który wygeneruje wszystkie liczby z zakresu, niech będą M=16, a=5 i b=1. Wyrazem początkowym niech będzie dowolna liczba. Dla takich parametrów uzyskujemy ciąg: 1 Wyrażenie x mod y oznacza uzyskiwanie reszty z dzielenia liczby x przez liczbę y. Każda liczba m taka, że m mod N jest generatorem grupy cyklicznej G(N) (zbiór wszystkich reszt mod N, jest pierwiastkiem pierwotnym liczby N. 2 Opis badanych generatorów liczb losowych 7 Tabela 3.1. Przykładowy wynik działania generatora afinicznego z parametrami a=5, b=1 i M=16. 0 1 6 15 12 13 2 11 8 9 14 7 4 5 10 3 0 l (5×X0+1) mod 16 = 1 mod 16 = (5×X1+1) mod 16 = 6 mod 16 = (5×X2+1) mod 16 = 31 mod 16 = (5×X3+1) mod 16 = 76 mod 16 = (5×X4+1) mod 16 = 61 mod 16 = (5×X5+1) mod 16 = 66 mod 16 = (5×X6+1) mod 16 = 11 mod 16 = (5×X7+1) mod 16 = 56 mod 16 = (5×X8+1) mod 16 = 41 mod 16 = (5×X9+1) mod 16 = 46 mod 16 = (5×X10+1) mod 16 = 71 mod 16 = (5×X11+1) mod 16 = 36 mod 16 = (5×X12+1) mod 16 = 21 mod 16 = (5×X13+1) mod 16 = 26 mod 16 = (5×X14+1) mod 16 = 51 mod 16 = (5×X15+1) mod 16 = 16 mod 16 = s. p X0 = X1 = X2 = X3 = X4 = X5 = X6 = X7 = X8 = X9 = X10 = X11 = X12 = X13 = X14 = X15 = X16 = pl u 3.2. Generator inwersyjny Równanie 3.3. Równanie generatora inwersyjnego. dla X n > 0, zy sz la (aX n−1 + b) mod M X n+1 = b .a Generator inwersyjny także zalicza się do grupy generatorów o rozkładzie równomiernym, lecz w przeciwieństwie do liniowego, otrzymywane liczby są nieliniowe. Kolejne liczby ciągu uzyskuje się ze wzoru: dla X n = 0 Gdzie X-1 oznacza inwersję dzielenia modulo, którą liczy się ze wzoru: Równanie 3.4. Równanie inwersyjnego dzielenia modulo. X −1 = c, gdzie : (c × X ) mod M = 1 Liczba M musi być liczbą pierwsza. Maksymalny okres takiego generatora, przy odpowiednim doborze współczynników a i b może być równy M-1. w w w .d Przeanalizujmy przykładowy ciąg z parametrami M=17, a=5 i b=1. Wyrazem początkowym niech będzie dowolna liczba. Opis badanych generatorów liczb losowych 8 Tabela 3.2. Przykładowy ciąg generatora inwersyjnego dla a=5, b=1 i M=17. 0 1 6 16 13 4 15 7 9 11 3 14 5 2 12 0 l b= (5×1+1) mod 17 = 6 mod 17 = (5×3+1) mod 17 = 16 mod 17 = (5×16+1) mod 17 = 81 mod 17 = (5×4+1) mod 17 = 21 mod 17 = (5×13+1) mod 17 = 66 mod 17 = (5×8+1) mod 17 = 41 mod 17 = (5×5+1) mod 17 = 26 mod 17 = (5×2+1) mod 17 = 11 mod 17 = (5×14+1) mod 17 = 71 mod 17 = (5×6+1) mod 17 = 31 mod 17 = (5×11+1) mod 17 = 56 mod 17 = (5×7+1) mod 17 = 36 mod 17 = (5×9+1) mod 17 = 46 mod 17 = (5×10+1) mod 17 = 51 mod 17 = s. p X0 = X1 = X2 = X3 = X4 = X5 = X6 = X7 = X8 = X9 = X10 = X11 = X12 = X13 = X14 = X15 = pl u 3.3. Generator reszt potęgowych Równanie 3.5. Wzór generatora BBS. zy sz la X i = X i −12 mod M .a Przedstawione do tej pory generatory ze względu na przewidywalność eliminują ich wykorzystanie w niektórych zastosowaniach, jak na przykład w kryptografii. Pierwszym generatorem liczb losowych, który nie posiadał tej cechy, był generator BBS, który swoją nazwę zawdzięcza trzem autorom: Blum, Blum, Shub. Generowanie liczby losowej następuje w wyniku obliczania reszty kwadratowej według wzoru: Siła algorytmu polega na odpowiednim doborze liczby M oraz punktu startowego. Do wyliczenia wartości M w pierwszym kroku znajdujemy dwie liczby pierwsze p i q. Ze względu na swą charakterystykę (bardzo krótkie okresy) liczby te powinny być odpowiednio duże. Następnie obliczamy M mnożąc obie liczby. Punktem startowym jest liczba s taka, że jej pierwiastek kwadratowy jest liczbą względnie pierwszą1 z M. .d Jeżeli liczby p i q w wyniku dzielenia przez 4 dają resztę 3, to okres generatora jest maksymalny. Jednak generatory te nie uzyskują wszystkich liczb z zadanego przedziału, stąd istotne są wyłącznie końcówki uzyskanych liczb (w założeniu ostatni bit, lecz można także przyjąć ostatnią cyfrę dziesiętną, lub przy większych wynikach – więcej takich liczb). Przy takich założeniach, odróżnienie jego wyników od szumu jest bardzo trudne. w w w Przykładowy ciąg generatora BBS pokazano poniżej. W ostatniej kolumnie znajduje się cyfra jedności uzyskanej liczby, która jest uznawana za losową. 1 Liczba względnie pierwsza z inną to taka para liczb, dla których NWD wynosi 1 (nie posiadają wspólnych dzielników poza jednością). Opis badanych generatorów liczb losowych 9 25 20 37 38 113 64 103 82 69 42 70 60 91 53 26 71 80 108 48 5 25 5 0 7 8 3 4 3 2 9 2 0 0 1 3 6 1 0 8 8 5 5 s. p s2 252 mod 121 = 202 mod 121 = 372 mod 121 = 382 mod 121 = 1132 mod 121 = 642 mod 121 = 1032 mod 121 = 822 mod 121 = 692 mod 121 = 422 mod 121 = 702 mod 121 = 912 mod 121 = 252 mod 121 = 532 mod 121 = 262 mod 121 = 712 mod 121 = 802 mod 121 = 1082 mod 121 = 482 mod 121 = 52 mod 121 = pl u X0 = X1 = X2 = X3 = X4 = X5 = X6 = X7 = X8 = X9 = X10 = X11 = X12 = X13 = X14 = X15 = X16 = X17 = X18 = X19 = X20 = l Tabela 3.3. Przykładowy ciąg uzyskany z generatora BBS, dla p=11 i q=11 oraz s=5. .a Jak widać w ostatniej kolumnie rozkład liczb z przedziału 0-9 nie jest równomierny, co może świadczyć o doborze zbyt dużej reszty względem wybranych parametrów. zy sz la Pewnym uogólnieniem algorytmu BBS jest wykorzystywany m.in. w tworzeniu kodu RSA generator o dowolnej potędze: Równanie 3.6. Uogólniony wzór generatora potęgowego reszt. X i = X i −1ω mod M .d Choć w przypadku generatora RSA istnieją ściśle określone zasady doboru parametrów, by odtworzenie klucza było jak najtrudniejsze, to jednak nawet bez spełnienia tychże wytycznych, algorytm spełnia swoje zadanie. w 3.4. Metoda eliminacji von Neumanna w Dotychczas przestawiono generatory tworzące ciągi liczb losowych o rozkładzie równomiernym. Jednak często w badaniach statystycznych konieczne jest uzyskanie ściśle określonego rozkładu prawdopodobieństwa. Algorytmem umożliwiającym uzyskanie liczb losowych o zadanym rozkładzie jest metoda eliminacji von Neumanna. w Warto zaznaczyć, że algorytm ten nie jest sam w sobie generatorem, a jedynie filtrem korzystającym z liczb losowych wygenerowanych przy użyciu innych generatorów o rozkładzie równomiernym. Schemat filtracji wyników przedstawia się w następujący sposób: 1. 2. 1 Generujemy dwie liczby losowe R1 i R2 o rozkładzie równomiernym, które odpowiednio: a. R1 należące do przedziału, w jakim chcemy uzyskać liczby losowe, b. R2 należące do przedziału [0,1]1 f ( R1 ) Sprawdzamy, czy R2 ≤ , gdzie f oznacza funkcję, wobec kształtu której chcemy otrzymać rozkład f max prawdopodobieństwa, zaś fmax jej maksymalną wartość na zadanym przedziale. Przedział taki można uzyskać losując liczby z zakresu [0,N] a następnie dzieląc wynik przez N. Opis badanych generatorów liczb losowych 3. 10 Jeśli warunek w punkcie 2 jest spełniony, to przyjmujemy, że otrzymaliśmy liczbę losową X = R1. W przeciwnym wypadku odrzucamy wynik i wracamy do punktu 1. Realizując powyższy algorytm warto, aby długości ciągów pseudolosowych dla R1 i R2 były różne. s. p l Algorytm ten jest prosty, lecz dla niektórych rozkładów bywa kosztowy pod względem wydajności z powodu możliwej dużej liczby odrzuceń. Warto także zaznaczyć, że im więcej losujemy liczb przy użyciu filtra von Neumanna, tym histogram coraz bardziej zbliża się do zadanego kształtu. pl u Rysunek 3.1. Porównanie histogramu otrzymanych liczb losowych z wykresem zadanej funkcji w zależności od liczby losowań. a) 10 000 wylosowanych liczb z czego 1 500 zaakceptowanych; b) 100 000 wylosowanych liczb z czego 15 000 zaakceptowanych. w w w .d zy sz la .a Prześledźmy pokrótce działanie algorytmu Neumanna opierając się na wynikach dwóch przedstawionych już generatorów – afinicznego (p. tabela 3.1) jako R1 oraz inwersyjnego (p. tabela 3.2) dla funkcji 2sin2(x/2) na przedziale [0,15]. Opis badanych generatorów liczb losowych 11 Tabela 3.4. Przykładowy ciąg po zastosowaniu filtra von Neumanna. .d w l 0 1 11 8 9 14 4 5 10 3 15 2 9 4 10 3 15 2 8 9 14 4 w w X s. p 0 0,229849 0,019915 0,879844 0,078073 0,046277 0,708073 0,497787 0,57275 0,955565 0,431631 0,123049 0,826822 0,358169 0,919536 0,994996 0 0,229849 0,019915 0,879844 0,078073 0,046277 0,708073 0,497787 0,57275 0,955565 0,431631 0,123049 0,826822 0,358169 0,919536 0,994996 0 0,229849 0,019915 0,879844 0,078073 0,046277 0,708073 0,497787 0,57275 0,955565 0,431631 0,123049 0,826822 .a 0 0,0625 0,375 1 0,8125 0,25 0,9375 0,4375 0,5625 0,6875 0,1875 0,875 0,3125 0,125 0,75 0 0,0625 0,375 1 0,8125 0,25 0,9375 0,4375 0,5625 0,6875 0,1875 0,875 0,3125 0,125 0,75 0 0,0625 0,375 1 0,8125 0,25 0,9375 0,4375 0,5625 0,6875 0,1875 0,875 0,3125 0,125 0,75 f (R1)/2 pl u R2/16 zy sz la R1 R2 0 0 1 1 6 6 15 16 12 13 13 4 2 15 11 7 8 9 9 11 14 3 7 14 4 5 5 2 10 12 3 0 0 1 1 6 6 16 15 13 12 4 13 15 2 7 11 9 8 11 9 3 14 14 7 5 4 2 5 12 10 0 3 1 0 6 1 16 6 13 15 4 12 15 13 7 2 9 11 11 8 3 9 14 14 5 7 2 4 12 Jak można zauważyć na 45 kroków, algorytm zwrócił jedynie 22 liczby losowe, przy czym najczęściej odrzucał liczby znajdujące się przy minimach funkcji, a więc w okolicy wartości 0-1, 6-7 i 12-13. Histogram powyższej tabeli wraz z wykresem funkcji przedstawiono na poniższym rysunku: 12 pl u s. p l Opis badanych generatorów liczb losowych w w w .d zy sz la .a Rysunek 3.2. Histogram rozkładu liczb losowych uzyskanych algorytmem Neumanna. Realizacja generatorów liczb losowych w module SIMULINK programu MATLAB przy użyciu S-Funkcji 13 4. Realizacja generatorów liczb losowych w module SIMULINK programu MATLAB przy użyciu S-Funkcji Wszystkie generatory zrealizowano w oparciu o blok S-Function Builder modułu SIMULINK wykorzystując język C/C++ oraz kompilator zewnętrzny MS Visual C++ (przy użyciu polecenia mbuild –setup w programie MATLAB). zy sz la .a pl u s. p l Każdy z generatorów wykorzystuje model próbkowania – dyskretny. Do zmiany kolejnych stanów wykorzystywana jest funkcja Discrete Update zaś do wyprowadzania wyników na wyjście funkcja Outputs. .d Rysunek 4.1. Wygląd okna "S-Funtion Builder" oraz jego parametry. w w Większość schematów do badania generatorów składa się z bloku S-Funtion Builder oraz oscyloskopu (Scope) służącego do wyświetlania stanów i wyjścia To Workspace, dzięki któremu program tworzy tablicę o wskazanej nazwie w programie MATLAB z wynikami uzyskanymi z generatora. Dzięki temu możliwe jest dalsze badanie i analizowanie otrzymanych wyników. w 4.1. Generator afiniczny Kluczem do generacji wyników w tym generatorze, jest linijka kodu odpowiedzialna za aktualizację stanu dyskretnego: xD[0]=fmod((*b)+xD[0]*(*a),*M); Realizuje ona dokładnie założenia algorytm generatora afinicznego (por. wzór 3.2). W funkcji wykorzystano 3 parametry – pierwszy odpowiedzialny za współczynnik a, drugi odpowiedzialny za współczynnik b oraz trzeci odpowiedzialny za współczynnik M. Wyprowadzenie wartości na wyjście sprowadza się do przekazania nań stanu zmiennej xD[0]. s. p l Realizacja generatorów liczb losowych w module SIMULINK programu MATLAB przy użyciu S-Funkcji 14 pl u Rysunek 4.2. Schemat oraz przykładowe parametry i wyniki dla generatora afinicznego. zy sz la 4.2. Generator inwersyjny .a Na rysunku 4.2 przedstawiono schemat oraz przykładowe wyniki z zaznaczonym okresem przy zadanych parametrach dla generatora. W generatorze tego typu za wyniki odpowiadają dwie funkcje w zależności od stanu poprzedniego. Oddzielnym problemem jest także poszukiwanie odwrotności modulo (czyli liczby, która przy dzieleniu przez wskazaną da w wyniku resztę równą jeden). Ten problem zrealizowano przy użyciu pętli podstawiającej kolejne wartości zmiennej i sprawdzającej resztę z dzielenia (por. wzór 3.4): for(c=1;fmod(c*xD[0],*M)!=1;c++); Pętla ta podstawia tak długo kolejne wartości zmiennej c, do czasu, aż reszta z dzielenia iloczynu stanu poprzedniego i tejże zmiennej przez zmienną M nie będzie wynosić 1. Z własności matematycznych liczba taka istnieje, dlatego nie należy obawiać się, że pętla nie osiągnie końca. .d Problem wyboru spośród dwóch funkcji (por. wzór 3.3) zrealizowano przy użyciu funkcji warunkowej if. Cała funkcja obliczająca kolejne pseudolosowe wartości przedstawia się następująco: w w w if (xD[0]==0) xD[0]=*b; else { unsigned short int c; //szukanie odwrotności: for(c=1;fmod(c*xD[0],*M)!=1;c++); xD[0]=fmod(*b+c*(*a),*M); } Funkcja wykorzystuje trzy parametry, podawane w kolejności a, b i M (por. wzór 3.3). Schemat wykorzystany do badania generatora oraz wyniki dla przykładowych parametrów przedstawiono poniżej: s. p l Realizacja generatorów liczb losowych w module SIMULINK programu MATLAB przy użyciu S-Funkcji 15 .a 4.3. Generator reszt potęgowych pl u Rysunek 4.3. Schemat oraz przykładowe wyniki generatora inwersyjnego. Generator ten został zbudowany w oparciu o wzór 3.6, który w zapisie w języku C przedstawia się następująco: zy sz la xD[0]=fmod(pow(xD[0],*w),(*p)*(*q)); Przy realizacji tego generatora pojawił się problem inicjalizacji stanu początkowego w zależności od parametru. Dlatego dodano dodatkowe wyjście informacyjne start typu logicznego (prawda-fałsz), które wskazuje, że wynik jest poprawnym wynikiem generatora. Wyjście to jest wykorzystywane przy ustawianiu pierwszej wartości w taki sposób, że jeśli wyjście ma wartość „fałsz” (domyślna), to funkcja odpowiedzialna za aktualizację stanu dyskretnego inicjalizuje zmienną w następujący sposób: if (!start[0]) xD[0]=*s; .d Za ustawienie wyjścia start w wartość „prawda” odpowiedzialna jest funkcja ustawiająca stany wyjściowe. Zakłada ona, że pierwszym poprawnym stanem wyjściowym jest niezerowa wartość zmiennej stanu dyskretnego: w if (xD[0]!=0) start[0]=true; y – określającą właściwą wartość pseudolosową, czyli ostatnią część obliczonej wartości (np. ostatni bit lub ostatnią wartość dziesiętną) w • w Funkcja wyjściowa zwraca – poza wyjściem start – jeszcze dwie inne wartości: • yf – pełną obliczoną wartość ciągu. Wyjście to ma charakter wyłącznie informacyjny i nie powinno być wykorzystywane jako generujące ciąg pseudolosowych liczb. Otrzymywanie „reszty” liczby, która to reszta pojawia się na wyjściu y, zrealizowano przy pomocy operacji dzielenia modulo: y[0]=fmod(xD[0],*r); W zależności od parametru r operacja może zwracać różne części liczby, jednocześnie określając wartość maksymalną (p. niżej). Funkcja przyjmuje 5 parametrów: Realizacja generatorów liczb losowych w module SIMULINK programu MATLAB przy użyciu S-Funkcji 16 • p i q – liczby, które służą do wyznaczania wartości M (por. p. 3.3). Wartości te, zgodnie z założeniami algorytmu, powinny być odpowiednio dużymi i nie różniącymi się od siebie znacznie liczbami pierwszymi. • w – zmienna określająca wykładnik potęgowania (por. wzór 3.6). W celu realizacji np. algorytmu BBS, wartość powinna wynosić 2. • s – ziarno funkcji, czyli wartość początkowa. W przypadku realizacji algorytmu BBS wartość ta powinna być kwadratem liczby s (por. p. 3.3). • r – zmienna określająca jak duża część reszty ma być zwracana przez funkcję. Przykładowo, jeśli chcemy otrzymywać wyłącznie ostatni bit, wartość ta powinna wynosić 2; jeśli chcemy uzyskiwać ostatnią cyfrę dziesiętną, wartość powinna wynosić 10. Dokładnie: zmienna określająca wartość dzielenia modulo liczby. zy sz la .a pl u s. p l Poniżej przedstawiono schemat, przykładowe wartości oraz wynik działania symulacji generatora potęgowego, wraz z zaznaczonym okresem. Górny wykres przedstawia ciąg pseudolosowych liczb będącymi resztami obliczonych liczb; dolny – generowane pełne wartości. Należy zwrócić uwagę, aby przy dalszych badaniach odrzucać pierwszą wartość zera. .d Rysunek 4.4. Schemat oraz wyniki symulacji generatora reszt potęgowych. w 4.4. Metoda eliminacji von Neumanna w w Przy implementacji tej metody stworzono blok oparty o dwa generatory afiniczne oraz filtra Neumanna. Dwa stany dyskretne odpowiadają za kolejne liczby obu tych generatorów. Podczas doboru parametrów (opisane poniżej) warto zwrócić uwagę, aby uzyskiwać w miarę możliwości ciągi o maksymalnych okresach, szczególnie dla pierwszego generatora. Filtrowanie oparte zostało na pętli do..while, która tak długo pobiera kolejne liczby z ciągów pseudolosowych, aż zostanie spełniony warunek określony przez algorytm. Poniżej przedstawiono założenia pętli w postaci pseudokodu: Realizacja generatorów liczb losowych w module SIMULINK programu MATLAB przy użyciu S-Funkcji 17 do { xD[0]= obliczanie kolejnej wartości pierwszego ciągu pseudolosowego r1= obliczanie wartości R1 na podstawie xD[0] (testowana wartość – por. p. 3.4) xD[1]= obliczanie kolejnej wartości drugiego ciągu pseudolosowego r2= przekształcenie otrzymanej wartości xD[2] na zakres [0,1] f = obliczenie wartości funkcji w punkcie r1 } while (f<r2); Gdy pętla przerwie swoje działanie (warunek zostanie spełniony), to wartość xD[0] (po odpowiednich przekształceniach) jest przekazywana do wyjścia, jako liczba pseudolosowa o zadanym rozkładzie. Funkcja przyjmuje następujące parametry: a1, b1 – współczynniki pierwszego generatora afinicznego (por. wzór 3.2), • a2, b2, M2 – współczynniki drugiego generatora afinicznego (por. wzór 3.2), • from_val, to_val – zakres dolny i górny przedziału, w którym chcemy uzyskać liczby losowe (wartości te mają wpływ na współczynnik M pierwszego generatora afinicznego w sposób następujący: M1 = to_val - from_val + 1; por. wzór 3.2), • func_no – pozwala na wybór jednej z odgórnie zdefiniowanych funkcji rozkładu. Podanie niezdefiniowanej wartości spowoduje zastosowanie rozkładu równomiernego, a więc zwrócenie wszystkich wylosowanych przez pierwszy generator liczb. Poniżej przedstawiono wartości, jakie może przyjąć ten parametr: pl u s. p l • Tabela 4.1. Zdefiniowane funkcje rozkładu generatora Neumanna. Funkcja 1 s 2π sin( sx ) sx 2 (funkcja Gaussa) zy sz la 2 − ( x −t )2 2 e 2s .a func_no 1 s, t – parametry funkcji. • Przykładowo, jeśli chcemy otrzymać zmienne losowe wg rozkładu normalnego, to powinniśmy użyć następujących parametrów: func_no=1, s=1, t=0. Kompletny kod liczący przedstawiono poniżej: w do { .d const double PI=3.141592654; double f; double r1,r2; unsigned int f_no=*func_no; w w xD[0]=fmod((*a1)*xD[0]+(*b1),(*to_val)-(*from_val)+1); r1=xD[0]+(*from_val); xD[1]=fmod((*a2)*xD[1]+(*b2),*M2); r2=(xD[1]+1)/(*M2); switch (f_no) { case 1: f=(exp(-pow(r1-(*t),2)/(2*pow(*s,2)))/ ((*s)*sqrt(2*PI)))/(exp(0)/((*s)*sqrt(2*PI))); break; case 2: if (r1==0) f=1; else f=pow(sin((*s)*r1)/((*s)*r1),2); break; default: r2=0; f=1; } } while (f<r2); Realizacja generatorów liczb losowych w module SIMULINK programu MATLAB przy użyciu S-Funkcji 18 zy sz la .a pl u s. p l Poniżej przedstawiono schemat badanego generatora: w w w .d Rysunek 4.5. Schemat i przykładowe wyniki wykorzystywany w badaniu generatora Neumanna. Badanie i testowanie generatorów 19 5. Badanie i testowanie generatorów Dobry generator to taki, który tworzy sekwencje liczb własnościach liczb prawdziwie losowych. W praktyce jednak nie można udowodnić, że dany generator jest dobry. Możliwe jest za to udowodnienie, że generator jest zły (nie spełnia któregoś z testów). Pozytywne wyniki określonej liczby testów zwiększają jedynie poziom zaufania względem generatora, ale nie gwarantują jego niezawodności. Testowanie generatorów sprowadza się do spełnienia następujących własności: • • • Zgodność rozkładu ciągu liczb z postulowanym (równomierność rozkładu), Losowość rozkładu (brak wzorca), Wzajemna niezależność (nieprzewidywalność kolejnych liczb). s. p l 5.1. Generator afiniczny zy sz la .a pl u Generator ten należy do grupy generatorów liniowych, stąd jego przewidywalność jest bardzo duża. Można zauważyć to na wykresie kolejnych wartości generatora: Rysunek 5.1. Wykres zależności kolejnych liczb ciągu generatora afinicznego dla a=5, b=1, M=16. w w w .d Ze względu na charakter tego generatora, możliwe jest otrzymywanie wyłącznie albo rozkładu równomiernego przy maksymalnym okresie, albo rozkładu niepełnego (z brakującymi poszczególnymi elementami), jeśli okres generatora nie będzie wynosił M (por. wzór 3.2). Poniżej przedstawiono wykres zależności okresu od doboru parametrów a i b, przy stałym M. Rysunek 5.2. Wykres zależności długości okresu od parametrów a i b przy stałym M=16. Badanie i testowanie generatorów 20 s. p l Z przedstawionego rysunku można zaobserwować, że właściwy dobór parametrów jest istotny oraz to, że interferują one razem. Dobór parametru a może doprowadzić do generowania wyłącznie jednej liczby (okres=0). Właściwy dobór parametru b może wydłużyć okres przy dobrze dobranym a. W badanym zakresie, generator osiągał maksymalny okres dla par (a,b) = (1,1), (1,3), (1,5), (5,1), (5,3), (5,5). Potwierdza się zatem fakt, że oba parametry powinny spełniać warunek a,b ≡ (3 mod 8 lub 5 mod 8) przy M będącym potęgą liczby 2, aby generator podawał wszystkie liczby z zakresu, tworząc idealny histogram rozkładu: Rysunek 5.3. Histogram liczb uzyskanych z generatora afinicznego przy parametrach a=5, b=1, M=16. pl u Jeśli okres nie będzie maksymalnym, generator nie będzie losował danych liczb z całego zakresu. Liczby te są uzależnione od doboru parametrów. 4 3.5 3 .a 2.5 2 zy sz la 1.5 1 0.5 0 0 5 10 15 Rysunek 5.4. Histogram liczb uzyskanych z generatora afinicznego przy parametrach a=3, b-3, M=16 (nie maksymalny okres). w .d 5.2. Generator inwersyjny w w Jak wcześniej zostało wspomniane, generator inwersyjny powstał, by wyeliminować przewidywalny element liniowości z ciągu pseudolosowego. Porównując rezultat polecenia plot programu MATLAB – rysunek 5.5 z 5.1 można zauważyć tą różnicę. Badanie i testowanie generatorów 21 16 14 12 10 8 6 4 2 0 0 2 4 6 8 10 12 14 16 18 s. p l Rysunek 5.5. Wykres zależności kolejnych liczb pseudolosowego ciągu dla generatora inwersyjnego przy parametrach a=3, b=7 i M=17. .d zy sz la .a pl u Także w tym generatorze maksymalny okres zależy od doboru parametrów a i b pod warunkiem, że M jest liczba pierwszą. Wykres tej zależności przy współczynniku M=17 prezentuje wykres poniżej. w Rysunek 5.6. Wykres zależności długości okresu od parametrów generatora inwersyjnego. w w Jak można wywnioskować z powyższego rysunku, trudno doszukiwać się prostych reguł rządzących długością okresu, dlatego w doborze współczynników równania pozostaje metoda prób i błędów. Niemniej, generator dla dość dużej liczby par parametrów (w porównaniu z generatorem liniowym) generuje maksymalny okres. Poniżej przedstawiono szczegółową tabelkę badanej zależności z zaznaczeniem maksymalnych okresów: Tabela 5.1. Tabela zależności długości okresu generatora inwersyjnego od parametrów równania. b a 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 7 13 16 13 15 17 7 8 13 8 17 17 15 7 16 13 3 17 15 17 2 8 17 7 15 5 17 8 7 5 8 17 15 15 9 8 17 7 5 15 15 3 2 17 8 15 17 15 Badanie i testowanie generatorów 22 Podobnie jak w generatorze liniowym, nieuzyskanie maksymalnego okresu skutkuje „wypadnięciem” pewnych liczb z zakresu ciągu, co przedstawiają poniższe histogramy: 15 10 5 0 2 4 6 8 10 12 14 16 s. p l 0 Rysunek 5.7. Histogram ciągu pseudolosowego uzyskanego generatorem inwersyjnym przy parametrach a=3, b=4, M=17. pl u 60 50 40 .a 30 zy sz la 20 10 0 0 2 4 6 8 10 12 14 Rysunek 5.8. Histogram ciągu pseudolosowego uzyskanego generatorem inwersyjnym przy parametrach a=3, b=5, M=17 (nie maksymalny okres). .d 5.3. Generator reszt potęgowych w w W generatorach reszt cechą różniącą je od powyżej przedstawionych jest fakt, że ciąg pseudolosowy nie tworzą uzyskiwane pełne liczby, a jedynie ich reszty. Stąd często uzyskiwanie (nie)maksymalnego okresu nie jest równoznacznie z otrzymaniem lub nie wszystkich liczb z zakresu. Zmienia się natomiast otrzymywany ich histogram. w Poniżej przedstawiono histogram dla generatora potęgowego reszt, przy parametrach p=11, q=11 oraz s=5 przy ϖ=2 (por. wzór 3.6). Na początku z generatora otrzymywano liczby z zakresu [0,9] będące ostatnią cyfrą dziesiętną uzyskanej liczby (reszta z dzielenia przez 10). Badanie i testowanie generatorów 23 20 18 16 14 12 10 8 6 4 2 0 0 1 2 3 4 5 6 7 8 9 s. p l Rysunek 5.9. Histogram liczb ciągu pseudolosowego uzyskanego z generatora potęgowego reszt przy parametrach p=11, q=11, s=25 oraz w=2, przy analizie ostatniej cyfry dziesiętnej. pl u Jak widać, histogram odbiega od rozkładu równomiernego. Może to być spowodowane albo zbyt małą wartością parametrów p i q (okresy generatorów potęgowych są dość krótkie), albo pobieraniem zbyt dużej reszty. Dlatego spróbujmy uzyskiwać wyłącznie liczby z zakresu [0,3] (reszta z dzielenia przez 4). Pozostałe parametry nie ulegają zmianie. 35 30 25 .a 20 zy sz la 15 10 5 0 0 0.5 1 1.5 2 2.5 3 Rysunek 5.10. Histogram liczb ciągu pseudolosowego uzyskanego z generatora potęgowego reszt przy parametrach p=11, q=11, s=25 oraz w=2, przy analizie reszt z dzielenia przez 4. w w w .d Jak widać na rysunku 5.10, rozkład histogramu jest już dużo korzystniejszy, lecz nadal zbyt znacząco odbiega od rozkładu liniowego. Spróbujmy więc zwiększyć parametry p do 307 oraz q do 311. 40 35 30 25 20 15 10 5 0 0 1 2 3 4 5 6 7 8 9 Rysunek 5.11. Histogram liczb ciągu pseudolosowego uzyskanego z generatora potęgowego reszt przy parametrach p=307, q=311, s=25 oraz w=2, przy analizie ostatniej cyfry dziesiętnej. Badanie i testowanie generatorów 24 Jak widać na powyższym histogramie, rozkład, choć wciąż nieidealnie równomierny, to jednak o znacznie lepszym rozkładzie, niż w poprzednich przypadkach. Można wnioskować, że dalsze zwiększanie współczynników p oraz q i/lub zmniejszanie pobieranej reszty będzie przynosił coraz bardziej równomierny rozkład. Należy pamiętać, że w założeniach algorytm ten miał generować wyłącznie kolejne bity, a więc stosunek liczb parzystych wobec nieparzystych. Dla tych samych parametrów, jak w ostatnim badanym przypadku, lecz interpretując wyłącznie ostanie bity (reszty z dzielenia przez 2) otrzymujemy następujące wyniki: 1 0.5 0 0 20 40 60 80 100 120 140 160 180 200 Rysunek 5.12. Zależność kolejnych liczb pseudolosowych w generatorze potęgowym reszt przy parametrach p=307, q=311, s=25 oraz w=2, przy analizie ostatniego bitu (reszta z dzielenia przez 2). 1 0 20 40 60 pl u s. p l 0 80 100 120 .a Rysunek 5.13. Histogram otrzymanych wyników generatora potęgowego reszt przy parametrach p=307, q=311, s=25 oraz w=2, przy analizie ostatniego bitu (reszta z dzielenia przez 2). zy sz la Jak widać przy takich parametrach oraz założeniach, rozkład wyników można uznać za statystycznie równomierny (98 wobec 102). 5.4. Metoda eliminacji von Neumanna Badania dotychczasowych generatorów przyniosło informacje o tym, który z nich generuje najlepsze wyniki i w jaki sposób dobrać ich parametry, aby działały w sposób możliwie optymalny. Posiadając tą wiedzę można śmiało przejść do generowania wyników o zadanym rozkładzie z użyciem metody von Neumanna. w w w .d Jak zostało to wspomniane w punkcie 4.3, w celu przeprowadzenia badania zastosowano dwa generatory afiniczne o różnych parametrach. Ze względu na skupieniu się nad uzyskiwaniem poprawności rozkładu, niż niezależnych liczb, generator dostarczający liczb pseudolosowych działa w taki sposób, że dostarcza cyklicznie kolejnych liczb z przedziału (parametry a i b wynoszą 1; por. wzór 3.2). Parametry drugiego z generatorów dobrano tak, aby generował on możliwie długie ciągi liczb (choć tutaj bezwzględny wymóg otrzymywania maksymalnego ciągu nie jest wymagany). Stąd jego parametry wynoszą: a=5, b=1, M=256. Następnie zadano uzyskanie rozkładu normalnego w zakresie [-5,5]. Otrzymano następujący ciąg liczb pseudolosowych (po jednej wartości -5 na początku oraz 5 na końcu dodano ręcznie w celu nakreślenia całego przedziału i nie należy ich interpretować jako wyników): Badanie i testowanie generatorów 25 5 4 3 2 1 0 -1 -2 -3 -4 -5 0 5 10 15 20 25 30 35 40 45 Rysunek 5.14. Wykres kolejnych liczb pseudolosowych uzyskiwanych po zastosowaniu filtra Neumanna. pl u s. p l Jak można już zauważyć, choć wyniki w dalszym ciągu są dość przewidywalne z racji dostarczania liczb przez generator liniowy, to jednak metoda Neumanna sama z siebie wprowadza pewne zaburzenie utrudniające przewidzenie kolejnej wartości ciągu pseudolosowego i zdecydowanie wydłuża okresowość ciągu wyjściowego. Jednak ważniejszym w tej funkcji jest uzyskiwanie właściwego rozkładu. Przedstawiono go poniżej w porównaniu do rozkładu normalnego (wykorzystując funkcję histfit programu MATLAB): 15 .a 10 zy sz la 5 0 -5 -4 -3 -2 -1 0 1 2 3 4 5 Rysunek 5.15. Histogram otrzymanych liczb pseudolosowych w wyniku zastosowania filtru von Neumanna dla 40 liczb wyjściowych. w w w .d Jak widać na powyższym rysunku, wykres słupkowy prezentujący rozkład liczb losowych jest bardzo zbliżony do kształtu funkcji rozkładu normalnego (należy podkreślić raz jeszcze, że wartości -5 oraz 5 zostały wprowadzone sztucznie i nie należy ich brać pod uwagę). Jednakże przez wzgląd na charakter działania algorytmu, powinien on być stosowany dla możliwie największej liczby liczb pseudolosowych. Poniżej zaprezentowano wynik działania tych samych algorytmów, jednak dla długości uzyskiwanego ciągu pseudolosowego wynoszącego 10 000 liczb. Badanie i testowanie generatorów 26 4500 4000 3500 3000 2500 2000 1500 1000 500 0 -5 -4 -3 -2 -1 0 1 2 3 4 5 Rysunek 5.16. Histogram otrzymanych liczb pseudolosowych w wyniku zastosowania filtru von Neumanna dla 10 000 liczb wyjściowych. w w w .d zy sz la .a pl u s. p l W tym przypadku widać, że uzyskiwany rozkład jest już zdecydowanie bardziej symetryczny i zbliżony do zadanej funkcji, a przez to algorytm można uznać za idealnie spełniający swoje zadanie. Wnioski z testowania generatorów 27 6. Wnioski z testowania generatorów Poza bezpośrednimi wnioskami zaprezentowanymi przy omówieniu poszczególnych generatorów, ich implementacji oraz podczas prowadzonych badań, można wysunąć jeszcze bardziej ogólne: Największą trudnością podczas projektowania i stosowania danego generatora jest właściwy dobór jego parametrów, często metodą eksperymentalną tak, aby uzyskiwać pożądane wyniki. 2. W prostych generatorach (liniowych i inwersyjnym) otrzymanie maksymalnego okresu gwarantuje także otrzymanie idealnie równomiernego rozkładu otrzymanych liczb pseudolosowych; w przypadku generatora reszt długość okresu może jedynie zbliżyć rozkład otrzymanych licz do równomiernego, lecz nie zapewnia go. 3. W generatorze potęgowym reszt, choć należy on do grupy generatorów o rozkładzie równomiernym, to jednak uzyskanie idealnie takiego rozkładu jest trudne. Należy dobierać jak największe wartości współczynników, aby podnieść prawdopodobieństwo wydłużenia się okresu, a z uzyskanych wyników pobierać względnie małe liczby. 4. Cechę uzyskiwania nieidealnie równomiernego rozkładu w generatorze potęgowym reszt można uznać za jego atut, gdyż przewidzenie kolejnej wartości na podstawie wszystkich poprzednich w ciągu jest trudniejsze. 5. Stosowanie metody eliminacji von Neumanna do przekształcania ciągu liczb pseudolosowych o rozkładzie równomiernym do ciągu liczb pseudolosowych o rozkładzie będącym aproksymacją kształtu dowolnej funkcji przynosi uboczną korzyść w postaci znacznego wydłużenia okresu otrzymanego ciągu pseudolosowego; długość tego okresu zależy od długości okresów dwóch ciągów pseudolosowych wykorzystywanych przez ten filtr, które to wartości długości w najlepszym przypadku powinny być liczbami względnie pierwszymi z sobą nawzajem. w w w .d zy sz la .a pl u s. p l 1. Bibliografia 28 7. Bibliografia Generatory liczb losowych: algorytmy, testowanie, zastosowania – Zbigniew Kotulski 2. Generatory liczb losowych – Katarzyna Pajor. 3. Przewodnik do przeszukiwania losowego -inspiracje przyrodnicze – Bartłomiej Szafran 4. http://pl.wikipedia.org/ w w w .d zy sz la .a pl u s. p l 1.