![Page 1: Fundamentals of Programming (Python) Random Functions and ...ce.sharif.edu/courses/96-97/1/ce153-12/resources... · Suppose a games is constructed such that you have to pay 1 euro](https://reader035.vdocuments.us/reader035/viewer/2022062506/5f0336b97e708231d4081963/html5/thumbnails/1.jpg)
Fundamentals of Programming(Python)
Random Functions and Simulation
Sina SajadmaneshSharif University of Technology
Fall 2017Slides have been adapted from
“A Primer on Scientific Programming with Python, 5th edition”
![Page 2: Fundamentals of Programming (Python) Random Functions and ...ce.sharif.edu/courses/96-97/1/ce153-12/resources... · Suppose a games is constructed such that you have to pay 1 euro](https://reader035.vdocuments.us/reader035/viewer/2022062506/5f0336b97e708231d4081963/html5/thumbnails/2.jpg)
Outline1. Random Numbers
2. Drawing Random Numbers
3. Debugging Stochastic Programs
4. Monte Carlo Simulation
2SINA SAJADMANESH - FUNDAMENTALS OF PROGRAMMING [PYTHON]Fall 2017
![Page 3: Fundamentals of Programming (Python) Random Functions and ...ce.sharif.edu/courses/96-97/1/ce153-12/resources... · Suppose a games is constructed such that you have to pay 1 euro](https://reader035.vdocuments.us/reader035/viewer/2022062506/5f0336b97e708231d4081963/html5/thumbnails/3.jpg)
Random NumbersRandom numbers are used to simulate uncertainevents
Deterministic problems:◦ Some problems in science and technology are described by exact
mathematics, leading to precise results
◦ Example: throwing a ball up in the air: 𝑦 𝑡 = 𝑣0𝑡 −1
2𝑔𝑡2
Stochastic problems:◦ Some problems appear physically uncertain
◦ Examples: rolling a die, molecular motion, games
◦ Use random numbers to mimic the uncertainty of the experiment.
3SINA SAJADMANESH - FUNDAMENTALS OF PROGRAMMING [PYTHON]Fall 2017
![Page 4: Fundamentals of Programming (Python) Random Functions and ...ce.sharif.edu/courses/96-97/1/ce153-12/resources... · Suppose a games is constructed such that you have to pay 1 euro](https://reader035.vdocuments.us/reader035/viewer/2022062506/5f0336b97e708231d4081963/html5/thumbnails/4.jpg)
Drawing Random NumbersPython has a random module for drawing random numbers:◦ random.random() draws random numbers in [0,1)
◦ The sequence of random numbers is produced by a deterministic algorithm - the numbers just appear random.
4SINA SAJADMANESH - FUNDAMENTALS OF PROGRAMMING [PYTHON]Fall 2017
>>> import random
>>> random.random()
0.81550546885338104
>>> random.random()
0.44913326809029852
>>> random.random()
0.88320653116367454
![Page 5: Fundamentals of Programming (Python) Random Functions and ...ce.sharif.edu/courses/96-97/1/ce153-12/resources... · Suppose a games is constructed such that you have to pay 1 euro](https://reader035.vdocuments.us/reader035/viewer/2022062506/5f0336b97e708231d4081963/html5/thumbnails/5.jpg)
Drawing Random NumbersDistribution of random numbers◦ random.random() generates random numbers that are
uniformly distributed in the interval [0,1)
◦ random.uniform(a, b) generates random numbers uniformly distributed in [𝑎, 𝑏)
◦ Uniformly distributed means that if we generate a large set of numbers, no part of [𝑎, 𝑏) gets more numbers than others
5SINA SAJADMANESH - FUNDAMENTALS OF PROGRAMMING [PYTHON]Fall 2017
![Page 6: Fundamentals of Programming (Python) Random Functions and ...ce.sharif.edu/courses/96-97/1/ce153-12/resources... · Suppose a games is constructed such that you have to pay 1 euro](https://reader035.vdocuments.us/reader035/viewer/2022062506/5f0336b97e708231d4081963/html5/thumbnails/6.jpg)
Drawing Random NumbersDrawing Integers◦ Quite often we want to draw an integer from [𝑎, 𝑏] and not a real
number
◦ Python's random module have functions for drawing uniformly distributed integers:
6SINA SAJADMANESH - FUNDAMENTALS OF PROGRAMMING [PYTHON]Fall 2017
import random
r = random.randint(a, b) # a, a+1, ..., b
![Page 7: Fundamentals of Programming (Python) Random Functions and ...ce.sharif.edu/courses/96-97/1/ce153-12/resources... · Suppose a games is constructed such that you have to pay 1 euro](https://reader035.vdocuments.us/reader035/viewer/2022062506/5f0336b97e708231d4081963/html5/thumbnails/7.jpg)
Drawing Random NumbersDrawing random elements from a list◦ There are different methods for picking an element from a list at
random, but the main method applies choice(list):
◦ Alternatively, we can compute a random index:
◦ We can also shuffle the list randomly, and then pick any element:
7SINA SAJADMANESH - FUNDAMENTALS OF PROGRAMMING [PYTHON]Fall 2017
>>> awards = ['car', 'computer', 'ball', 'pen']
>>> import random
>>> random.choice(awards)
‘ball'
>>> index = random.randint(0, len(awards)-1)
>>> awards[index]
'pen'
>>> random.shuffle(awards)
>>> awards[0]
'computer'
![Page 8: Fundamentals of Programming (Python) Random Functions and ...ce.sharif.edu/courses/96-97/1/ce153-12/resources... · Suppose a games is constructed such that you have to pay 1 euro](https://reader035.vdocuments.us/reader035/viewer/2022062506/5f0336b97e708231d4081963/html5/thumbnails/8.jpg)
Debugging Stochastic ProgramsDebugging programs with random numbers is difficult because the numbers produced vary each time we run the program
For debugging it is important that a new run reproduces the same sequence of random numbers in the last run
This is possible by fixing the seed of the random module: random.seed(n)
By default, the seed is based on the current time
8SINA SAJADMANESH - FUNDAMENTALS OF PROGRAMMING [PYTHON]Fall 2017
![Page 9: Fundamentals of Programming (Python) Random Functions and ...ce.sharif.edu/courses/96-97/1/ce153-12/resources... · Suppose a games is constructed such that you have to pay 1 euro](https://reader035.vdocuments.us/reader035/viewer/2022062506/5f0336b97e708231d4081963/html5/thumbnails/9.jpg)
Debugging Stochastic Programs
9SINA SAJADMANESH - FUNDAMENTALS OF PROGRAMMING [PYTHON]Fall 2017
>>> import random
>>> random.seed(2)
>>> ['%.2f' % random.random() for i in range(7)]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
>>> ['%.2f' % random.random() for i in range(7)]
['0.31', '0.61', '0.61', '0.58', '0.16', '0.43', '0.39']
>>> random.seed(2) # repeat the random sequence
>>> ['%.2f' % random.random() for i in range(7)]
['0.96', '0.95', '0.06', '0.08', '0.84', '0.74', '0.67']
![Page 10: Fundamentals of Programming (Python) Random Functions and ...ce.sharif.edu/courses/96-97/1/ce153-12/resources... · Suppose a games is constructed such that you have to pay 1 euro](https://reader035.vdocuments.us/reader035/viewer/2022062506/5f0336b97e708231d4081963/html5/thumbnails/10.jpg)
Monte Carlo SimulationWhat is the probability that a certain event 𝐴happens?◦ Simulate 𝑁 events and count how many times 𝑀 the event 𝐴
happens. The probability of the event 𝐴 is then 𝑀/𝑁 (as 𝑁 → ∞).
Example: Rolling a Die◦ Any no of eyes, 1-6, is equally probable when you roll a die
◦ What is the chance of getting a 6?
10SINA SAJADMANESH - FUNDAMENTALS OF PROGRAMMING [PYTHON]Fall 2017
![Page 11: Fundamentals of Programming (Python) Random Functions and ...ce.sharif.edu/courses/96-97/1/ce153-12/resources... · Suppose a games is constructed such that you have to pay 1 euro](https://reader035.vdocuments.us/reader035/viewer/2022062506/5f0336b97e708231d4081963/html5/thumbnails/11.jpg)
Monte Carlo SimulationExample:◦ You throw two dice, one black and one green. What is the
probability that the number of eyes on the black is larger than that on the green?
11SINA SAJADMANESH - FUNDAMENTALS OF PROGRAMMING [PYTHON]Fall 2017
import random
N = 10000 # no of experiments
M = 0 # no of successful events
for i in range(N):
black = random.randint(1, 6) # throw black
green = random.randint(1, 6) # throw green
if black > green: # success?
M += 1
p = M/N
print('probability:', p)
![Page 12: Fundamentals of Programming (Python) Random Functions and ...ce.sharif.edu/courses/96-97/1/ce153-12/resources... · Suppose a games is constructed such that you have to pay 1 euro](https://reader035.vdocuments.us/reader035/viewer/2022062506/5f0336b97e708231d4081963/html5/thumbnails/12.jpg)
Monte Carlo SimulationGamification Example:◦ Suppose a games is constructed such that you have to pay 1 euro to
throw the two dice. You win 2 euros if there are more eyes on the black than on the green die. Should you play this game?
12SINA SAJADMANESH - FUNDAMENTALS OF PROGRAMMING [PYTHON]Fall 2017
import random
N = 1000000 # no of experiments
money = 0
for i in range(N):
money -= 1 # pay for the game
black = random.randint(1, 6) # throw black
green = random.randint(1, 6) # throw brown
if black > green: # success?
money += 2 # get award
net_profit_per_game = money/N
print('Net profit per game in the long run:', net_profit_per_game)
![Page 13: Fundamentals of Programming (Python) Random Functions and ...ce.sharif.edu/courses/96-97/1/ce153-12/resources... · Suppose a games is constructed such that you have to pay 1 euro](https://reader035.vdocuments.us/reader035/viewer/2022062506/5f0336b97e708231d4081963/html5/thumbnails/13.jpg)
Monte Carlo SimulationExample:◦ We have 12 balls in a bag: four black, four red, and four blue. We
pick n balls at random. What is the probability of getting two black balls or more?
13SINA SAJADMANESH - FUNDAMENTALS OF PROGRAMMING [PYTHON]Fall 2017
import random
n = 5 # How many balls are to be drawn?
N = 10000 # How many experiments?
M = 0 # no. of successes
for e in range(N):
bag = [color for color in ('black', 'red', 'blue') for i in range(4)]
balls = [] # the n balls we draw
for i in range(n):
random.shuffle(bag)
color = bag.pop(0)
balls.append(color)
if balls.count('black') >= 2: # two black balls or more?
M += 1
print('Probability:', M/N)