Pseudo-randomisering av händelser och metoder

Diskret händelsesimulering i Python

Diogo Costa (PhD, MSc)

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

Randomisering av processer (eller händelser)

Vad är randomisering?

  • Processen att göra något slumpmässigt
  • Här handlar det om att göra händelser (eller processer) slumpmässiga
  • Användbart för att simulera icke-deterministiska processer

Värt att notera: Datorer kan per design inte generera verkligt slumpmässiga tal.

  • Aktuell tid och andra externa variabler används ofta i beräkningar för att öka slumpmässigheten.
Diskret händelsesimulering i Python

Slump vs. pseudo-slump

"Äkta" slumpgenerering

  • Talen är verkligt slumpmässiga
  • Slumpmässigheten begränsas av maskinvarans inneboende begränsningar

Pseudo-slumpgenerering

  • Tal genereras baserat på sannolikhetsfördelningar
  • Den statistiska fördelningen framträder tydligare ju fler sampel som genereras

Exempel: Fabrik med manuell monteringsuppgift

Spridningsdiagram som visar varaktigheten för en viss manuell montering upprepade gånger.

  • Sannolikhetsfördelning är ett lämpligare sätt att generera nästa pseudo-slumpmässiga händelse
Diskret händelsesimulering i Python

Paket för pseudo-randomisering

Flera statistikpaket kan användas:

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

Paketet Random

  • Genererar slumpmässiga och pseudo-slumpmässiga tal

Vårt fokus

  • Metoder som ofta används i diskreta händelsemodeller
Diskret händelsesimulering i Python

Slumpmässigt tal inom ett givet intervall

Slumpmässigt heltal inom ett givet intervall

Metod:

random.randint(start, end)

Exempel: Slumpmässigt heltal mellan 3 (inkluderat) och 9 (ej inkluderat)

random.randint(3, 9)
5

Slumpmässigt flyttal inom ett givet intervall

Metod:

random.uniform(start, end)

Exempel: Slumpmässigt flyttal mellan 3 och 9

random.uniform(3, 9)
6.4557754
Diskret händelsesimulering i Python

Slumpmässiga urval och sekvenser

Slumpmässigt urval från en sekvens

Metod:

random.sample(mylist, k=number_samples)

Exempel: 2 slumpmässiga element från en lista

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

Blanda en lista (ändra ordning på elementen)

Metod:

random.shuffle(mylist)

Exempel: Slumpmässig omordning av listelement

mylist = ["book", "pencil", "eraser"]
random.shuffle(mylist)
['eraser', 'pencil', 'book']
Diskret händelsesimulering i Python

Gaussisk och exponentiell fördelning

Gaussisk fördelning

Metod:

random.gauss(average, standard_dev)

Exempel: Pseudo-slumpmässigt flyttal med medelvärdet 100 och standardavvikelsen 50

random.gauss(100, 50)
123.59383

Exponentialfördelning

Metod:

random.expovariate(lambda)
  • om lambda>0, resultat [0, infinity]
  • om lambda<0, resultat [-infinity, 0]

Exempel: Pseudo-slumpmässigt flyttal med exponentialfördelning och lambda 1,5: random.expovariate(1.5)

0.2234355
Diskret händelsesimulering i Python

Nu kör vi en övning!

Diskret händelsesimulering i Python

Preparing Video For Download...