НачатьНачать бесплатно

Управление очередями на кассе

В часы пик магазин одежды становится очень загруженным: покупатели выстраиваются в очередь на оплату. Сейчас в магазине работает только одна касса, и вам поручено провести анализ затрат и выгод, чтобы определить, сколько касс потребуется для максимального сокращения времени ожидания и повышения прибыльности.

Вы решили построить дискретно-событийную модель. Известно следующее:

  • В среднем каждые 15 секунд в часы пик к очереди присоединяется новый покупатель;
  • Покупатели, как правило, приносят несколько товаров — обычно от 1 до 20;
  • В среднем сканирование одного товара на кассе занимает 3 секунды, а оплата — ещё 20 секунд.

Аргумент counter хранит ресурс SimPy, а аргумент customer_num отслеживает количество покупателей.

Запустите модель и определите, сколько времени потребуется для обслуживания 30 покупателей при разном числе касс.

Это упражнение является частью курса

Дискретно-событийное моделирование на Python

Посмотреть курс

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

def customer(env, customer_num, counter):

    num_items = random.randint(1, 20)
    print(f"Time: {env.now:7.4f} sec | Customer {customer_num:02d} > Joining the queue with {num_items:02d} items!")

    # Open the resource counter request
    with counter.____() as request:

        yield request
        print(f"Time: {env.now:7.4f} sec | Customer {customer_num:02d} > Got to cashier!")
        time_counter = TIME_PAY + random.randint(1, 20) * TIME_SCAN_PER_ITEM

        # Yield the processing time
        yield env.____(time_counter)
        print(f"Time: {env.now:7.4f} sec | Customer {customer_num:02d} > Finished ")

env = simpy.Environment()

# Create resource
counter = simpy.Resource(env, capacity=____)
env.process(source(env, NEW_CUSTOMERS, INTERVAL_CUSTOMERS, counter))
env.run()
Редактировать и запускать код