250 likes | 515 Vues
This article delves into the fascinating world of random number generators (RNGs), including mechanical and pseudo-random systems. It explains the essential characteristics of random numbers, the limitations of generating truly random numbers on computers, and introduces various algorithms like the Linear Congruential Generator (LCG) and Mersenne Twister. The text also covers methods for generating non-uniform distributions and various applications. Perfect for those curious about RNGs in gaming, simulations, and statistical modeling.
E N D
The Roulette and Dice Mechanical random number generators
What is a Random Number? • Follow a definite distribution, usually uniform distribution • Uncorrelated • Unpredictable 1 0 3 7 4
Pseudo-Random Numbers • Truly random numbers can not be generated on a computer • Pseudo-random numbers follow a well-defined algorithm, thus predictable and repeatable • Have nearly all the properties of true random numbers
Linear Congruential Generator (LCG) • One of the earliest and also fastest algorithm: xn+1 = (axn + c ) mod m where 0 ≤ xn < m, m is the modulus, a is multiplier, c is increment. All of them are integers. Choice of a, c, m must be done with special care.
Choice of Parameters (ax + c) mod m
Short-Coming of LCG When (xn,xn+1) pairs are plotted for all n, a lattice structure is shown. xn+1 xn
Other Modern Generators • Mersenne Twister Extremely long period (219937-1), fast • Inversive Congruential Generator xn= a xn+1+ c mod m where m is a prime number Nonlinear, no lattice structure
Pick an Integer at Random • Suppose we want to select an integer j from 0 to N-1 with equal probability. This can be done with: j = N*x; where 0 x < 1 is uniformly distributed random number. For 2D lattice, we can also do this if we name the lattice site sequentially.
Pick j with Probability Pj • Since Sj Pj=1, we pick out j if x is in the corresponding interval. 0 P0 P1 x 1 P=p[0]; j = 0; x = drand64(); while(x>P) {++j; P+=p[j]};
Pei Lucheng’s Method • Use j = N*x to get an index; pick a final result based on the relative height. This is an O(1) algorithm. 1 4 2 1 2 3 4 5
Non-Uniformly Distributed Random Numbers • Let F(x) be the cumulative distribution function of a random variable x, then x can be generated from x = F-1(ξ) where ξ is uniformly distributed between 0 and 1, and F-1(x) is the inverse function of F(x).
Proof of the Inverse Method • The Mapping from x to ξ is one-to-one. • The probability for ξ between value ξ and dξ is 1·dξ, which is the same as the probability for x between value x and dx. Thus dξ = dF(x) = F’(x)dx = p(x)dx, since F-1 (ξ)=x, or ξ = F(x)
Example 1, Exponential Distribution • P(x) = exp(-x), x ≥ 0, then • So we generate x by x = -log(ξ) where ξ is a uniformly distributed random number.
Example 2, Gaussian distribution • Take 2D Gaussian distribution • Work in polar coordinates:
Box-Muller Method • The formula implies that the variable θ is distributed uniformly between 0 and 2π, ½r2 is exponentially distributed, we have ξ1 and ξ2 are two independent, uniformly distributed random numbers.