Hãy để tôi mở đầu tất cả điều này bởi thực tế là không ai trong số này là thực sự ngẫu nhiên, tôi đang nói về các trình tạo số ngẫu nhiên giả.
Hãy để tôi cũng nói rằng tôi chưa bao giờ phải làm điều này cho mã chất lượng sản xuất. Tôi đã làm điều này cho một nhiệm vụ hw mặc dù, trong Python. Tôi mô phỏng các biến ngẫu nhiên Poisson.
Cách mà tôi đã làm nó đã sử dụng các sự kiện sau đây:
- Một Poisson biến ngẫu nhiên là một tổng của các biến ngẫu nhiên mũ.
- Chúng ta có thể sử dụng phương pháp biến đổi nghịch đảo để tạo ra các biến ngẫu nhiên theo hàm mũ. http://en.wikipedia.org/wiki/Inverse_transform_sampling.
Đặc biệt, bạn có thể sử dụng thực tế là: nếu X , ..., X n là độc lập chuẩn biến ngẫu nhiên mũ, sau đó Z = min (k: X + ... + X k < & lambda;) - 1 là Poisson (& lambda;).
Vì vậy, với điều đó, tôi đã viết đoạn mã sau vào python để tạo ra giá trị Poisson:
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
Ví dụ sử dụng lớp là:
# Generates a random value that is Poisson(lambda = 5) distributed
poisson = Poisson(5)
poisson_value = poisson.nextPoisson
Tôi đăng này ở đây vì nó là tốt để biết rằng các loại mối quan hệ này tồn tại và phương pháp biến đổi nghịch đảo này cung cấp cho bạn cách tổng quát để giải quyết việc tạo ra các giá trị ngẫu nhiên sau một phân bố liên tục cụ thể.
Thực ra, có vẻ như liên kết đó cũng chỉ ra phương pháp "nextGaussian" để tạo các biến thể bình thường. – gnovice