Generatory liczb losowych

Transkrypt

Generatory liczb losowych
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.