Kombinovaný lineární shodný generátor - Combined linear congruential generator
A kombinovaný lineární shodný generátor (CLCG) je pseudonáhodné generátor čísel algoritmus na základě kombinace dvou nebo více lineární shodné generátory (LCG). Tradiční LCG má a doba což je nedostatečné pro komplexní simulaci systému.[1] Kombinací dvou nebo více LCG lze vytvořit náhodná čísla s delší periodou a lepšími statistickými vlastnostmi.[1]Algoritmus je definován jako:[2]
kde:
- je "modul "prvního LCG
- je ith vstup z jth LCG
- je ith generované náhodné celé číslo
s:
kde je rovnoměrně rozloženo náhodné číslo mezi 0 a 1.
Derivace
Li Ži,1, Ži,2, ..., Ži, k jsou jakékoli nezávislé, diskrétní, náhodné proměnné a jedna z nich je rovnoměrně rozložena od 0 do m1 - 2 tedy Zi je rovnoměrně rozloženo mezi 0 a m1 - 2, kde:[2]
Nechat Xi,1, Xi,2, ..., Xi,k být výstupy z k LCG. Li Ži,j je definován jako Xi,j - 1 tedy Ži,j bude přibližně rovnoměrně rozloženo od 0 do mj − 1.[2] Koeficient "(-1)j−1"implicitně provádí odečtení jednoho z Xi,j.[1]
Vlastnosti
CLCG poskytuje efektivní způsob výpočtu pseudonáhodných čísel. Algoritmus LCG je výpočetně nenáročný na použití.[3] Výsledky více algoritmů LCG jsou kombinovány pomocí algoritmu CLCG a vytvářejí pseudonáhodná čísla s delší doba než je samo o sobě dosažitelné metodou LCG.[3]
Období CLCG je nejmenší společný násobek period jednotlivých generátorů, které jsou o jednu menší než moduly. Vzhledem k tomu, že všechny moduly jsou lichá prvočísla, jsou periody sudé a sdílejí tedy alespoň společného dělitele 2, ale pokud jsou moduly zvoleny tak, že 2 je největší společný dělitel každého páru to povede k období:[1]
Příklad
Následuje ukázkový algoritmus navržený pro použití ve 32bitových počítačích:[2]
LCG se používají s následujícími vlastnostmi:
Algoritmus CLCG je nastaven následovně:
1. Semeno pro první LCG, , by měl být vybrán v rozsahu [1, 2147483562].
- Semeno pro druhý LCG, , by měl být vybrán v rozsahu [1, 2147483398].
- Soubor:
2. Dvě LCG se hodnotí následovně:
3. Rovnice CLCG je řešena tak, jak je uvedeno níže:
4. Vypočítejte náhodné číslo:
5. Zvyšte počítadlo (i = i + 1), poté se vraťte ke kroku 2 a opakujte.
Maximální doba dvou použitých LCG se vypočítá podle vzorce :.[1]
To odpovídá 2,1 × 109 pro dva použité LCG.
Tento CLCG zobrazený v tomto příkladu má maximální dobu:
To představuje obrovské zlepšení v období jednotlivých LCG. Je vidět, že kombinovaná metoda zvyšuje periodu o 9 řádů.
Překvapivě období tohoto CLCG nemusí být dostatečné pro všechny aplikace.[1] Jiné algoritmy využívající metodu CLCG byly použity k vytvoření generátorů pseudonáhodných čísel s periodami tak dlouho, jak 3 × 1057.[4][5][6]
Viz také
- Lineární kongruentní generátor
- Wichmann – Hill, specifická kombinovaná LCG navržená v roce 1982
Reference
- ^ A b C d E F Banky, Jerry; Carson, John S .; Nelson, Barry L .; Nicol, David M. (2010). Simulace systému diskrétních událostí (5. vydání). Prentice Hall. § 7.3.2. ISBN 0-13-606212-1.
- ^ A b C d L'Ecuyer, Pierre (1988). „Efektivní a přenosné kombinované generátory náhodných čísel“ (PDF). Komunikace ACM. 31 (6): 742–749, 774. CiteSeerX 10.1.1.72.88. doi:10.1145/62959.62969.
- ^ A b Pandey, Niraj (6. srpna 2008). Implementace funkce Leap Ahead pro lineární shodné a zpožděné Fibonacciho generátory (PDF) (Magisterská práce). Florida State University. § 2.2. Archivovány od originál (PDF) dne 12. července 2011. Citováno 13. dubna 2012.
- ^ L'Ecuyer, Pierre (září – říjen 1996). „Kombinované generátory více rekurzivních čísel“. Operační výzkum. 44 (5): 816–822. doi:10,1287 / opre.44.5.816.
- ^ L'Ecuyer, Pierre (leden – únor 1999). „Dobré parametry a implementace pro kombinované více generátorů rekurzivních náhodných čísel“. Operační výzkum. 47 (1): 159–164. CiteSeerX 10.1.1.48.1341. doi:10.1287 / opre.47.1.159.
- ^ L'Ecuyer, Pierre; R. Simard; E.J. Chen; W. D. Kelton (listopad – prosinec 2002). „Objektově orientovaný balíček Randon-Number s mnoha dlouhými proudy a dílčími proudy“ (PDF). Operační výzkum. 50 (6): 1073–1075. CiteSeerX 10.1.1.25.22. doi:10.1287 / opre.50.6.1073.358.