Estoy tratando de modelar un sistema que genera eventos modelados por un proceso de Poisson.
Estoy utilizando el siguiente código ruby:
INTERVAL = 0.005
LAMBDA = 167.0
events = Hash.new(0)
def f(x, lambda)
1 - Math.exp(-lambda * x)
end
random_gen = Random.new
start = Time.now.to_f
while Time.now.to_i - start < 60
if random_gen.rand < f(INTERVAL, LAMBDA)
bucket = (Time.now.to_f - start).round.to_i
events[bucket] += 1
end
sleep(INTERVAL)
end
Estoy tratando de generar unos 10000 eventos por minuto, o 167 eventos/segundo, por lo que estoy utilizando $\lambda = 167$ .
Estoy utilizando la función f
como $1 - e^{(-\lambda x)}$ donde $x$ es el intervalo en el que duermo, estoy utilizando esta función para que el tiempo de interllegada de los eventos siga una distribución exponencial.
Sin embargo, no estoy obteniendo los resultados esperados, este código genera unos 7194 eventos por minuto, con una media de unos 117 eventos por segundo. Yo esperaría que este código generara 10000 eventos por minuto con una media de unos 167 eventos por segundo.
¿Qué estoy haciendo mal?
Gracias por su ayuda.
ACTUALIZACIÓN Se ha corregido un error tipográfico en el tiempo de muestreo y se ha añadido random_gen
y start
definiciones