Kezdőoldal » Tudományok » Alkalmazott tudományok » Az MT19937 pszeudo random...

Az MT19937 pszeudo random generátor megfelelően működik minden lehetséges int értékre az alábbi python implemenációra?

Figyelt kérdés

[link]

Itt ugyanis a seed értéke kívül eshet az unsigned int32 tartományon és nincs ez lekezelve semmilyen módon hanem számol úgy. Ebben eltér pl a c++-os implementációtól a működése. Nem tudom, hogy ez bug vagy fícsör. Vagyis hogy megfelel e a statisztikai teszten a 32 bites tartományon kívüli seed-el és még plusz jó e mert nagyobb a kezdőállapot halmaz?


2017. febr. 13. 17:11
 1/7 anonim ***** válasza:
Se nem bug, se nem fícsör, egyszerűen felesleges foglalkozni vele, úgyis csak toszogatja kicsit a biteket aztán levágja 32-re. Onnantól meg tök mindegy hogy int32 volt-e eredetileg vagy sem.
2017. febr. 13. 19:32
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:

Dehogy mindegy. Nem olyan egyszerű jó random generátort csinálni, a benne használt konstansok sem akárhogyan lettek meghatározva. Az extra hosszú ( 2^19937-1 ) ismétlési periódus pedig bizonyítva van matematikailag. Halom statisztikai teszten át kellett hogy menjen és sok matematikus ellenzésén keresztül kellett hogy menjen. Ilyen generátort használnak fizetős szotfverek is és nem csak úgy Pistike által összerakott "szuper" algorimtust. Régebben és is próbáltam írni random generátort, úgy hogy csak tologattam ide oda a biteket, bitműveletek, szorzás, osztás stb. de elhasalt a statisztikai teszteken. Ha elhasal a teszten az igazolja hogy nem jó, ha nem hasal el az nem igazolja hogy jó. Pár száz, pár ezer vagy netalántán pár tízezer-százezer, de leginkább pár ezer hosszú periódus lesz, gyakrabban csak pár száz vagy ezer vagy annyi sem ha csak úgy tologatod ide oda a biteket.

Például az LCG (linear congruential generator) pszeudo random generátor algorimus nagyon nem nyilvánvaló, hogy 32 bit random pool-al 2^32 hosszú periódussal fog ismétlődi és miért tudja kihasználni a 32 bit teljes állapotterét. Ha csak úgy írsz egy algorimust rá hasraütésszerűen ezt közelíteni nem fogja, a millió hosszú periódust nem fogja elérni valószínű. Vagyis magyarul determinisztikus algorimus szerint statisztikailag random sorrendbe bejárja a 32 bit teljes állapotterét ami 2^32 lépésenként ciklikusan ismétlődik.

2017. febr. 13. 21:31
 3/7 Walter_Dornberger ***** válasza:
100%

Kedves kérdező!

Ha már ilyen jól beleástad magad a véletlenszám generálás elméletébe, a következő ötletem van a kérdésed korrekt és pontos megválaszolására:


Generáltass vele számokat, majd az általad ismert "statisztikai módszerekkel" a tényleges ellenörzést végezd el.

Ez lesz a válasz a kérdésedre is.


Néhány kzenfekvő módszer (a teljesség igénye nélkül):

1.,

0..1 intervallumon generált számok egyenletes eloszlása - ellenprőzhető egy diagrammal (gyakorlati hisztogram próba).

2.,

egyenletes eloszlású val. változó konvertálható normális eloszlásúvá (Box-Müller konverzió) majd T próba.

3.,

D.E Knuth próbái (több is van)(gyakoriság,sorozat,hézag próba..)

Ha mélyebben érdekel a téma :

Kolmogorov-Szmirnov próba, vagy "préselés próba (squeeze-test)" re keress.

Egyszerűbb a tesztet elvégezni mint kérdezni, jósoltatni arról mi lesz az eredmény!

2017. febr. 14. 07:08
Hasznos számodra ez a válasz?
 4/7 A kérdező kommentje:

Köszi a választ.

Megállapítás az, hogy bug-os impelentáció avagy azzal a feltétellel jó, ha mindig unsigned int32 tartományán belüli inicializálási seed értéket kap.

Két féle lehetőség van, ha tartományon kívülivel inicializáljuk:

1.: Ekvivalnes sorozatot ad egy adott unsigned int32 seed értékkel inicializált generátor objektummal.

2.: Sok egyezőséget mutat, de nem azonos egy adott unsigned int32 seed értékkel inicializált generátor objektummal.

Röviden ez elfogadhatatlan. A tartományon belüli sedd értékekkel inicializált generátor objektumok sztochasztikus mintázat szerint eltérő lehetséges sorozatokat generálnak nagyon helyesen.

2017. febr. 16. 23:00
 5/7 A kérdező kommentje:

"2.: Sok egyezőséget mutat, de nem azonos egy adott unsigned int32 seed értékkel inicializált generátor objektummal. "


Mármint a generált sorozat mutat sok egyezőséget, de azt arra semmilyen garanciát/becslést nem tudok mondani, hogy megmarad e az extra hosszú periódus vagy nagyon leromlik ez esetben.

2017. febr. 16. 23:15
 6/7 anonim ***** válasza:
Megkövetlek, tényleg nem az kerül az első regiszterbe, ami alapján a maradék 623-at kigenerálja. Jó szemed van.
2017. febr. 17. 23:02
Hasznos számodra ez a válasz?
 7/7 A kérdező kommentje:

???

Python nyelvi szinten 624 elemű lista van melyben a nulladik indexű elem kezdőértékétől függ a többi elem értéke és az egész generált pseudorandom sorozat. Az MT19937 pseudorandom generátor objetkum létrehozásakor és az első generált szám előtt egy alapállapotban van a generátor. Amikor az első pseudorandom számot kérjük tőle akkor az állapotátmeneti függvénynek megfelelően az alapállapotból a következő állapotba lép a generátorobjektum. A generátor aktuális állapotát a tagváltozói tárolják értelemszerűen.

2017. febr. 18. 15:03

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!