SlideShare une entreprise Scribd logo
1  sur  40
Télécharger pour lire hors ligne
IX. ON RANDOMNESS
Engr. RANEL O. PADON
PYTHON PROGRAMMING TOPICS
I

•Introduction to Python Programming

II

•Python Basics

III

•Controlling the Program Flow

IV

•Program Components: Functions, Classes, Packages, and Modules

V

•Sequences (List and Tuples), and Dictionaries

VI

•Object-Based Programming: Classes and Objects

VII

•Customizing Classes and Operator Overloading

VIII

•Object-Oriented Programming: Inheritance and Polymorphism

IX

•Randomization Algorithms

X

•Exception Handling and Assertions

XI

•String Manipulation and Regular Expressions

XII

•File Handling and Processing

XIII

•GUI Programming Using Tkinter
ON RANDOMNESS

RANEL O. PADON
ON RANDOMNESS

RANEL O. PADON
ON RANDOMNESS
Randomization Algorithms
* Random numbers are used for testing the performance of programs,
creating scientific simulations, and so on.

* A pseudorandom number generator (PRNG) is an algorithm for
generating a sequence of numbers that approximates the properties
of random numbers.
* The sequence is not truly random in that it is completely
determined by a relatively small set of initial values (random seed)
ON RANDOMNESS Randomization Algorithms
Early Algorithm
Middle-Square Method
* take any number, square it, remove the middle digits of the
resulting number as the "random number", then use that number as
the seed for the next iteration.
* squaring the number "1111" yields "1234321", which can be written
as "01234321", an 8-digit number being the square of a 4-digit
number. This gives "2343" as the "random" number. Repeating this
procedure gives "4896" as the next result, and so on.
ON RANDOMNESS Randomization Algorithms
1.) Blum Blum Shub (cryptographically sound, but slow)
2.) Mersenne Twister
- fast with good statistical properties,
- used when cyptography is not an issue
- used in Python
3.) Linear Congruential Generator
- commonly-used in compilers

and many, many others
ON RANDOMNESS Randomization Algorithms
2.) Mersenne Twister Algorithm
is based on a matrix linear recurrence over a finite binary field
provides for fast generation of very high-quality pseudorandom
numbers, having been designed specifically to rectify many of the
flaws found in older algorithms.
used in PHP, Ruby and Python
name derives from the fact that period length is chosen to be a
Mersenne prime
ON RANDOMNESS Mersenne Twister Algorithm
2.) Mersenne Twister Algorithm
It has a very long period of 219937 − 1. While a long period is
not a guarantee of quality in a random number generator, short
periods (such as the 232 common in many software packages)
can be problematic.
It is k-distributed to 32-bit accuracy for every 1 ≤ k ≤ 623

It passes numerous tests for statistical randomness, including the
Diehard tests. It passes most, but not all, of the even more
stringent TestU01 Crush randomness tests.
ON RANDOMNESS Mersenne Twister Algorithm
2.) Mersenne Twister Algorithm
(as used in the random module of Python)
# Create a length 624 list to store the state of the generator
MT = [0 for i in xrange(624)]
index = 0

# To get last 32 bits
bitmask_1 = (2 ** 32) - 1
# To get 32. bit
bitmask_2 = 2 ** 31
# To get last 31 bits
bitmask_3 = (2 ** 31) - 1
ON RANDOMNESS Mersenne Twister Algorithm
2.) Mersenne Twister Algorithm
def initialize_generator(seed):
"Initialize the generator from a seed"
global MT
global bitmask_1
MT[0] = seed
for i in xrange(1,624):
MT[i] = ((1812433253 * MT[i-1]) ^ ((MT[i-1] >> 30) + i)) &
bitmask_1
ON RANDOMNESS Mersenne Twister Algorithm
def extract_number():
""“ Extract a tempered pseudorandom number based on the indexth value, calling generate_numbers() every 624 numbers ""“
global index
global MT
if index == 0:
generate_numbers()
y = MT[index]
y ^= y >> 11
y ^= (y << 7) & 2636928640
y ^= (y << 15) & 4022730752
y ^= y >> 18
index = (index + 1) % 624
return y
ON RANDOMNESS Mersenne Twister Algorithm
def generate_numbers():
"Generate an array of 624 untempered numbers"
global MT
for i in xrange(624):
y = (MT[i] & bitmask_2) + (MT[(i + 1 ) % 624] & bitmask_3)
MT[i] = MT[(i + 397) % 624] ^ (y >> 1)
if y % 2 != 0:
MT[i] ^= 2567483615
if __name__ == "__main__":
from datetime import datetime
now = datetime.now()
initialize_generator(now.microsecond)
for i in xrange(100):
"Print 100 random numbers as an example"
print extract_number()
ON RANDOMNESS Linear Congruential Generator
3.) Linear Congruential Generator
represents one of the oldest and best-known pseudorandom number
generator algorithms.

the theory behind them is easy to understand, and they are easily
implemented and fast.
ON RANDOMNESS Linear Congruential Generator
3.) Linear Congruential Generator
ON RANDOMNESS Randomization Algorithms
3.) Linear Congruential Generator
The basic idea is to multiply the last number with a factor a, add a
constant c and then modulate it by m.
Xn+1 = (aXn + c) mod m.
where X0 is the seed.
ON RANDOMNESS Random Seed

Random Seed
* a number (or vector) used to initialize a pseudorandom number
generator
* crucial in the field of computer security.
* having the seed will allow one to obtain the secret encryption key
in a pseudorandomly generated encryption values
ON RANDOMNESS Random Seed

Random Seed

* two or more systems using matching pseudorandom number
algorithms and matching seeds can generate matching sequences of
non-repeating numbers which can be used to synchronize remote
systems, such as GPS satellites and receivers.
ON RANDOMNESS Linear Congruential Generator
a=3
c=9
m = 16
xi = 0
def seed(x):
global xi
xi = x

Random
Number
Generator

def rng():
global xi
xi = (a*xi + c) % m
return xi
for i in range(10):
print rng()
ON RANDOMNESS Linear Congruential Generator
LCG (Standard Parameters)

Good One
ON RANDOMNESS Linear Congruential Generator
Using
java.util.Random
parameters

a = 25214903917
c = 11
m = 2**48
xi = 1000
def seed(x):
global xi
xi = x
def rng():
global xi
xi = (a*xi + c) % m
return xi
def rng_bounded(low, high):
return low + rng()%(high - low+1)
for i in range(10):
rng_bounded(1, 10)
ON RANDOMNESS Minimal Standard
MINSTD by Park & Miller (1988)
known as the Minimal Standard Random number generator
a very good set of parameters for LCG:

m = 231 − 1 = 2,147,483,647 (a Mersenne prime M31)
a = 75 = 16,807 (a primitive root modulo M31)
c=0
often the generator that used for the built in random number function in
compilers and other software packages.
used in Apple CarbonLib, a procedural API for developing Mac OS X
applications
ON RANDOMNESS Linear Congruential Generator
Using
MINSTD
parameters

a = 7**5
c=0
m = 2**31 - 1
xi = 1000
def seed(x):
global xi
xi = x
def rng():
global xi
xi = (a*xi + c) % m
return xi
def rng_bounded(low, high):
return low + rng() % (high - low+1)
for i in range(10):
rng_bounded(1, 2)
ON RANDOMNESS Linear Congruential Generator
Tossing 1 Coin
using LCG MINSTD
(1 million times)

from __ future__ import division
if __name__ == '__main__':
main()
a = 7**5
c=0
m = 2**31 - 1
xi = 1000
def seed(x):
global xi
xi = x

def rng():
global xi
xi = (a*xi + c) % m
return xi
ON RANDOMNESS Linear Congruential Generator
Tossing 1 Coin
using LCG MINSTD
(1 million times)

def rng_bounded(low, high):
return low + rng() % (high - low+1)
(heads, tails, count) = (0, 0, 0)
for i in range (1, 1000001):
count += 1
coin rng_bounded(1,2)

if coin == 1:
heads += 1
else:
tails += 1
ON RANDOMNESS Linear Congruential Generator
Tossing 1 Coin
using LCG MINSTD
(1 million times)

print "heads is ", heads/count
print "tails is ", tails/count
ON RANDOMNESS Linear Congruential Generator
Tossing 1 Coin
using Python randrange()
(1 million times)

from __ future__ import division
import random
if __name__ == '__main__':
main()
(heads, tails, count) = (0, 0, 0)
random.seed(1000)
for i in range (1,1000001):
count +=1
coin = random.randrange(1,3)
ON RANDOMNESS Linear Congruential Generator
Tossing 1 Coin
using Python randrange()
(1 million times)

if coin == 1:
heads += 1
else:
tails += 1

print "heads is ", heads/count
print "tails is ", tails/count
ON RANDOMNESS Linear Congruential Generator
Tossing 2 Coins
using LCG MINSTD
(1 million times)

from __ future__ import division
if __name__ == '__main__':
main()
a = 7**5
c=0
m = 2**31 - 1
xi = 1000
def seed(x):
global xi
xi = x

def rng():
global xi
xi = (a*xi + c) % m
return xi
ON RANDOMNESS Linear Congruential Generator
Tossing 2 Coins
using LCG MINSTD
(1 million times)

def rng_bounded(low, high):
return low + rng() % (high - low+1)

(heads, tails, combo, count) = (0, 0, 0, 0)
for i in range (1,1000001):
count += 1
coin1 = rng_bounded(1,2)
coin2 = rng_bounded(1,2)
sum = coin1 + coin2
if sum == 2:
heads += 1
elif sum == 4:
tails += 1
else:
combo += 1
ON RANDOMNESS Linear Congruential Generator
Tossing 2 Coins
using LCG MINSTD
(1 million times)

print "head is ", heads/count
print "tail is ", tails/count
print "combo is ", combo/count
ON RANDOMNESS Linear Congruential Generator
Tossing 2 Coins
using Python randrange()
(1 million times)

from __ future__ import division
import random
if __name__ == '__main__':
main()
(heads, tails, combo, count) = (0, 0, 0, 0)
random.seed(1000)
for i in range (1,1000001):
count +=1
coin1 = random.randrange(1,3)
coin2 = random.randrange(1,3)
sum = coin1 + coin2
ON RANDOMNESS Linear Congruential Generator
Tossing 2 Coins
using Python randrange()
(1 million times)

if sum == 2:
heads += 1

elif sum == 4:
tails += 1
else:
combo += 1
print "head is ", heads/count
print "tail is ", tails/count
print "combo is ", combo/count
ON RANDOMNESS Results Summary
Almost Similar Results
Tossing 1 Coin using LCG MINSTD vs Python randrange() (1 million times)

Tossing 2 Coins using LCG MINSTD vs Python randrange() (1 million times)
ON RANDOMNESS Linear Congruential Generator
Tossing 1 Coin using LCG MINSTD (1000 times)
More Elegant Way (Using List)
ON RANDOMNESS Linear Congruential Generator
Tossing 2 Coins
using LCG MINSTD
(1 million times)
More Elegant Way
(Using List)

from __future__ import division

if __name__ == '__main__':
main()
xi = 1000
def seed(x):
global xi
xi = x
def rng(a=7**5, c=0, m = 2**31 - 1):
global xi
xi = (a*xi + c) % m
return xi
def rng_bounded(low, high):
return low + rng() % (high - low+1)
ON RANDOMNESS Linear Congruential Generator
Tossing 2 Coins
using LCG MINSTD
(1 million times)
More Elegant Way

tosses = []
for i in range (1, 1000001):
tosses += [rngNiRanie(1, 2) + rngNiRanie(1, 2)]
print "heads count is ", tosses.count(2) / len(tosses)
print "tails count is ", tosses.count(4) / len(tosses)
print "combo count is ", tosses.count(3) / len(tosses)
ON RANDOMNESS

RANEL O. PADON
ON RANDOMNESS
a = 25214903917
c = 11
m = 2**48
xi = 1000
def seed(x):
global xi
xi = x
def rng():
global xi
xi = (a*xi + c) % m
return xi
def ranie(lowerBound, upperBound):
#ano laman nito? #
for i in range(10):
ranie(1,10)
REFERENCES

 Deitel, Deitel, Liperi, and Wiedermann - Python: How to Program (2001).

 Disclaimer: Most of the images/information used here have no proper source citation, and I do
not claim ownership of these either. I don’t want to reinvent the wheel, and I just want to reuse
and reintegrate materials that I think are useful or cool, then present them in another light,
form, or perspective. Moreover, the images/information here are mainly used for
illustration/educational purposes only, in the spirit of openness of data, spreading light, and
empowering people with knowledge. 

Contenu connexe

Tendances

Programming in Scala - Lecture Four
Programming in Scala - Lecture FourProgramming in Scala - Lecture Four
Programming in Scala - Lecture FourAngelo Corsaro
 
Map(), flatmap() and reduce() are your new best friends: simpler collections,...
Map(), flatmap() and reduce() are your new best friends: simpler collections,...Map(), flatmap() and reduce() are your new best friends: simpler collections,...
Map(), flatmap() and reduce() are your new best friends: simpler collections,...Chris Richardson
 
Functional Programming in Scala: Notes
Functional Programming in Scala: NotesFunctional Programming in Scala: Notes
Functional Programming in Scala: NotesRoberto Casadei
 
Programming in Scala - Lecture Two
Programming in Scala - Lecture TwoProgramming in Scala - Lecture Two
Programming in Scala - Lecture TwoAngelo Corsaro
 
Introduction to functional programming (In Arabic)
Introduction to functional programming (In Arabic)Introduction to functional programming (In Arabic)
Introduction to functional programming (In Arabic)Omar Abdelhafith
 
Introduction to objective c
Introduction to objective cIntroduction to objective c
Introduction to objective cMayank Jalotra
 
Introduction to Functional Programming in JavaScript
Introduction to Functional Programming in JavaScriptIntroduction to Functional Programming in JavaScript
Introduction to Functional Programming in JavaScripttmont
 
Programming in Scala - Lecture Three
Programming in Scala - Lecture ThreeProgramming in Scala - Lecture Three
Programming in Scala - Lecture ThreeAngelo Corsaro
 
Templates in C++
Templates in C++Templates in C++
Templates in C++Tech_MX
 
Learning Functional Programming Without Growing a Neckbeard
Learning Functional Programming Without Growing a NeckbeardLearning Functional Programming Without Growing a Neckbeard
Learning Functional Programming Without Growing a NeckbeardKelsey Gilmore-Innis
 
Generic programming and concepts that should be in C++
Generic programming and concepts that should be in C++Generic programming and concepts that should be in C++
Generic programming and concepts that should be in C++Anton Kolotaev
 
Programming in Scala: Notes
Programming in Scala: NotesProgramming in Scala: Notes
Programming in Scala: NotesRoberto Casadei
 
Type Classes in Scala and Haskell
Type Classes in Scala and HaskellType Classes in Scala and Haskell
Type Classes in Scala and HaskellHermann Hueck
 
Core java by a introduction sandesh sharma
Core java by a introduction sandesh sharmaCore java by a introduction sandesh sharma
Core java by a introduction sandesh sharmaSandesh Sharma
 
If You Think You Can Stay Away from Functional Programming, You Are Wrong
If You Think You Can Stay Away from Functional Programming, You Are WrongIf You Think You Can Stay Away from Functional Programming, You Are Wrong
If You Think You Can Stay Away from Functional Programming, You Are WrongMario Fusco
 
Functional Programming Fundamentals
Functional Programming FundamentalsFunctional Programming Fundamentals
Functional Programming FundamentalsShahriar Hyder
 

Tendances (20)

Programming in Scala - Lecture Four
Programming in Scala - Lecture FourProgramming in Scala - Lecture Four
Programming in Scala - Lecture Four
 
Map(), flatmap() and reduce() are your new best friends: simpler collections,...
Map(), flatmap() and reduce() are your new best friends: simpler collections,...Map(), flatmap() and reduce() are your new best friends: simpler collections,...
Map(), flatmap() and reduce() are your new best friends: simpler collections,...
 
Functional Programming in Scala: Notes
Functional Programming in Scala: NotesFunctional Programming in Scala: Notes
Functional Programming in Scala: Notes
 
Programming in Scala - Lecture Two
Programming in Scala - Lecture TwoProgramming in Scala - Lecture Two
Programming in Scala - Lecture Two
 
Introduction to functional programming (In Arabic)
Introduction to functional programming (In Arabic)Introduction to functional programming (In Arabic)
Introduction to functional programming (In Arabic)
 
Introduction to objective c
Introduction to objective cIntroduction to objective c
Introduction to objective c
 
Introduction to Functional Programming in JavaScript
Introduction to Functional Programming in JavaScriptIntroduction to Functional Programming in JavaScript
Introduction to Functional Programming in JavaScript
 
Functional programming
Functional programmingFunctional programming
Functional programming
 
Programming in Scala - Lecture Three
Programming in Scala - Lecture ThreeProgramming in Scala - Lecture Three
Programming in Scala - Lecture Three
 
Templates in C++
Templates in C++Templates in C++
Templates in C++
 
Learning Functional Programming Without Growing a Neckbeard
Learning Functional Programming Without Growing a NeckbeardLearning Functional Programming Without Growing a Neckbeard
Learning Functional Programming Without Growing a Neckbeard
 
Generic programming and concepts that should be in C++
Generic programming and concepts that should be in C++Generic programming and concepts that should be in C++
Generic programming and concepts that should be in C++
 
Programming in Scala: Notes
Programming in Scala: NotesProgramming in Scala: Notes
Programming in Scala: Notes
 
Generic Programming
Generic ProgrammingGeneric Programming
Generic Programming
 
Kotlin
KotlinKotlin
Kotlin
 
C++ Templates 2
C++ Templates 2C++ Templates 2
C++ Templates 2
 
Type Classes in Scala and Haskell
Type Classes in Scala and HaskellType Classes in Scala and Haskell
Type Classes in Scala and Haskell
 
Core java by a introduction sandesh sharma
Core java by a introduction sandesh sharmaCore java by a introduction sandesh sharma
Core java by a introduction sandesh sharma
 
If You Think You Can Stay Away from Functional Programming, You Are Wrong
If You Think You Can Stay Away from Functional Programming, You Are WrongIf You Think You Can Stay Away from Functional Programming, You Are Wrong
If You Think You Can Stay Away from Functional Programming, You Are Wrong
 
Functional Programming Fundamentals
Functional Programming FundamentalsFunctional Programming Fundamentals
Functional Programming Fundamentals
 

En vedette

Python Programming - V. Sequences (List and Tuples) and Dictionaries
Python Programming - V. Sequences (List and Tuples) and DictionariesPython Programming - V. Sequences (List and Tuples) and Dictionaries
Python Programming - V. Sequences (List and Tuples) and DictionariesRanel Padon
 
Switchable Map APIs with Drupal
Switchable Map APIs with DrupalSwitchable Map APIs with Drupal
Switchable Map APIs with DrupalRanel Padon
 
Python Programming - III. Controlling the Flow
Python Programming - III. Controlling the FlowPython Programming - III. Controlling the Flow
Python Programming - III. Controlling the FlowRanel Padon
 
Python Programming - XII. File Processing
Python Programming - XII. File ProcessingPython Programming - XII. File Processing
Python Programming - XII. File ProcessingRanel Padon
 
Python Programming - XI. String Manipulation and Regular Expressions
Python Programming - XI. String Manipulation and Regular ExpressionsPython Programming - XI. String Manipulation and Regular Expressions
Python Programming - XI. String Manipulation and Regular ExpressionsRanel Padon
 
Python Programming - VIII. Inheritance and Polymorphism
Python Programming - VIII. Inheritance and PolymorphismPython Programming - VIII. Inheritance and Polymorphism
Python Programming - VIII. Inheritance and PolymorphismRanel Padon
 
Python Programming - X. Exception Handling and Assertions
Python Programming - X. Exception Handling and AssertionsPython Programming - X. Exception Handling and Assertions
Python Programming - X. Exception Handling and AssertionsRanel Padon
 
Python Programming - VI. Classes and Objects
Python Programming - VI. Classes and ObjectsPython Programming - VI. Classes and Objects
Python Programming - VI. Classes and ObjectsRanel Padon
 
Python Programming - XIII. GUI Programming
Python Programming - XIII. GUI ProgrammingPython Programming - XIII. GUI Programming
Python Programming - XIII. GUI ProgrammingRanel Padon
 
Python Programming - I. Introduction
Python Programming - I. IntroductionPython Programming - I. Introduction
Python Programming - I. IntroductionRanel Padon
 

En vedette (10)

Python Programming - V. Sequences (List and Tuples) and Dictionaries
Python Programming - V. Sequences (List and Tuples) and DictionariesPython Programming - V. Sequences (List and Tuples) and Dictionaries
Python Programming - V. Sequences (List and Tuples) and Dictionaries
 
Switchable Map APIs with Drupal
Switchable Map APIs with DrupalSwitchable Map APIs with Drupal
Switchable Map APIs with Drupal
 
Python Programming - III. Controlling the Flow
Python Programming - III. Controlling the FlowPython Programming - III. Controlling the Flow
Python Programming - III. Controlling the Flow
 
Python Programming - XII. File Processing
Python Programming - XII. File ProcessingPython Programming - XII. File Processing
Python Programming - XII. File Processing
 
Python Programming - XI. String Manipulation and Regular Expressions
Python Programming - XI. String Manipulation and Regular ExpressionsPython Programming - XI. String Manipulation and Regular Expressions
Python Programming - XI. String Manipulation and Regular Expressions
 
Python Programming - VIII. Inheritance and Polymorphism
Python Programming - VIII. Inheritance and PolymorphismPython Programming - VIII. Inheritance and Polymorphism
Python Programming - VIII. Inheritance and Polymorphism
 
Python Programming - X. Exception Handling and Assertions
Python Programming - X. Exception Handling and AssertionsPython Programming - X. Exception Handling and Assertions
Python Programming - X. Exception Handling and Assertions
 
Python Programming - VI. Classes and Objects
Python Programming - VI. Classes and ObjectsPython Programming - VI. Classes and Objects
Python Programming - VI. Classes and Objects
 
Python Programming - XIII. GUI Programming
Python Programming - XIII. GUI ProgrammingPython Programming - XIII. GUI Programming
Python Programming - XIII. GUI Programming
 
Python Programming - I. Introduction
Python Programming - I. IntroductionPython Programming - I. Introduction
Python Programming - I. Introduction
 

Similaire à Python Programming - IX. On Randomness

Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014
Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014
Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014PyData
 
Algorithms 101 for Data Scientists
Algorithms 101 for Data ScientistsAlgorithms 101 for Data Scientists
Algorithms 101 for Data ScientistsChristopher Conlan
 
Performance is a Feature! at DDD 11
Performance is a Feature! at DDD 11Performance is a Feature! at DDD 11
Performance is a Feature! at DDD 11Matt Warren
 
Georgy Nosenko - An introduction to the use SMT solvers for software security
Georgy Nosenko - An introduction to the use SMT solvers for software securityGeorgy Nosenko - An introduction to the use SMT solvers for software security
Georgy Nosenko - An introduction to the use SMT solvers for software securityDefconRussia
 
Simple, fast, and scalable torch7 tutorial
Simple, fast, and scalable torch7 tutorialSimple, fast, and scalable torch7 tutorial
Simple, fast, and scalable torch7 tutorialJin-Hwa Kim
 
Gpu workshop cluster universe: scripting cuda
Gpu workshop cluster universe: scripting cudaGpu workshop cluster universe: scripting cuda
Gpu workshop cluster universe: scripting cudaFerdinand Jamitzky
 
What's new in Apache SystemML - Declarative Machine Learning
What's new in Apache SystemML  - Declarative Machine LearningWhat's new in Apache SystemML  - Declarative Machine Learning
What's new in Apache SystemML - Declarative Machine LearningLuciano Resende
 
Write Python for Speed
Write Python for SpeedWrite Python for Speed
Write Python for SpeedYung-Yu Chen
 
Performance and how to measure it - ProgSCon London 2016
Performance and how to measure it - ProgSCon London 2016Performance and how to measure it - ProgSCon London 2016
Performance and how to measure it - ProgSCon London 2016Matt Warren
 
Parallel R in snow (english after 2nd slide)
Parallel R in snow (english after 2nd slide)Parallel R in snow (english after 2nd slide)
Parallel R in snow (english after 2nd slide)Cdiscount
 
Programming python quick intro for schools
Programming python quick intro for schoolsProgramming python quick intro for schools
Programming python quick intro for schoolsDan Bowen
 
Hierarchical free monads and software design in fp
Hierarchical free monads and software design in fpHierarchical free monads and software design in fp
Hierarchical free monads and software design in fpAlexander Granin
 
Effective Numerical Computation in NumPy and SciPy
Effective Numerical Computation in NumPy and SciPyEffective Numerical Computation in NumPy and SciPy
Effective Numerical Computation in NumPy and SciPyKimikazu Kato
 
Python高级编程(二)
Python高级编程(二)Python高级编程(二)
Python高级编程(二)Qiangning Hong
 
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...Andrey Karpov
 
Actor, an elegant model for concurrent and distributed computation
Actor, an elegant model for concurrent and distributed computationActor, an elegant model for concurrent and distributed computation
Actor, an elegant model for concurrent and distributed computationAlessio Coltellacci
 

Similaire à Python Programming - IX. On Randomness (20)

Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014
Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014
Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014
 
Algorithms 101 for Data Scientists
Algorithms 101 for Data ScientistsAlgorithms 101 for Data Scientists
Algorithms 101 for Data Scientists
 
Performance is a Feature! at DDD 11
Performance is a Feature! at DDD 11Performance is a Feature! at DDD 11
Performance is a Feature! at DDD 11
 
Georgy Nosenko - An introduction to the use SMT solvers for software security
Georgy Nosenko - An introduction to the use SMT solvers for software securityGeorgy Nosenko - An introduction to the use SMT solvers for software security
Georgy Nosenko - An introduction to the use SMT solvers for software security
 
Simple, fast, and scalable torch7 tutorial
Simple, fast, and scalable torch7 tutorialSimple, fast, and scalable torch7 tutorial
Simple, fast, and scalable torch7 tutorial
 
Gpu workshop cluster universe: scripting cuda
Gpu workshop cluster universe: scripting cudaGpu workshop cluster universe: scripting cuda
Gpu workshop cluster universe: scripting cuda
 
What's new in Apache SystemML - Declarative Machine Learning
What's new in Apache SystemML  - Declarative Machine LearningWhat's new in Apache SystemML  - Declarative Machine Learning
What's new in Apache SystemML - Declarative Machine Learning
 
Write Python for Speed
Write Python for SpeedWrite Python for Speed
Write Python for Speed
 
Performance and how to measure it - ProgSCon London 2016
Performance and how to measure it - ProgSCon London 2016Performance and how to measure it - ProgSCon London 2016
Performance and how to measure it - ProgSCon London 2016
 
Parallel R in snow (english after 2nd slide)
Parallel R in snow (english after 2nd slide)Parallel R in snow (english after 2nd slide)
Parallel R in snow (english after 2nd slide)
 
Programming python quick intro for schools
Programming python quick intro for schoolsProgramming python quick intro for schools
Programming python quick intro for schools
 
Hierarchical free monads and software design in fp
Hierarchical free monads and software design in fpHierarchical free monads and software design in fp
Hierarchical free monads and software design in fp
 
Learn Matlab
Learn MatlabLearn Matlab
Learn Matlab
 
Functions
FunctionsFunctions
Functions
 
Effective Numerical Computation in NumPy and SciPy
Effective Numerical Computation in NumPy and SciPyEffective Numerical Computation in NumPy and SciPy
Effective Numerical Computation in NumPy and SciPy
 
Python高级编程(二)
Python高级编程(二)Python高级编程(二)
Python高级编程(二)
 
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
 
R and cpp
R and cppR and cpp
R and cpp
 
3 analysis.gtm
3 analysis.gtm3 analysis.gtm
3 analysis.gtm
 
Actor, an elegant model for concurrent and distributed computation
Actor, an elegant model for concurrent and distributed computationActor, an elegant model for concurrent and distributed computation
Actor, an elegant model for concurrent and distributed computation
 

Plus de Ranel Padon

The Synergy of Drupal Hooks/APIs (Custom Module Development with ChartJS)
The Synergy of Drupal Hooks/APIs (Custom Module Development with ChartJS)The Synergy of Drupal Hooks/APIs (Custom Module Development with ChartJS)
The Synergy of Drupal Hooks/APIs (Custom Module Development with ChartJS)Ranel Padon
 
CKEditor Widgets with Drupal
CKEditor Widgets with DrupalCKEditor Widgets with Drupal
CKEditor Widgets with DrupalRanel Padon
 
Views Unlimited: Unleashing the Power of Drupal's Views Module
Views Unlimited: Unleashing the Power of Drupal's Views ModuleViews Unlimited: Unleashing the Power of Drupal's Views Module
Views Unlimited: Unleashing the Power of Drupal's Views ModuleRanel Padon
 
Batch Scripting with Drupal (Featuring the EntityFieldQuery API)
Batch Scripting with Drupal (Featuring the EntityFieldQuery API)Batch Scripting with Drupal (Featuring the EntityFieldQuery API)
Batch Scripting with Drupal (Featuring the EntityFieldQuery API)Ranel Padon
 
PyCon PH 2014 - GeoComputation
PyCon PH 2014 - GeoComputationPyCon PH 2014 - GeoComputation
PyCon PH 2014 - GeoComputationRanel Padon
 
Power and Elegance - Leaflet + jQuery
Power and Elegance - Leaflet + jQueryPower and Elegance - Leaflet + jQuery
Power and Elegance - Leaflet + jQueryRanel Padon
 
Python Programming - IV. Program Components (Functions, Classes, Modules, Pac...
Python Programming - IV. Program Components (Functions, Classes, Modules, Pac...Python Programming - IV. Program Components (Functions, Classes, Modules, Pac...
Python Programming - IV. Program Components (Functions, Classes, Modules, Pac...Ranel Padon
 
Of Nodes and Maps (Web Mapping with Drupal - Part II)
Of Nodes and Maps (Web Mapping with Drupal - Part II)Of Nodes and Maps (Web Mapping with Drupal - Part II)
Of Nodes and Maps (Web Mapping with Drupal - Part II)Ranel Padon
 
Web Mapping with Drupal
Web Mapping with DrupalWeb Mapping with Drupal
Web Mapping with DrupalRanel Padon
 

Plus de Ranel Padon (9)

The Synergy of Drupal Hooks/APIs (Custom Module Development with ChartJS)
The Synergy of Drupal Hooks/APIs (Custom Module Development with ChartJS)The Synergy of Drupal Hooks/APIs (Custom Module Development with ChartJS)
The Synergy of Drupal Hooks/APIs (Custom Module Development with ChartJS)
 
CKEditor Widgets with Drupal
CKEditor Widgets with DrupalCKEditor Widgets with Drupal
CKEditor Widgets with Drupal
 
Views Unlimited: Unleashing the Power of Drupal's Views Module
Views Unlimited: Unleashing the Power of Drupal's Views ModuleViews Unlimited: Unleashing the Power of Drupal's Views Module
Views Unlimited: Unleashing the Power of Drupal's Views Module
 
Batch Scripting with Drupal (Featuring the EntityFieldQuery API)
Batch Scripting with Drupal (Featuring the EntityFieldQuery API)Batch Scripting with Drupal (Featuring the EntityFieldQuery API)
Batch Scripting with Drupal (Featuring the EntityFieldQuery API)
 
PyCon PH 2014 - GeoComputation
PyCon PH 2014 - GeoComputationPyCon PH 2014 - GeoComputation
PyCon PH 2014 - GeoComputation
 
Power and Elegance - Leaflet + jQuery
Power and Elegance - Leaflet + jQueryPower and Elegance - Leaflet + jQuery
Power and Elegance - Leaflet + jQuery
 
Python Programming - IV. Program Components (Functions, Classes, Modules, Pac...
Python Programming - IV. Program Components (Functions, Classes, Modules, Pac...Python Programming - IV. Program Components (Functions, Classes, Modules, Pac...
Python Programming - IV. Program Components (Functions, Classes, Modules, Pac...
 
Of Nodes and Maps (Web Mapping with Drupal - Part II)
Of Nodes and Maps (Web Mapping with Drupal - Part II)Of Nodes and Maps (Web Mapping with Drupal - Part II)
Of Nodes and Maps (Web Mapping with Drupal - Part II)
 
Web Mapping with Drupal
Web Mapping with DrupalWeb Mapping with Drupal
Web Mapping with Drupal
 

Dernier

Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 

Dernier (20)

Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 

Python Programming - IX. On Randomness

  • 1. IX. ON RANDOMNESS Engr. RANEL O. PADON
  • 2. PYTHON PROGRAMMING TOPICS I •Introduction to Python Programming II •Python Basics III •Controlling the Program Flow IV •Program Components: Functions, Classes, Packages, and Modules V •Sequences (List and Tuples), and Dictionaries VI •Object-Based Programming: Classes and Objects VII •Customizing Classes and Operator Overloading VIII •Object-Oriented Programming: Inheritance and Polymorphism IX •Randomization Algorithms X •Exception Handling and Assertions XI •String Manipulation and Regular Expressions XII •File Handling and Processing XIII •GUI Programming Using Tkinter
  • 5. ON RANDOMNESS Randomization Algorithms * Random numbers are used for testing the performance of programs, creating scientific simulations, and so on. * A pseudorandom number generator (PRNG) is an algorithm for generating a sequence of numbers that approximates the properties of random numbers. * The sequence is not truly random in that it is completely determined by a relatively small set of initial values (random seed)
  • 6. ON RANDOMNESS Randomization Algorithms Early Algorithm Middle-Square Method * take any number, square it, remove the middle digits of the resulting number as the "random number", then use that number as the seed for the next iteration. * squaring the number "1111" yields "1234321", which can be written as "01234321", an 8-digit number being the square of a 4-digit number. This gives "2343" as the "random" number. Repeating this procedure gives "4896" as the next result, and so on.
  • 7. ON RANDOMNESS Randomization Algorithms 1.) Blum Blum Shub (cryptographically sound, but slow) 2.) Mersenne Twister - fast with good statistical properties, - used when cyptography is not an issue - used in Python 3.) Linear Congruential Generator - commonly-used in compilers and many, many others
  • 8. ON RANDOMNESS Randomization Algorithms 2.) Mersenne Twister Algorithm is based on a matrix linear recurrence over a finite binary field provides for fast generation of very high-quality pseudorandom numbers, having been designed specifically to rectify many of the flaws found in older algorithms. used in PHP, Ruby and Python name derives from the fact that period length is chosen to be a Mersenne prime
  • 9. ON RANDOMNESS Mersenne Twister Algorithm 2.) Mersenne Twister Algorithm It has a very long period of 219937 − 1. While a long period is not a guarantee of quality in a random number generator, short periods (such as the 232 common in many software packages) can be problematic. It is k-distributed to 32-bit accuracy for every 1 ≤ k ≤ 623 It passes numerous tests for statistical randomness, including the Diehard tests. It passes most, but not all, of the even more stringent TestU01 Crush randomness tests.
  • 10. ON RANDOMNESS Mersenne Twister Algorithm 2.) Mersenne Twister Algorithm (as used in the random module of Python) # Create a length 624 list to store the state of the generator MT = [0 for i in xrange(624)] index = 0 # To get last 32 bits bitmask_1 = (2 ** 32) - 1 # To get 32. bit bitmask_2 = 2 ** 31 # To get last 31 bits bitmask_3 = (2 ** 31) - 1
  • 11. ON RANDOMNESS Mersenne Twister Algorithm 2.) Mersenne Twister Algorithm def initialize_generator(seed): "Initialize the generator from a seed" global MT global bitmask_1 MT[0] = seed for i in xrange(1,624): MT[i] = ((1812433253 * MT[i-1]) ^ ((MT[i-1] >> 30) + i)) & bitmask_1
  • 12. ON RANDOMNESS Mersenne Twister Algorithm def extract_number(): ""“ Extract a tempered pseudorandom number based on the indexth value, calling generate_numbers() every 624 numbers ""“ global index global MT if index == 0: generate_numbers() y = MT[index] y ^= y >> 11 y ^= (y << 7) & 2636928640 y ^= (y << 15) & 4022730752 y ^= y >> 18 index = (index + 1) % 624 return y
  • 13. ON RANDOMNESS Mersenne Twister Algorithm def generate_numbers(): "Generate an array of 624 untempered numbers" global MT for i in xrange(624): y = (MT[i] & bitmask_2) + (MT[(i + 1 ) % 624] & bitmask_3) MT[i] = MT[(i + 397) % 624] ^ (y >> 1) if y % 2 != 0: MT[i] ^= 2567483615 if __name__ == "__main__": from datetime import datetime now = datetime.now() initialize_generator(now.microsecond) for i in xrange(100): "Print 100 random numbers as an example" print extract_number()
  • 14. ON RANDOMNESS Linear Congruential Generator 3.) Linear Congruential Generator represents one of the oldest and best-known pseudorandom number generator algorithms. the theory behind them is easy to understand, and they are easily implemented and fast.
  • 15. ON RANDOMNESS Linear Congruential Generator 3.) Linear Congruential Generator
  • 16. ON RANDOMNESS Randomization Algorithms 3.) Linear Congruential Generator The basic idea is to multiply the last number with a factor a, add a constant c and then modulate it by m. Xn+1 = (aXn + c) mod m. where X0 is the seed.
  • 17. ON RANDOMNESS Random Seed Random Seed * a number (or vector) used to initialize a pseudorandom number generator * crucial in the field of computer security. * having the seed will allow one to obtain the secret encryption key in a pseudorandomly generated encryption values
  • 18. ON RANDOMNESS Random Seed Random Seed * two or more systems using matching pseudorandom number algorithms and matching seeds can generate matching sequences of non-repeating numbers which can be used to synchronize remote systems, such as GPS satellites and receivers.
  • 19. ON RANDOMNESS Linear Congruential Generator a=3 c=9 m = 16 xi = 0 def seed(x): global xi xi = x Random Number Generator def rng(): global xi xi = (a*xi + c) % m return xi for i in range(10): print rng()
  • 20. ON RANDOMNESS Linear Congruential Generator LCG (Standard Parameters) Good One
  • 21. ON RANDOMNESS Linear Congruential Generator Using java.util.Random parameters a = 25214903917 c = 11 m = 2**48 xi = 1000 def seed(x): global xi xi = x def rng(): global xi xi = (a*xi + c) % m return xi def rng_bounded(low, high): return low + rng()%(high - low+1) for i in range(10): rng_bounded(1, 10)
  • 22. ON RANDOMNESS Minimal Standard MINSTD by Park & Miller (1988) known as the Minimal Standard Random number generator a very good set of parameters for LCG: m = 231 − 1 = 2,147,483,647 (a Mersenne prime M31) a = 75 = 16,807 (a primitive root modulo M31) c=0 often the generator that used for the built in random number function in compilers and other software packages. used in Apple CarbonLib, a procedural API for developing Mac OS X applications
  • 23. ON RANDOMNESS Linear Congruential Generator Using MINSTD parameters a = 7**5 c=0 m = 2**31 - 1 xi = 1000 def seed(x): global xi xi = x def rng(): global xi xi = (a*xi + c) % m return xi def rng_bounded(low, high): return low + rng() % (high - low+1) for i in range(10): rng_bounded(1, 2)
  • 24. ON RANDOMNESS Linear Congruential Generator Tossing 1 Coin using LCG MINSTD (1 million times) from __ future__ import division if __name__ == '__main__': main() a = 7**5 c=0 m = 2**31 - 1 xi = 1000 def seed(x): global xi xi = x def rng(): global xi xi = (a*xi + c) % m return xi
  • 25. ON RANDOMNESS Linear Congruential Generator Tossing 1 Coin using LCG MINSTD (1 million times) def rng_bounded(low, high): return low + rng() % (high - low+1) (heads, tails, count) = (0, 0, 0) for i in range (1, 1000001): count += 1 coin rng_bounded(1,2) if coin == 1: heads += 1 else: tails += 1
  • 26. ON RANDOMNESS Linear Congruential Generator Tossing 1 Coin using LCG MINSTD (1 million times) print "heads is ", heads/count print "tails is ", tails/count
  • 27. ON RANDOMNESS Linear Congruential Generator Tossing 1 Coin using Python randrange() (1 million times) from __ future__ import division import random if __name__ == '__main__': main() (heads, tails, count) = (0, 0, 0) random.seed(1000) for i in range (1,1000001): count +=1 coin = random.randrange(1,3)
  • 28. ON RANDOMNESS Linear Congruential Generator Tossing 1 Coin using Python randrange() (1 million times) if coin == 1: heads += 1 else: tails += 1 print "heads is ", heads/count print "tails is ", tails/count
  • 29. ON RANDOMNESS Linear Congruential Generator Tossing 2 Coins using LCG MINSTD (1 million times) from __ future__ import division if __name__ == '__main__': main() a = 7**5 c=0 m = 2**31 - 1 xi = 1000 def seed(x): global xi xi = x def rng(): global xi xi = (a*xi + c) % m return xi
  • 30. ON RANDOMNESS Linear Congruential Generator Tossing 2 Coins using LCG MINSTD (1 million times) def rng_bounded(low, high): return low + rng() % (high - low+1) (heads, tails, combo, count) = (0, 0, 0, 0) for i in range (1,1000001): count += 1 coin1 = rng_bounded(1,2) coin2 = rng_bounded(1,2) sum = coin1 + coin2 if sum == 2: heads += 1 elif sum == 4: tails += 1 else: combo += 1
  • 31. ON RANDOMNESS Linear Congruential Generator Tossing 2 Coins using LCG MINSTD (1 million times) print "head is ", heads/count print "tail is ", tails/count print "combo is ", combo/count
  • 32. ON RANDOMNESS Linear Congruential Generator Tossing 2 Coins using Python randrange() (1 million times) from __ future__ import division import random if __name__ == '__main__': main() (heads, tails, combo, count) = (0, 0, 0, 0) random.seed(1000) for i in range (1,1000001): count +=1 coin1 = random.randrange(1,3) coin2 = random.randrange(1,3) sum = coin1 + coin2
  • 33. ON RANDOMNESS Linear Congruential Generator Tossing 2 Coins using Python randrange() (1 million times) if sum == 2: heads += 1 elif sum == 4: tails += 1 else: combo += 1 print "head is ", heads/count print "tail is ", tails/count print "combo is ", combo/count
  • 34. ON RANDOMNESS Results Summary Almost Similar Results Tossing 1 Coin using LCG MINSTD vs Python randrange() (1 million times) Tossing 2 Coins using LCG MINSTD vs Python randrange() (1 million times)
  • 35. ON RANDOMNESS Linear Congruential Generator Tossing 1 Coin using LCG MINSTD (1000 times) More Elegant Way (Using List)
  • 36. ON RANDOMNESS Linear Congruential Generator Tossing 2 Coins using LCG MINSTD (1 million times) More Elegant Way (Using List) from __future__ import division if __name__ == '__main__': main() xi = 1000 def seed(x): global xi xi = x def rng(a=7**5, c=0, m = 2**31 - 1): global xi xi = (a*xi + c) % m return xi def rng_bounded(low, high): return low + rng() % (high - low+1)
  • 37. ON RANDOMNESS Linear Congruential Generator Tossing 2 Coins using LCG MINSTD (1 million times) More Elegant Way tosses = [] for i in range (1, 1000001): tosses += [rngNiRanie(1, 2) + rngNiRanie(1, 2)] print "heads count is ", tosses.count(2) / len(tosses) print "tails count is ", tosses.count(4) / len(tosses) print "combo count is ", tosses.count(3) / len(tosses)
  • 39. ON RANDOMNESS a = 25214903917 c = 11 m = 2**48 xi = 1000 def seed(x): global xi xi = x def rng(): global xi xi = (a*xi + c) % m return xi def ranie(lowerBound, upperBound): #ano laman nito? # for i in range(10): ranie(1,10)
  • 40. REFERENCES  Deitel, Deitel, Liperi, and Wiedermann - Python: How to Program (2001).  Disclaimer: Most of the images/information used here have no proper source citation, and I do not claim ownership of these either. I don’t want to reinvent the wheel, and I just want to reuse and reintegrate materials that I think are useful or cool, then present them in another light, form, or perspective. Moreover, the images/information here are mainly used for illustration/educational purposes only, in the spirit of openness of data, spreading light, and empowering people with knowledge. 