Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska...

28
www.dzyszla.aplus.pl Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydzial Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe w Technice Temat: Generatory liczb losowych – algorytmy z wykorzystaniem S-funkcji w programie MATLAB Autor: Dawid Najgiebauer Informatyka w elektroenergetyce, rok 2006/07, sem. VII, (Śr. g. 12.50) Prowadzący: dr inż. R. Stanislawski Ocena: ................................................ Uwagi: ................................................. OPOLE 2006

Transcript of Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska...

Page 1: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

Opole, dn. 17 grudnia 2006

Politechnika Opolska

Wydział Elektrotechniki, Automatyki i Informatyki

Kierunek: Informatyka

Metody Komputerowe w Technice

Temat:

Generatory liczb losowych – algorytmy z wykorzystaniem

S-funkcji w programie MATLAB

Autor: Dawid Najgiebauer Informatyka w elektroenergetyce,

rok 2006/07, sem. VII, (Śr. g. 12.50)

Prowadzący: dr inż. R. Stanisławski

Ocena: ................................................

Uwagi: .................................................

O P O L E 2 0 0 6

Page 2: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

Spisy 2

1. Spisy

1.1. Spis treści

1. Spisy ...................................................................................................................................................................... 2

1.1. Spis treści.................................................................................................................................................... 2

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

2. Opis tematu............................................................................................................................................................ 5

2.1. Założenia .................................................................................................................................................... 5

2.2. Znaczenie liczb losowych........................................................................................................................... 5

3. 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

4. Realizacja generatorów liczb losowych w module SIMULINK programu MATLAB przy użyciu S-Funkcji ... 13

4.1. Generator afiniczny .................................................................................................................................. 13

4.2. Generator inwersyjny................................................................................................................................ 14

4.3. Generator reszt potęgowych ..................................................................................................................... 15

4.4. Metoda eliminacji von Neumanna ............................................................................................................ 16

5. 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

6. Wnioski z testowania generatorów ...................................................................................................................... 27

7. Bibliografia .......................................................................................................................................................... 28

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

Page 3: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

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

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

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

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

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

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

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

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

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

Page 4: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

Spisy 4

1.5. Spis zawartości załączonej płyty CD

Katalog/plik Opis

docs\Generatory liczb losowych.doc Dokumentacja projektu w formacie MS Word

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.

Page 5: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

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

2.1. Założenia

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.

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.

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.

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.

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 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.

Page 6: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

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ść.

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.

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.

Do osiągnięcia tych celów do dziś najczęściej wykorzystywanym jest generator liniowy. Kolejne liczby losowe są obliczane przy wykorzystaniu wzoru rekurencyjnego:

Równanie 3.1. Równanie generatora liniowego.

MXaX nn mod)(1 ×=+

1

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:

Równanie 3.2. Równanie generatora afinicznego.

MbXaX nn mod)(1 +×=+

, gdzie 0 < a, b < M

Okres obu przedstawionych generatorów zależy od wartości parametrów równania i opisują twierdzenia:

1. Jeżeli M = 2m, dla m ≥ 3, to maksymalny okres generatora liniowego wynosi N = 2

m-2, gdy a ≡ 3 mod 8 lub

a ≡ 5 mod 8.

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. 2 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.

Page 7: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

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.

X0 = 0

X1 = (5×X0+1) mod 16 = 1 mod 16 = 1

X2 = (5×X1+1) mod 16 = 6 mod 16 = 6

X3 = (5×X2+1) mod 16 = 31 mod 16 = 15

X4 = (5×X3+1) mod 16 = 76 mod 16 = 12

X5 = (5×X4+1) mod 16 = 61 mod 16 = 13

X6 = (5×X5+1) mod 16 = 66 mod 16 = 2

X7 = (5×X6+1) mod 16 = 11 mod 16 = 11

X8 = (5×X7+1) mod 16 = 56 mod 16 = 8

X9 = (5×X8+1) mod 16 = 41 mod 16 = 9

X10 = (5×X9+1) mod 16 = 46 mod 16 = 14

X11 = (5×X10+1) mod 16 = 71 mod 16 = 7

X12 = (5×X11+1) mod 16 = 36 mod 16 = 4

X13 = (5×X12+1) mod 16 = 21 mod 16 = 5

X14 = (5×X13+1) mod 16 = 26 mod 16 = 10

X15 = (5×X14+1) mod 16 = 51 mod 16 = 3

X16 = (5×X15+1) mod 16 = 16 mod 16 = 0

3.2. Generator inwersyjny

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:

Równanie 3.3. Równanie generatora inwersyjnego.

=

>+=

+

0 dla

,0 dlamod)(1

1

n

nnn

Xb

XMbaXX

Gdzie X-1

oznacza inwersję dzielenia modulo, którą liczy się ze wzoru:

Równanie 3.4. Równanie inwersyjnego dzielenia modulo.

1mod)( :gdzie ,1=×=

− MXccX

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.

Przeanalizujmy przykładowy ciąg z parametrami M=17, a=5 i b=1. Wyrazem początkowym niech będzie dowolna

liczba.

Page 8: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

Opis badanych generatorów liczb losowych 8

Tabela 3.2. Przykładowy ciąg generatora inwersyjnego dla a=5, b=1 i M=17.

X0 = 0

X1 = b = 1

X2 = (5×1+1) mod 17 = 6 mod 17 = 6

X3 = (5×3+1) mod 17 = 16 mod 17 = 16

X4 = (5×16+1) mod 17 = 81 mod 17 = 13

X5 = (5×4+1) mod 17 = 21 mod 17 = 4

X6 = (5×13+1) mod 17 = 66 mod 17 = 15

X7 = (5×8+1) mod 17 = 41 mod 17 = 7

X8 = (5×5+1) mod 17 = 26 mod 17 = 9

X9 = (5×2+1) mod 17 = 11 mod 17 = 11

X10 = (5×14+1) mod 17 = 71 mod 17 = 3

X11 = (5×6+1) mod 17 = 31 mod 17 = 14

X12 = (5×11+1) mod 17 = 56 mod 17 = 5

X13 = (5×7+1) mod 17 = 36 mod 17 = 2

X14 = (5×9+1) mod 17 = 46 mod 17 = 12

X15 = (5×10+1) mod 17 = 51 mod 17 = 0

3.3. Generator reszt potęgowych

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:

Równanie 3.5. Wzór generatora BBS.

MXX ii mod2

1−=

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.

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.

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ą).

Page 9: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

Opis badanych generatorów liczb losowych 9

Tabela 3.3. Przykładowy ciąg uzyskany z generatora BBS, dla p=11 i q=11 oraz s=5.

X0 = s2

25 5

X1 = 252 mod 121 = 20 0

X2 = 202 mod 121 = 37 7

X3 = 372 mod 121 = 38 8

X4 = 382 mod 121 = 113 3

X5 = 1132 mod 121 = 64 4

X6 = 642 mod 121 = 103 3

X7 = 1032 mod 121 = 82 2

X8 = 822 mod 121 = 69 9

X9 = 692 mod 121 = 42 2

X10 = 422 mod 121 = 70 0

X11 = 702 mod 121 = 60 0

X12 = 912 mod 121 = 91 1

X13 = 252 mod 121 = 53 3

X14 = 532 mod 121 = 26 6

X15 = 262 mod 121 = 71 1

X16 = 712 mod 121 = 80 0

X17 = 802 mod 121 = 108 8

X18 = 1082 mod 121 = 48 8

X19 = 482 mod 121 = 5 5

X20 = 52 mod 121 = 25 5

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.

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.

MXX ii mod1ω

−=

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.

3.4. Metoda eliminacji von Neumanna

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.

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. 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

2. Sprawdzamy, czy max

12

)(

f

RfR ≤ , gdzie f oznacza funkcję, wobec kształtu której chcemy otrzymać rozkład

prawdopodobieństwa, zaś fmax jej maksymalną wartość na zadanym przedziale.

1 Przedział taki można uzyskać losując liczby z zakresu [0,N] a następnie dzieląc wynik przez N.

Page 10: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

Opis badanych generatorów liczb losowych 10

3. 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.

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.

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.

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 2sin

2(x/2) na

przedziale [0,15].

Page 11: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

Opis badanych generatorów liczb losowych 11

Tabela 3.4. Przykładowy ciąg po zastosowaniu filtra von Neumanna.

R1 R2 R2/16 f (R1)/2 X

0 0 0 0 0

1 1 0,0625 0,229849 1

6 6 0,375 0,019915 -

15 16 1 0,879844 -

12 13 0,8125 0,078073 -

13 4 0,25 0,046277 -

2 15 0,9375 0,708073 -

11 7 0,4375 0,497787 11

8 9 0,5625 0,57275 8

9 11 0,6875 0,955565 9

14 3 0,1875 0,431631 14

7 14 0,875 0,123049 -

4 5 0,3125 0,826822 4

5 2 0,125 0,358169 5

10 12 0,75 0,919536 10

3 0 0 0,994996 3

0 1 0,0625 0 -

1 6 0,375 0,229849 -

6 16 1 0,019915 -

15 13 0,8125 0,879844 15

12 4 0,25 0,078073 -

13 15 0,9375 0,046277 -

2 7 0,4375 0,708073 2

11 9 0,5625 0,497787 -

8 11 0,6875 0,57275 -

9 3 0,1875 0,955565 9

14 14 0,875 0,431631 -

7 5 0,3125 0,123049 -

4 2 0,125 0,826822 4

5 12 0,75 0,358169 -

10 0 0 0,919536 10

3 1 0,0625 0,994996 3

0 6 0,375 0 -

1 16 1 0,229849 -

6 13 0,8125 0,019915 -

15 4 0,25 0,879844 15

12 15 0,9375 0,078073 -

13 7 0,4375 0,046277 -

2 9 0,5625 0,708073 2

11 11 0,6875 0,497787 -

8 3 0,1875 0,57275 8

9 14 0,875 0,955565 9

14 5 0,3125 0,431631 14

7 2 0,125 0,123049 -

4 12 0,75 0,826822 4

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:

Page 12: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

Opis badanych generatorów liczb losowych 12

Rysunek 3.2. Histogram rozkładu liczb losowych uzyskanych algorytmem Neumanna.

Page 13: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

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).

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.

Rysunek 4.1. Wygląd okna "S-Funtion Builder" oraz jego parametry.

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.

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].

Page 14: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

Realizacja generatorów liczb losowych w module SIMULINK programu MATLAB przy użyciu S-Funkcji 14

Rysunek 4.2. Schemat oraz przykładowe parametry i wyniki dla generatora afinicznego.

Na rysunku 4.2 przedstawiono schemat oraz przykładowe wyniki z zaznaczonym okresem przy zadanych

parametrach dla generatora.

4.2. Generator inwersyjny

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.

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:

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:

Page 15: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

Realizacja generatorów liczb losowych w module SIMULINK programu MATLAB przy użyciu S-Funkcji 15

Rysunek 4.3. Schemat oraz przykładowe wyniki generatora inwersyjnego.

4.3. Generator reszt potęgowych

Generator ten został zbudowany w oparciu o wzór 3.6, który w zapisie w języku C przedstawia się następująco:

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;

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:

if (xD[0]!=0) start[0]=true;

Funkcja wyjściowa zwraca – poza wyjściem start – jeszcze dwie inne wartości:

• y – określającą właściwą wartość pseudolosową, czyli ostatnią część obliczonej wartości (np. ostatni bit lub

ostatnią wartość dziesiętną)

• 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:

Page 16: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

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.

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.

Rysunek 4.4. Schemat oraz wyniki symulacji generatora reszt potęgowych.

4.4. Metoda eliminacji von Neumanna

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:

Page 17: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

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:

Tabela 4.1. Zdefiniowane funkcje rozkładu generatora Neumanna.

func_no Funkcja

1 2

2

2

)(

2

1s

tx

es

−−

π

(funkcja Gaussa)

2 2)sin(

sx

sx

• 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:

const double PI=3.141592654;

double f;

double r1,r2;

unsigned int f_no=*func_no;

do

{

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);

Page 18: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

Realizacja generatorów liczb losowych w module SIMULINK programu MATLAB przy użyciu S-Funkcji 18

Poniżej przedstawiono schemat badanego generatora:

Rysunek 4.5. Schemat i przykładowe wyniki wykorzystywany w badaniu generatora Neumanna.

Page 19: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

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).

5.1. Generator afiniczny

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.

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.

Page 20: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

Badanie i testowanie generatorów 20

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.

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.

0 5 10 150

0.5

1

1.5

2

2.5

3

3.5

4

Rysunek 5.4. Histogram liczb uzyskanych z generatora afinicznego przy parametrach a=3, b-3, M=16 (nie

maksymalny okres).

5.2. Generator inwersyjny

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ę.

Page 21: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

Badanie i testowanie generatorów 21

0 2 4 6 8 10 12 14 16 180

2

4

6

8

10

12

14

16

Rysunek 5.5. Wykres zależności kolejnych liczb pseudolosowego ciągu dla generatora inwersyjnego przy

parametrach a=3, b=7 i M=17.

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.

Rysunek 5.6. Wykres zależności długości okresu od parametrów generatora inwersyjnego.

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 8 7 7 2 8 9 3

2 7 8 16 8 7 8 2

3 13 13 13 17 5 17 17

4 16 8 3 7 8 7 8

5 13 17 17 15 17 5 15

6 15 17 15 5 15 15 17

7 17 15 17 17 15 15 15

Page 22: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

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:

0 2 4 6 8 10 12 14 160

5

10

15

Rysunek 5.7. Histogram ciągu pseudolosowego uzyskanego generatorem inwersyjnym przy parametrach a=3, b=4,

M=17.

0 2 4 6 8 10 12 140

10

20

30

40

50

60

Rysunek 5.8. Histogram ciągu pseudolosowego uzyskanego generatorem inwersyjnym przy parametrach a=3, b=5,

M=17 (nie maksymalny okres).

5.3. Generator reszt potęgowych

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.

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).

Page 23: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

Badanie i testowanie generatorów 23

0 1 2 3 4 5 6 7 8 90

2

4

6

8

10

12

14

16

18

20

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.

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.

0 0.5 1 1.5 2 2.5 30

5

10

15

20

25

30

35

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.

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.

0 1 2 3 4 5 6 7 8 90

5

10

15

20

25

30

35

40

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.

Page 24: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

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:

0 20 40 60 80 100 120 140 160 180 2000

0.5

1

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).

0

10 20 40 60 80 100 120

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).

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.

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):

Page 25: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

Badanie i testowanie generatorów 25

0 5 10 15 20 25 30 35 40 45-5

-4

-3

-2

-1

0

1

2

3

4

5

Rysunek 5.14. Wykres kolejnych liczb pseudolosowych uzyskiwanych po zastosowaniu filtra Neumanna.

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):

-5 -4 -3 -2 -1 0 1 2 3 4 50

5

10

15

Rysunek 5.15. Histogram otrzymanych liczb pseudolosowych w wyniku zastosowania filtru von Neumanna dla 40

liczb wyjściowych.

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.

Page 26: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

Badanie i testowanie generatorów 26

-5 -4 -3 -2 -1 0 1 2 3 4 50

500

1000

1500

2000

2500

3000

3500

4000

4500

Rysunek 5.16. Histogram otrzymanych liczb pseudolosowych w wyniku zastosowania filtru von Neumanna dla

10 000 liczb wyjściowych.

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.

Page 27: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

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:

1. 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.

Page 28: Generatory liczb losowych · 2008-01-08 · Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe

www.d

zysz

la.a

plus.

pl

Bibliografia 28

7. Bibliografia

1. 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/