Модель ресторану: керування столиками та часом очікування
Уявіть, що ви хочете відкрити ресторан у популярному районі Сан-Франциско. Визначити кількість столиків і потужність кухні надзвичайно важливо, щоб обслужити якомога більше клієнтів і водночас мінімізувати початкові інвестиції та операційні витрати. Дискретно-подієва модель може допомогти з інвестиційним рішенням, змоделювавши рівень зайнятості столиків, час очікування клієнтів і кількість відвідувачів, які залишають чергу через надмірний час очікування.
Спочатку визначимо генератор, який моделює запити на столики та рішення клієнтів чекати або піти залежно від часу очікування. У наступній вправі ви налаштуєте модель, запустите її та проаналізуєте результати. Час у моделі вимірюється в хвилинах.
Ця вправа є частиною курсу
Дискретно-подієве моделювання в 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