Generación de variables aleatorias continuas

18  Descargar (0)

Texto completo

(1)

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).

(2)

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

(3)

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

(4)

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

(5)

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) ≥ −λ}

(6)

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

(7)

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()

(8)

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:

(9)

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:

(10)

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

(11)

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

(12)

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

(13)

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

(14)

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+ Y2r) = π 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:

(15)

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.

(16)

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

(17)

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:

(18)

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

Figure

Actualización...

Referencias