Generaci´on de variables aleatorias continuas
Se dice que una variable aleatoria X es continua, o m´as propiamente, absolutamente continua, si existe f : R 7→ R tal que
F (x) := P (X ≤ x) = Z x
−∞
f (t) dt.
Al igual que para las v.a. discretas, analizaremos dos m´etodos de generaci´on para variables continuas, con las respectivas mejoras en cada caso particular. Estos m´etodos tambi´en se denominan:
M´etodo de la transformada inversa. M´etodo de aceptaci´on y rechazo.
1.
M´etodo de la transformada inversa
La generaci´on o simulaci´on de valores de una v.a. por el m´etodo de la transformada inversa, requie-re conocer la funci´on de distribuci´on acumulada de la variable X a simular. Si X es (absolutamente) continua, entonces existe f : R 7→ R tal que su funci´on de distribuci´on est´a dada por:
F (x) = Z x
−∞
f (t) dt, y f se denomina la funci´on de densidad de X.
La funci´on F es continua, no decreciente, y se cumple que: l´ım
x→−∞F (x) = 0, x→∞l´ım F (x) = 1.
En esta secci´on nos referiremos a variables aleatorias X cuya funci´on de distribuci´on sea mon´otona creciente sobre el conjunto F−1(0, 1) = {x | 0 < F (x) < 1}. De esta manera, la funci´on F tiene inversa sobre el intervalo (0, 1).
Modelos y Simulaci´on - 2017 Proposici´on 1. Sea U ∼ U (0, 1) una variable aleatoria. Para cualquier funci´on de distribuci´on continua F , mon´otona creciente en F−1(0, 1), la variable aleatoria X definida por:
X = F−1(U ) tiene distribuci´on F .
Notemos que U toma valores en el intervalo (0, 1), excluyendo los puntos 0 y 1. La propiedad de monoton´ıa de F asegura que F tiene inversa en (0, 1).
As´ı, si X = F−1(U ), su funci´on de distribuci´on est´a dada por: FX(x) = P (X ≤ x) = P (F−1(U ) ≤ x).
Como F es creciente, entonces a ≤ b si y s´olo si F (a) ≤ F (b). Tomando a = F−1(U ) y b = x, resulta: FX(x) = P (F (F−1(U )) ≤ F (x)) = P (U ≤ F (x)) = F (x).
Luego X tiene distribuci´on F .
Esta proposici´on da un m´etodo en principio simple para simular una variable aletoria continua:
1 def Tinversa(F):
2 U=random()
3 return G(U) # G = F−1
Sin embargo, pueden existir algunas complicaciones. Por ejemplo, que la inversa de F involucre fun-ciones computacionalmente costosas. (pf(x), log(x), etc.), o que no pueda ser calculada expl´ıcitamenten
(p. ej., distribuci´on de la normal, de una gamma).
As´ı, para ciertas distribuciones deben utilizarse otras estrategias, por ejemplo expresando a F como distribuci´on del m´ınimo y/o del m´aximo de v. a. independientes,
distribuci´on de suma de variables aleatorias independientes, distribuci´on de una v. a. condicional a otra,
u otros m´etodos espec´ıficos.
Ejemplo 1.1. Escribir un m´etodo para generar el valor de una v. a. X con funci´on de densidad f (x) = −x
Modelos y Simulaci´on - 2017 F (x) = 0 x ≤ 0 −x42 + x 0 < x < 2 1 x ≥ 2
F resulta entonces mon´otona creciente en el intervalo (0, 2).
Para simular X debemos determinar la inversa de F en (0, 1). Es decir, para cada u ∈ (0, 1), encon-trar el valor x tal que
−x
2
4 + x = u. Esta ecuaci´on tiene dos soluciones para x:
x = 2 + 2√1 − u o x = 2 − 2√1 − u
pero s´olo la segunda pertenece al intervalo (0, 2). Luego el algoritmo de generaci´on ser´a:
def inversaX(): U=random()
return 2-2*sqrt(U)
Ejemplo 1.2. Escribir un m´etodo para generar el valor de una v. a. Y con funci´on de densidad
f (x) = 0.25 0 ≤ x ≤ 2 0.5 2 < x < 3 0 c.c.
Para esta variable aleatoria, la funci´on de distribuci´on est´a dada por:
F (x) = 0 x ≤ 0 x 4 0 ≤ x ≤ 2 x−1 2 2 < x < 3 1 x ≥ 3
Modelos y Simulaci´on - 2017 def inversaY(): U=random() if U<0.5: return 4*U else: return 2U+1
Ejemplo 1.3. Consideremos X1, X2, . . . , Xn n variables aleatorias independientes, con funciones de
distribuci´on F1, F2, . . . , Fn, respectivamente:
Fi(a) = P (Xi≤ a).
Llamamos X a la variable aleatoria que es el m´aximo de las Xi, 1 ≤ i ≤ n:
X = m´ax{X1, X2, . . . , Xn}.
Entonces la funci´on de distribuci´on de X est´a dada por:
FX(a) = F1(a) · F2(a) . . . Fn(a).
En particular, si X1, X2, . . . , Xnson uniformes en (0, 1), independientes entre s´ı, tenemos que Fi(x) =
x, 0 ≤ x ≤ 1 e 1 ≤ i ≤ n. Luego el m´aximo de las Xi tiene una distribuci´on dada por:
FX(x) = xn, 0 ≤ x ≤ 1.
As´ı, si se desea simular una variable aleatoria con distribuci´on FX(x) = xn, en lugar de tomar una
ra´ız n-´esima es conveniente generar n uniformes y tomar su m´aximo.
def raizn(n): Maximo=0 for i in range(n): U=random() If Maximo<U: Maximo=U return Maximo
1.1 Generaci´on de una v. a. Poisson X ∼ P(λ) Modelos y Simulaci´on - 2017 Luego, si u ∈ (0, 1), entonces F (x) = u si y s´olo si 1 − e−x= u, es decir:
x = − ln(1 − u).
Dado que si U ∼ U (0, 1) entonces (1 − U ) tambi´en es uniforme en (0, 1), el algoritmo por el m´etodo de la transformada inversa es:
def exponencial(): U=random()
return -log(U)
Notemos adem´as que si X es exponencial con par´ametro 1, esto es, X ∼ E(1), entonces 1λX ∼ E (λ). Luego el m´etodo para generar Y ∼ E(λ) es
def exponencial(lambda): U=random()
return -log(U)/lambda
1.1. Generaci´on de una v. a. Poisson X ∼ P(λ)
Si P (t), t ≥ 0 es un proceso de Poisson homog´eneo de par´ametro λ, entonces sabemos que: los tiempos de llegada entre eventos son v. a. exponenciales de par´ametro λ.
el n´umero de eventos en un intervalo de tiempo de longitud t es una v. a. Poisson de media λ · t. En particular, N (1) es una v. a. Poisson de media λ que indica el n´umero de arribos hasta el tiempo t = 1, y los tiempos entre arribos en el intervalo [0, 1] son exponenciales de par´ametro λ.
Por lo tanto, si se generan variables exponenciales Xi ∼ E(λ), i ≥ 1, hasta que X1+X2+· · ·+Xn≤
1 y X1+ X2+ · · · + Xn+ Xn+1> 1, entonces n representa el n´umero de arribos hasta t = 1. Esto es:
N (1) = m´ax{n | X1+ X2+ · · · + Xn≤ 1}
Empleando v.a. uniformes para generar las exponenciales, tenemos que N (1) = m´ax{n | X1+ X2+ · · · + Xn≤ 1}
= m´ax{n | −1
λ(log(U1) + log(U2) + · · · + log(Un)) ≤ 1} = m´ax{n | −1
λ(log(U1· U2· · · Un)) ≤ 1} = m´ax{n | log (U1· U2· · · Un) ≥ −λ}
1.2 Generaci´on de una variable aleatoria con distribuci´on Gamma(n,λ) Modelos y Simulaci´on - 2017 Luego:
N (1) = m´ın{n | U1· U2· · · Un< e−λ} − 1
1.2. Generaci´on de una variable aleatoria con distribuci´on Gamma(n,λ)
En otras secciones hemos visto que la suma de n variables aleatorias exponenciales, independientes, con par´ametro λ, es una variable aleatoria Xcon distribuci´on Gamma(n, λ). Esta propiedad nos permite dar un algoritmo de generaci´on de X. Notemos que
X = −1 λlog(U1) − 1 λlog(U2) · · · − 1 λlog(Un) = −1 λlog (U1· U2· · · Un)
def Gamma(n,lambda): U=1
for _ in range(n): U*=random()
return -log(U)/lambda
Notemos que este m´etodo utiliza n variables uniformes y calcula un ´unico logaritmo, mientras que, para generar n exponenciales es necesario calcular n logaritmos. Veamos c´omo puede utilizarse la gene-raci´on de una Gamma(n, λ) para generar n exponenciales independientes de par´ametro λ.
Teorema 1.1. Si X, Y ∼ E(λ), independientes, entonces fX|X+Y(x | t) =
1
tI(0,t)(x), es decir, X condicional a X + Y = t es uniforme en (0, t).
La demostraci´on de este teorema y del caso general para n exponenciales est´a disponible en el mate-rial complementario.
Luego, para generar X, Y exponenciales independientes, de par´ametro λ podemos aplicar el siguien-te algoritmo:
def DosExponenciales(lambda):
t= -1/lambda * log(random() * random()) # valor de una Gamma(2,lambda)
U=random() X=t*U Y=t-X
Modelos y Simulaci´on - 2017 Este algoritmo requiere el c´alculo de un ´unico logaritmo, y tres uniformes.
En el caso general, para simular n exponenciales a partir de una X ∼ Gamma(n, λ) se requiere calcular un ´unico logaritmo y n − 1 uniformes adicionales: V1, V2, . . . , Vn−1. En primer lugar se ordenan
los valores de las Vi:
Vi1 < Vi2 < . . . < Vin−1.
Si X = t, entonces el intervalo (0, t) se divide en n subintervalos no superpuestos, de longitud: tVi1, t (Vi2 − Vi1), t (Vin−1− Vin−2), t(1 − Vin−1).
Cada uno de estos valores tiene distribuci´on exponencial E(λ).
NEXPONENCIALES(λ)
1 X = log(U1· U2· · · Un) # Ui= random()
2 t = −1λX
3 Generar V1, V2, . . . , Vn−1 ∼ U (0, 1)
4 Ordenarlos de menor a mayor
5 return [t V1, t (V2− V1), . . . , t (Vn−1− Vn−2), t − t Vn−1]
2.
El m´etodo de aceptaci´on y rechazo
Supongamos que se quiere generar una variable aleatoria X con funci´on de densidad f : F (x) = P (X ≤ x) =
Z x
−∞
f (t) dt,
y que se tiene un m´etodo para generar otra variable Y , con densidad g, tal que f (y)
g(y) ≤ c, para todo y ∈ R tal que f (y) 6= 0.
El m´etodo de rechazo para generar X a partir de Y tiene el siguiente algoritmo:
M ´ETODO DE RECHAZO 1 repeat
2 Generar Y , con densidad g
3 U = random()
Modelos y Simulaci´on - 2017 El siguiente teorema establece que el M ´ETODO DE RECHAZOes eficaz para generar X con densidad f : Teorema 2.1. 1. La variable aleatoria generada por elMETODO DE RECHAZO´ tiene densidad f .
2. El n´umero de iteraciones del algoritmo es una variable aleatoria geom´etrica con media c.
Este algoritmo requiere determinar una cota c para el cociente f (x)g(x), v´alida para todo x ∈ R. Para determinar este valor es ´util recordar algunos resultados del An´alisis Matem´atico.
En primer lugar, considerar la funci´on h(x) = f (x)
g(x), x tal que f (x) 6= 0, y para esta funci´on determinar:
1. Puntos cr´ıticos: Esto es, f0(x) = 0 o f0(x) no existe.
2. Analizar cu´ales de estos puntos corresponden a m´aximos locales.
3. Evaluar h en los extremos de su dominio, si es acotado, o los l´ımites correspondientes. Ejemplo 2.1. Se quiere generar una variable aleatoria X con funci´on de densidad:
f (x) = 20x(1 − x)3, 0 < x < 1. En particular, X tiene distribuci´on Beta(2, 4):
f (x) = Γ(α + β) Γ(α)Γ(β)x
α−1(1 − x)β−1
I(0,1)(x) Variable β(2, 4)
Dado que f (x) 6= 0 en el intervalo (0, 1), se podr´ıa utilizar el m´etodo de rechazo generando una variable Y ∼ U (0, 1). Tenemos entonces que
fX(x) = 20x(1 − x)3, fY(x) = 1, x ∈ (0, 1),
y h(x) = fXfY(x)(x) = fX(x).
Los pasos para analizar una cota de h son los siguientes:
Modelos y Simulaci´on - 2017 f (1) = 0, luego x = 1 no es un m´aximo.
x = 1/4 es el otro punto cr´ıtico, luego es el m´aximo por ser h ≥ 0. h(1/4) = f (1/4) = 135/64 es el valor m´aximo de h
c = 135
64 = 2.109375 El algoritmo utilizando el M ´ETODO DERECHAZOresulta:
BETA(2,4) 1 repeat 2 Y = random() 3 U = random() 4 until U < 256 · Y · (1 − Y ) 3 27 5 return Y
Este m´etodo requiere un n´umero promedio de ciclos del orden de c = 135
64 ≈ 2.11.
Ejemplo 2.2. Veamos c´omo es posible generar una variable aleatoria X, con densidad Gamma(32, 1):
f (x) = Kx1/2e−x x > 0 0 c.c. , K = 1 Γ(32) = 2 √ π. En general, si X ∼ Γ(α, β), su funci´on de densidad est´a dada por
g(x) = β α Γ(α)e −βxxα−1, x > 0, y su valor esperado es E[X] = α β.
En este caso, α = 32 y β = 1, por lo cual E[X] = 32. Dado que una variable exponencial tiene el mismo rango que X, una posibilidad entonces es utilizar el m´etodo de rechazo con una variable exponencial Y ∼ E (λ) que tenga igual media que X, es decir, Y ∼ E(23).
El m´etodo de rechazo implica calcular la constante c tal que fX(x)fY(x) ≤ c, si x > 0. Esto es, debemos hallar una cota superior para la funci´on:
Modelos y Simulaci´on - 2017 Tenemos que h0(x) = 0 si y s´olo si
(1 2− 1 3x)x −1 2e− 1 3x= 0
Dado que l´ımx→∞h(x) = 0 y l´ımx→0+h(x) = 0, el valor m´aximo estar´a dado en alg´un punto cr´ıtico.
En este caso, el valor de x tal que 1 2 − 1 3x = 0, x = 3 2. Para este punto cr´ıtico, el valor m´aximo alcanzado por la funci´on es:
c = 3 3 2πe 1/2 ≈ 1.257 As´ı el algoritmo resulta:
GAMMA(3/2, 1) 1 repeat 2 Y = −23 · log(random()) 3 U = random() 4 until U < 2e31/2Y1/2e−Y /3 5 return Y
Podr´ıamos preguntarnos en el Ejemplo 2.2 si es razonable rechazar con una exponencial de igual media que la Gamma a generar. Para ello, deber´ıamos encontrar una cota de:
f (x) λe−λx
y determinar el valor de λ para la cual la cota es m´ınima. Notemos que: f (x)
λe−λx =
Kx1/2e−(1−λ)x
λ ,
y esta funci´on es no acotada si λ ≥ 1. Luego corresponde analizar los casos en que 0 < λ < 1. Analizando puntos cr´ıticos, podemos ver que el punto de m´aximo est´a en:
x = 1
2(1 − λ), 0 < λ < 1. y el valor m´aximo es igual a
cλ =
K
λ(2(1 − λ))
−1/2e−1/2.
El valor m´aximo cλser´a m´ınimo si λ(1 − λ)1/2es m´aximo, y esto ocurre si λ = 23. Por lo tanto λ = 23
Modelos y Simulaci´on - 2017
3.
Generaci´on de variables aleatorias normales
Las variables aleatorias normales tienen un uso extensivo, por lo cual es importante obtener un buen m´etodo para simularlas. En primer lugar, recordemos que si Z ∼ N (0, 1), entonces
X = σ · Z + µ ∼ N (µ, σ).
Por lo tanto es suficiente tener un buen m´etodo para generar variables normales est´andar.
El m´etodo de la transformada inversa no es una opci´on, puesto que la funci´on de distribuci´on acumulada: F (x) = √1 2π Z x −∞ e−t22 dt
no tiene una expresi´on cerrada y por lo tanto no se conoce una forma expl´ıcita de su inversa.
Una observaci´on es que la funci´on de densidad de Z es par, por lo cual puede intentarse un m´etodo para generar |Z| y usar luego un m´etodo de composici´on:
FZ(x) = 0.5 · F|Z|(x) + 0.5 · F−|Z|(x),
con el consiguiente algoritmo:
NORMAL-M ´ETODO1 1 U = random() 2 if U < 0.5 3 return |Z| 4 else 5 return −|Z|
Es necesario entonces un m´etodo para generar |Z|. Su densidad est´a dada por:
f|Z|(x) = 2 √ 2πe −x2/2 x > 0 0 c.c.
Una posibilidad es utilizar el m´etodo de rechazo con una exponencial, por ejemplo, X = E(1). Debemos encontrar una cota para:
f|Z|(x) e−x = 2 √ 2πe −x22 +x.
Este m´aximo corresponde al valor m´aximo del exponente de la exponencial, que ocurre en x = 1. El valor m´aximo y por consiguiente la cota m´ınima c est´a dada por:
c = r
2e
Modelos y Simulaci´on - 2017 Para describir el algoritmo, calculamos:
f (x) cg(x) = exp −(x − 1) 2 2 .
Luego el m´etodo de rechazo simula Y1 ∼ E(1), U uniforme, e itera hasta que:
U ≤ exp −(Y1− 1) 2 2 , es decir: log(U ) ≤ −(Y1− 1) 2 2 o equivalentemente − log(U ) ≥ (Y1− 1)2 2 .
Dado que Y2 = − log(U ) genera una exponencial E(1), el algoritmo por el m´etodo de rechazo para
generar Z se traduce en:
def Normal(mu,sigma):
while True: Y1=-log(random) Y2=-log(random) if Y2 >=(Y1-1)**2/2: break if random()<0.5: return Y1*sigma + mu else: return -Y1*sigma + mu
Recordemos que una variable con distribuci´on exponencial posee la propiedad de falta de memoria: P (X > s + t | X > t) = P (X > s).
Es decir, condicional a que la variable X sea mayor a t, la cantidad que excede a este valor tambi´en tiene distribuci´on exponencial. En particular, en el paso del algoritmo amterior en que se acepta el valor de Y1,
ocurre que Y2supera a (Y1− 1)2/2 y por lo tanto la cantidad que excede:
Y2− (Y1− 1)2/2
tiene distribuci´on exponencial E(1).
De esta manera, el m´etodo de rechazo para generar Z ∼ N (0, 1) permite generar tambi´en una exponencial. Esta exponencial podr´ıa ser utilizada en pasos sucesivos como el primer valor de Y1, y
as´ı disminuir en 1 el n´umero de exponenciales generadas. Como el m´etodo tiene un promedio de c ∼ 1.32 iteraciones, el n´umero de exponenciales necesarias ser´a del orden de
3.1 M´etodo polar Modelos y Simulaci´on - 2017
3.1. M´etodo polar
Otro m´etodo eficiente para generar variables normales es el m´etodo polar. El nombre se refiere al uso de coordenadas polares para referenciar puntos del plano:
x = r cos θ, y = r sen θ, r ≥ 0, , 0 ≤ θ < 2π. (1) Consideramos dos variables aleatorias X e Y , normales est´andar, independientes. Dado que toman cual-quier valor real, entonces el par (X, Y ) denota a alg´un punto del plano que podr´ıa ser cualcual-quiera. Las coordenadas polares correspondientes a este punto, R y Θ, verifican:
R2 = X2+ Y2, Θ = arctan Y X. La funci´on de densidad conjunta de X e Y est´a dada por:
fX,Y(x, y) = fX(x) · fY(y) =
1 2πe
−(x2+y2)
. La transformaci´on de coordenadas (r2, θ) a (x, y) es:
r2= x2+ y2, θ = arctany x, y por lo tanto la matriz jacobiana est´a dada por:
∂ ∂x(x 2+ y2) ∂ ∂y(x 2+ y2) ∂ ∂x(arctan y x) ∂ ∂θ(arctan y x) ! = 2x 2y − y x2+y2 x2+yx 2 !
con determinante jacobiano igual a 2. Por lo tanto, la densidad conjunta de R2y Θ satisface: fX,Y(x, y) = 2 fR2,Θ(d, θ), x2+ y2 = d, tan(θ) = y/x.
As´ı, formalmente resulta:
fR2,Θ(d, θ) = 1 2 1 2πe −d/2 I[0,∞)(d)I[0,2π)(θ) = 1 2πI[0,2π)(θ) | {z } Θ∼U (0,2π) · e−d/21 2I[0,∞)(d) | {z } R2∼E(1 2
3.1 M´etodo polar Modelos y Simulaci´on - 2017 def DosNormales(): Rcuadrado=-2*log(random()) Theta= 2*Pi*random() X= sqrt(Rcuadrado)*cos(Theta) Y= sqrt(Rcuadrado)*sen(Theta) return (X,Y) Las transformaciones: X =p−2 log(U1) cos(2πU2) Y =p−2 log(U1) sen(2πU2) (2) se denominan transformaciones de Box-Muller. Una desventaja de estas transformacioneses que re-quieren el c´alculo de dos funciones trigonom´etricas: seno y coseno. Para mejorar este paso, notemos que si (X, Y ) son las coordenadas de un punto aleatorio en el c´ırculo unitario, entonces:
P (X2+ Y2 ≤ r) = P (pX2+ Y2≤√r) = π r 2 π = r, 0 < r < 1, P (0 < arctanY X < α) = α/2 π = 1 2πα, 0 ≤ α < 2π.
As´ı, S2 = X2+ Y2 y Θ = arctanYX resultan variables independientes, uniformemente distribuidas en [0, 1) y [0, 2π) respectivamente. Adem´as, cos Θ = √ X X2+ Y2 = X √ S2, sen Θ = Y √ X2+ Y2 = Y √ S2. (3)
En resumen, para generar cos Θ y sen Θ debemos: 1. Generar un punto aleatorio (X, Y ) del c´ırculo unitario. 2. Calcular cos Θ y sen Θ usando (3).
La generaci´on de puntos aleatorios en el c´ırculo se reduce a generar pares de puntos (V1, V2) en el
cuadrado unitario hasta obtener uno en el c´ırculo unitario. Las transformaciones de Box-Muller se reescriben entonces como:
Modelos y Simulaci´on - 2017 Ahora, como S2 = V12+ V22es uniforme en (0, 1) y es independiente de Θ, puede ser utilizado como U en (4) y (5), resultando las ecuaciones:
X =p−2 log U ·√V1 U = V1· r −2 log U U (6) Y =p−2 log U ·√V2 U = V2· r −2 log U U (7)
Finalmente, el m´etodo polar para generar dos variables normales resulta:
def DosNormales():
#Generar un punto aleatorio en el c´ırculo unitario. while True: V1, V2 = 2*random()-1, 2*random()-1 if V1**2+V2**2<=1: break S=V1**2+V2**2 X=V1*sqrt(-2*log(S)/S) Y=V2*sqrt(-2*log(S)/S) return (X,Y)
4.
Generaci´on de un Proceso de Poisson
En un proceso de Poisson homog´eneo de raz´on λ, los tiempos de llegada entre eventos sucesivos son exponenciales con raz´on λ (media 1/λ). As´ı, para generar los primeros n eventos de un Proceso de Poisson homog´eneo, generamos exponenciales Xi∼ E(λ), 1 ≤ i ≤ n:
Primer evento: al tiempo X1.
j-´esimo evento: al tiempo X1+ X2+ · · · + Xj, para 1 ≤ j ≤ n.
Modelos y Simulaci´on - 2017 def eventosPoisson(T): t=0 I=0 S[0]=0 while True: U=random()
if t-log (U)/lambda >T:
break else:
t= t-log (U)/lambda
I+=1
S[I]=t
Ahora bien, sabemos que N (T ), el n´umero de eventos hasta el tiempo T , es una variable aleatoria con distribuci´on Poisson P(λT ). Adem´as, conocido N (T ), los tiempos de arribo se distribuyen unifor-memente en (0, T ):
Proposici´on 2. Dado N (T ), la distribuci´on de los tiempos de arribo en un Proceso de Poisson ho-mog´eneo de raz´on λ es uniforme en (0, T ).
Por lo tanto, un m´etodo alternativo para generar los tiempos de arribo hasta el tiempo T consiste en: Generar una variable aleatoria Poisson de media λT , y tomar n = N (T ).
Generar n variables aleatorias uniformes U1, U2, . . . , Un.
Ordenarlas: Ui1 < Ui2 < . . . < Uin.
Los tiempos de arribo son: T Ui1, T Ui2, . . . , T Uin.
Si bien este algoritmo posee la ventaja de no generar una secuencia de exponenciales, requiere reali-zar un ordenamiento de n = N (T ) n´umeros.
5.
Generaci´on de un proceso de Poisson no homog´eneo
Consideremos un proceso de Poisson no homog´eneo con funci´on de intensidad λ(t), y sea λ tal que λ(t) ≤ λ.
Si ahora N1(t) es un proceso homog´eneo, de tasa λ, y consideramos N (t) el proceso que cuenta los
Modelos y Simulaci´on - 2017 N (0) = 0, pues N1(0) = 0.
Los incrementos son independientes, pues los incrementos de N1lo son.
l´ım h→0 P (N (t + h) − N (t) = 1) h = l´ımh→0 P (N1(t + h) − N1(t) = 1, U ≤ λ(t)λ h = λ · λ(t) λ = λ(t). l´ım h→0 P (N (t + h) − N (t) ≥ 2) h = l´ımh→0 P (N1(t + h) − N1(t) ≥ 2, U ≤ λ(t)λ h = 0
Luego N (t) es un proceso de Poisson no homog´eneo con funci´on de intensidad λ(t). Por lo tanto, estas propiedades nos permiten deducir el siguiente algoritmo de generaci´on de un proceso de Poisson no homog´eneo con funci´on de intensidad λ(t):
PROCESOPOISSON NO HOMOGENEO(λ(t))´ 1 t = 0 2 I = 0 3 while True 4 U = random() 5 if t − λ1log U > T 6 break 7 else 8 t = t −λ1log U 9 V = random() 10 if V < λ(t)λ 11 I = I + 1 12 S[I] = t
Nuevamente, I finaliza con el n´umero de eventos hasta el tiempo T , es decir, N (T ), y S[0], S[1], . . . , S[T ] son los tiempos de cada evento.
Notemos que el algoritmo es m´as eficiente cu´anto m´as cerca est´e λ de λ(t), ya que cuanto m´as grande sea λ m´as iteraciones tendr´a el m´etodo. Una mejora de este algoritmo es particionar el intervalo (0, T ) en subintervalos, y aplicar el algoritmo anterior en cada uno de ellos con un valor λiadecuado. Esto es,
considerar k intervalos consecutivos [ti−1, ti), 1 ≤ i ≤ k tales que:
Modelos y Simulaci´on - 2017 y valores λ1, λ2, . . . , λkque cumplan
λ(s) ≤ λi, s ∈ [ti−1, ti).
El m´etodo resulta entonces: 1 t = 0 # acumula tiempos 2 J = 1 # recorre intervalos