Restoran modeli: Masaları ve bekleme sürelerini yönetme
San Francisco’nun popüler bir bölgesinde restoran açmak istediğini hayal et. Müşterilere en yüksek düzeyde hizmet verirken ilk yatırım ve işletme maliyetlerini en aza indirmek için masa sayısı ve mutfak kapasitesine karar vermek kritik öneme sahiptir. Ayrık olay simülasyonu, masa doluluk düzeyini, müşteri bekleme sürelerini ve aşırı bekleme nedeniyle kuyruktan ayrılan müşteri sayısını simüle ederek bu yatırım kararında yardımcı olabilir.
Önce, masa taleplerini ve müşterilerin bekleme süresine göre bekleme ya da ayrılma kararlarını simüle eden üreticiyi (generator) tanımlayalım. Sonraki egzersizde modeli kuracak, çalıştıracak ve sonuçları analiz edeceksin. Modelde zaman birimi dakikadır.
Bu egzersiz
Python ile Ayrık Olay Benzetimi
kursunun bir parçasıdırEgzersiz talimatları
- Bir müşteri restorana geldiğinde bir masa talebini
reqolarak aç. - Bir bitwise-or operatörü kullanarak ya bir masa boşalana kadar (
req) ya da müşterinin sabrı tükenene kadar (env.timeout(patience)) bekle. - Müşterinin masayı işgal ettiği süreyi teslim et (yield); bu süre
time_at_tablesdeğişkeni ile verilir.
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
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