SimPy paketi: Kaynak türleri

Python ile Ayrık Olay Benzetimi

Dr Diogo Costa

Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

Kullanılabilir kaynak türleri

  • SimPy üç tür kaynak sağlar:

  • resource

  • container
  • store
Python ile Ayrık Olay Benzetimi

Kullanılabilir kaynak türleri

simpy.Resource()

  • Süreçler arasında kaynak paylaş
  • Örnek: restorandaki masalar

simpy.Container()

  • Süreçler arasında homojen madde paylaşımı için kaynak
  • Miktarlar ayrık (örn. elma) veya sürekli (örn. su) olabilir
  • Örnek: su rezervuarı

simpy.Store()

  • Sınırsız sayıda nesne saklayabilir
  • Örnek: süpermarket
Python ile Ayrık Olay Benzetimi

Yöntem: simpy.Resource()

Kaynak oluşturma

resource_1 = simpy.Resource(env, capacity=8)
  • Sınırlı kaynak kapasitesi olduğunda kullanılır (örn. capacity=8)
  • Bir kaynağa eşzamanlı erişen süreç sayısını sınırlamak için kullanılır
  • Süreç, kaynağı kullanmak için istek göndermelidir
    • Tüm kaynaklar kullanılıyorsa, istekler kuyruğa alınır
  • Süreç kaynağı serbest bıraktığında, bekleyen istekler tetiklenir

Kaynak isteme

# Kaynak isteğini aç
with resource_1.request() as request:

# Kaynak isteği gönder yield request
# Kaynak hazır olduğunda yield env.timeout(event_duration)
Python ile Ayrık Olay Benzetimi

Kaynaklar: öncelik ve kesme

  • Önceki kaynağın bir varyasyonu

    resource_1 = simpy.PreemptiveResource(
    env, capacity=1)
    
  • Bazı süreçlerin önceliği daha yüksektir

  • Örnek: teknisyen

    • Öncelik 1: arızalı makineleri onarma
    • Öncelik 2 veya altı: makine bakımı
  • Kullanımı simpy.Resource()'a benzer DNT_CURLY_TAG_7

  • En yüksek öncelikle kaynak isteme

    with resource_1.request(priority=1) as 
    request:
    
    yield request
    yield env.timeout(process_duration)
    
  • Daha düşük öncelikle kaynak isteme

    with resource_1.request(priority=2) as 
    request:
    
    yield request
    yield env.timeout(process_duration)
    
Python ile Ayrık Olay Benzetimi

Yöntem: simpy.Container()

  • Homojen, ayırt edilemeyen yığın üretim/tüketimini modellemek için kullanışlı

  • Sürekli (su gibi) veya ayrık (elma gibi) olabilir

Örnek: Bir benzin istasyonundaki yakıt rezervi.

  • Arabalar rezervi azaltır, tankerler artırır
  • Bir kap oluşturma
    tank_1 = simpy.Container(
    env, tank_size, init=tank_size)
    
  • Depoya/tanka ekleme ve çıkarma

    yield tank_1.put(add_quantity)
    yield tank_1.get(remove_quantity)
    
  • Tanktaki mevcut miktarı al

    tank_1.level
    
  • Toplam tank kapasitesini al

    tank_1.capacity
    
Python ile Ayrık Olay Benzetimi

Yöntem: simpy.Store()

  • Bir depo oluştur

    store_1 = simpy.Store(
    env, capacity=2)
    
  • simpy.Container()'a benzer ama farklı nesneleri saklar

  • Kaplardaki soyut "miktar" kavramının aksine

  • Depoya ekleme ve çıkarma
yield store_1.put("item_1")
yield store_1.get()
  • Mevcut öğe listesini al

    store_1.items
    
  • Depo kapasitesini al

    store_1.capacity
    
Python ile Ayrık Olay Benzetimi

SimPy kaynakları iş kararlarını nasıl bilgilendirir?

Örnek

  • 1 kasiyerli süpermarket
  • Sahip daha fazla kasiyere yatırım yapmaya değer mi bilmek istiyor
  • Daha fazla kasiyer bekleme süresini azaltır mı?

Mevcut durum: 1 kasiyer

  • simpy.Resource(env, capacity=1)
...
zaman: 23.7 dk | Müşteri 30 > Bitti

Simüle edilen senaryolar: n kasiyer

  • simpy.Resource(env, capacity=2)
...
zaman: 13.2 dk | Müşteri 30 > Bitti
  • simpy.Resource(env, capacity=3)
...
zaman: 8.6 dk | Müşteri 30 > Bitti
  • simpy.Resource(env, capacity=4)
...
zaman: 8.6 dk | Müşteri 30 > Bitti
Python ile Ayrık Olay Benzetimi

Hadi pratik yapalım!

Python ile Ayrık Olay Benzetimi

Preparing Video For Download...