Articulo de referencia

Generador congruencial lineal combinado

Un generador congruencial lineal combinado ( CLCG ) es un algoritmo generador de números pseudoaleatorios basado en la combinación de dos o más generadores congruenciales lineal...

Un generador congruencial lineal combinado ( CLCG ) es un algoritmo generador de números pseudoaleatorios basado en la combinación de dos o más generadores congruenciales lineales (LCG). Un LCG tradicional tiene un período inadecuado para la simulación de sistemas complejos . [ 1 ] Al combinar dos o más LCG, se pueden crear números aleatorios con un período más largo y mejores propiedades estadísticas. [ 1 ] El algoritmo se define como: [ 2 ]incógnitai(j=1k(1)j1Yi,j)(modmetro11){\displaystyle X_{i}\equiv \left(\sum _{j=1}^{k}(-1)^{j-1}Y_{i,j}\right){\pmod {m_{1}-1}}} dónde:

  • metro1{\displaystyle m_{1}}es el " módulo " del primer LCG
  • Yi,j{\displaystyle Y_{i,j}}es la i- ésima entrada del j- ésimo LCG
  • incógnitai{\displaystyle X_{i}}es el i -ésimo número entero aleatorio generado

con: Ri{incógnitai/metro1para incógnitai>0(metro11)/metro1para incógnitai=0{\displaystyle R_{i}\equiv {\begin{cases}X_{i}/m_{1}&{\text{para }}X_{i}>0\\(m_{1}-1)/m_{1}&{\text{para }}X_{i}=0\end{cases}}} dóndeRi{\displaystyle R_{i}}es un número aleatorio con distribución uniforme entre 0 y 1.

Derivación

Si W i ,1 , W i ,2 , ..., W i ,k son cualesquiera variables aleatorias discretas e independientes y una de ellas se distribuye uniformemente de 0 a m 1 2, entonces Z i se distribuye uniformemente entre 0 y m 1 2, donde: [ 2 ]    Zi=(j=1kWi,j)(modmetro11){\displaystyle Z_{i}=\left(\sum _{j=1}^{k}W_{i,j}\right){\pmod {m_{1}-1}}}

Sean X i ,1 , X i ,2 , ..., X i , k salidas de k LCG. Si W i , j se define como X i , j 1, entonces W i , j estará aproximadamente uniformemente distribuido de 0 a m j 1. [ 2 ] El coeficiente "( 1) j 1 " realiza implícitamente la resta de uno de X i , j . [ 1 ]    

Propiedades

El algoritmo CLCG proporciona una forma eficiente de calcular números pseudoaleatorios. El algoritmo LCG es computacionalmente económico. [ 3 ] Los resultados de múltiples algoritmos LCG se combinan mediante el algoritmo CLCG para crear números pseudoaleatorios con un período más largo que el que se puede lograr con el método LCG por sí solo. [ 3 ]

El período de una CLCG es el mínimo común múltiplo de los períodos de los generadores individuales, que son uno menos que los módulos. Dado que todos los módulos son primos impares, los períodos son pares y, por lo tanto, comparten al menos un divisor común de 2, pero si los módulos se eligen de manera que 2 sea el máximo común divisor de cada par, esto dará como resultado un período de: [ 1 ]PAG=(metro11)(metro21)(metrok1)2k1{\displaystyle P={\frac {(m_{1}-1)(m_{2}-1)\cdots (m_{k}-1)}{2^{k-1}}}}

Ejemplo

El siguiente es un ejemplo de algoritmo diseñado para su uso en computadoras de 32 bits: [ 2 ]k=2{\displaystyle k=2} Los LCG se utilizan con las siguientes propiedades: a1=40014a2=40692metro1=2147483563metro2=2147483399do1=0do2=0{\displaystyle {\begin{aligned}a_{1}&=40014&a_{2}&=40692\\m_{1}&=2147483563&m_{2}&=2147483399\\c_{1}&=0&c_{2}&=0\end{aligned}}}

El algoritmo CLCG se configura de la siguiente manera:

  1. La semilla para el primer LCG,Y0,1{\displaystyle Y_{0,1}}, debe seleccionarse en el rango de [1, 2147483562]. La semilla para el segundo LCG,Y0,2{\displaystyle Y_{0,2}}, debe seleccionarse en el rango de [1, 2147483398]. Conjunto:i=0{\displaystyle i=0}
  2. Los dos LCG se evalúan de la siguiente manera: Yi+1,1=40014×Yi,1(mod2147483563){\displaystyle Y_{i+1,1}=40014\times Y_{i,1}{\pmod {2147483563}}}Yi+1,2=40692×Yi,2(mod2147483399){\displaystyle Y_{i+1,2}=40692\times Y_{i,2}{\pmod {2147483399}}}
  3. La ecuación CLCG se resuelve como se muestra a continuación: incógnitai+1=(Yi+1,1Yi+1,2)(mod2147483563){\displaystyle X_{i+1}=(Y_{i+1,1}-Y_{i+1,2}){\pmod {2147483563}}}
  4. Calcula el número aleatorio: Ri+1={incógnitai+1/2147483563para incógnitai+1>0(incógnitai+1/2147483563)+1para incógnitai+1<02147483562/2147483563para incógnitai+1=0{\displaystyle R_{i+1}={\begin{cases}X_{i+1}/2147483563&{\text{for }}X_{i+1}>0\\(X_{i+1}/2147483563)+1&{\text{for }}X_{i+1}<0\\2147483562/2147483563&{\text{for }}X_{i+1}=0\end{cases}}}
  5. Incrementa el contador ( i  := i + 1), luego regresa al paso 2 y repite.   

El período máximo de los dos LCG utilizados se calcula mediante la fórmula: [ 1 ](metro1){\displaystyle (m-1)} Esto equivale a 2.100 millones para los dos LCG utilizados.

Este CLCG que se muestra en este ejemplo tiene un período máximo de: (metro11)(metro21)/22.3×1018{\displaystyle (m_{1}-1)(m_{2}-1)/2\approx 2.3\times 10^{18}} Esto representa una mejora considerable con respecto al período de los LCG individuales. Se puede observar que el método combinado aumenta el período en nueve órdenes de magnitud.

Sorprendentemente, el período de este CLCG puede no ser suficiente para todas las aplicaciones. [ 1 ] Se han utilizado otros algoritmos que emplean el método CLCG para crear generadores de números pseudoaleatorios con períodos tan largos como3 × 10 57 . [ 4 ] [ 5 ] [ 6 ]

El primero de los dos generadores, que utiliza b = 40.014 y m = 2.147.483.563, también es utilizado por la calculadora científica Texas Instruments TI-30X IIS .

Véase también

Referencias

  1. 1 2 3 4 5 6 Banks, Jerry; Carson, John S.; Nelson, Barry L.; Nicol, David M. (2010). Simulación de sistemas de eventos discretos (5.ª  ed.). Prentice Hall. § 7.3.2. ISBN 978-0-13-606212-7.
  2. 1 2 3 4 L'Ecuyer, Pierre (1988). "Generadores de números aleatorios combinados eficientes y portátiles" (PDF) . Communications of the ACM . 31 (6): 742– 749, 774. CiteSeerX 10.1.1.72.88 . doi : 10.1145/62959.62969 . S2CID 9593394 .  
  3. 1 2 Pandey, Niraj (6 de agosto de 2008). Implementación de la función Leap Ahead para generadores de Fibonacci lineales congruentes y retardados (PDF) (tesis de maestría). Universidad Estatal de Florida. § 2.2. Archivado del original (PDF) el 12 de julio de 2011. Recuperado el 13 de abril de 2012 .
  4. L'Ecuyer, Pierre (septiembre-octubre de 1996). "Generadores de números recursivos múltiples combinados" . Operations Research . 44 (5): 816– 822. doi : 10.1287/opre.44.5.816 .
  5. L'Ecuyer, Pierre (enero-febrero de 1999). "Buenos parámetros e implementaciones para generadores de números aleatorios recursivos múltiples combinados" . Operations Research . 47 (1): 159–164 . CiteSeerX 10.1.1.48.1341 . doi : 10.1287/opre.47.1.159 . 
  6. L'Ecuyer, Pierre; R. Simard; EJ Chen; WD Kelton (noviembre-diciembre de 2002). "Un paquete de números aleatorios orientado a objetos con muchos flujos largos y subflujos" (PDF) . Operations Research . 50 (6): 1073–1075 . CiteSeerX 10.1.1.25.22 . doi : 10.1287/opre.50.6.1073.358 . 
  • Descripción general del uso y las pruebas de los generadores de números pseudoaleatorios.
Obtenido de " https://en.wikipedia.org/w/index.php?title=Combined_linear_congruential_generator&oldid=1317245848 "