Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis...

24
1 KADD – Generacja liczb losowych Generacja liczb pseudolosowych Zapis liczb w komputerze Generatory liczb pseudolosowych Liniowe kongruentne Liniowe mutiplikatywne kongruentne Jakość generatorów Test widmowy Generowanie liczb losowych o dowolnym rozkładzie Transformacja rozkładu jednostajnego Metoda von Neumanna akceptacji i odrzucania Generacja liczb losowych o rozkładzie normalnym Całkowanie metodą Monte-Carlo

Transcript of Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis...

Page 1: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

1KADD – Generacja liczb losowych

Generacja liczb pseudolosowych■ Zapis liczb w komputerze■ Generatory liczb pseudolosowych

Liniowe kongruentne Liniowe mutiplikatywne kongruentne

■ Jakość generatorów Test widmowy

■ Generowanie liczb losowych o dowolnym rozkładzie Transformacja rozkładu jednostajnego Metoda von Neumanna akceptacji i odrzucania Generacja liczb losowych o rozkładzie

normalnym■ Całkowanie metodą Monte-Carlo

Page 2: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

2KADD – Generacja liczb losowych

Zapis liczb w komputerze

■ Liczby pamiętane są w postaci binarnej:213=1*128+1*64+0*32+1*16+0*8+1*4+0*2+1*1 =011010101 (binarnie)

■ Posługujemy się bajtami – jednostkami 8-bitowymi. Dzisiejsze komputery posługują się albo 16-to, albo 32-bitowymi liczbami.

■ Znając liczbę bitów składających się na liczbę możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo)

■ Liczby bez znaku mają wartości od 0 do 2k, zmienne ze znakiem – od -2k-1 do 2k-1 – 1, gdzie k to ilość bitów użytych do zapisania liczby

Page 3: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

3KADD – Generacja liczb losowych

Liczby zmiennoprzecinkowe

■ Liczbę zmiennoprzecinkową zapisujemy jako:x=M*RE gdzie M nazywamy mantysą, R podstawą, a E - wykładnikiem. W nauce posługujemy się notacją z R=10. Komputery zwykle przechowują liczby w formacie z R=2. Mając R, do przedstawienia liczby zmiennoprzecinkowej wystarczy znajomość dwóch liczb całkowitych: M i E.

■ Zakres wartości to 2emin < |x| < 2emax

■ Dwie liczby są różne, gdy ich mantysy różnią się o minimalną wartość α:

x1=M⋅2e , x2= M ⋅2e , x=x1−x2=⋅2e , x

x=

M

= 20

2n=2−n

Page 4: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

4KADD – Generacja liczb losowych

Reprezentacja liczb w ROOT

■ W ROOT zdefiniowane są następujące typy:

■ Typy te są niezależne od architektury, na której działa ROOT, co jest warunkiem koniecznym do przenośności programów

Nazwa Typ Ilość bajtów Minimum MaximumUChar_t Integer 1 0 255Char_t Integer 1 -128 127UShort_t Integer 2 0 65535Short_t Integer 2 -32768 32767UInt_t Integer 4 0 4294967295Int_t Integer 4 -2147483647 2147483647ULong_t Integer 4 0 4294967295Long_t Integer 4 -2147483647 2147483647ULong64_t Integer 8 0 18446744073709551615Long64_t Integer 8 -9223372036854775808 9223372036854775807

Float_t Float 4 1.175494351e-38 3.402823466e+38FDouble_t Float 8 2.2250738585072014e-308 1.7976931348623158e+308

Page 5: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

5KADD – Generacja liczb losowych

Generatory liniowe kongruentne

■ Komputer, jako urządzenie deterministyczne, może jedynie generować liczby pseudolosowe

■ Najlepiej zbadanym algorytmem jest:

tzw. generator liniowy kongruentny (LCG)■ Ma on okres równy maksymalnie m■ Aby generator miał maksymalny okres:

c i m nie mogą mieć wspólnych dzielników b = a – 1 jest wielokrotnością każdej liczby

pierwszej p, która jest dzielnikiem m b jest wielokrotnością 4, o ile m jest również

wielokrotnością 4

x j1=a⋅x jc mod m

Page 6: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

6KADD – Generacja liczb losowych

Elementy podstawowe – rzędy■ Rozpatrujemy liczby a i m, które nie mają

wspólnych dzielników. Najmniejszę liczbę λ, która dla ustalonego a spełnia równanie:

nazywamy rzędem a modulo m.

■ Wszystkie liczby a, które mają maksymalne możliwe λ(m) to elementy podstawowe modulo m.

■ Przykład: m = 13.

a=2 → λ=12, a=3 → λ=3, a=4 → λ=6, a=5 → λ=4, a=6 → λ=13, a=7 → λ=1414, a=8 → λ=4, a=9 → λ=3, a=10 → λ=6, a=11 → λ=1414, a=12 → λ=3

amod m=1

21=2 mod 13 =2, 22=4 mod 13 =4, 23=8 mod 13 =8, 24=16 mod 13 =3,

25=32 mod 13 =6, 26=64 mod 13 =12, 27=128 mod 13 =11, 28=256 mod 13 =9,

29=512 mod 13 =5, 210=1024 mod 13 =10, 211=2048 mod 13 =7, 212=4096 mod 13 =1

Page 7: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

7KADD – Generacja liczb losowych

Gen. liniowe multiplikatywne■ Przyjmując c=0

otrzymujemy generator multiplikatywny liniowy kongruentny (MLCG)

■ Są one szybsze, ale nie dają nigdy wartości 0 i mają krótsze okresy

■ Istnieje twierdzenie, które mówi, że dla danego m, a, x

0 i c=0 maksymalny okres ciągu liczb losowych

równy jest rzędowi λ(m). a musi być wtedy elementem podstawowym modulo m, a x

0 oraz m

nie mogą mieć wspólnych dzielników.■ Okres m-1 można osiągnąć tylko dla m będącego

liczbą pierwszą.

x j1=a⋅x j mod m

Page 8: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

8KADD – Generacja liczb losowych

Testowanie jakości generatorów

■ Wykonujemy dwuwymiarowy wkres par (xi, x

i+1)

■ Obsadzonych będzie jedynie (maksymalnie) m z m2 węzłów

■ Szukamy prostych łączących obsadzone węzły sieci, a następnie wybieramy największą z odległości d

2 między nimi.

■ Dla rozkładów jednostajnych wielkość ta przybiera wartości w pobliżu minimum: d

2 ≈ m-1/2, co oznacza,

że przestrzeń jest równomiernie wypełniona■ Dla rozkładów niejednostajnych (przy źle

dobranych parametrach a i m) d2 >> m-1/2

Page 9: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

9KADD – Generacja liczb losowych

Jakość rozkładów - ilustracja

■ Rozkład po lewej stronie ma d2 dużo większe niż

m-1/2=0.094■ Rozkład po prawej ma d

2 ≈ m-1/2, co oznacza, że dla

danego m dobrano optymalny parameter a

1,77cm

0,49

cm

1cm

0,89cm 0,83

cm

1cm

m-1/2

Page 10: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

10KADD – Generacja liczb losowych

Kombinacja generatorów liniowych

■ Najlepsze wyniki (najdłuższy okres) otrzymuje się łącząc ze sobą kilka (l) generatorów liniowych

■ Maksymalny okres p równy jest wtedy:p=2−l−1⋅∏ j=1

lm j−1

oddzielnieoddzielnie naprzemiennienaprzemiennie

Page 11: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

11KADD – Generacja liczb losowych

Transformacja rozkładu jednorodnego■ Transformację rozkładu jednostajnego możemy

wykorzystać jako prosty sposób generacji liczb losowych o skomplikowanych gęstościach prawdopodobieństwa

x

y=y(x)=?y

g(y)

1,59dx

1,02

cm

dy

f xdx=g ydy

x

f(x)

0 1

1

gdy f x≡1

dG y≡gydy=dx

∫ dx=∫ dG y

x=G y

ymin=G−10 , y

max=G−11

y=G−1x

Page 12: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

12KADD – Generacja liczb losowych

Przykład – rozkład Breita-Wignera■ Szukamy sposobu generacji liczb z rokładu:

■ Najpierw liczymy dystrybuantę:

którą można scałkować przez zamianę zmiennych otrzymując:

■ Odwracając funkcję otrzymujemy:

■ A granice transformują się następująco:

g y= 2

⋅2

4 y−a2 2

x=G y= 2

⋅∫−∞

y 2

4 z−a2 2 dz

x y=arctg 2 y−a/

1

2

y x=a2

tg { x−12 }

y 0=a2

tg {−2 }=−∞ y 1=a

2

tg {2 }=∞

Page 13: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

13KADD – Generacja liczb losowych

Rozkład Breita-Wignera – rysunek

■ Tak wygląda rozkład Breita-Wignera (po prawej) otrzymany przez transformację rozkładu jednostajnego (po lewej)

Page 14: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

14KADD – Generacja liczb losowych

Metoda von Neumanna

■ Metody generacji liczb losowych przedstawione dotychczas mają ograniczone pole zastosowań. Wymagają znajomości postaci analitycznej dystrbuanty, a także jej odwracalności. Ich stopień skomplikowania rośnie też gwałtownie przy wzroście ilości zmiennych funkcji gęstości

■ Wprowadzimy metodę generacji funkcji pseudolosowych, która wymaga jedynie znajomości funkcji gęstości prawdopodobieństwa i nadaje się do generacji liczb losowych z praktycznie dowolną taką funkcją

Page 15: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

15KADD – Generacja liczb losowych

M. von Neumana – przykład■ Generujemy parę

liczb z rozkładu jednostajnego (y

i, u

i)

■ Sprawdzamy, czy u

i<g(y

i)

■ Jeśli tak, akceptujemy liczbę y

i, jeśli nie –

odrzucamy ją■ Otrzymany rozkład

jest opisany gęstością g(y)

akceptujemyakceptujemy

odrzucamyodrzucamy

Page 16: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

16KADD – Generacja liczb losowych

Metoda von Neumanna – definicje■ Dana jest funkcja g(y) (nie unormowana)■ Należy znaleźć jej maksymalną wartość g

max, lub

wartość gup, co do której zachodzi g

up > g(y)

■ Z rozkładu jednorodnego generujemy pary (yi, u

i)

■ Granice zmienności yi powinny odpowiadać

dziedzinie funkcji g(y). ui generujemy w granicach

(0, umax

), gdzie umax

≥ gmax

■ Dla każdej pary sprawdzamy warunek ui<g(y

i)

■ Jeśli jest on spełniony akceptujemy yi

■ Otrzymany zbiór wartości y stanowi zestaw liczb losowych opisany gęstością prawdopodobieństwa proporcjonalną do funkcji g(y)

Page 17: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

17KADD – Generacja liczb losowych

Metoda von Neumanna – c.d.

■ Wydajność metody von Neumanna (procent par zaakceptowanych) jest opisana wzorem:

■ Jest ona maksymalna, gdy u

max = g

max

■ Metodę von Neumanna można uogólnić na funkcję dowolnej ilości zmiennych f(x

1, x

2, ..., x

n)

■ W takim przypadku generujemy zbiór liczb losowych z rozkładu jednostajnego (xi

1, xi

2, ..., xi

n, ui)

■ Sprawdzamy warunek ui < f

max(x

1, x

2, ..., x

n)

■ Akceptujemy (lub odrzucamy) cały zestaw zmiennych (xi

1, xi

2, ..., xi

n)

E=∫a

bg ydy

b−aumax

Page 18: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

18KADD – Generacja liczb losowych

Metoda von Neumanna z f. pomocniczą■ Mamy funkcję g(y). Szukamy takiej funkcji s(y), dla

której const ≥ s(y) ≥ g(y), oraz łatwo wygenerować zmienne losowe opisane funkcją s(y)

■ Losujemy parę liczb: yi zgodnie z rozkładem s(y)

oraz ui z rozkładu jednostajnego (0, 1.0)

■ Z warunku ui·s(y)<g(y

i) akceptujemy (lub nie) y

i

■ Zaakceptowane liczby podlegają rozkładowi g(y)

■ Wydajność takiej metody wynosi:

E=∫a

bg ydy

∫a

bs ydy

P Y y=∫a

yst

g t st

dt=∫a

yg t dt=G y−Ga

Page 19: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

19KADD – Generacja liczb losowych

M. von Neumanna z f. pom. - przykład■ Dana jest gęstość prawdopodobieństwa:

■ Określa ona dwie wartości: g(0) = c oraz g(2) = d■ W zwykłej metodzie von Neumanna mamy u

max = c

■ Jako funkcję pomocniczą wybieramy prostą przechodzącą przez punkty (0, c), (2, d).

g y=cos x/ x11/4, 0 y2

2,55

cm8,

15cmc

d

■ Rozwiązując prosty układ równań:

otrzymujemy s(y):

c=a⋅0 bd=a⋅2 b

s y= d−c2

yc

Page 20: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

20KADD – Generacja liczb losowych

Przykład – c.d.■ Co daje dystrybuantę:

■ Oraz funkcję odwrotną:

■ Generujemy zmienną

losową x w granicach S(0) =0 do S(2) = c+d

■ Losujemy zmienną testową u z (0.0, 1.0)

■ Akceptujemy y=S-1(x), gdy u<g(y)/s(y)

■ Wydajność wzrasta o 50%

y=S−1 x=2c−c2−c−d

c−d

S y= d−c4

y2cy

Page 21: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

21KADD – Generacja liczb losowych

Genracja liczb o rozkładzie normalnym

■ Rozkład normalny:

nie ma analitycznej dystrybuanty, nie można więc stosować metody zamiany zmiennych. Używamy metody biegunowej Boxa i Mullera.

■ Generujemy parę liczb (u1, u

2) z rozkładów

jednostajnych. Dokonujemy zamiany zmiennych v

1=2u

1 – 1, v

2=2u

2 – 1

■ Obliczamy s = v12 + v

22. Gdy s≥1, odrzuamy parę.

■ Otrzymujemy dwie liczby opsiane roz. normalnym:

f x= 1

2e−x2/2

x1=v1−2/ s ln s x2=v2−2/ s ln s

Page 22: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

22KADD – Generacja liczb losowych

Całkowanie metodą Monte-Carlo

■ Rozważmy wzór na wydajność metody von Neumanna

■ Przekształcając, mamy:

■ Możemy obliczyć DOWOLNĄ całkę oznaczoną

poprzez prostą generację liczb z rozkładu jednostajnego! Może to być również funkcja dowolnie wielu zmiennych.

■ Względna dokładność wyznaczenia całki wynosi:

I=∫ymin

ymax

g y dy=N zaakceptowane

N wszystkie ymax− ymin umax

E=∫ymin

ymax

g y dy

ymax− ymin umax

=N zaakceptowane

N wszystkie

II= 1

N zaakceptowane

Page 23: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

23KADD – Generacja liczb losowych

Całka Monte-Carlo – liczba π■ Obliczymy wartość liczby π przy pomocy metody

Monte-Carlo. Użyjemy funkcji:

■ Jej całka w granicach (0.0, 1.0) wynosi π/4. Dla prostoty przyjmiemy R=1.0.

g y =R2 − y2 , 0 yR ;0, 0 yR

Page 24: Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od

24KADD – Generacja liczb losowych

Prawo propagacji błędów

■ Możemy obliczyć macierz błędów wielkości Y:

■ Błędy zmiennych Y zależą od całej macierzy kowariancji, a nie tylko od błedów zmiennej x.

■ Tylko i wyłącznie, gdy zmienne X są niezależne czyli c

ij=0, dla i≠j, czyli gdy macierz C

x jest

diagonalna, możemy napisać:

■ Co daje nam, po utożsamieniu σ z błędem pomiarowym, prawo propagacji błędów:

C y=T C xT T ,

2Y i=∑ j=1

n ∂ y i

∂ x j

2

2X j

yi=∑ j=1

n ∂ yi

∂ x j

2

x j2