Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

Python में SimPy का उपयोग करके डिस्क्रीट इवेंट सिमुलेशन की मूल बातें


Python में SimPy का उपयोग करके डिस्क्रीट इवेंट सिमुलेशन की मूल बातें

SimPy ("Blimpie" के साथ तुकबंदी) प्रक्रिया-उन्मुख डिस्क्रीट-इवेंट सिमुलेशन के लिए एक Python पैकेज है।

इंस्टॉलेशन

SimPy इंस्टॉल करने का सबसे आसान तरीका pip के माध्यम से है:

pip install simpy

और आपको ऐसा आउटपुट मिल सकता है,

Python में SimPy का उपयोग करके डिस्क्रीट इवेंट सिमुलेशन की मूल बातें

लेखन के समय, simpy-3.0.11 SimPy का सबसे हालिया संस्करण है, और हम नीचे दिए गए सभी उदाहरणों के लिए इसका उपयोग करेंगे।

यदि SimPy पहले से इंस्टॉल है, तो pip के लिए -U विकल्प का उपयोग करके अपग्रेड करें।

pip install --U simpy

नोट: आपको Python 2.7 या उच्चतर संस्करण की आवश्यकता है और Linux/Unix/MacOS के लिए आपको SimPy इंस्टॉल करने के लिए रूट विशेषाधिकारों की आवश्यकता हो सकती है।

जांचने के लिए कि SimPy सफलतापूर्वक इंस्टॉल हुआ है या नहीं, एक Python शेल खोलें और simpy आयात करें।

मूल अवधारणाएं

SimPy, जो एक डिस्क्रीट-इवेंट सिमुलेशन लाइब्रेरी है। SimPy के सक्रिय घटक (जैसे संदेश, वाहन या ग्राहक) प्रक्रियाओं के साथ मॉडल किए जाते हैं। SimPy में, सक्रिय संस्थाओं को प्रक्रियाओं के रूप में जाना जाता है। एक प्रक्रिया एक Python जेनरेटर है जो डिस्क्रीट इवेंट देता है। कृपया ध्यान दें, मैं कुछ भी वापस नहीं कर रहा हूं लेकिन मैं yield कर रहा हूं, यही एक सामान्य फ़ंक्शन और एक जेनरेटर के बीच का अंतर है। यह हमें इवेंट बनाने और उन्हें ट्रिगर होने की प्रतीक्षा करने के लिए yield करने की अनुमति देता है।

जब एक प्रक्रिया एक इवेंट देती है, तो प्रक्रिया निलंबित हो जाती है। SimPy हमें निलंबित प्रक्रिया को फिर से शुरू करने की अनुमति देता है जब भी इवेंट ट्रिगर होता है। यदि कई प्रक्रियाएं एक ही इवेंट की प्रतीक्षा करती हैं, तो SimPy उन्हें उसी क्रम में फिर से शुरू करता है जिसमें उन्होंने उस इवेंट को yield किया था।

def gen(x):
    y = yield x+1
    return y
>>> g = gen(1)
>>> next(g)
2
>>> next(g)
Traceback (most recent call last):
  File "", line 1, in 
    next(g)
StopIteration

उपरोक्त पुनरावृत्ति वेरिएबल x के पहले yield के बाद रुक जाती है।

Timeout प्रकार के इवेंट एक निश्चित मात्रा में (सिम्युलेटेड) समय बीत जाने के बाद ट्रिगर होते हैं। Timeout इवेंट एक प्रक्रिया को एक निश्चित समय के लिए रोकने या सोने की अनुमति देता है। Timeout सहित सभी इवेंट, Environment के उपयुक्त मेथड को कॉल करके बनाए जा सकते हैं जिसमें प्रक्रिया रहती है।

# महत्वपूर्ण लाइब्रेरी आयात करें
from random import randint
import simpy

# कॉन्फ़िगरेशन
TALKS_PER_SESSION = 3
TALK_LENGTH = 30
BREAK_LENGTH = 15
ATTENDEES = 1

def attendee(env, name, knowledge=0, hunger=0):
    talks = 0
    breaks = 0
    
    # सत्र दोहराएं
    while True:
        # वार्ता में भाग लें
        for i in range(TALKS_PER_SESSION):
            print('Talk {0} begins at {1}'.format(talks+1, env.now))
            knowledge += randint(0, 3) / (1 + hunger)
            hunger += randint(1, 4)
            talks += 1
            yield env.timeout(TALK_LENGTH)
            print(f'Talk {talks} ends at {env.now}')
        
        print('Attendee %s finished talks with knowledge %.2f and hunger %.2f' % (name, knowledge, hunger))
        
        # ब्रेक लें, बुफे पर जाएं
        food = randint(3, 12)
        hunger -= min(food, hunger)
        yield env.timeout(BREAK_LENGTH)
        print('Attendee %s finished eating with hunger %.2f' % (name, hunger))

# सिमुलेशन चलाएं
env = simpy.Environment()
for i in range(ATTENDEES):
    env.process(attendee(env, i))
env.run(until=250)

यदि हम उपरोक्त प्रोग्राम चलाते हैं, तो हमें ऐसा आउटपुट दिखाई देगा,

Python में SimPy का उपयोग करके डिस्क्रीट इवेंट सिमुलेशन की मूल बातें

ऊपर हम कॉन्फ्रेंस हॉल परिदृश्य को दोहराने का प्रयास करते हैं, जहां प्रति सत्र 4 वार्ता के साथ यादृच्छिक संख्या में स्पीकर हैं जिनकी वार्ता लंबाई 40 मिनट और ब्रेक लंबाई 30 मिनट है।

हमारी अटेंडी प्रक्रिया को नए इवेंट बनाने के लिए Environment (env), नाम, ज्ञान और भूख के संदर्भ की आवश्यकता होती है। सत्र अनंत लूप में तब तक चलेंगे जब तक यह False नहीं हो जाता। attendee() फ़ंक्शन एक जेनरेटर है जो समाप्त नहीं होगा लेकिन yield स्टेटमेंट पहुंचने पर नियंत्रण प्रवाह को सिमुलेशन पर वापस कर देगा।

अंत में, हम 250 के एक निर्धारित मान तक एक डेमो सिमुलेशन 'कॉन्फ्रेंस अटेंडी' चलाते हैं (इसमें शामिल हैं - 3 वार्ता, 1 ब्रेक, 3 वार्ता, 1 ब्रेक, 1 वार्ता)।


  1. पायथन का उपयोग करके स्टॉपवॉच बनाएं पायथन का उपयोग करके स्टॉपवॉच बनाएं

    स्टॉपवॉच का उपयोग दो घटनाओं के बीच के समय अंतराल को मापने के लिए किया जाता है, आमतौर पर सेकंड से मिनट तक। इसके विभिन्न उपयोग हैं जैसे खेल में या औद्योगिक सेटअप में गर्मी, करंट आदि के प्रवाह को मापना। पायथन का उपयोग इसकी ट्किंटर लाइब्रेरी का उपयोग करके स्टॉपवॉच बनाने के लिए किया जा सकता है। इस लाइब्र

  1. पायथन का उपयोग करके व्हाट्सएप ऑटोमेशन पायथन का उपयोग करके व्हाट्सएप ऑटोमेशन

    इस खंड में हम एक व्हाट्सएप चैटबॉट बनाने जा रहे हैं, लेकिन ट्विटर या फेसबुक के कुछ अन्य चैटबॉट्स के विपरीत, व्हाट्सएप चैटबॉट्स व्हाट्सएप की नीतियों के कारण सीधे प्लेटफॉर्म पर नहीं चलते।लेकिन इसे पूरा करने का एक तरीका है, सेलेनियम का उपयोग करके, पायथन में एक बहुत स्मार्ट पैकेज जिसके साथ डेवलपर्स ब्राउ

  1. पायथन में CX_Freeze का उपयोग पायथन में CX_Freeze का उपयोग

    कभी-कभी हम कुछ अलग बनाना चाहते हैं जो बहुत रोमांचक हो, और मानव स्वभाव के अनुसार, हम हमेशा इसे साझा करना पसंद करते हैं। पायथन भी उन इच्छाओं को पूरा करता है। पायथन का उपयोग करके, अगर हम अपने पायथन प्रोग्राम को अपने दोस्तों के साथ साझा करना चाहते हैं तो हम ऐसा कर सकते हैं, बस उनके मशीन पर वही पायथन सं