Véletlenszám generátorok
Bevezetés Nincs elfogadott megközelítése a témának Alapvetően 2 fajta generátor: Szoftveres Hardveres Egyik legjobb szoftveres generátor: Mersenne Twister 2^19937 1 periódusú, 623 dimenzióban még egyenletesen szór 2
Bevezetés Sok megbízható algoritmus, de bonyolult elmélet Pszeudovéletlenség definíciója helyett inkább dogmák Definíció1: Egy sorozat pszeudovéletlen, ha a determinisztikus algoritmusok számára véletlennek tűnik 3
Követelmények Nagy periódus Ismételhetőség Eloszlás egyenletessége 4
Lineáris generátor a, c, N, x(0) adottak, innen a következő rekurzió: x(n+1):=a*x(n)+c mod N Periódusa nyilván legfeljebb N Így aztán nagy N a kívánatos (általában 2^32, 2^48) Még ez sem garantálja, hogy N-hez közeli lesz a periódus A mod N műveletek drágák nagy N-re Manapság 2^40 darab szám is kellhet, így ez mára már nem elég 5
Lineáris generátor Ha N-et 2 hatványnak választjuk: Minden s-re az alsó s bit periódusa lf. 2^s Hiszen annyi kböző bitsorozat lehet Tehát az alsó bit periódusa 2, vagyis felváltva kapunk páros és páratlan számokat Egy ideig ANSI C-ben ez volt az alapértelmezett, de ott csak a rand specifikációja van megadva 6
GFSR Tf.: a CPU w bites szavakkal operál Adott x(0), x(1),, x(n-1) valamilyen n- re, m x(j+n):=x(j+m) XOR x(j) Bitenkénti kizáró vagy Belátható, hogy ha n>m>0 olyan, hogy t n +t m +1 primitív polinom a kételemű test felett, akkor a periódus eléri (2^n)-1-et. 60<=n<=1000 használatos a gyakorlatban 7
GFSR tesztje Rögzítve egy N-et vegyük az összes egymás utáni N hosszú szót Számoljuk meg az 1-eseket az egyes szavakban Ha ezek eloszlása Binom(N,1/2), a véletlenszerűség elég jó Ám N>n-re nagy az eltérés ettől az eloszlástól Oka: A kizáró vagy természete, ha sok azonos jegy követi egymást, akkor a következő jegy nagyobb eséllyel lesz 0. 8
GFSR Khi-négyzet próba is visszautasítja azt, hogy ez valóban Binom(N,1/2) Ez a hiba sok hamis szimulációs eredményt okozott Főleg ott, ahol a modell állapota erősen függött a megelőző állapotoktól Mégis széleskörben használt, pedig a hibát már vagy 25 éve kimutatták 9
Pszeudovéletlenség Definíció2 (Kolmogorov): Egy sorozat pszeudovéletlen, ha lehető legrövidebb leírása maga a sorozat. Hatékony algoritmushoz ez már túl nagy megszorítás így pl.: lineáris generátor és GFSR azonnal kiesik 10
Pszeudovéletlenség Definíció3 (kriptográfiai előzmény): Egy sorozat kiszámíthatóságban pszeudovéletlen, ha minden lépésben polinomidőben generálható a következő eleme, de azt megjósolni nem lehet polinomidejű algoritmussal. Kevesebb megszorítás, és ezen algoritmusokat már vizsgálni is tudjuk (pl.: NP-teljes problémák) 11
Pszeudovéletlenség Van-e a 3-mas definíciót kielégítő sorozat? A prímfaktorizációra építve sikerült találni egy ilyen generátort BBS 1986 (Blum készítette) Belátható: Ha lenne polinomidejű algoritmus a következő output megjósolására, akkor prímfaktorizációra is lenne. 12
Sorozatok generálása Automatával: Adott S az állapotok véges halmaza, és f: S->S átmenetifüggvény. s(0) a kezdeti állapot, s(n+1)=f(s(n)), a kimenetet egy o:s->o függvény szolgáltatja Periódus felső korlátja: S elemszáma Az automata elég általános, az implementációs kérdéseket nyitva hagyja Káoszelméletre is építhető, de ott a kontinuum számosság döntő, pl.: ranlux nevű generátor esetén: erős korreláció a kezdeti értékekkel 13
Véges testekre épülő automata Általában a kételemű testet használjuk (azaz mod 2 maradékosztályok) Az automata állapotai: Az F 2 fölötti d- dimenziós vektortérből valók Átmenetifüggvény: d d mátrix Partícionáljuk a vektort n darab w számú komponensre 14
Véges testekre épülő automata Twisted GFSR: f: (x 0,x 1,,x n-1 ) -> (x 1,,x d-1,x 0 +x m ) Periódusa beláthatóan maximum 2 n -1, 1-esek eloszlása nagyjából egyenletes Kis módosítás: Matsumoto és Kurita speciális A mátrixával: x j+n =x j+m XOR x j A Vektor-mátrix szorzás kioptimalizálható shiftelésekre 15
Twisted GFSR Periódusa így már 2 nw -1, és elég sok paraméterrel el is éri ezt Matsumoto és Kurita másik mátrixa: d d méretű T mátrix (tempering matrix) xt a kimeneti sorozat, így a magasabb dimenziós eloszlást segítik Hátránya: Célszerű nagy n-et választani, viszont 2 nw -1 faktorizációja sokáig tart és ez kell ehhez. C-ben tt800 nevű eljárás (rand-ban hívható) 16
Mersenne Twister Twisted GFSR egy változata Periódusa: 2 19937-1 Algoritmus: lásd.: tábla Változatai: 64 és 128 bites verziók 64 bitesnek 2 változata: Egyik a klasszikus Másik kicsit mélyebbre nyúlik le a képletben 128 bitesnek vannak párhuzamos változatai is (SIMD) 17
Mersenne Twister Gyengeségei: Kezdőértékeket nagyon jól meg kell választani Ha sok 0 van benne, akkor maga a sorozat is inkább 0-kal lesz teli Ennek ellenére egyik legjobb generátor Statisztikai tesztek legtöbbjén átmegy 18
Véletlenszerűség metrikái Első ötlet: Statisztikai minták és eloszlások vizsgálata hipotézisekkel Egy-egy próba csak kevés tulajdonságot vizsgál Más-más mögöttes matematikai struktúra esetén mást kell tesztelni Bizonytalansági tényező: 100%-os teszt nincs (?) Paraméterektől függő eredmények 19
Higher dimensional equidsitribution property Tegyük fel, hogy az automata minden kezdőállapothoz m darab véletlenszámot rendel Azaz ezen vektorok sorozatát vizsgáljuk Def.: Ha ezen vektorsorozat periódusa maximális, és O m -ben egyenletes eloszlású s 0 véletlenszerű választása esetén Legfeljebb m változós generátorokra, ha ez teljesül, akkor a legtöbb statisztikai teszten is átmennek (tapasztalatok alapján) 20
Higher dimensional equidsitribution property Def.: Ha a fenti definíció teljesül a fenti sorozatra úgy, hogy előtte a felső v bitre csonkítunk (azaz csak azt hagyjuk meg), akkor azt mondjuk, hogy v-bit pontossággal teljesül a ~ Adott v-re a legnagyobb dimenziót, amire még teljesül k(v)-vel jelöljük. k(v)<=[dim(s)/v] (alsó egészrész) Ha minden v-re 1..w-ig teljesül, akkor a generátort optimálisan equidistributedben mondjuk 21
Véletlenszerűség metrikái GFSR-re nem teljesül e tulajdonság, de Twisted GFSR és MT kielégíti ezt MT például 623 dimenzióig teljesíti 22
Inicializáció Nem mindegy persze, hogy milyen kezdőértéket adunk generátorunknak Sokszor a 32 bites számok sem elegendőek (pl.: fizikai szimulációknál) Ha véletlenszerűen választunk számokat, nagy (1/2-hez tartó) eséllyel kaphatjuk kétszer ugyanazt (ld.: születésnap paradoxon) Szisztematikus kezdőérték választás esetén a kapott értékek is korrelálhatnak hozzá 23
Párhuzamosítás Első ötlet: Minden processzor más generáló eljárást kap Reprodukálhatóság sérül, ki tudja melyik utasítás mikor fut éppen egymáshoz képest Javítás: Minden véletlen számot felhasználó objektum kap egy egyedi azonosítót Ezen keresztül azonosíthatjuk a megfelelő generátor, azaz mindenki meghatározott generátort kap A kezdőértéket az ID segítségével generáljuk, ám óvatosan kell eljárni, hogy ne jelenjen meg korreláció Kompromisszum: Egy generátor, különböző kezdőérték (parameterization) 24
Összefoglalás Véletlenszám generálásnál fontos szempontok: Jó eloszláskövetés Equidistribution prop Reprodukálhatóság Hatékony legyen a köv. elem kiszámítása, de a jóslás lehetőleg ne Algoritmusok: Lineáris (Twisted) GFSR Mersenne Twister 25
Kérdés?
Köszönöm a figyelmet!