330 likes | 539 Views
Monte-Carlo meetodid 1. loeng. Märt Möls martm@ut.ee. Ajakulu: 0,01s arvu kohta Arvutus, mis vajab 100miljonit juhuslikku suurust ootaks vajalike arvude genereerimise taga 11päeva. Kasutamine R’i kaudu: library(random) a=randomNumbers(n=100, min=1, max=1000, base=10).
E N D
Monte-Carlo meetodid1. loeng Märt Möls martm@ut.ee
Ajakulu: 0,01s arvu kohta Arvutus, mis vajab 100miljonit juhuslikku suurust ootaks vajalike arvude genereerimise taga 11päeva. Kasutamine R’i kaudu: library(random) a=randomNumbers(n=100, min=1, max=1000, base=10)
Juhuslikud ja pseudojuhuslikud arvud Def. 1. Arve x1, ..., xn nimetatakse juhuslikule suurusele X vastavateks juhuslikeks arvudeks, kui nad on saadud juhusliku suuruse X väärtustena juhusliku katse sõltumatul kordamisel
Juhuslikud ja pseudojuhuslikud arvud Def. 2. Arve x1, ..., xn nimetatakse juhuslikule suurusele X vastavateks pseudojuhuslikeks arvudeks, kui nad on saadud mingi algoritmi või eeskirja kohaselt ja neid ei õnnestu eristada juhuslikule suurusele X vastavatest juhuslikest arvudest statistiliste testide abil.
Üks vanimatest “juhuslike arvude” generaatoritest – ruudu keskosa meetod Võta üks arv: 2345 Tõsta see ruutu 23452 = 05499025 U1=0,4990 49902 = 24900100 90012 = 81018001 U2=0,9001 U3=0,0180 …………. ………….
Pole päriselt probleemivaba… 0.4990 0.9001 0.0180 0.0324 0.1049 0.1004 0.0080 0.0064 0.0040 0.0016 0.0002 0.0000 0.0000 0.0000 …………
RANDU – kunagine kõige populaarsem pseudojuhuslike arvude generaator
Kursuse kava • Õpime tekitama “juhuslikke” arve arvuti abil; • kontrollime, kas kasutatav juhuslike arvude generaator on piisavalt hea; • õpime muutma juhuslikkust endale sobivale kujule (kuidas saada soovitud jaotusega juhuslikke suuruseid); • õpime juhuslikke arve kasutama erinevate ülesannete lahendamisel (integreerimine, usaldusintervallide leidmine, hinnangu nihke vähendamine, ...) .
Aine edukaks läbimiseks • Tuleb sooritada 2 kontrolltööd (praktikumide ajal). Kontrolltöö tulemus läheb arvesse eksamihinde arvutamisel (40% hindest tuleb kontrolltöö tulemusest); • 60% eksamihindest moodustab eksamitöö.
Tavalähenemine Genereeri üks või mitu ühtlasest jaotusest U(0,1) pseudojuhuslikku suurust Transformeeri ühtlasest jaotusest (pseudo)juhuslik suurus soovitud jaotusega juhuslikuks suuruseks
Lineaarne kongruentne generaator Pseudojuhuslikud arvud vahemikus 0..1 saadakse valemiga:
Näide a=5, b=1, m=8 x0 = 1 x1 = 6 x2 = 7 x3 = 4 x4 = 5 x5 = 2 x6 = 3 x7 = 0 x8 = 1 x9 = 6 ....... U1 = 6 / 8 = 0,75 U2 = 7 / 8 U2 = 7 / 8 U3 = 4 / 8 Vaadeldud pseudojuhuslike arvude generaator läks tsüklisse: alates 9. genereeritud arvust hakkavad genereeritud arvud iseennast kordama. Lineaarne kongruentne generaator hakkab hiljemalt m arvu pärast iseennast kordama.
Iseenda kordamine... ...pole ainult lineaarse kongruentse generaatori omapära. Seda teevad kõik pseudojuhuslike arvude generaatorid. Pseudojuhuslike arvude generaatori üldine tööpõhimõte: • Lähtesta generaator algseisundisse S0 • Leia uus seisund Si = f(Si-1) • Väljasta juhuslik suurus Ui = g(Si) • Suurenda i väärtust: i = i+1 ja jätka punktist 2. Kuna seisundi Si meeleshoidmiseks kasutatav mälumaht on lõplik, peab iga pseudojuhuslike arvude generaator lõpuks iseennast kordama hakkama.
Näide 2 a=5, b=1, m=9 1 6 4 0 1 6 4 0 ....
Teoreem Lineaarse kongruentse meetodi korral saavutatakse tsükli maksimaalne pikkus m parajasti siis, kui on täidetud järgmised tingimused: 1. suurim ühistegur SÜT(b, m)=1 2. (a-1) on iga algarvu kordne, millega jagub m(kui m jagub p-ga siis ka a-1 jagub p-ga) 3. Kui m jagub 4-ga, siis peab ka a-1 jaguma 4-ga.
Generaator 1 Generaator 2 a=5, b=1, m=8 a=5, b=1, m=9 • SÜT(b,m)=1 1. SÜT(b,m)=1 • (a-1) jagub 2-ga 2. (a-1) ei jagu 3-ga • (a-1) jagub 4-ga 3. m ei jagu 4-ga. Kui m jagub 4-ga, siis peab ka (a-1) jaguma 4-ga
Parandame generaatorit 2 Generaator 2 a=5, b=1, m=9 • SÜT(b,m)=1 • (a-1) jagub 3-ga • m ei jagu 4-ga. 1 8 3 4 2 6 7 5 0 1 8 ..... 7
Märkus: multiplikatiivne generaator Multiplikatiivse generaatori korral on maksimaalne tsüklipikkus m-1. See saavutatakse ainult juhul, kui m on algarv ja a≠0 on nn lihtne juur: mistahes arvu m-1 algteguri p korral a(m-1)/p ei jagu arvuga m.
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=75b=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
Pikk periood ei taga veel head generaatorit a=1, b=1, m=mustmiljon Xi = 1, 2, 3, 4, 5, 6, 7, 8, 9, ..... Tuleks jälgida korrelatsiooni järjestikuste LKG-generaatori poolt genereeritud arvude vahel. Sageli saab mõistliku generaatori valikuga a≈ sqrt(m)