Diskret händelsesimulering i Python
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific
SimPy erbjuder tre typer av resurser:
resource
containerstore simpy.Resource()
simpy.Container()
simpy.Store()
Skapa en resurs
resource_1 = simpy.Resource(env, capacity=8)
capacity=8)Begära en resurs
# Open resource request with resource_1.request() as request:# Make resource request yield request# Once resource is avaiable yield env.timeout(event_duration)
Variant av föregående resurs
resource_1 = simpy.PreemptiveResource(
env, capacity=1)
Vissa processer kan ha högre prioritet än andra
Exempel: reparatör
Används på liknande sätt som simpy.Resource()
Begära resurs med högsta prioritet
with resource_1.request(priority=1) as
request:
yield request
yield env.timeout(process_duration)
Begära resurs med lägre prioritet
with resource_1.request(priority=2) as
request:
yield request
yield env.timeout(process_duration)
Lämplig för att modellera produktion och konsumtion av homogent, odifferentierat material
Kan vara kontinuerligt (som vatten) eller diskret (som äpplen)
Exempel: Bensintillgångar vid en bensinstation.
tank_1 = simpy.Container(
env, tank_size, init=tank_size)
Lägg till och ta bort från container/tank
yield tank_1.put(add_quantity)
yield tank_1.get(remove_quantity)
Hämta aktuell mängd i tanken
tank_1.level
Hämta tankens totala kapacitet
tank_1.capacity
Skapa ett lager
store_1 = simpy.Store(
env, capacity=2)
Liknar simpy.Container() men tillåter lagring av olika objekt
Till skillnad från den mer abstrakta "mängden" som lagras i containrar
yield store_1.put("item_1")
yield store_1.get()
Hämta lista över tillgängliga objekt
store_1.items
Hämta lagrets kapacitet
store_1.capacity
Exempel
Nuläge: 1 kassör
simpy.Resource(env, capacity=1)...
time: 23.7 min | Customer 30 > Finished
Simulerade scenarier: n kassörer
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
Diskret händelsesimulering i Python