Позвольте мне предварить все это тем фактом, что все это не является действительно случайным, я говорю о генераторах псевдослучайных чисел.
Позвольте мне также сказать, что мне никогда не приходилось делать это для производственного кода качества. Я сделал это для назначения hw, хотя, в Python. Я моделировал пуассоновские случайные величины.
То, как я это сделал, использовало следующие факты:
- Случайная переменная Пуассона - это сумма экспоненциальных случайных величин.
- Мы можем использовать метод обратного преобразования для генерации экспоненциальных случайных величин. http://en.wikipedia.org/wiki/Inverse_transform_sampling.
В частности, вы можете использовать тот факт, что: если X 1 , ..., X n независимы стандартные экспоненциальные случайные величины, то Z = min (k: X 1 + ... + X k <& lambda;) - 1 означает Пуассона (& lambda;). </p>
Итак, я написал следующий код на python для генерации значений Пуассона:
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
Пример использования класса:
# Generates a random value that is Poisson(lambda = 5) distributed
poisson = Poisson(5)
poisson_value = poisson.nextPoisson
Я разместил это здесь, потому что хорошо знать, что существуют такие виды отношений, и этот метод обратного преобразования дает вам общий способ иметь дело с генерацией случайных значений после определенного непрерывного распределения.