Discrete Event Simulation in Python
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific
SimPy biedt drie typen resources:
resource
containerstore simpy.Resource()
simpy.Container()
simpy.Store()
Een resource maken
resource_1 = simpy.Resource(env, capacity=8)
capacity=8)Resource aanvragen
# Open resourceaanvraag with resource_1.request() as request:# Doe de aanvraag yield request# Zodra de resource beschikbaar is yield env.timeout(event_duration)
Variant van de vorige resource
resource_1 = simpy.PreemptiveResource(
env, capacity=1)
Sommige processen hebben prioriteit boven andere
Voorbeeld: monteur
Gebruik lijkt op simpy.Resource()
Aanvragen met hoogste prioriteit
with resource_1.request(priority=1) as
request:
yield request
yield env.timeout(process_duration)
Aanvragen met lagere prioriteit
with resource_1.request(priority=2) as
request:
yield request
yield env.timeout(process_duration)
Handig om productie/consumptie van homogene, ongedifferentieerde bulk te modelleren
Kan continu (zoals water) of discreet (zoals appels) zijn
Voorbeeld: Brandstofvoorraad bij een tankstation.
tank_1 = simpy.Container(
env, tank_size, init=tank_size)
Toevoegen en verwijderen uit container/tank
yield tank_1.put(add_quantity)
yield tank_1.get(remove_quantity)
Huidige hoeveelheid in de tank ophalen
tank_1.level
Totale tankcapaciteit ophalen
tank_1.capacity
Maak een store
store_1 = simpy.Store(
env, capacity=2)
Lijkt op simpy.Container() maar slaat verschillende objecten op
In tegenstelling tot de vrij abstracte "hoeveelheid" in containers
yield store_1.put("item_1")
yield store_1.get()
Lijst met beschikbare items ophalen
store_1.items
Opslagcapaciteit ophalen
store_1.capacity
Voorbeeld
Huidige situatie: 1 kassa
simpy.Resource(env, capacity=1)...
tijd: 23,7 min | Klant 30 > Klaar
Gesimuleerde scenario’s: n kassa’s
simpy.Resource(env, capacity=2)...
tijd: 13,2 min | Klant 30 > Klaar
simpy.Resource(env, capacity=3)...
tijd: 8,6 min | Klant 30 > Klaar
simpy.Resource(env, capacity=4)...
tijd: 8,6 min | Klant 30 > Klaar
Discrete Event Simulation in Python