Pseudo-randomizzazione di eventi e metodi

Simulazione a eventi discreti in Python

Diogo Costa (PhD, MSc)

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

Randomizzazione di processi (o eventi)

Cos'è la randomizzazione?

  • Rendere qualcosa casuale
  • Qui: rendere casuali eventi/processi
  • Utile per simulare processi non deterministici

Da sapere: i computer, per progetto, non generano numeri davvero casuali.

  • Si usa spesso l'ora corrente e altre variabili esterne per aumentare la casualità del generatore.
Simulazione a eventi discreti in Python

Casuale vs. pseudo-casuale

Generazione davvero casuale

  • Numeri davvero casuali
  • Casualità limitata dai vincoli della macchina

Generazione pseudo-casuale

  • Numeri generati da distribuzioni di probabilità
  • La distribuzione emerge con campioni più numerosi

Esempio: Fabbrica con attività di assemblaggio manuale

Grafico a dispersione che mostra la durata di un'operazione di assemblaggio manuale ripetuta più volte.

  • Distribuzioni di probabilità più adatte a generare la prossima occorrenza pseudo-casuale
Simulazione a eventi discreti in Python

Pacchetti per la pseudo-randomizzazione

Si possono usare vari pacchetti statistici:

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

Pacchetto Random

  • Genera numeri casuali e pseudo-casuali

Focus

  • Metodi usati spesso nei modelli a eventi discreti
Simulazione a eventi discreti in Python

Numero casuale in un intervallo

Intero casuale in un intervallo

Metodo:

random.randint(start, end)

Esempio: Intero casuale tra 3 (incluso) e 9 (escluso)

random.randint(3, 9)
5

Float casuale in un intervallo

Metodo:

random.uniform(start, end)

Esempio: Float casuale tra 3 e 9

random.uniform(3, 9)
6.4557754
Simulazione a eventi discreti in Python

Campioni e sequenze casuali

Campione casuale da una sequenza

Metodo:

random.sample(mylist, k=number_samples)

Esempio: 2 elementi casuali da una lista

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

Mescolare una lista (riordinare gli elementi)

Metodo:

random.shuffle(mylist)

Esempio: Riordino casuale degli elementi

mylist = ["book", "pencil", "eraser"]
random.shuffle(mylist)
['eraser', 'pencil', 'book']
Simulazione a eventi discreti in Python

Distribuzioni gaussiana ed esponenziale

Distribuzione gaussiana

Metodo:

random.gauss(average, standard_dev)

Esempio: Float pseudo-casuale con media 100 e deviazione standard 50

random.gauss(100, 50)
123.59383

Distribuzione esponenziale

Metodo:

random.expovariate(lambda)
  • se lambda>0, risultati [0, infinity]
  • se lambda<0, risultati [-infinity, 0]

Esempio: Float pseudo-casuale con distribuzione esponenziale e lambda 1.5: random.expovariate(1.5)

0.2234355
Simulazione a eventi discreti in Python

Passons à la pratique !

Simulazione a eventi discreti in Python

Preparing Video For Download...