Diskrétní simulace událostí v Pythonu
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific
SimPy poskytuje tři typy zdrojů:
resource
containerstore simpy.Resource()
simpy.Container()
simpy.Store()
Vytvoření zdroje
resource_1 = simpy.Resource(env, capacity=8)
capacity=8)Vyžádání zdroje
# Open resource request with resource_1.request() as request:# Make resource request yield request# Once resource is avaiable yield env.timeout(event_duration)
Varianta předchozího zdroje
resource_1 = simpy.PreemptiveResource(
env, capacity=1)
Některé procesy mohou mít přednost před jinými
Příklad: opravář
Použití podobné jako u simpy.Resource()
Vyžádání zdroje s nejvyšší prioritou
with resource_1.request(priority=1) as
request:
yield request
yield env.timeout(process_duration)
Vyžádání zdroje s nižší prioritou
with resource_1.request(priority=2) as
request:
yield request
yield env.timeout(process_duration)
Vhodné pro modelování výroby/spotřeby homogenní, nediferencované hmoty
Může být spojitá (jako voda) nebo diskrétní (jako jablka)
Příklad: Zásoby paliva na čerpací stanici.
tank_1 = simpy.Container(
env, tank_size, init=tank_size)
Přidání a odebrání z kontejneru/nádrže
yield tank_1.put(add_quantity)
yield tank_1.get(remove_quantity)
Získání aktuálního množství v nádrži
tank_1.level
Získání celkové kapacity nádrže
tank_1.capacity
Vytvoření úložiště
store_1 = simpy.Store(
env, capacity=2)
Podobné jako simpy.Container(), ale umožňuje ukládání různých objektů
Na rozdíl od abstraktního „množství" uloženého v kontejnerech
yield store_1.put("item_1")
yield store_1.get()
Získání seznamu dostupných položek
store_1.items
Získání kapacity úložiště
store_1.capacity
Příklad
Aktuální situace: 1 pokladní
simpy.Resource(env, capacity=1)...
time: 23.7 min | Customer 30 > Finished
Simulované scénáře: n pokladních
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
Diskrétní simulace událostí v Pythonu