Symulacja zdarzeń dyskretnych w Pythonie
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific
SimPy udostępnia trzy typy zasobów:
resource
containerstore simpy.Resource()
simpy.Container()
simpy.Store()
Tworzenie zasobu
resource_1 = simpy.Resource(env, capacity=8)
capacity=8)Żądanie zasobu
# Open resource request with resource_1.request() as request:# Make resource request yield request# Once resource is avaiable yield env.timeout(event_duration)
Wariant poprzedniego zasobu
resource_1 = simpy.PreemptiveResource(
env, capacity=1)
Niektóre procesy mogą mieć pierwszeństwo przed innymi
Przykład: technik naprawczy
Użycie podobne do simpy.Resource()
Żądanie zasobu z najwyższym priorytetem
with resource_1.request(priority=1) as
request:
yield request
yield env.timeout(process_duration)
Żądanie zasobu z niższym priorytetem
with resource_1.request(priority=2) as
request:
yield request
yield env.timeout(process_duration)
Przydatne do modelowania produkcji/konsumpcji jednorodnych, nierozróżnialnych zasobów masowych
Mogą być ciągłe (jak woda) lub dyskretne (jak jabłka)
Przykład: Rezerwy paliwa na stacji benzynowej.
tank_1 = simpy.Container(
env, tank_size, init=tank_size)
Dodawanie i pobieranie z kontenera/zbiornika
yield tank_1.put(add_quantity)
yield tank_1.get(remove_quantity)
Bieżąca ilość w zbiorniku
tank_1.level
Całkowita pojemność zbiornika
tank_1.capacity
Tworzenie magazynu
store_1 = simpy.Store(
env, capacity=2)
Podobne do simpy.Container(), ale umożliwia przechowywanie różnych obiektów
W przeciwieństwie do abstrakcyjnej „ilości" w kontenerach
yield store_1.put("item_1")
yield store_1.get()
Lista dostępnych elementów
store_1.items
Pojemność magazynu
store_1.capacity
Przykład
Obecna sytuacja: 1 kasjer
simpy.Resource(env, capacity=1)...
time: 23.7 min | Customer 30 > Finished
Symulowane scenariusze: n kasjerów
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
Symulacja zdarzeń dyskretnych w Pythonie