Neumann 127

Transkrypt

Neumann 127
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
■
KADD – Generacja liczb losowych
1
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
■
KADD – Generacja liczb losowych
2
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ść α:
■
 x  20 −n
x 1=M⋅2 , x 2=  M  ⋅2 ,  x= x 1− x 2=⋅2 ,
= = n =2
x
M 2
e
e
e
KADD – Generacja liczb losowych
3
Reprezentacja liczb w ROOT
■
W ROOT zdefiniowane są następujące typy:
Nazwa
UChar_t
Char_t
UShort_t
Short_t
UInt_t
Int_t
ULong_t
Long_t
ULong64_t
Long64_t
Float_t
Double_t
■
Typ Ilość bajtów
Integer
1
Integer
1
Integer
2
Integer
2
Integer
4
Integer
4
Integer
4
Integer
4
Integer
8
Integer
8
Float
Float
4
8
Minimum
0
-128
0
-32768
0
-2147483647
0
-2147483647
0
-9223372036854775808
Maximum
255
127
65535
32767
4294967295
2147483647
4294967295
2147483647
18446744073709551615
9223372036854775807
1.175494351e-38
2.2250738585072014e-308
3.402823466e+38F
1.7976931348623158e+308
Typy te są niezależne od architektury, na której
działa ROOT, co jest warunkiem koniecznym do
przenośności programów
KADD – Generacja liczb losowych
4
Generatory liniowe kongruentne
Komputer, jako urządzenie deterministyczne,
może jedynie generować liczby pseudolosowe
■ Najlepiej zbadanym algorytmem jest:
■
x j1=  a⋅x j c  mod m
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
KADD – Generacja liczb losowych
5
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:

a mod m=1
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.
21=2 mod 13 =2, 2 2=4 mod 13 =4, 2 3=8 mod 13 =8, 2 4=16 mod 13 =3,
25=32 mod 13 =6, 2 6=64 mod 13 =12, 2 7=128 mod 13 =11, 2 8=256 mod 13 =9,
29=512 mod 13 =5, 2 10 =1024 mod 13 =10, 2 11=2048 mod 13 =7, 212 =4096 mod 13 =1
a=2 → λ=12, a=3 → λ=3, a=4 → λ=6, a=5 → λ=4,
a=6 → λ=13, a=7 → λ=14,
14 a=8 → λ=4, a=9 → λ=3,
a=10 → λ=6, a=11 → λ=14,
14 a=12 → λ=3
KADD – Generacja liczb losowych
6
Gen. liniowe multiplikatywne
■
Przyjmując c=0
x j1=  a⋅x j  mod m
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, x0 i c=0 maksymalny okres ciągu liczb losowych
równy jest rzędowi λ(m). a musi być wtedy
elementem podstawowym modulo m, a x0 oraz m
nie mogą mieć wspólnych dzielników.
■ Okres m-1 można osiągnąć tylko dla m będącego
liczbą pierwszą.
7
KADD – Generacja liczb losowych
Testowanie jakości generatorów
Wykonujemy dwuwymiarowy wkres par (xi, xi+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 d2 między nimi.
■ Dla rozkładów jednostajnych wielkość ta przybiera
wartości w pobliżu minimum: d2 ≈ 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
■
KADD – Generacja liczb losowych
8
1cm
0,89cm
3
0,8
cm
0,49c
m
Jakość rozkładów - ilustracja
1,77cm
m-1/2
1cm
Rozkład po lewej stronie ma d2 dużo większe niż
m-1/2=0.094
■ Rozkład po prawej ma d ≈ m-1/2, co oznacza, że dla
2
danego m dobrano optymalny parameter a
9
■
KADD – Generacja liczb losowych
Kombinacja generatorów liniowych
oddzielnie
naprzemiennie
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
⋅∏ j=1  m j −1
−l −1
KADD – Generacja liczb losowych
10
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
y
y=y(x)=?
f  x dx= g  y dy
gdy f  x≡1
1,02cm
■
dy
dG  y≡g  y dy=dx
g(y)
x
x=G  y
dx
1,59
f(x)
∫ dx=∫ dG  y
y=G−1  x 
1
y min =G−1 0 , y max =G−1 1
0
1x
KADD – Generacja liczb losowych
11
Przykład – rozkład Breita-Wignera
■
Szukamy sposobu generacji liczb
z rokładu:
2
■
Najpierw liczymy dystrybuantę:

2
g  y=
⋅
  4  y−a2  2
x=G  y=
2
⋅∫−∞

y
2
dz
2
2
4  z−a 
którą można scałkować przez zamianę zmiennych
otrzymując:
arctg 2 y−a/ 
x  y=
■


1
2
Odwracając funkcję otrzymujemy:
{  }

1
y  x=a tg  x−
2
2
■
A granice transformują się następująco:
{  }

−
y 0=a tg 
=−∞
2
2
{  }


y 1=a tg 
=∞
2
2
KADD – Generacja liczb losowych
12
Rozkład Breita-Wignera – rysunek
■
Tak wygląda rozkład Breita-Wignera (po prawej)
otrzymany przez transformację rozkładu
jednostajnego (po lewej)
KADD – Generacja liczb losowych
13
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ą
■
KADD – Generacja liczb losowych
14
M. von Neumana – przykład
odrzucamy
akceptujemy
Generujemy parę
liczb z rozkładu
jednostajnego
(yi, ui)
■ Sprawdzamy, czy
ui<g(yi)
■ Jeśli tak,
akceptujemy
liczbę yi, jeśli nie –
odrzucamy ją
■ Otrzymany rozkład
jest opisany
gęstością g(y)
15
■
KADD – Generacja liczb losowych
Metoda von Neumanna – definicje
Dana jest funkcja g(y) (nie unormowana)
■ Należy znaleźć jej maksymalną wartość g , lub
max
wartość gup, co do której zachodzi gup > g(y)
■ Z rozkładu jednorodnego generujemy pary (yi, ui)
■ Granice zmienności y powinny odpowiadać
i
dziedzinie funkcji g(y). ui generujemy w granicach
(0, umax), gdzie umax ≥ gmax
■ Dla każdej pary sprawdzamy warunek u <g(y )
i
i
■ Jeśli jest on spełniony akceptujemy y
i
■ Otrzymany zbiór wartości y stanowi zestaw liczb
losowych opisany gęstością prawdopodobieństwa
proporcjonalną do funkcji g(y)
16
■
KADD – Generacja liczb losowych
Metoda von Neumanna – c.d.
■
Wydajność metody von Neumanna (procent par
zaakceptowanych) jest opisana wzorem:
b
E=
∫a g  y dy
 b−a umax
Jest ona maksymalna, gdy umax = gmax
■ Metodę von Neumanna można uogólnić na funkcję
dowolnej ilości zmiennych f(x1, x2, ..., xn)
■ W takim przypadku generujemy zbiór liczb
losowych z rozkładu jednostajnego (xi1, xi2, ..., xin, ui)
■ Sprawdzamy warunek ui < fmax(x1, x2, ..., xn)
■ Akceptujemy (lub odrzucamy) cały zestaw
zmiennych (xi1, xi2, ..., xin)
■
KADD – Generacja liczb losowych
17
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: y zgodnie z rozkładem s(y)
i
oraz ui z rozkładu jednostajnego (0, 1.0)
■ Z warunku ui·s(y)<g(yi) akceptujemy (lub nie) yi
■ Zaakceptowane liczby podlegają rozkładowi g(y)
■
y
P Y  y=∫a
■
y
g t 
st 
dt=∫a g t  dt=G  y−G  a
st 
Wydajność takiej metody wynosi:
b
∫a g  y dy
E= b
∫a s y dy
KADD – Generacja liczb losowych
18
M. von Neumanna z f. pom. - przykład
■
Dana jest gęstość prawdopodobieństwa:
g  y=cos x/ x11/ 4, 0 y2
Określa ona dwie wartości: g(0) = c oraz g(2) = d
■ W zwykłej metodzie von Neumanna mamy u
=c
max
■ Jako funkcję pomocniczą wybieramy prostą
przechodzącą przez punkty (0, c), (2, d).
■ Rozwiązując prosty
układ równań:
■
8,15cm
c
2,55cm
d
KADD – Generacja liczb losowych
c=a⋅0 b
d =a⋅2 b
otrzymujemy s(y):
d −c
s y=
yc
2
19
Przykład – c.d.
■
Co daje dystrybuantę:
S  y=
■
d−c 2
y cy
4
Oraz funkcję odwrotną:
2
c−
c
−c−d 

−1
y=S  x=2
c−d 
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%
■
KADD – Generacja liczb losowych
20
Genracja liczb o rozkładzie normalnym
■
Rozkład normalny:
1
f  x=
e−x
2
2
/2
nie ma analitycznej dystrybuanty, nie można więc
stosować metody zamiany zmiennych. Używamy
metody biegunowej Boxa i Mullera.
■ Generujemy parę liczb (u1, u2) z rozkładów
jednostajnych. Dokonujemy zamiany zmiennych
v1=2u1 – 1, v2=2u2 – 1
■ Obliczamy s = v 2 + v 2. Gdy s≥1, odrzuamy parę.
1
2
■ Otrzymujemy dwie liczby opsiane roz. normalnym:
x1=v 1 − 2/ s ln s
x 2=v 2 − 2/ s ln s
KADD – Generacja liczb losowych
21
Całkowanie metodą Monte-Carlo
■
Rozważmy wzór na wydajność metody von
Neumanna
y max
E=
■
∫y
min
g  y dy
 y max − y min  u max
Przekształcając, mamy:
y max
I =∫y
min
=
N zaakceptowane
N wszystkie
N zaakceptowane
g  y dy=
 y max − y min  u max
N wszystkie
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
1
=
I
 N zaakceptowane
KADD – Generacja liczb losowych
22
Całka Monte-Carlo – liczba π
■
Obliczymy wartość liczby π przy pomocy metody
Monte-Carlo. Użyjemy funkcji:
g  y=   R 2 − y 2 , 0 yR ; 0, 0 yR
■
Jej całka w granicach (0.0, 1.0) wynosi π/4. Dla
prostoty przyjmiemy R=1.0.
KADD – Generacja liczb losowych
23
Prawo propagacji błędów
■
Możemy obliczyć macierz błędów wielkości Y:
T
C y =T C x T ,
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 cij=0, dla i≠j, czyli gdy macierz Cx jest
diagonalna, możemy napisać:
■
n
 Y i =∑ j=1
2
■
 
∂ yi
∂xj
2
2
  X j
Co daje nam, po utożsamieniu σ z błędem
pomiarowym, prawo propagacji błędów:
 y i =

n
∑ j=1
 
∂ yi
∂xj
2
 x j 
KADD – Generacja liczb losowych
2
24

Podobne dokumenty