310 likes | 566 Views
Monte-Carlo meetodid 2. loeng. Pseudojuhuslike arvude generaatorid. Eelmine loeng. Lineaarne kongruentne generaator. Pseudojuhuslikud arvud vahemikus 0..1 saadakse valemiga:. Lineaarse kongruentse generaatori abil on võimalik saada maksimaalselt m erinevat pseudojuhuslikku arvu:.
E N D
Monte-Carlo meetodid2. loeng Pseudojuhuslike arvude generaatorid
Eelmine loeng Lineaarne kongruentne generaator Pseudojuhuslikud arvud vahemikus 0..1 saadakse valemiga: Lineaarse kongruentse generaatori abil on võimalik saada maksimaalselt m erinevat pseudojuhuslikku arvu:
Soovitused (Handbook of Monte-Carlo Methods, D.P.Kroese; T. Taimre; Z. I. Botev): m>261 ≈2*1018 Ei tohiks kasutada generaatoreid, mille m on esitatav kujul 2p Näiteid MinSTD a=75 b=0 m=231-1 SAS (UNIFORM) a=397204094 b=0 m=231-1 Visual Basic (ver 6 ja varasem): a=1140671485 b=12820163 m=224 MMIX (Knuth) a=6364136223846793005 b=1442695040888963407 m=264 Maple: a=427419669081, b=0, m=1012-11 Pierre L'Ecuyer:a=243267374564284687042667403923350539132 b=0, m=2128-159 .... Vaata: http://random.mat.sbg.ac.at/results/karl/server/node5.html
Kuidas saaks paremini?? • Kombineeritud LKG-d Whichman-Hill Periood (m1-1)*(m2-1)*(m3-1)/4 ≈ 6,95*1012 Ekvivalentne LKG-ga: a=16555425264690 b=0 m=27817185604309
Kasutame pikemat ajalugu? Multiple-Recursive Generators (MRG) Pseudojuhuslikud arvud vahemikus 0..1 saadakse valemiga:
Lagged Fibbonacci (LF) generaatorid xi = (xi-p + xi-q) mod m Näide: Knuth-Taocp-2002 xi = (xi-37 + xi-100) mod 230 Periood ~2129
Lagged Fibbonacci (LF) generaatorid xi = (xi-p + xi-q) mod m “-” või “×” või “+” või “+” Näide 1: RAN3 xi = (xi-55 - xi-24) mod m (m=232?) Näide 2: R250 xi = xi-250 XOR xi-103 Periood: 2250-1
Või nende kombinatsioonid Periood ligikaudu 3*1057 Nimi: MRG32k3a
xi = (xi-p XOR xi-q) mod m xi = (xi-p XOR xi-q A) mod m xi = (xi-p XOR g(xi-q, xi-q-1)A ) mod m Mersenne-Twister Periood: 219937-1 R-is funktsioonis runif vaikimisi kasutatav generator.
Salakirjade jaoks... • Blum-Blum-Shub generaator kus m=p*q, kus p ja q on suured raskestiaimatavad algarvud, mille jääk jagamisel 4-ga on 3 (nn Blum’i algarvud), näiteks: p = 1267650600228229401496703981519 q = 1267650600228229401496704318359 Igal iteratsioonil kasutatakse kõige väiksema biti väärtust – millistest pannakse kokku kasutatav pseudojuhuslik arv.
(Pseudo)juhuslike arvude generaatori testimine Esmane pilk “juhuslikele” arvudele. Vaatame punkte (ui+1; ui) või (xi+1; xi). Kas punktid tunduvad ühikruutu katvat juhuslikult? 0.226 0.693 0.604 0.921 0.184 0.968 ..... (0.226; 0.693) (0.693; 0.604) (0.604; 0.921) ....
Paraleelsete sirgete vaheline kaugus: Y=ax+c1 Y=ax+c2 Kaugus= Abs(c2-c1)/sqrt(1+a2)
Sirged ise: Variant 1 Variant 2 y=ax+b ... y=ax+b-m y=ax+b-m*2 y=ax+b-m*3 ....
d=0.3162, 0.1162, 0.0790, 0.0632 S=0.1839, 0.5003, 0.7357, 0.9196 Dim = 2 dmin = sqrt(4/3) / sqrt(m) Dim = 3 dmin = 21/3m(-1/3) ....
Kas on tegemist ühtlase jaotusega? Kui X~U(0,1) siis EX = 0,5 DX = 1/12
Kolmogorov-Smirnovi test Valim 0,12 0,22 0,23 0,25 0,45 0,46 0,60 0,80
Kolmogorov-Smirnovi test Valim 0,12 0,22 0,23 0,25 0,45 0,46 0,60 0,80 D=0,29
Või p-väärtus R-is: > ks.test(x, punif) One-sample Kolmogorov-Smirnov test data: x D = 0.29, p-value = 0.4314 alternative hypothesis: two-sided Teoreetiline jaotusfunktsioon (R-i funktsioon, mis arvutab jaotusfunktsiooni väärtuseid) Valim (genereeritud juhuslikud suurused)