Drawing random numbers 
       The seed 
       Uniformly distributed random numbers 
       Visualizing the distribution 
       Vectorized drawing of random numbers 
       Computing the mean and standard deviation 
       The Gaussian or normal distribution 
 Drawing integers 
       Random integer functions 
       Example: Throwing a die 
       Drawing a random element from a list 
       Example: Drawing cards from a deck 
       Example: Class implementation of a deck 
 Computing probabilities 
       Principles of Monte Carlo simulation 
       Example: Throwing dice 
       Example: Drawing balls from a hat 
       Random mutations of genes 
       Example: Policies for limiting population growth 
 Simple games 
       Guessing a number 
       Rolling two dice 
 Monte Carlo integration 
       Derivation of Monte Carlo integration 
       Implementation of standard Monte Carlo integration 
       Area computing by throwing random points 
 Random walk in one space dimension 
       Basic implementation 
       Visualization 
       Random walk as a difference equation 
       Computing statistics of the particle positions 
       Vectorized implementation 
 Random walk in two space dimensions 
       Basic implementation 
       Vectorized implementation 
 Summary 
       Chapter topics 
       Example: Random growth 
 Exercises 
       Exercise 1: Flip a coin times 
       Exercise 2: Compute a probability 
       Exercise 3: Choose random colors 
       Exercise 4: Draw balls from a hat 
       Exercise 5: Computing probabilities of rolling dice 
       Exercise 6: Estimate the probability in a dice game 
       Exercise 7: Compute the probability of hands of cards 
       Exercise 8: Decide if a dice game is fair 
       Exercise 9: Adjust a game to make it fair 
       Exercise 10: Make a test function for Monte Carlo simulation 
       Exercise 11: Generalize a game 
       Exercise 12: Compare two playing strategies 
       Exercise 13: Investigate strategies in a game 
       Exercise 14: Investigate the winning chances of some games 
       Exercise 15: Compute probabilities of throwing two dice 
       Exercise 16: Vectorize flipping a coin 
       Exercise 17: Vectorize a probablility computation 
       Exercise 18: Throw dice and compute a small probability 
       Exercise 19: Is democracy reliable as a decision maker? 
       Exercise 20: Difference equation for random numbers 
       Exercise 21: Make a class for drawing balls from a hat 
       Exercise 22: Independent  versus dependent random numbers 
       Exercise 23: Compute the probability of flipping a coin 
       Exercise 24: Simulate binomial experiments 
       Exercise 25: Simulate a poker game 
       Exercise 26: Estimate growth in a simulation model 
       Exercise 27: Investigate guessing strategies 
       Exercise 28: Vectorize a dice game 
       Exercise 29: Compute \( \pi \) by a Monte Carlo method 
       Exercise 30: Compute \( \pi \) by a Monte Carlo method 
       Exercise 31: Compute \( \pi \) by a random sum 
       Exercise 32: 1D random walk with drift 
       Exercise 33: 1D random walk until a point is hit 
       Exercise 34: Simulate making a fortune from gaming 
       Exercise 35: Simulate pollen movements as a 2D random walk 
       Exercise 36: Make classes for 2D random walk 
       Exercise 37: 2D random walk with walls; scalar version 
       Exercise 38: 2D random walk with walls; vectorized version 
       Exercise 39: Simulate mixing of gas molecules 
       Exercise 40: Simulate slow mixing of gas molecules 
       Exercise 41: Guess beer brands 
       Exercise 42: Simulate stock prices 
       Exercise 43: Compute with option prices in finance 
       Exercise 44: Differentiate noise measurements 
       Exercise 45: Differentiate noisy signals 
       Exercise 46: Model noise in a time signal 
       Exercise 47: Speed up Markov chain mutation 
 References 
Random numbers have many applications in science and computer programming, especially when there are significant uncertainties in a phenomenon of interest. The purpose of this document is to look at some practical problems involving random numbers and learn how to program with such numbers. We shall make several games and also look into how random numbers can be used in physics. You need to be familiar with basic programming concepts such as loops, lists, arrays, vectorization, curve plotting, and command-line arguments in order to study the present document. A few examples and exercises will require familiarity with the class concept in Python.
The key idea in computer simulations with random numbers is first to formulate an algorithmic description of the phenomenon we want to study. This description frequently maps directly onto a quite simple and short Python program, where we use random numbers to mimic the uncertain features of the phenomenon. The program needs to perform a large number of repeated calculations, and the final answers are "only" approximate, but the accuracy can usually be made good enough for practical purposes. Most programs related to the present document produce their results within a few seconds. In cases where the execution times become large, we can vectorize the code. Vectorized computations with random numbers is definitely the most demanding topic in this document, but is not mandatory for seeing the power of mathematical modeling via random numbers.
All files associated with the examples in this document are found in the folder src/random.