ПочатиПочніть безкоштовно

Модель ресторану: керування столиками та часом очікування

Уявіть, що ви хочете відкрити ресторан у популярному районі Сан-Франциско. Визначити кількість столиків і потужність кухні надзвичайно важливо, щоб обслужити якомога більше клієнтів і водночас мінімізувати початкові інвестиції та операційні витрати. Дискретно-подієва модель може допомогти з інвестиційним рішенням, змоделювавши рівень зайнятості столиків, час очікування клієнтів і кількість відвідувачів, які залишають чергу через надмірний час очікування.

Спочатку визначимо генератор, який моделює запити на столики та рішення клієнтів чекати або піти залежно від часу очікування. У наступній вправі ви налаштуєте модель, запустите її та проаналізуєте результати. Час у моделі вимірюється в хвилинах.

Ця вправа є частиною курсу

Дискретно-подієве моделювання в Python

Переглянути курс

Інструкції до вправи

  • Відкрийте запит на столик як req, коли клієнт прибуває до ресторану.
  • Використайте оператор побітового OR, щоб чекати, доки звільниться столик (req) або доки в клієнта не скінчиться терпіння (env.timeout(patience)).
  • Поверніть тривалість зайнятості столика клієнтом, яку задає змінна 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
Редагувати та запускати код