Simulation d’événements discrets en Python
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific
SimPy propose trois types de ressources :
resource
containerstore simpy.Resource()
simpy.Container()
simpy.Store()
Création d’une ressource
resource_1 = simpy.Resource(env, capacity=8)
capacity=8)Demander une ressource
# Ouvrir la demande de ressource with resource_1.request() as request:# Faire la demande yield request# Une fois la ressource disponible yield env.timeout(event_duration)
Variante de la ressource précédente
resource_1 = simpy.PreemptiveResource(
env, capacity=1)
Certains processus ont priorité sur d’autres
Exemple : technicien
Usage similaire à simpy.Resource()
Demande avec priorité la plus élevée
with resource_1.request(priority=1) as
request:
yield request
yield env.timeout(process_duration)
Demande avec priorité plus faible
with resource_1.request(priority=2) as
request:
yield request
yield env.timeout(process_duration)
Utile pour modéliser la production/consommation de matière homogène, non différenciée
Peut être continue (eau) ou discrète (pommes)
Exemple : Réserves d’essence d’une station-service.
tank_1 = simpy.Container(
env, tank_size, init=tank_size)
Ajouter/retirer du conteneur/réservoir
yield tank_1.put(add_quantity)
yield tank_1.get(remove_quantity)
Obtenir la quantité actuelle
tank_1.level
Obtenir la capacité totale
tank_1.capacity
Créer un magasin
store_1 = simpy.Store(
env, capacity=2)
Semblable à simpy.Container() mais permet de stocker des objets différents
Contrairement à la « quantité » abstraite stockée dans les conteneurs
yield store_1.put("item_1")
yield store_1.get()
Obtenir la liste des éléments disponibles
store_1.items
Obtenir la capacité du magasin
store_1.capacity
Exemple
Situation actuelle : 1 caissier
simpy.Resource(env, capacity=1)...
temps : 23,7 min | Client 30 > Terminé
Scénarios simulés : n caissiers
simpy.Resource(env, capacity=2)...
temps : 13,2 min | Client 30 > Terminé
simpy.Resource(env, capacity=3)...
temps : 8,6 min | Client 30 > Terminé
simpy.Resource(env, capacity=4)...
temps : 8,6 min | Client 30 > Terminé
Simulation d’événements discrets en Python