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

Керування чергами на оплату

Магазин одягу дуже завантажений у години пік, коли покупці часто стають у чергу до каси. Зараз працює лише один касир, і вас попросили виконати аналіз витрати–вигоди, щоб визначити, скільки касирів треба, аби максимально скоротити час очікування та підвищити прибутковість.

Ви вирішили побудувати дискретно-подієву модель. Вам відомо, що:

  • У середньому кожні 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()
Редагувати та запускати код