déjame aclarar todo esto por el hecho de que nada de esto es realmente aleatoria, lo estoy hablando de generadores de números pseudoaleatorios.
Permítanme decir también que nunca he tenido que hacer esto para el código de calidad de producción. Sin embargo, he hecho esto para una tarea de hw, en Python. Simulé las variables aleatorias de Poisson.
La forma en que lo hice hace uso de los siguientes hechos:
- Una variable aleatoria de Poisson es una suma de variables aleatorias exponenciales.
- Podemos usar el método de transformación inversa para generar variables aleatorias exponenciales. http://en.wikipedia.org/wiki/Inverse_transform_sampling.
En particular, puede utilizar el hecho de que: si X , ..., X n son independientes variables aleatorias exponenciales estándar, entonces Z = min (k: X + ... + X k < & lambda;) - 1 es Poisson (& lambda;).
Entonces, con esto, escribí el siguiente código en Python para generar valores de Poisson:
uso
class Poisson:
"""Generate Poisson(lambda) values by using exponential
random variables."""
def __init__(self, lam):
self.__lam = lam
def nextPoisson(self):
sum = 0
n = -1
while sum < self.__lam:
n += 1
sum -= math.log(random.random())
return n
Ejemplo de la clase es:
# Generates a random value that is Poisson(lambda = 5) distributed
poisson = Poisson(5)
poisson_value = poisson.nextPoisson
he publicado esto aquí porque es bueno saber que existen este tipo de relaciones, y este método de transformación inversa le proporciona una forma general de tratar con la generación de valores aleatorios siguiendo una distribución continua particular.
En realidad, parece que ese enlace también señala el método "nextGaussian" para crear variables normales también. – gnovice