Diskrete-Ereignis-Simulation mit Python
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific
SimPy bietet drei Ressourcentypen:
resource
containerstore simpy.Resource()
simpy.Container()
simpy.Store()
Ressource erstellen
resource_1 = simpy.Resource(env, capacity=8)
capacity=8)Ressource anfordern
# Anfrage öffnen with resource_1.request() as request:# Anfrage stellen yield request# Sobald Ressource verfügbar ist yield env.timeout(event_duration)
Variante der vorherigen Ressource
resource_1 = simpy.PreemptiveResource(
env, capacity=1)
Manche Prozesse haben Priorität vor anderen
Beispiel: Techniker
Nutzung ähnlich wie simpy.Resource()
Ressource mit höchster Priorität anfordern
with resource_1.request(priority=1) as
request:
yield request
yield env.timeout(process_duration)
Ressource mit niedrigerer Priorität anfordern
with resource_1.request(priority=2) as
request:
yield request
yield env.timeout(process_duration)
Nützlich zum Modellieren von Produktion/Verbrauch homogener, undifferenzierter Mengen
Kann kontinuierlich (z. B. Wasser) oder diskret (z. B. Äpfel) sein
Beispiel: Treibstoffvorräte an einer Tankstelle.
tank_1 = simpy.Container(
env, tank_size, init=tank_size)
In den Container/Tank ein- und auslagern
yield tank_1.put(add_quantity)
yield tank_1.get(remove_quantity)
Aktuelle Tankmenge abfragen
tank_1.level
Gesamtkapazität abfragen
tank_1.capacity
Store erstellen
store_1 = simpy.Store(
env, capacity=2)
Ähnlich wie simpy.Container(), speichert aber verschiedene Objekte
Im Gegensatz zur eher abstrakten „Menge“ in Containern
yield store_1.put("item_1")
yield store_1.get()
Liste verfügbarer Items abrufen
store_1.items
Store-Kapazität abrufen
store_1.capacity
Beispiel
Ist-Zustand: 1 Kasse
simpy.Resource(env, capacity=1)...
Zeit: 23.7 Min | Kunde 30 > Fertig
Simulierte Szenarien: n Kassen
simpy.Resource(env, capacity=2)...
Zeit: 13.2 Min | Kunde 30 > Fertig
simpy.Resource(env, capacity=3)...
Zeit: 8.6 Min | Kunde 30 > Fertig
simpy.Resource(env, capacity=4)...
Zeit: 8.6 Min | Kunde 30 > Fertig
Diskrete-Ereignis-Simulation mit Python