SimPy पैकेज: इवेंट शेड्यूलिंग मैनेज करना

Python में Discrete Event Simulation

Dr Diogo Costa

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

इवेंट ऑकरेंस मैनेज करना

  • वास्तविक समस्याओं में इवेंट कई स्थितियों से प्रभावित होते हैं.

  • आम स्थितियाँ शामिल हैं:

    • सशर्त इवेंट
    • इवेंट का रुकना
    • प्रोसेस का इंतज़ार

इन स्थितियों को SimPy डिस्क्रीट-इवेंट मॉडल में बदला जा सकता है.

Python में Discrete Event Simulation

सशर्त इवेंट

  • कुछ इवेंट अन्य इवेंट पर निर्भर होते हैं
  • वे तभी ट्रिगर होते हैं जब शर्त पूरी हो

उदाहरण

  • ग्राहक कपड़ों की दुकान पर आते हैं

    def customer_arrivals(env, shop)
    
  • खास आइटम ढूँढते हैं

    env.timeout(search_time)
    
  • केवल उपलब्ध होने पर खरीदते हैं
if shop.available[item]:

जेनरेटर: सारा कोड साथ लाना

def customer_arrivals(env, shop):

while True: yield env.timeout(search_time)
# Only buy item if available if shop.available[item]: env.process(shop_buyer(env, item, num_items, shop))
Python में Discrete Event Simulation

इवेंट का रुकना

कुछ इवेंट रुक सकते हैं, कारण:

  • उच्च प्राथमिकता वाले इवेंट होना
  • स्वैच्छिक रुकावट (जैसे, कार चार्जिंग)
  • अनिवार्य रुकावट (जैसे, मशीन टूटना)

मेथड

simpy_process_1.interrupt()

उदाहरण

मशीन समय-समय पर टूटती है और प्रोडक्शन लाइन बाधित होती है.

def break_machine(env):

# Break machine every now and then. while True: # Time between machine fails yield env.timeout(fail_time())
# Machine fail: interrupt process simpy_process_1.interrupt()
Python में Discrete Event Simulation

प्रोसेस का इंतज़ार

  • कुछ प्रोसेस को दूसरों के पूरा होने का इंतज़ार करना पड़ता है
  • अक्सर ऐसा सीमित रिसोर्सेज के कारण होता है
  • उदाहरण: साझा रिसोर्स, capacity=5:
    simpy.Resource(env, capacity=5)
    
  • इसलिए, सभी रिसोर्स उपयोग में हों तो प्रोसेस को इंतज़ार करना पड़ता है

उदाहरण: गैस स्टेशन में पेट्रोल का भंडार नियमित रूप से रीप्लेनिश करना पड़ता है

with gas_station.request() as request:

# Request one of the gas pumps yield request
# Once pump is available: pump fuel liters_request = 10 yield fuel_reserve.get(liters_request) # The "actual" refueling takes time refuel_duration = liters_request / refuel_speed
yield env.timeout(refuel_duration)
Python में Discrete Event Simulation

बिटवाइज़ ऑपरेटर्स से इवेंट जोड़ना

बिटवाइज़ ऑपरेटर्स

  • इंटेजर्स पर बिटवाइज़ कैलकुलेशन करते हैं
  • दो ऑपरेन्ड अपेक्षित
    • उदाहरण: a & b, a >> b, a ^ b

SimPy में

  • कंडीशन इवेंट जनरेट करता है
  • 2 इवेंट के बीच

SimPy के लिए प्रासंगिक बिटवाइज़ ऑपरेटर्स

  • दोनों प्रोसेस का इंतज़ार: __and__() या &
  • किसी एक प्रोसेस का इंतज़ार: __or__() या |
Python में Discrete Event Simulation

बिटवाइज़ ऑपरेटर्स से इवेंट जोड़ना

उदाहरण: मूवीगोअर टिकट लाइन में तब तक इंतज़ार करता है जब तक उसकी बारी न आ जाए या मूवी सेल आउट न हो जाए

with counter.request() as my_turn:

# Wait until turn or movie is sold out result = yield my_turn | counter.sold_out[movie]
# If tickets available if my_turn in result: theater.num_moviegoers[movie] += 1 return
# If tickets sold out if my_turn not in result: theater.num_renegers[movie] += 1 return
Python में Discrete Event Simulation

अभ्यास करते हैं!

Python में Discrete Event Simulation

Preparing Video For Download...