Generación de Variables Aleatorias UCR – ECCI CI-1453 Investigación de Operaciones Prof. M.Sc. Kryscia Daviana Ramírez Benavides Introducción Las variables aleatorias se representan por medio de distribuciones de probabilidad. El procedimiento para generar variables aleatorias a partir de distribuciones de probabilidad se conoce como generación de variables aleatorias o muestreo de Monte Carlo. El principio del muestreo se basa en la interpretación de frecuencia de la probabilidad y requiere un flujo permanente de números aleatorios. UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 2 Tipos de Generadores Generador congruencial lineal (más utilizado). Generador multiplicativo. Generador mixto. UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 3 Generador Congruencial Lineal Produce una secuencia de enteros x1, x2, …; entre 0 y m-1 de acuerdo a la siguiente relación recursiva: xi +1 = (axi + c ) mod m (i = 0,1,2,...) x0 = semilla Esto da el residuo de la división de (axi + c) entre m. Los números aleatorios se entregan por medio de la relación: xi ri = m (i = 1,2,3,...) UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 4 Generador Congruencial Lineal (cont.) Técnicamente, un número aleatorio, ri, se define como una muestra aleatoria independiente extraída de una distribución uniforme continua, cuya función de densidad de probabilidad (fdp) está dada por: 1 0 ≤ x ≤ 1 f (x ) = 0 en caso contrario Así cada número aleatorio estará distribuido de manera uniforme en el intervalo entre 0 y 1. Debido a esto, a estos números aleatorios se les conoce como números aleatorios U(0,1), o simplemente como números aleatorios uniformes. UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 5 Distribución Uniforme f(x) f(x)=y 1 F(x) 1 x UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 6 Generación de Valores para Variables Aleatorias Discretas El muestreo de Monte Carlo se logra al asignar intervalos de números aleatorios de acuerdo a las probabilidades en la distribución especificada. Este método consiste en los siguientes pasos: 1. 2. Se realiza una segmentación, para cada probabilidad de la distribución se le asigna un rango de valores según su valor. Se genera un número aleatorio entero r entre 00 y 99. 3. Cada número aleatorio en una secuencia (en este caso de 00 a 99) tiene una probabilidad igual (en este caso 0.01) de aparecer, y cada uno es independiente de los números antes y después de él. Se devuelve la variable aleatoria discreta de la distribución que corresponda con el rango donde pertenece el número aleatorio generado. UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 7 Generación de Valores para Variables Aleatorias Discretas (cont.) Distribución de Tiempo de Servicio Generación de Valores Tiempo de Servicio (minutos) Probabilidad Rango 1 0.35 0 – 34 2 0.40 35 – 74 3 0.25 75 – 99 Al generar un número aleatorio salió el 62. El número aleatorio 62 pertenece al rango 35 – 74, por lo que, la variable aleatoria discreta de la distribución de tiempo de servicio que se escoge es 2 minutos. UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 8 Generación de Valores para Variables Aleatorias Continuas El muestreo de Monte Carlo se logra al transformar los números aleatorios en una variable aleatoria continua a partir de la distribución especificada. Hay muchos métodos diferentes para generar variables aleatorias continuas. La selección de un algoritmo particular dependerá de la distribución a partir de la cual se quiere generar, tomando en cuenta factores como la exactitud de las v.a., las eficiencias de cómputo y almacenaje, y la complejidad del algoritmo. UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 9 Generación de Valores para Variables Aleatorias Continuas (cont.) Los dos algoritmos utilizados con más frecuencia son: Método de transformación inversa (ITM). Método de aceptación-rechazo (ARM). Entre estos dos métodos, es posible generar variables aleatorias de casi todas las distribuciones utilizadas con más frecuencia. Además, se cuenta con dos métodos para generar variables aleatorias a partir de la distribución normal: Algoritmo de convolución. Método directo. UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 10 Método de Transformación Inversa (ITM) Este método requiere una función de distribución acumulada (fda) F(x) se puede obtener en forma cerrada (tiene fórmula y es posible calcular F-1(x)). Como ejemplos se tienen las distribuciones exponencial, uniforme, triangular y la de Weibull. UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 11 Método de Transformación Inversa (ITM) (cont.) Este método consiste en los siguientes pasos: 1. Dada la función de densidad de probabilidad f(x), se elabora la función de distribución acumulada como: F ( x ) = ∫ f (t )dt x −∞ 2. 3. Se genera un número aleatorio r ∈ [0,1]. Se establece F(x) = r y se determina el valor de x. La variable x es entonces una variable aleatoria continua de la distribución cuya fdp está dada por f(x). UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 12 Método de Transformación Inversa (ITM) Función de Rampa Se tiene la siguiente fdp: x 0≤ x≤2 f (x ) = 2 0 en caso contrario Se calcula fda: x t x2 F ( x ) = ∫ dt = 0 2 4 0 x2 F (x ) = 4 1 UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias x<0 0≤ x≤2 x≥2 13 Método de Transformación Inversa (ITM) Función de Rampa (cont.) Se genera un número aleatorio r, por ejemplo, r = 0.64. Se establece F(x) = r y se determina el valor de x: F (x ) = r x = ±2 r 2 x =r x = 2 0.64 = 1.6 4 Puesto que los tiempos de servicio se definen sólo para valores positivos de x, no es factible un tiempo de servicio x = -2√r; entonces se queda como solución x = 2√r. Esta ecuación se llama generador de variables aleatorias o un generador de proceso. UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 14 Método de Transformación Inversa (ITM) Distribución Exponencial Se tiene la siguiente fdp: λe − λx f (x ) = 0 x ≥ 0, λ > 0 en caso contrario Se calcula fda: F (x ) = ∫ λe dt = 1 − e x − λt − λx 0 UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 0 F (x ) = − λx 1 e − x<0 x≥0 15 Método de Transformación Inversa (ITM) Distribución Exponencial (cont.) Se genera un número aleatorio r, por ejemplo, r = 0. Se establece F(x) = r y se determina el valor de x: F (x ) = r 1− e − λx =r e − λx = 1 − r − λx = ln (1 − r ) UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias x=− x=− 1 λ 1 λ ln (1 − r ) ln (1 − 0 ) = 0 16 Método de Transformación Inversa (ITM) Distribución Uniforme Continua Se tiene la siguiente fdp: 1 ( ) f x = b − a 0 a≤0≤b en caso contrario Se calcula fda: F (x ) = ∫ x a 1 x−a dt = b−a b−a UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 0 x −a F (x ) = b − a 1 x<a a≤ x≤b x>b 17 Método de Transformación Inversa (ITM) Distribución Uniforme Continua (cont.) Se genera un número aleatorio r, por ejemplo, r = 0.5. Se establece F(x) = r y se determina el valor de x: F (x ) = r x−a =r b−a x − a = r (b − a ) x = a + r (b − a ) x = a + 0.5(b − a ) = 0.5a + 0.5b UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 18 Método de Transformación Inversa (ITM) Distribución Triangular Se tiene la siguiente fdp: 1 (x − 2) 2≤ x≤3 2 1 x f (x ) = 2 − 3 ≤ x ≤ 6 3 2 en caso contrario 0 Se calcula fda: 0 x1 1 2 1 2 F1 (x ) = ∫ (t − 2 )dt = (x − 2 ) ( ) x − 2 2 2 4 F (x ) = 4 1 2 x1 1 2 t x − − 12 x + 24 F2 (x ) = ∫ 2 − dt = − x − 12 x + 24 3 2 12 3 12 1 ( ) UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias ( x<2 2≤ x≤3 ) 3≤ x ≤6 en caso contrario 19 Método de Transformación Inversa (ITM) Distribución Triangular (cont.) La función F1(x) cubre el primer 25% del intervalo fda y la función F2(x) cubre el restante 75% del intervalo. Debido a que tenemos dos funciones, si r < 0.25 se usa la función F1(x); en caso contrario (r ≥ 0.25) se utiliza la función F2(x). F1 ( x ) = r 0 ≤ r < 0.25 1 (x − 2)2 = r 4 F2 ( x ) = r − ( 0.25 ≤ r ≤ 1 ) 1 2 x − 12 x + 24 = r 12 UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 20 Método de Transformación Inversa (ITM) Distribución Triangular (cont.) Se genera un número aleatorio r, por ejemplo, r = 0 y r = 2/3. Se establece F(x) = r y se determina el valor de x: F1 ( x ) = r F2 ( x ) = r 1 (x − 2)2 = r 4 x − 2 = ± 4r ( ) 1 2 x − 12 x + 24 = r 12 x 2 − 12 x = −24 − 12r − x 2 − 12 x + 36 = 36 − 24 − 12r (x − 6)2 = 12 − 12r x − 6 = ± 12 − 12r x = 2 + 4r x = 6 − 2 3 − 3r x = 2 + 4 × 0 = 2 x = 6 − 2 3 − 3× 2 3 = 4 UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 21 Método de Aceptación-Rechazo (ARM) Este método requiere una función de distribución acumulada (fda) F(x) esté definida en un intervalo finito. Como ejemplos se tienen la función rampa, las distribuciones triangular, beta y la de Erlang. UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 22 Método de Aceptación-Rechazo (ARM) (cont.) Este método consiste en los siguientes pasos: 1. 2. 3. 4. 5. Se selecciona una constante M, tal que M es el valor más grande de f(x) en el intervalo [a, b]. Se genera dos números aleatorios r1 y r2, r1, r2 ∈ [0,1]. Se calcula x* = a + (b – a)r1. (Esto asegura que cada miembro de [a, b] tiene una probabilidad igual de ser elegido como x*). Se evalúa la función f(x) en el punto x*; sea f(x*). Si r2 ≤ f(x*) / M, entonces se acepta x* como una variable aleatoria continua. De lo contrario, se rechaza x* y se vuelve al paso 2. UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 23 Método de Aceptación-Rechazo (ARM) Función de Rampa Se tiene la siguiente fdp: 2 x 0 ≤ x ≤ 1 f (x ) = 0 en caso contrario El valor más grande de f(x) ocurre x = 1 y es igual a 2. Entonces, M = 2. Se genera dos números aleatorios r1 y r2, por ejemplo, r1 = 0 y r2 = 1. Se calcula x* = a + (b – a)r1 = 0 + (1 – 0)0 = 0 Se evalúa f(x*) = 2x* = 2*0 = 0 Se comprueba r2 ≤ f(x*) / M; 1 ≥ 0/2, por lo que se rechaza y UCR-ECCI CI-1453 al Investigación se vuelve paso 2.de Operaciones Generación de Variables Aleatorias 24 Método de Aceptación-Rechazo (ARM) Función de Rampa (cont.) Se genera dos números aleatorios r1 y r2, por ejemplo, r1 = 0.5 y r2 = 0.2. Se calcula x* = a + (b – a)r1 = 0 + (1 – 0)0.5 = 0.5 Se evalúa f(x*) = 2x* = 2*0.5 = 1 Se comprueba r2 ≤ f(x*) / M; 0.2 ≤ 1/2, por lo que se acepta x* como una variable aleatoria continua, x* = 0.5. UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 25 Método de Aceptación-Rechazo (ARM) Distribución Triangular Se tiene la siguiente fdp: 1 x − 6 + 12 2 ≤ x ≤ 6 4 x f (x ) = − 6≤ x≤8 3 6 en caso contrario 0 más grande de f(x) ocurre x = 6 El valor y es igual a 1/3. Entonces, M = 1/3. Se genera dos números aleatorios r1 y r2, por ejemplo, r1 = 0 y r2 = 1. Se calcula x* = a + (b – a)r1 = 2 + (8 – 2)0 = 2 UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 26 Método de Aceptación-Rechazo (ARM) Distribución Triangular (cont.) La función f1(x*) cubre 2/3 del intervalo fdp y la función f2(x*) cubre el restante 1/3 del intervalo. Debido a que tenemos dos funciones, si 2 ≤ x* ≤ 6 se usa la función f1(x*); en caso contrario (6 ≤ x* ≤ 8) se utiliza la función f2(x*). 1 x* 2 ≤ x* ≤ 6 f ( x *) = f1 ( x *) = − + 6 12 4 x* f ( x *) = f 2 ( x *) = − 6 ≤ x* ≤ 8 3 6 UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 27 Método de Aceptación-Rechazo (ARM) Distribución Triangular (cont.) Se evalúa f1(x*) porque x* = 2: 1 x* 1 2 f ( x *) = f1 ( x *) = − + =− + =0 6 12 6 12 Se comprueba r2 ≤ f(x*) / M; 1 ≥ 0/(1/3), por lo que se rechaza y se vuelve al paso 2. UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 28 Método de Aceptación-Rechazo (ARM) Distribución Triangular (cont.) Se genera dos números aleatorios r1 y r2, por ejemplo, r1 = 0.75 y r2 = 0.5. Se calcula x* = a + (b – a)r1 = 2 + (8 – 2)0.75 = 6.5 Se evalúa f2(x*) porque x* = 6.5: 4 x * 4 6.5 1 f (x *) = f 2 ( x *) = − = − = 3 6 3 6 4 Se comprueba r2 ≤ f(x*) / M; 0.5 ≤ (1/4)/(1/3), por lo que se acepta x* como una variable aleatoria continua, x* = 6.5. UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 29 Distribución Normal Esta distribución es muy importante, por lo cual se ha creado varios algoritmos para la generación de variables aleatorias. Tanto el método ITM como el método ARM, son inapropiados para esta distribución porque: La fdp no existe en forma cerrada. La distribución no está definida en un intervalo finito. Aunque es posible usar métodos numéricos en el ITM y truncar la distribución para el método ARM; otros métodos tienden a ser más eficaces: Algoritmo de convolución. Método directo. UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 30 Distribución Normal Algoritmo de Convolución En este algoritmo se hace uso del teorema del límite central. Teorema del Límite Central: La suma X de n variables aleatorias independientes y distribuidas de manera idéntica (por ejemplo, x1, x2, …, xn, cada una con media μ (E(xi) = μ) y varianza finita σ2 (Var(xi) = σ2)) tiene una distribución aproximadamente normal con media nμ y varianza nσ2. ( n 2 n µ , σ ⇒ x n n ∑ i ) i =1 n X= ∑x i =1 i n UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 31 Distribución Normal Algoritmo de Convolución (cont.) Sea X con distribución n(μ, σ2), se va a generar un valor Z con distribución n(0, 1). Si esto se aplica a R(0, 1) variables aleatorias; r1, r2, …, rn , con media μ y varianza finita σ2, se deduce que: n z= ∑ r − nµ i =1 i (nσ ) 2 12 UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias ⇒ n (0,1) 32 Distribución Normal Algoritmo de Convolución (cont.) Este método consiste en los siguientes pasos: Se generan n variables aleatorias con distribución U(0, 1). Se calcula la variable z: n z= ∑ r − nµ i =1 i (nσ ) 2 12 ⇒ n (0,1) Se calcula la variable aleatoria normal x de la siguiente forma: x = zσ + µ UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 33 Distribución Normal Algoritmo de Convolución (cont.) Se utiliza casi siempre los siguientes valores: n = 12. μ = 0.5 σ2 = 1/12 Se calcula la variable z: 12 z = ∑ ri − 6 ⇒ n (0,1) i =1 UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 34 Distribución Normal Método Directo Este método fue creado por Box y Muller (1958). No es tan eficaz como algunas nuevas técnicas, pero es fácil aplicarlo y ejecutarlo. El algoritmo genera dos números aleatorios R(0, 1), r1 y r2, y luego los transforma en dos v.a. normales, cada una con media 0 y varianza 1. UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 35 Distribución Normal Método Directo (cont.) Este método consiste en los siguientes pasos: Se generan dos números aleatorios r1 y r2, U(0, 1). Se transforman en dos variables aleatorias normales, cada una con media 0 y varianza 1, usando las transformaciones directas: z1 = (− 2 ln r1 ) sen (2πr2 ) 12 z 2 = (− 2 ln r1 ) cos(2πr2 ) 12 Se calculan las variables aleatorias normales x1 y x2 de la siguiente forma: x1 = z1σ + µ x2 = z 2σ + µ UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 36 Referencias Bibliográficas Winston, Wayne L. “Investigación de Operaciones”. Grupo Editorial Iberoamérica. México, 2005. UCR-ECCI CI-1453 Investigación de Operaciones Generación de Variables Aleatorias 37