Simulare de evenimente discrete în Python
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific
SimPy oferă trei tipuri de resurse:
resource
containerstore simpy.Resource()
simpy.Container()
simpy.Store()
Crearea unei resurse
resource_1 = simpy.Resource(env, capacity=8)
capacity=8)Solicitarea unei resurse
# Open resource request with resource_1.request() as request:# Make resource request yield request# Once resource is avaiable yield env.timeout(event_duration)
Variantă a resursei anterioare
resource_1 = simpy.PreemptiveResource(
env, capacity=1)
Unele procese pot avea prioritate față de altele
Exemplu: tehnician de service
Utilizare similară cu simpy.Resource()
Solicitarea resursei cu cea mai mare prioritate
with resource_1.request(priority=1) as
request:
yield request
yield env.timeout(process_duration)
Solicitarea resursei cu prioritate mai mică
with resource_1.request(priority=2) as
request:
yield request
yield env.timeout(process_duration)
Util pentru modelarea producției/consumului de materie omogenă
Poate fi continuă (apă) sau discretă (mere)
Exemplu: Rezerve de combustibil la o benzinărie.
tank_1 = simpy.Container(
env, tank_size, init=tank_size)
Adăugare și eliminare din container/rezervor
yield tank_1.put(add_quantity)
yield tank_1.get(remove_quantity)
Cantitatea curentă din rezervor
tank_1.level
Capacitatea totală a rezervorului
tank_1.capacity
Creare unui store
store_1 = simpy.Store(
env, capacity=2)
Similar cu simpy.Container(), dar permite stocarea unor obiecte diferite
Spre deosebire de „cantitatea" abstractă stocată în containere
yield store_1.put("item_1")
yield store_1.get()
Lista obiectelor disponibile
store_1.items
Capacitatea store-ului
store_1.capacity
Exemplu
Situație actuală: 1 casier
simpy.Resource(env, capacity=1)...
time: 23.7 min | Customer 30 > Finished
Scenarii simulate: n casieri
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
Simulare de evenimente discrete în Python