Simulation d'événements discrets en Python
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific
SimPy offre trois types de ressources :
resource
containerstore simpy.Resource()
simpy.Container()
simpy.Store()
Créer une ressource
resource_1 = simpy.Resource(env, capacity=8)
capacity=8)Demander une ressource
# Ouvrir une demande de ressource with resource_1.request() as request:# Faire la demande yield request# Une fois la ressource disponible yield env.timeout(event_duration)
Variation de la ressource précédente
resource_1 = simpy.PreemptiveResource(
env, capacity=1)
Certains processus peuvent avoir priorité sur d'autres
Exemple : technicien de réparation
Utilisation semblable à 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é inférieure
with resource_1.request(priority=2) as
request:
yield request
yield env.timeout(process_duration)
Utile pour modéliser la production/consommation d'une masse homogène et indifférenciée
Peut être continue (comme l'eau) ou discrète (comme des pommes)
Exemple : réserves d'essence d'une station-service.
tank_1 = simpy.Container(
env, tank_size, init=tank_size)
Ajouter et retirer du conteneur/réservoir
yield tank_1.put(add_quantity)
yield tank_1.get(remove_quantity)
Obtenir la quantité actuelle dans le réservoir
tank_1.level
Obtenir la capacité totale du réservoir
tank_1.capacity
Créer un magasin
store_1 = simpy.Store(
env, capacity=2)
Semblable à simpy.Container() mais permet d'entreposer des objets différents
Contrairement à la notion plus abstraite de « quantité » dans les conteneurs
yield store_1.put("item_1")
yield store_1.get()
Obtenir la liste des articles disponibles
store_1.items
Obtenir la capacité du magasin
store_1.capacity
Exemple
Situation actuelle : 1 caissier
simpy.Resource(env, capacity=1)...
time: 23.7 min | Customer 30 > Finished
Scénarios simulés : n caissiers
simpy.Resource(env, capacity=2)...
time: 13.2 min | Customer 30 > Finished
simpy.Resource(env, capacity=3)...
time: 8.6 min | Customer 30 > Finished
simpy.Resource(env, capacity=4)...
time: 8.6 min | Customer 30 > Finished
Simulation d'événements discrets en Python