रेस्टोरेंट मॉडल: टेबल प्रबंधन और वेटिंग टाइम
मान लीजिए आप San Francisco के एक लोकप्रिय इलाके में रेस्टोरेंट खोलना चाहते हैं. अधिकतम ग्राहकों को सर्व करने के साथ शुरुआती निवेश और चलने वाली लागत कम रखने के लिए, टेबलों की संख्या और किचन क्षमता तय करना बेहद महत्वपूर्ण है. एक डिस्क्रीट-इवेंट मॉडल इस निवेश-सम्बंधी फैसले में मदद कर सकता है, क्योंकि यह टेबल ऑक्यूपेंसी, ग्राहक के वेटिंग टाइम, और ज़्यादा इंतज़ार के कारण कतार छोड़ने वाले ग्राहकों की संख्या का सिमुलेशन करता है.
पहले उस जेनरेटर को परिभाषित करते हैं जो टेबल रिक्वेस्ट्स और वेटिंग टाइम के आधार पर ग्राहकों के रुकने या चले जाने के फैसले को सिम्युलेट करता है. अगले अभ्यास में, आप मॉडल सेट अप करेंगे, इसे चलाएँगे और परिणामों का विश्लेषण करेंगे. मॉडल में समय मिनटों में है.
यह अभ्यास पाठ्यक्रम का हिस्सा है
Python में Discrete Event Simulation
अभ्यास निर्देश
- जब कोई ग्राहक रेस्टोरेंट में पहुँचे, तो एक टेबल रिक्वेस्ट
reqके रूप में खोलें. - bitwise-or ऑपरेटर का उपयोग करें ताकि तब तक इंतज़ार हो जब तक कोई टेबल खाली न हो जाए (
req) या ग्राहक का सब्र खत्म न हो जाए (env.timeout(patience)). - वह समय yield करें जितनी देर ग्राहक टेबल पर बैठा रहता है, जो वैरिएबल
time_at_tablesसे दिया गया है.
इंटरैक्टिव व्यावहारिक अभ्यास
इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।
def customer(env, name, tables):
global customers_served, customers_quiting_waiting
arrive = env.now
# Request a table
with tables.request() as ____:
patience = random.uniform(MIN_PATIENCE, MAX_PATIENCE)
# Wait until a table is free or the customer runs out of patience
results = yield ____ | ____
wait = env.now - arrive
if req in results:
print(f"{env.now:7.4f} {name} > Waited {wait:6.3f} minutes for a table!")
time_at_tables = random.uniform(MIN_SEATING_TIME, MAX_SEATING_TIME)
# Yield the time the table is occupied by the customer
____ env.timeout(time_at_tables)
print(f"{env.now:7.4f} {name} > Finished meal :)")
costumers_served += 1
else:
print(f"{env.now:7.4f} {name} > Gave up waiting and left after waiting {wait:7.4f} minutes :(")
customers_quiting_waiting += 1