Pseudo-willekeurige events en methoden

Discrete Event Simulation in Python

Diogo Costa (PhD, MSc)

Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

Randomisatie van processen (of events)

Wat is randomisatie?

  • Proces om iets willekeurig te maken
  • Hier: events (of processen) willekeurig maken
  • Handig om niet-deterministische processen te simuleren

Let op: Computers kunnen, per ontwerp, geen echt willekeurige getallen genereren.

  • Huidige tijd en andere externe variabelen worden vaak gebruikt om de willekeur te vergroten.
Discrete Event Simulation in Python

Echt vs. pseudo-willekeurig

Echt willekeurige generatie

  • Getallen echt willekeurig
  • Willekeur beperkt door machinebeperkingen

Pseudo-willekeurige generatie

  • Getallen op basis van kansverdelingen
  • Verdeling wordt duidelijker naarmate het aantal samples groeit

Voorbeeld: Fabriek met handmatige montagetaak

Spreidingsdiagram met de duur van een handmatige montage bij herhaling.

  • Kansverdeling is geschikter om een pseudo-willekeurig volgende gebeurtenis te genereren
Discrete Event Simulation in Python

Pakketten voor pseudo-randomisatie

Er zijn meerdere statistiekpakketten:

  • NumPy
  • SciPy
  • statsmodels
  • pandas
  • Random
  • scikit-learn

Random-pakket

  • Genereert random en pseudo-random getallen

Focus hierop

  • Methoden die vaak worden gebruikt in discrete-eventmodellen
Discrete Event Simulation in Python

Willekeurig getal binnen bereik

Willekeurig geheel getal binnen bereik

Methode:

random.randint(start, end)

Voorbeeld: Willekeurig geheel getal tussen 3 (inclusief) en 9 (exclusief)

random.randint(3, 9)
5

Willekeurig drijvend getal binnen bereik

Methode:

random.uniform(start, end)

Voorbeeld: Willekeurig drijvend getal tussen 3 en 9

random.uniform(3, 9)
6.4557754
Discrete Event Simulation in Python

Willekeurige samples en reeksen

Willekeurige steekproef uit een reeks

Methode:

random.sample(mylist, k=number_samples)

Voorbeeld: 2 willekeurige elementen uit een lijst

mylist = ["apple", "banana", "cherry"]
random.sample(mylist, k=2)
['cherry', 'banana']

Lijst schudden (elementen herordenen)

Methode:

random.shuffle(mylist)

Voorbeeld: Willekeurige herordening van lijst

mylist = ["book", "pencil", "eraser"]
random.shuffle(mylist)
['eraser', 'pencil', 'book']
Discrete Event Simulation in Python

Gauss- en exponentiële verdelingen

Gauss-verdeling

Methode:

random.gauss(average, standard_dev)

Voorbeeld: Pseudo-willekeurig float met gemiddelde 100 en standaardafwijking 50

random.gauss(100, 50)
123.59383

Exponentiële verdeling

Methode:

random.expovariate(lambda)
  • als lambda>0, resultaten [0, infinity]
  • als lambda<0, resultaten [-infinity, 0]

Voorbeeld: Pseudo-willekeurig float met exponentiële verdeling en lambda 1.5: random.expovariate(1.5)

DNT_CURLY_TAG_8

0.2234355
Discrete Event Simulation in Python

Laten we oefenen!

Discrete Event Simulation in Python

Preparing Video For Download...