Événements et méthodes pseudo-aléatoires

Simulation d’événements discrets en Python

Diogo Costa (PhD, MSc)

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

Randomisation de processus (ou d'événements)

Qu'est-ce que la randomisation ?

  • Processus qui rend quelque chose aléatoire
  • Ici, rendre des événements (ou processus) aléatoires
  • Utile pour simuler des processus non déterministes

À noter : Par conception, les ordinateurs ne génèrent pas de vrais nombres aléatoires.

  • L'heure courante et d'autres variables externes sont souvent utilisées pour accroître l'aléa du générateur.
Simulation d’événements discrets en Python

Aléatoire vs. pseudo-aléatoire

Génération « vraiment » aléatoire

  • Nombres réellement aléatoires
  • Aléa limité par les contraintes intrinsèques de la machine

Génération pseudo-aléatoire

  • Nombres générés selon des lois de probabilité
  • La distribution statistique apparaît avec l'augmentation des échantillons

Exemple : Usine avec une tâche d'assemblage manuel

Nuage de points montrant la durée d'un assemblage manuel répété plusieurs fois.

  • Une distribution de probabilité est plus adaptée pour générer une prochaine occurrence pseudo-aléatoire
Simulation d’événements discrets en Python

Bibliothèques pour la pseudo-randomisation

Plusieurs bibliothèques statistiques :

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

Package random

  • Génère des nombres aléatoires et pseudo-aléatoires

Notre focus

  • Méthodes courantes en modélisation à événements discrets
Simulation d’événements discrets en Python

Nombre aléatoire dans un intervalle

Entier aléatoire dans un intervalle

Méthode :

random.randint(start, end)

Exemple : Entier aléatoire entre 3 (inclus) et 9 (exclu)

random.randint(3, 9)
5

Flottant aléatoire dans un intervalle

Méthode :

random.uniform(start, end)

Exemple : Flottant aléatoire entre 3 et 9

random.uniform(3, 9)
6.4557754
Simulation d’événements discrets en Python

Échantillons et séquences aléatoires

Échantillon aléatoire d'une séquence

Méthode :

random.sample(mylist, k=number_samples)

Exemple : 2 éléments aléatoires d'une liste

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

Mélanger une liste (réordonner ses éléments)

Méthode :

random.shuffle(mylist)

Exemple : Réordonnancement aléatoire des éléments

mylist = ["book", "pencil", "eraser"]
random.shuffle(mylist)
['eraser', 'pencil', 'book']
Simulation d’événements discrets en Python

Distributions gaussienne et exponentielle

Distribution gaussienne

Méthode :

random.gauss(average, standard_dev)

Exemple : Flottant pseudo-aléatoire de moyenne 100 et écart-type 50

random.gauss(100, 50)
123.59383

Distribution exponentielle

Méthode :

random.expovariate(lambda)
  • si lambda>0, résultats [0, infinity]
  • si lambda<0, résultats [-infinity, 0]

Exemple : Flottant pseudo-aléatoire avec lambda = 1.5 : random.expovariate(1.5)

0.2234355
Simulation d’événements discrets en Python

Passons à la pratique !

Simulation d’événements discrets en Python

Preparing Video For Download...