管理收银队列
一家服装店在高峰时段非常繁忙,顾客常常排队结账。当前只有 1 位收银员。您被要求做一份成本效益分析,确定需要配备多少位收银员,才能尽可能缩短等待时间并提升盈利能力。
您决定构建一个离散事件模型。已知:
- 在高峰时段,平均每 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()