Está en la página 1de 16

Generación de variables aleatorias

Introducción
Métodos de generación:
Transformada Inversa
Aceptación-Rechazo
Composición
Convolución
Referencias

Lenguajes de simulación 2006-2007

Generación de variables aleatorias. Introducción

De forma general, el proceso de simulación necesita la generación de datos


semejantes a los que se producen en la realidad, lo que precisa la posibilidad de
generar variables aleatorias de varias distribuciones, por ejemplo la exponencial.
El algoritmo concreto a utilizar dependerá de la distribución a generar, pero de
forma general tendrá las siguientes etapas:

Generar uno a más Transformación Obtener X de la


números aleatorios dependiente de la distribución
U(0,1) distribución deseada

Características deseables:
Exacto, si es posible (existen métodos aproximados).
Eficiente: Poco almacenamiento, rápido, robusto.
Sencillo, fácil de comprender y de implementar.
Que precise solo números U(0,1) y, si es posible un número genere
una variable.
Lenguajes de simulación 2006-2007
Algunas distribuciones utilizadas

Lenguajes de simulación 2006-2007

Método de la transformada inversa (I)

Teorema: Sea {F(z), a ≤ z ≤ b} una función de distribución con función de


distribución inversa
F-1(u):=inf{z∈[a,b]: F(z) ≥ u, 0 ≤ u ≤ 1}
Sea U una variable aleatoria de U(0,1). Entonces Z=F-1(U) tiene la función de
distribución F.
Prueba: Pr(Z ≤ z) = Pr(F-1(U) ≤ z) = Pr (U ≤ F(z)) = F(z)
Algoritmo
1. Generar un U aleatorio de U(0,1)
2. Z ← F-1(U)
3. Devolver Z requiere la posibilidad de evaluar F-1(U)

Lenguajes de simulación 2006-2007


Método de la transformada inversa (II)

Lenguajes de simulación 2006-2007

Método de la transformada inversa (ejemplo 1)

Consideremos el caso de generar variables aleatorias con una funcion


densidad f(x) = 2x, 0 ≤ x ≤ 1

Solución:
x
F(x) = ∫ 2tdt
0
=x ,0≤x≤1
2

2
Ahora hacemos F(x) = U ==> U=x

A continuación, se obtiene x, ==> x = F (U) = √U, 0 ≤ U ≤ 1


-1

Por tanto, se pueden obtener valores de x con pdf f(x) = 2x calculando la


raiz cuadrada de un número aleatorio U.

Lenguajes de simulación 2006-2007


Método de la transformada inversa (ejemplo 2)
Sea el caso de generar variables aleatorias x con función densidad:

⎧⎪λe −λx 0≤x


f(x) = ⎨
⎪⎩0 x<0

Solución: x ⎧⎪1 − e − λx 0≤x


F ( x) = ∫ f(t) dt = ⎨
−∞ ⎪⎩0 x<0

Se hace F(x) = U
Se busca la solución para x, ==>
1 - e-λx = U
e-λx = 1 - U
- λx = ln(1 - U)
x = - {ln(1 - U)} / λ o - {ln(U)} / λ
Lenguajes de simulación 2006-2007

Método de la transformada inversa (ejemplo 3)


Distribución Weibull – buena para modelar “el tiempo para fallo” de
máquinas, componentes, etc.
⎧⎪{ β / α β β
} ⋅ x β −1 e − ( x / α ) , x ≥ 0
pdf: f ( x) = ⎨
⎪⎩ 0 , otherwise
Ten en cuenta que a es el parámetro de forma y b el parámetro de escala.
Ahora, para generar variables Weibull:
−( x / α ) β
Step 1. cdf: F ( x) = 1 − e , x≥0
β
Step 2. 1 − e −( x / α ) = U
Step 3. X = α [-ln(1-U)] 1/β
or X = α [-ln(U)] 1/β
Nota: La función densidad f(x) de una variable aleatoria continua se
puede interpretar como la oportunidad relativa de observar variables
en diferentes partes del rango.
Lenguajes de simulación 2006-2007
Método de la transformada inversa (ejemplo 3)
Distribución Weibull (continuación). En las regiones del eje x en las que f(x)
es alto, se espera observar una gran cantidad de variables y en aquellas
en las que f(x) es baja encontraremos solo unas pocas.
Se puede considerar f(x) como la función pendiente de F en x.

Intervalos para U y X, transformada inversa de una distribución


Weibull(1.5, 6)
Lenguajes de simulación 2006-2007

Método de la transformada inversa (ejemplo 4)


Distribución Uniforme
Consideremos una variable aleatoria x que está distribuida
uniformemente en el intervalo [a, b]
⎧1 /(b − a) a≤x≤b
pdf: f(x) = ⎨
⎩0 en el resto de los casos

Para generar variables aleatorias:


Paso 1. ⎧0 x<a
⎪ a≤x≤b
F(x) = ⎨( x − a ) /(b − a )
⎪1
⎩ x>b

Paso 2. F(x) = (x - a) / (b - a) = U
Paso 3. x = a + (b - a) U

Lenguajes de simulación 2006-2007


Método de la transformada inversa (Datos discretos)
Si el modelador ha sido incapaz de encontrar una distribución teórica que
proporcione un buen modelo para los datos de entrada, puede ser necesario
utilizar una distribución de datos empírica.
Ejemplo:
Supongamos que se han recogido los tiempos de reparación de 100 aparatos
estropeados. Los datos se resumen en la tabla siguiente en función del número
de observaciones de los distintos intervalos. Por ejemplo, hubo 31
observaciones entre 0 y 0.5 hora, 10 entre 0.5 y 1 hora, y así sucesivamente.
Intervalo Frecuencia Frecuencia
(Horas) Frecuencia Relativa acumulada

0 ≤ x ≤ 0.5 31 0.31 0.31


0.5 ≤ x ≤ 1.0 10 0.10 0.41
1.0 ≤ x ≤ 1.5 25 0.25 0.66
1.5 ≤ x ≤ 2.0 34 0.34 1.00

La distribución verdadera, F(x), de tiempos de reparación (la curva en la siguiente


transparencia) se puede estimar mediante la cdf empírica, F(x)(la parte lineal a
trozos)
Lenguajes de simulación 2006-2007

Método de la transformada inversa (Datos discretos)

Funciones de distribución empírica y teórica para los


datos de los tiempos de reparación (X ≥ 0)

Lenguajes de simulación 2006-2007


Método de la transformada inversa (Datos discretos)
La técnica de la transformada inversa se aplica directamente para generar variables
de tiempo de reparación, X. Recordando la interpretación gráfica de la técnica,
primero se genera un número aleatorio R1, por ejemplo R1 = 0.83, y se obtiene
X1 del gráfico anterior.
De forma simbólica esto se escribe como X1 = F-1(R1) pero
algebraicamente, puesto que R1 está entre 0.66 y 1.00, X1 se calcula mediante
una interpolación lineal entre 1.5 y 2.0, es decir

X1 = 1.5 + {(R1 - 0.66) / (1 - 0.66)} × (2.0 - 1.5) = 1.75

Cuando R1 = 0.83, se puede apreciar que (R1 - 0.66) / (1 - 0.66) = 0.5, por lo que X1
estará a la distancia mitad entre 1.5 y 2.0 ya que R1 está a la distancia mitad
entre 0.66 y 1.00
El algoritmo es: Paso 1. Generar R
Paso 2. Encontrar el intervalo i en el que cae R, es decir,
encontrar i de forma que ri ≤ R ≤ ri+1
Paso 3. Calcular X mediante X = xi + ai (R - ri)

Lenguajes de simulación 2006-2007

Método de la transformada inversa (Datos discretos)


Si los valores de origen son discretos no se realiza interpolación. Ejemplo:
Consideremos el tamaño de los paquetes de una red que puede tomar los valores
siguientes:
Tamaño (bytes) Probabilidad Probabilidad acumulada
64 0,7 0,7
128 0,1 0,8
512 0,2 1,0

La función de distribución acumulada y la inversa están dadas por:


⎧ 0 ,0 0 ≤ x ≤ 64 ⎧ 64 0 ≤ u ≤ 0,7
⎪ 0 ,7 64 ≤ x ≤ 128 ⎪
⎪ F −1 ( u ) = ⎨128 0,7 ≤ u ≤ 0,8
F ( x) = ⎨ ⎪ 512 0,8 ≤ u ≤ 1
⎪ 0 ,8 128 ≤ x ≤ 512 ⎩
⎪⎩1, 0 512 ≤ x

Lenguajes de simulación 2006-2007


Caso de la distribución normal (I)

Distribución Normal Estándar

x⎧ 1 ⎫ −t 2 2
Φ( x) = ∫ ⎨ ⎬*e
− ∞ ⎩ ( 2π ) ⎭
dt , -∞ < x < ∞

Eje Z2 Z1 = B cos θ
(Z1,Z2) Z2 Z2 = B sin θ
Se sabe que B2 = Z12 + Z22 tiene
θ
una distribución chi-cuadrado de
Z1 0 dos grados de libertad, lo que es
Eje Z1
equivalente a una distribución
exponencial de media 2, por tanto el
radio B se puede obtener mediante
B 2 = (−2 ln U )
Representación polar de un par de variables 1
B = (−2 ln U ) 2
de una distribución normal estándar

Lenguajes de simulación 2006-2007

Caso de la distribución normal (II)


Por simetría con la distribución normal, parece razonable suponer que el ángulo θ
está distribuido uniformemente entre 0 y 2π radianes.
Además, el radio, B, y el ángulo, θ, son mutuamente independientes. Combinando
las dos ecuaciones anteriores se obtiene un método directo de generar dos
variables de la distribución normal estándar, Z1 y Z2, a partir de dos números
aleatorios U1 and U2:
Z1 = (-2lnU1)1/2 cos(2π U2)
Z2 = (-2lnU1)1/2 sin(2π U2)
Para obtener variables normales Xi con media μ y varianza σ2 se aplica
Xi = μ + σ Zi
Ejemplo, supongamos que se han obtenido dos números aleatorios U1=0,1758 y
U2=0,1489, las variables aleatorias de la normal estándar generadas son:
Z1 = (-2ln 0,1758)1/2 cos(2π 0,1489) = 1,11
Z2 = (-2ln 0,1758)1/2 sin (2π 0,1489) = 1,50
Si hubiera que generar variables de una normal con media μ = 10 y varianza σ2 = 4
se obtendría:
X1 = 10 + 2(1,11) = 12,22
X2 = 10 + 2(1,50) = 13,00
Lenguajes de simulación 2006-2007
Método de aceptación-rechazo (I)
Se utiliza cuando es imposible o extremadamente difícil expresar x en función de la
transformada inversa F-1(U).
Sea f la función densidad de probabilidad. Este método precisa una función que sea
mayor que f, tal que g(x) ≥ f(x) para todo x.
g(x) no será una función densidad puesto que
∞ ∞
c = ∫ g ( x)dx ≥ ∫ f ( x)dx =1
−∞ −∞

Para c ≤∞, entonces h(x)=g(x)/c es una función densidad.


Algoritmo
1. Generar Y teniendo una densidad h.
2. Generar U de U(0,1), independiente de Y.
3. Si U ≤ f(Y)/g(Y), entonces hacer X←Y, sino volver al paso 1.
El algoritmo continúa haciendo este bucle sobre el paso 1 hasta que se genera un
(Y,U) para el que U ≤ f(Y)/g(Y) (hasta que aceptamos el valor de Y para Z). La
variable aleatoria Z generada por el algoritmo anterior tiene una función densidad f.
Lenguajes de simulación 2006-2007

Método de aceptación-rechazo (II)


¿Cómo elegir g?
• Hay que intentar elegir g de modo que la variable aleatoria Y se pueda generar
rápidamente,
• La probabilidad de aceptar Y debiera ser grande (c próxima a 1), lo que significa
que g debe estar próxima a f.
Ejemplo:
La distribución Beta(4,3) tiene una función densidad
f(x) = 60 x3 ( 1 – x)2 0 ≤ x ≤ 1
El valor máximo de f se alcanza para x=0,6 y f(0,6) = 2,0736.
Si definimos g(x)=2,0736 para 0 ≤ x ≤1, entonces g es mayor que f.
Algoritmo:
1. Generar Y y U de U(0,1).
60Y (1 − Y ) 2
3
2. Si U≤
2,0736

entonces hacer X=Y; sino rechazar el valor de Y y volver al paso 1.


Lenguajes de simulación 2006-2007
Método de aceptación-rechazo (III)

En algunos textos se simplifica el método de la forma siguiente.


Pasos:
1. Normalizar el rango de f utilizando un factor de escala c tal que c.f(x) ≤ 1,
estando x en el rango a≤x≤b
2. Se define una función lineal de U, x = a + (b-a) U
3. Se generan un par de números aleatorios (U1, U2)
4. Si U2 ≤ c×f[a + (b-a) U1], entonces aceptar el par y utilizar x = a + (b - a) U1
como la variable aleatorio generada.
5. Volver al paso 3.

f(x) c

a x b

Lenguajes de simulación 2006-2007

Método de aceptación-rechazo (IV)


Ejemplo 1:
Utilizar el método de aceptación-rechazo para generar variables aleatorias x con
función densidad f(x) = 2x, 0 ≤ x ≤ 1

2
f(x) g(x)
1 1

1 1
Antes de escalar Después de escalar
Ten en cuenta: x = 0 + (1) U = U, y además g(U) = (1/2) × f(U) = (1/2) × (2U) = U
Por lo tanto, en este ejemplo los pasos se pueden resumir en:
1 Generar U1 y calcular g(U1).
2 Generate U2 y compararlo con g(U1).
3 Si U2 ≤ g(U1), se acepta U1 como x con función densidad f(x). Si U2 > g(U1)
se rechaza U1 y se vuelve al paso 1.

Lenguajes de simulación 2006-2007


Método de aceptación-rechazo (V)
Nota: El método de aceptación-rechazo es muy ineficiente cuando c . (b-a) es muy
grande, puesto que se deben generar una gran cantidad de números aleatorios
para generar cada variable aleatoria producida.
Ejemplo:
La distribución se divide en partes y las
c partes se muestrean en proporción a la
cantidad del área de la distribución que
f(x) contienen.

a x b
Una variable aleatoria X está distribuida de acuerdo con una gamma con
parámetros β y θ si su función densidad está dad por
⎧⎧ βθ ⎫.( βθx) β −1 e − βθx x>0
⎪⎨ ⎬
f ( x ) = ⎨⎩ Γ ( β ) ⎭
⎪⎩0 en el resto de los casos
El parámetro β se llama parámetro de forma y θ de escala. En la siguiente
transparencia se ven varias distribuciones para θ = 1 y distintos valores β.

Lenguajes de simulación 2006-2007

Método de aceptación-rechazo (VI)

Funciones densidad para varias distribuciones gamma cuando θ = 1

Lenguajes de simulación 2006-2007


Método de aceptación-rechazo (VII)
La media y la varianza de la distribución gamma son:
E(X) = 1 / θ y
2
V(X) = 1 / (βθ )
La función de distribución de X está dada por
⎧ ∞
⎪⎪1 − ⎧⎨ βθ ⎫.( βθ t ) β −1 e − βθ t dt
F ( x) = ⎨ ∫⎩ Γ ( β ) ⎬
⎭ x>0

x
⎪⎩ 0 x≤0

Paso 1. Se calcula a = (2β - 1)1/2, b = 2β -ln4 + 1/a


Paso 2. Se generan U1 y U2
Paso 3. Se calcula X = β[U1 / (1 - U1)]a.
Paso 4a. Si X > b - ln(U12 U2), se rechaza X y se vuelve al paso 2.
Paso 4b. Si X ≤ b - ln(U12 U2), se utiliza X como la variable deseada. Las variables
generadas en el paso 4b tendrán una media y una varianza iguales a β. Si se desea
tener una media 1/θ y una varianza 1/βθ2 ,entonces
Paso 5. Reemplazar X por X/βθ.

Lenguajes de simulación 2006-2007

Método de aceptación-rechazo (VIII)


Ejemplo (Banks, Carson et all):
Los tiempos de fallo para una máquina de dulces de elevada producción están
distribuidos de acuerdo a una gamma con media 2,2 minutos y varianza 2,1
minutos2. Por tanto, 1/θ = 2,2 y 1/βθ2 = 2,10, lo que implica que β =2,30 y θ =
0,4545.
Paso 1. a = 1,90, b = 3,74
Paso 2. Se genera U1 = 0,832 y U2= 0,021
Paso 3. Se calcula X = 2,3[0,832 / 0,168]1.9 = 48,1
Paso 4. X = 48,1 > 3,74 - ln[(0,832)2(0,021)] = 7,97 , por lo que se rechaza X y
se vuelve al paso 2.
Paso 2. Se genera U1 = 0,434, y U2 = 0,716.
Paso 3. Se calcula X = 2,3(0,434/0,566)1.9 = 1,389.
Paso 4. Puesto que X = 1.389 ≤ 3,74 - ln[(0,434)2 (0,716)] = 5,74, se acepta X.
Paso 5. Se divide X por βθ = 1.045 para obtener X = 1.329.
Como promedio para generar 1000 variables gamma, se precisan entre 1130 y
1470 intentos lo que supone generar entre 2260 y 2940 números aleatorios.
Lenguajes de simulación 2006-2007
Método de composición (I)

Este método se aplica cuando la función de distribución F se puede expresar como


una combinación de otras funciones F1, F2,..
r
F ( z ) = ∑ ωi Fi ( z )
r

i =1
0 < ωi < 1 para i = 1,...,r ∑ω
i =1
i =1

Algoritmo
1. Generar aleatoriamente un entero aleatorio I tal que
Pr(I=i) = ωi for i=1,..,r.
2. Generar aleatoriamente Z de la distribución FI(Z).
3. Return Z

Lenguajes de simulación 2006-2007

Método de composición (II)

Ejemplo
• Distribución doble exponencial (Laplace)

⎧⎪0,5e x si x < 0
f ( x) = ⎨
⎪⎩0,5e − x si x ≤ 0

Generar inicialmente U1 y U2 de IID U(0,1). Si U1 < 0,5


devolver X=ln(1-U2). En caso contrario, devolver X=-ln(1-U2)

• Distribución hiper-exponencial
F(x) = ω1F1(x) + ω2F2(x) +..+ωkFk(x)
donde Fi(x) es la distribución exponencial con media bi, i=1,,k.

Lenguajes de simulación 2006-2007


Método de convolución
En algunos casos, Z puede ser expresado como la suma de variables IID Y1,.., Yr,
de forma que Z=Y1+Y2+..+Yr y generar las Yi puede ser más fácil que generar Z.
Algoritmo
1. Generar IID Y1,..,Yr.
2. Devolver Z=Y1+Y2+..+Yr
Ejemplo: Si Z tiene una distribución Erlang con parámetros r y β, entonces Z puede
ser expresado como una suma de r exponenciales independientes Yi, cada una con
media β.
Un algoritmo más eficiente para este ejemplo es
• Generar r números aleatorios U(0,1).
• Colocar Z= -β ln(U1U2..Ur)= -β(lnU1+lnU2+... +lnUr)
Nota: No hay que confundir el método de convolución con el de composición. En el
primero la variable aleatoria X se puede expresar como suma de variables aleatorias
Yi mientras en el de composición la función de distribución de X, F(X), es una suma
ponderada de otras funciones de distribución.

Lenguajes de simulación 2006-2007

Elección del método adecuado

• Si la función de distribución se puede invertir utiliza inversión.


• Si la función de distribución es la suma de otras funciones de distribución
utiliza composición.
• Si la variable aleatoria es composición de otras variables aleatorias utiliza
convolución
• Si existe una función que maximice la función densidad utiliza aceptación
rechazo.
• Si existe algún tipo de relación utiliza métodos específicos.

Lenguajes de simulación 2006-2007


Criterios para la elección de un método

1.- Certeza
• Certeza teórica
• Errores aritméticos en los algoritmos
2.- Velocidad de ejecución
3.- Facilidad de implementación
• Esfuerzo de codificación
• Soporte de rutinas necesarias
4.- Transportabilidad
5.- Necesidades de memoria
6.- Interacción con técnicas de reducción de varianza

Lenguajes de simulación 2006-2007

Métodos para generar variables aleatorias continuas


• Uniforme: Transformada inversa
• Exponential: Transformada inversa
• Erlang: Convolución
• Gamma: Aceptación-rechazo
• Weibull: Transformada inversa
• Normal: Transformación directa
• Triangular: Transformada inversa
• Empírica: Transformada inversa
• Bernoulli: Transformada inversa
• Uniforme: Transformada inversa
• Discreta arbitraria: Transformada inversa
• Binomial: Convolución
• Geométrica: Transformada inversa
• Poisson: Aceptación-rechazo

Lenguajes de simulación 2006-2007


Referencias
Todos las expresiones y ejemplos están obtenidos de los libros siguientes:
Banks, Carson, Nelson, Nicol. Discrete event system simulation (third edition).
Prentice-Hall 2001. El capítulo 8 está dedicado al tema de generación de variables
aleatorias.
Law and Kelton. Simulation Modeling and Analysis (third edition). McGraw-Hill
2000. También es el capítulo 8 es el que está dedicado al tema.
George S. Fishman. Discrete-Event Simulation. Springer-Verlag 2001. Un enfoque
más estadístico, también el capítulo 8 es el dedicado a la generación de variables
aleatorias.
Existen algunos sitios Web, por ejemplo:
http://www.iro.umontreal.ca/~vazquez/SimSpiders/GenerRV/Distributions.html
http://cg.scs.carleton.ca/~luc/rnbookindex.html Página de Luc Devroye sobre
generación de variables aleatorias

Lenguajes de simulación 2006-2007