Teoría de Modelos y Simulación Enrique Eduardo Tarifa Facultad de Ingeniería - Universidad Nacional de Jujuy Generación de Números Aleatorios Introducción Este capítulo trata sobre la generación de números aleatorios. La misma es necesaria para la simulación de sistemas estocásticos como se verá en los siguientes capítulos. En primer lugar se definirá qué se entiende por número aleatorio. A continuación se estudiarán las pruebas a que debe ser sometido un generador de número aleatorios antes de ser aceptado. Finalmente, se presentarán métodos para generar variables que siguen distribuciones de frecuente aplicación. Propiedades de números aleatorios Una secuencia de números aleatorios R1, R2, ..., debe tener dos importantes propiedades estadísticas: uniformidad e independencia. Cada número aleatorio Ri es una muestra independiente tomada de una distribución continua uniforme entre cero y uno. Esto es, la función de densidad de probabilidad es: 1 0 ≤ x ≤ 1 f ( x) = (1) 0 otherwise Esta función es graficada en la Figura 1. El valor esperado de cada número Ri es dado por: 1 x2 1 E ( R) = ∫ x dx = = 0 2 0 2 1 (2) y la varianza es dada por: 1 1 V ( R ) = ∫ x 2 dx − [E ( R )]2 = 0 2 x3 1 1 1 1 − = − = 3 0 2 3 4 12 (3) Como consecuencia de las propiedades de uniformidad e independencia se tiene: 1. Si el intervalo (0, 1) es dividido en n clases, o subintervalos de longitudes iguales, el número esperado de observaciones en cada intervalo es N/n, donde N es el número total de observaciones. 2. La probabilidad de observar un valor en un intervalo en particular es independiente de los valores previamente observados. Teoría de Modelos y Simulación. Generación de Números Aleatorios. 1 f(x) 1 0 1 x Figura 1: Distribución uniforme. Generación de números pseudos aleatorios La palabra “pseudos” refiere a que los números generados por los métodos a estudiar no son completamente aleatorios puesto que se conoce el modo de generarlos, y esta secuencia puede ser reproducida cuantas veces sea necesaria. Realizada esta observación, el objetivo de cualquier generador de números aleatorios es producir una secuencia de números entre cero y uno que tenga las propiedades ideales de uniformidad e independencia. A esto se agrega la necesidad de contar con una longitud de ciclo suficientemente grande. La longitud de ciclo, o periodo, representa la longitud de la secuencia de números aleatorios que el generador siempre repite. Método de congruencia lineal El método de congruencia lineal es ampliamente utilizado. Este método produce una secuencia de números enteros, X1, X2, ... entre cero y m-1 de acuerdo a la siguiente relación recursiva: X i +1 = (a X i + c) mod m (4) El valor inicial X0 se llama semilla, a es la constante multiplicativa, c es el incremento, y m es el módulo. Si c ≠ 0, se tiene el método de congruencia mixta. Cuando c = 0, se tiene el método de congruencia multiplicativa. La selección de los valores a, c, m, y X0 afecta fuertemente a las propiedades estadísticas y la longitud de ciclo del generador. Como ejemplo del método de congruencia lineal se generará una secuencia para a = 17, c = 43, m = 100 y X0 = 27. En este caso, el entero generado estará entre 0 y 99 debido al valor del módulo. Note también, que si se necesita generar una secuencia de números aleatorios entre 0 y 1, esta puede ser generada por: X Ri = i (5) m Con esto, las secuencias generadas son: i X R 0 27 --- 1 2 3 2 0.02 77 0.77 52 0.52 Como puede deducirse de este ejemplo, debido a que Xi es un entero del conjunto {0, 1, 2, ..., (m-1)}, los números aleatorios Ri generados con este método sólo pueden asumir valores del Teoría de Modelos y Simulación. Generación de Números Aleatorios. 2 conjunto finito I = {0, 1/m, 2/m, ..., (m-1)/m}. Esto significa que se tiene una distribución discreta en lugar de una continua. Ésta será una buena aproximación cuando el módulo sea grande. Cuando esto ocurra, no existirán grandes huecos (gaps) entre los números generados, y se tendrá una máxima densidad. Para obtener la máxima densidad y evitar los ciclos (recurrencia de la misma secuencia de números ya generados) el generador debería tener el periodo más grande posible. El máximo periodo puede lograrse eligiendo apropiadamente los valores de los parámetros del generador, por ejemplo (Banks et al., 1996): • Para m = 2b y c ≠ 0, el máximo periodo es P = m, y puede lograrse con un valor de c que sea un número primo relativo a m (esto es, que el máximo factor común entre ambos sea 1), y a = 1+4k. k y b son enteros. • Para m = 2b y c = 0, el máximo periodo es P = m/4, y puede lograrse con un valor impar para la semilla X0, y a = 3+8k, o a = 5+8k. k y b son enteros. • Para m número primo y c = 0, el máximo periodo es P = m-1, y puede lograrse con un valor de a tal que el menor entero k que hace que a k-1sea divisible por m es k = m-1. La Tabla 1 muestra la determinación del periodo de un generador congruencial multiplicativo para a = 13, m = 26 = 64, X0 = 1, 2, 3, 4. Se puede ver que el máximo periodo, 16, se alcanza para las semillas impares, y éste es igual al máximo teórico P = m/4 ya que a = 5+8k con k = 1. Tabla 1: Periodo de un generador. i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 X i Xi X i X i 1 2 3 4 13 26 39 52 41 18 59 36 21 42 63 20 17 34 51 4 29 58 23 57 50 43 37 10 47 33 2 35 45 7 9 27 53 31 49 19 61 55 25 11 5 15 1 3 Cuando la semilla es 1, la secuencia generada asume valores del conjunto {1, 5, 9, 13, ..., 53, 57, 61}. Los huecos entre los números aleatorios Ri son grandes (5/64-1/64 = 0.0625, densidad insuficiente), el periodo es demasiado corto; por lo tanto, no se recomienda la utilización de este generador. Un generador bastante utilizado en la práctica tiene los siguientes parámetros a = 75 = 16807, m = 231-1 = 2147483647 (un número primo) y c = 0. Estos valores aseguran un periodo P = m-1. Para una semilla igual a 123457, los valores generados son: Teoría de Modelos y Simulación. Generación de Números Aleatorios. 3 i X R 0 123457 --- 1 2074941799 0.9662 2 559872160 0.2607 3 1645535613 0.7662 Generadores combinados Cuando la aplicación requiere de un periodo mayor al que se puede alcanzar con un generador simple, se recurre a los generadores combinados de congruencia lineal. Para generar la secuencia de Xi y Ri requerida, este generador necesita las salidas Xi,j, j = 1..k, de k diferentes generadores de congruencia multiplicativa cuyos parámetros tienen los valores apropiados para asegurar un periodo mj-1. El generador j produce la salida Xi,j entera uniformemente distribuida de 1 a mj-1. La combinación se calcula mediante las siguientes fórmulas: k X i = ∑ ( −1) j −1 X i , j mod ( m1 − 1) (6) j =1 Xi m Ri = 1 m −1 1 m1 El periodo máximo posible es: P= Xi > 0 Xi = 0 ( m1 − 1) ( m2 − 1)K ( mk − 1) 2 k −1 (7) (8) Para computadoras de 32 bits se sugiere combinar dos generadores k = 2 con m1 = 2147483563, a 1 = 40014, m2 = 2147483399 y a2 = 40692. La semilla del primer generador se toma del intervalo [1, 2147483562], y la semilla del segundo generador se toma del intervalo [1, 2147483398]. El periodo es (m1-1) (m2-1)/2 ≈ 2x1018. Pruebas para números aleatorios Antes de aceptar un generador se debe probar cuán bien satisface las propiedades ideales de uniformidad e independencia. Algunas pruebas desarrolladas en tal sentido son: • Prueba de frecuencia: Usa el método de Kolmogorov-Smirnov o el método chicuadrado para comparar una distribución uniforme con la secuencia generada. • Prueba de corridas o rachas (runs test): Utiliza el chi-cuadrado para determinar la presencia anormal de grupos de números ascendentes, descendentes, por encima del promedio, o por debajo del promedio. • Prueba de autocorrelación: Compara la correlación existente entre los elementos de una secuencia con la correlación nula esperada. • Prueba de huecos (gap test): Cuenta los números de dígitos entre dos sucesivas repeticiones y utiliza la prueba de Kolmogorov-Smirnov para comparar esta cantidad con el valor esperado. • Prueba de poker: Controla que la frecuencia de aparición de dígitos en una serie de números sea la esperada. Teoría de Modelos y Simulación. Generación de Números Aleatorios. 4 Técnica de la transformada inversa Hasta aquí se han estudiado los números aleatorios y la forma de generarlos. Sin embargo, generalmente en las simulaciones de sistemas estocásticos es necesario generar variables aleatorias, las cuales tienen una distribución distinta de la uniforme. La trasformada inversa es uno de los métodos utilizados para este fin. La Figura 2 muestra en forma gráfica el principio de este método. Primero, se grafica la curva de distribución acumulada F(X) correspondiente a la distribución deseada. Luego, se genera un número aleatorio R, con el cual se ingresa por la ordenada y se intercepta la curva F(X), el número X correspondiente a la abscisa del punto interceptado es un número aleatorio que tiene la distribución deseada. F(X) 1 R 0 A X B Figura 2: Método gráfico. Analíticamente, el método se representa como: F ( x) = ∫ x −∞ f (t ) dt X = F −1 ( R ) (9) (10) donde f(x) es la función de densidad de probabilidad de la distribución deseada. Para ver porqué el X generado con este método en realidad tiene la distribución deseada, tome un valor x0 y compute la probabilidad acumulada: P( X ≤ x0 ) = P( R ≤ F ( x0 )) = F ( x0 ) (11) Puesto que F(x0) pertenece al intervalo [0,1], la segunda igualdad plantea que R es un número uniformemente distribuido en dicho intervalo, y como F(x) es la función de probabilidad acumulada de X, se concluye que esta variable tendrá la distribución deseada. Distribución exponencial Utilizando el método de la transformada inversa a continuación se desarrolla un generador de variables aleatorias con distribución exponencial. La función de densidad de probabilidad es: Teoría de Modelos y Simulación. Generación de Números Aleatorios. 5 λ e− λ x f ( x) = 0 x≥0 (12) x<0 Entonces, la función de distribución acumulada es: x 1 − e−λ x F ( x) = ∫ f (t ) dt = −∞ 0 x≥0 x<0 (13) Esta distribución generalmente se utiliza para modelar los tiempos entre llegadas de clientes. En ese caso, el parámetro λ puede ser interpretado como el número medio de arribos por unidad de tiempo, y 1/λ sería el tiempo medio entre arribos. Aplicando el método de la transformada inversa, se tiene: F ( X ) = 1 − e− λ X = R F −1 ( R) = −1 ln(1 − R ) = X λ (14) (15) Dado que R está uniformemente distribuido en el intervalo [0,1], entonces (1-R) también lo está; por lo tanto se puede hacer la siguiente simplificación: −1 X= ln( R) (16) λ Distribución uniforme Para generar una variable X con distribución uniforme en el intervalo [a, b], la función de densidad de probabilidad es: 1 a≤ x≤b f ( x) = b − a (17) 0 otherwise La función de probabilidad acumulada es entonces: 0 x<a x −a F ( x) = a≤ x≤b b − a x>b 1 De acuerdo al método de la trasformada inversa: X −a F( X ) = =R b−a Despejando, se tiene el generador correspondiente: X = a + (b − a ) R Teoría de Modelos y Simulación. Generación de Números Aleatorios. (18) (19) (20) 6 Distribución de Weibull Esta distribución se utiliza para modelar el tiempo entre fallas de maquinarias o componentes electrónicos. Cuando el parámetro de localización es nulo (ν = 0), la función de densidad de probabilidad es: β β −1 −( x / α ) x e x≥0 f ( x) = α β (21) 0 otherwise β El método de la transformada inversa plantea que: β F ( X ) = 1 − e−( X / α ) = R Resolviendo, se tiene el generador correspondiente: X = α [− ln(1 − R)]1 / β (22) (23) Simplificando, se obtiene: X = α [ − ln( R )]1 / β (24) Distribución triangular Considere que la distribución deseada es una distribución triangular con la siguiente función de densidad de probabilidad: 0 ≤ x ≤1 x f ( x) = 2 − x 1 < x ≤ 2 (25) 0 otherwise Esta distribución se denomina distribución triangular con extremos (0, 2) y moda en 1. La función de probabilidad acumulada es: 0 x≤0 x2 0< x≤1 2 F ( x) = (26) ( 2 − x) 2 1 − 1< x ≤ 2 2 1 x>2 Aplicando el método de la transformada inversa y operando se tiene el correspondiente generador: 2R 0 ≤ R ≤ 12 X = (27) 2 − 2 (1 − R ) 12 < R ≤ 1 La fórmula general para una distribución triangular es: Teoría de Modelos y Simulación. Generación de Números Aleatorios. 7 2 ( x − a) (b − a ) (c − a ) 2 (c − x ) f ( x) = (c − b ) (c − a ) 0 a≤x<b b≤x≤c (28) otherwise ( x − a) 2 (b − a ) (c − a ) F ( x) = 2 b − a + ( x − b) c − a (c − b) (c − a ) a≤ x<b (29) b≤ x ≤c Aplicando el método de la transformada inversa se obtiene el siguiente generador: b−a a + (b − a ) (c − a ) R 0≤R< c−a X = b−a b + [(c − a ) R − (b − a )]( c − b ) ≤ R ≤1 c−a (30) Distribución empírica Cuando no es posible encontrar una distribución teórica para modelar los datos, entonces se utiliza una distribución empírica. Esta puede estar expresada como una tabla de frecuencias o directamente una tabla de datos sin procesar. En el primer caso se cuenta con intervalos y la frecuencia de cada uno de ellos. Se calcula la frecuencia relativa y luego la acumulada, como se muestra en el siguiente ejemplo. Tabla 2: Tabla de frecuencias. Intervalo 0.25 ≤ x ≤ 0.5 0.5 < x ≤ 1.0 1.0 < x ≤ 1.5 1.5 < x ≤ 2.0 Frecuencia 31 10 25 34 Frecuencia relativa 0.31 0.10 0.25 0.34 Frecuencia acumulada 0.31 0.41 0.66 1.00 Para generar la variable aleatoria correspondiente se realiza interpolación lineal en la Tabla 3, la cual representa la función inversa de la probabilidad acumulada calculada con en la Tabla 2. Note que para facilitar el cálculo, la pendiente ai de cada intervalo i se calcula de antemano y se almacena en la tabla. Tabla 3: Función inversa de la probabilidad acumulada. i 1 2 3 4 5 Entrada ri 0.00 0.31 0.41 0.66 1.00 Salida xi 0.25 0.50 1.00 1.50 2.00 Pendiente ai 0.81 5.00 2.00 1.47 --- A modo de ejemplo, cuando R = 0.33, el X correspondiente se calcula como: X = 0.50 + 5 .00 (0.33 − 0 .31) = 0.60 Teoría de Modelos y Simulación. Generación de Números Aleatorios. (31) 8 Cuando se tienen pocos datos no es posible construir una tabla de frecuencias; en su lugar, se construye una tabla de datos atribuyendo la misma probabilidad a cada uno de ellos. Suponga que los siguientes 5 datos son los únicos disponibles: 2.76, 1.83, 0.80, 1.45 y 1.24. Primero, se los ordena en forma creciente y se asigna la probabilidad 1/5 a cada uno de ellos. Luego, se calcula la probabilidad acumulada y las pendientes. Como resultado se obtiene las siguientes tablas: Tabla 4: Tabla de datos. Intervalo Probabilidad 0.00 ≤ x ≤ 0.80 0.80 < x ≤ 1.24 1.24 < x ≤ 1.45 1.45 < x ≤ 1.83 1.83 < x ≤ 2.76 0.2 0.2 0.2 0.2 0.2 Probabilidad acumulada 0.2 0.4 0.6 0.8 1.0 Tabla 5: Función inversa de la probabilidad acumulada. i 1 2 3 4 5 6 Entrada ri 0.0 0.2 0.4 0.6 0.8 1.0 Salida xi 0.00 0.80 1.24 1.45 1.83 2.76 Pendiente ai 4.00 2.20 1.05 1.90 4.65 --- Para un R = 0.71, el correspondiente X es: X = 1.45 + 1.90 (0 .71 − 0 .60 ) = 1 .65 (32) Distribuciones discretas Las distribuciones discretas se pueden generar utilizando la transformada inversa de la misma manera que se utilizó para las distribuciones empíricas, sólo que esta vez no es necesario la interpolación. Por ejemplo, si se desean generar los números 0, 1 y 2 con las probabilidades 0.50, 0.30 y 0.20 respectivamente, se construye la siguiente tabla donde ya se calculó la probabilidad acumulada: Tabla 6: Tabla para una distribución discreta. i 1 2 3 Entrada ri 0.50 0.80 1.00 Salida xi 0 1 2 Con esta tabla, el valor de X se calcula de la siguiente forma: R ≤ 0 .5 0 X = 1 0 .5 < R ≤ 0.8 2 0.8 < R ≤ 1 .0 (33) Cuando la distribución es uniforme y se desea generar números en el intervalo [a, b] espaciados por ∆X, se puede utilizar el siguiente generador: Teoría de Modelos y Simulación. Generación de Números Aleatorios. 9 b − a X = Int R + 1 ∆ X + a ∆X (34) Para simular un dado se debe hacer a = 1, b = 6 y ∆X = 1. Transformada directa para la distribución normal Esta distribución es ampliamente utilizada. La función de densidad de probabilidad es: − 1 f ( x) = e σ 2π ( x −µ ) 2 2σ 2 (35) Dado que no es posible obtener analíticamente la función inversa de la probabilidad acumulada, se recurre a métodos alternativos. Uno de los métodos más empleados considera dos variables con distribución estándar normal Z1 y Z2 (media nula y varianza igual a uno), y las expresa en coordenadas polares como sigue: Z 1 = B cos(θ ) (36) Z 2 = B sin(θ ) Se sabe que B2 = Z12 + Z22 tiene una distribución chi-cuadrado con grado de libertad 2, la cual es equivalente a una distribución exponencial con media 2. Entonces, el radio B puede ser generado con: 1/ 2 (37) B = (− 2 ln( R1 )) Debido a la simetría de la distribución normal, se supone que θ está uniformemente distribuido en el intervalo [0, 2π]. Entonces, el ángulo se genera con: θ = 2π R2 (38) Finalmente, los valores Z1 y Z2 con distribución normal estándar se obtienen generando B y θ con las ecuaciones (37) y (38) respectivamente. El valor de X con una distribución normal con media µ y varianza σ2 se calcula con: X = µ+σ Z (39) Una rutina basada en este método que genera valores Z1 y Z2 con distribución normal estándar es: Procedure Polar Begin Repeat Generar R1,R2 v1 := 2*R1 - 1 v2 := 2*R2 - 1 w := v 12 + v22 Until w ≤ 1 u := (-2*ln(w)/w)1/2 Z1 := v1*u Z2 := v2*u End. Teoría de Modelos y Simulación. Generación de Números Aleatorios. 10 Cuando, como en este caso, no es posible obtener analíticamente la función inversa de la probabilidad acumulada, entonces se puede aproximar esta función ya sea numéricamente o con expresiones simplificadas. Por ejemplo, se puede utilizar el siguiente generador de Schmeiser que da una distribución aproximada a la normal estándar: R 0 .135 − (1 − R) 0 .135 Z= (40) 0 .1975 Otro generador de distribución normal utiliza el teorema del límite central que plantea: “La distribución del promedio de n variables aleatorias independientes idénticamente distribuidas con media µ y varianza σ2 se aproxima a una distribución normal con media µ y varianza σ2/n”. El generador es: 12 X = µ + ∑ Ri − 6 σ (41) i =1 Este generador utiliza la sumatoria de una serie de números aleatorios para obtener la distribución deseada. En la sección siguiente se estudian otros generadores que utilizan este mismo principio. Método de la convolución La distribución de probabilidad de la suma de dos o más variables aleatorias independientes se denomina convolución de las distribuciones correspondientes a las variables sumadas. El método de la convolución suma dos o más variables aleatorias para obtener una nueva con la distribución deseada. El centro del estudio ya no es la función de probabilidad acumulada de la distribución deseada, sino su relación con otras distribuciones más fácilmente generables. Distribución de Erlang Una variable aleatoria X con distribución Erlang con parámetros (K, θ) puede ser modelada con la suma de K variables aleatorias independientes Xi con distribución exponencial y media 1/(K θ); esto es: K X = ∑ Xi (42) i =1 Utilizando el generador de distribución exponencial presentado anteriormente y operando, se obtiene el generador con la distribución deseada: K −1 −1 K X =∑ ln( Ri ) = ln ∏ Ri (43) K θ i =1 i =1 K θ Como ejemplo, suponga que a un depósito llegan camiones cuyos tiempos entre arribos siguen una distribución exponencial con media 0.1 h. A la entrada son desviados alternativamente hacia el sur y hacia el norte. Se desea modelar el arribo de camiones al sector sur. Los tiempos de llegada entre los camiones que llegan al sector sur serán iguales a la suma de dos tiempos de arribos sucesivos al depósito; es decir, seguirán una distribución Erlang con K = 2 y 1/θ = 0.2 h. Teoría de Modelos y Simulación. Generación de Números Aleatorios. 11 Técnica de aceptación y rechazo En este método se generan valores aleatorios que son sometidos a una prueba para verificar si cumplen o no con la distribución deseada. El resultado de esta prueba determina si el nuevo valor es aceptado o rechazado. Un generador eficiente debe mantener el número de rechazos lo más bajo posible. Distribución de Poisson Una variable N con distribución Poisson puede ser interpretada como el número de arribos por unidad de tiempo a velocidad α en un proceso Poisson. En este proceso, los tiempos entre arribos A1, A2, ... están exponencialmente distribuidos con una velocidad α (es el número medio de arribos por unidad de tiempo). Por lo tanto, se puede construir un generador que determine n tal que: A1 + A2 + ... + An ≤ 1 < A1 + ... + An + An +1 (44) Utilizando el generador exponencial anteriormente presentado, se tiene: n n +1 −1 −1 ln( Ri ) ≤ 1 < ∑ ln( Ri ) ∑ α i =1 i =1 α (45) Operando: n +1 n ln( Ri ) ≥ −α > ∑ ln( Ri ) ∑ i =1 i =1 (46) n n +1 ln ∏ Ri ≥ −α > ln ∏ Ri i =1 i =1 (47) n +1 n Ri ≥ e −α > ∏ Ri ∏ i =1 i =1 (48) Entonces, el procedimiento para generar N con distribución de Poisson es: 1. Hacer n ← 0, P ← 1. 2. Generar un número aleatorio Rn+1 y hacer P ← P Rn+1 . 3. Si P < e-α, aceptar el nuevo valor N ← n, sino rechazar n, hacer n ← n + 1, y retornar al paso 2. Note que en promedio será necesario generar α+1 números con distribución exponencial por cada valor de N. Cuando α ≥ 15 esta técnica se vuelve ineficiente, y conviene utilizar una técnica basada en la distribución normal: N −α Z= (49) α donde Z tiene una distribución normal estándar. Entonces, para cada valor de Z se puede calcular N con: N = Round α + α Z (50) ( Teoría de Modelos y Simulación. Generación de Números Aleatorios. ) 12 Distribución gamma Si el parámetro de forma β tiene un valor entero K, se puede utilizar el método de la convolución ya que la distribución de Erlang es un caso especial de la distribución gamma. Por otra parte, el método aceptación y rechazo que se describirá a continuación puede ser utilizado para generar variables con distribución Erlang cuando K es grande. La rutina siguiente genera variables con distribución gamma con parámetro de escala θ y parámetro de forma β; esto es, con media 1/θ y varianza 1/(β θ2): 1. Hacer a ← (2 β-1)1/2, b ← 2 β - ln(4) + 1/a. 2. Generar R1 y R2. 3. Hacer X ← β (R1/(1-R1))a. 4. Hacer c ← b - ln(R12 R2). 5. Si X > c, rechazar X y retornar al paso 2. 6. Si X ≤ c, hacer X ← X/(β θ), aceptar X como la variable deseada. Teoría de Modelos y Simulación. Generación de Números Aleatorios. 13