Créer un modèle à événements discrets avec SimPy

Simulation d'événements discrets en Python

Dr Diogo Costa

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

Avant de construire le modèle

  • Comprendre le système dynamique

  • Définir l'objectif ou les objectifs du modèle à événements discrets

  • Repérer les processus :

    • en parallèle
    • en séquence
  • Choisir les ressources SimPy appropriées (resource, container, store)

  • Définir l'architecture du modèle :

    • Repérer les variables d'état
    • Flux de travail du modèle
    • Générateurs
Simulation d'événements discrets en Python

Le système dynamique et les objectifs du modèle

Comprendre le système dynamique

  • Quels aspects modulent son comportement ?
  • Quels processus/événements inclure ?

Objectifs du modèle

  • Souvent utilisé pour optimiser des systèmes
  • Quels aspects voulez-vous optimiser ?

    • Plus de clients
    • Délais de traitement plus courts
    • Optimiser l'allocation des ressources
  • Variables d'état pour suivre ces objectifs

Simulation d'événements discrets en Python

Choisir les ressources SimPy appropriées

Ressources partagées

simpy.Resource(env, capacity=4)
  • Ressources partagées entre des processus

Exemples

  • Tables dans un restaurant
  • Machines dans une usine
  • Sièges dans une salle de spectacle
  • Caissiers dans un magasin

Conteneurs

simpy.Container(env, capacity, 
init=initial_capacity)
  • Ressource qui se comporte comme un réservoir ou un panier

  • Ajouter et retirer une quantité :

.put() et .get()

Exemples

  • Réserves de carburant dans une station-service
  • Charbon dans une centrale au charbon
Simulation d'événements discrets en Python

Choisir les ressources SimPy appropriées

Entrepôt (Store)

simpy.Store(env, capacity=4)
  • Ressource comme un magasin avec plusieurs articles

  • Capacité illimitée (par défaut)

  • Emplacements pour stocker des objets arbitraires

  • Ajouter et retirer des articles :

.put() et .get()

Exemples

  • Magasins vendant plusieurs articles
  • Salle d'entreposage
  • Atelier
  • Ménage
Simulation d'événements discrets en Python

Concaténer des événements avec des opérateurs au niveau du bit

SimPy utilise des opérateurs au niveau du bit pour concaténer deux événements

Types d'opérateurs en Python

  • Opérateurs arithmétiques, logiques et de comparaison

Opérateurs au niveau du bit

  • Calculs bit à bit sur des entiers
  • Attendent deux opérandes
    • Exemple : a & b, a >> b, a ^ b

Dans SimPy

  • Les opérateurs au niveau du bit génèrent un événement conditionnel
  • Attendre les deux événements/processus ou un seul

Opérateurs pertinents pour SimPy

  • Attend les deux processus : __and__() ou &
  • Attend l'un ou l'autre : __or__() ou |
Simulation d'événements discrets en Python

Passons à la pratique !

Simulation d'événements discrets en Python

Preparing Video For Download...