如何用Python实现带A类优先级的客户服务开始时间计算程序
实现带A类优先级的客户服务开始时间计算
要实现A类客户优先的服务逻辑,不能再单纯按原始列表顺序循环计算,需要通过双队列机制管理等待客户,优先处理A类,具体思路和代码如下:
核心逻辑
- 将所有客户信息整合为包含ID、类型、到达时间的元组,方便统一处理
- 维护两个队列:
- 优先队列:存放已到达但未服务的A类客户
- 普通队列:存放已到达但未服务的B类客户
- 按时间线推进流程:
- 先将当前时间及之前到达的客户分类加入对应队列
- 优先处理优先队列的A类客户(内部按到达时间FCFS)
- 无A类客户时,再处理普通队列的B类客户(内部按到达时间FCFS)
- 无等待客户时,直接跳到下一个客户的到达时间
- 最后按客户ID排序,得到与原始客户列表顺序对应的开始时间列表
完整代码
# 原始数据 cst = [1, 2, 3, 4, 5] cst_type = ['A', 'B', 'B', 'A', 'B'] arrived_at = [2, 5, 7, 9, 10] service_duration = 3 # 固定服务时长3分钟 # 整合客户信息:(客户ID, 类型, 到达时间) customers = list(zip(cst, cst_type, arrived_at)) current_time = 0 service_begin_records = [] priority_queue = [] # 存储A类客户:(到达时间, 客户ID, 类型) normal_queue = [] # 存储B类客户:(到达时间, 客户ID, 类型) index = 0 total_customers = len(customers) while index < total_customers or priority_queue or normal_queue: # 1. 把当前时间点已到达的客户加入对应队列 while index < total_customers and customers[index][2] <= current_time: c_id, c_type, arr_time = customers[index] if c_type == 'A': priority_queue.append((arr_time, c_id, c_type)) else: normal_queue.append((arr_time, c_id, c_type)) index += 1 # 2. 优先处理A类客户 if priority_queue: # A类内部按到达时间排序,保证FCFS priority_queue.sort() arr_time, c_id, c_type = priority_queue.pop(0) start_time = max(current_time, arr_time) service_begin_records.append((c_id, start_time)) current_time = start_time + service_duration # 3. 无A类时处理B类客户 elif normal_queue: # B类内部按到达时间排序,保证FCFS normal_queue.sort() arr_time, c_id, c_type = normal_queue.pop(0) start_time = max(current_time, arr_time) service_begin_records.append((c_id, start_time)) current_time = start_time + service_duration # 4. 无等待客户时,直接跳转到下一个客户的到达时间 else: current_time = customers[index][2] # 按客户ID排序,得到与原始cst列表对应的开始时间列表 service_begin_records.sort(key=lambda x: x[0]) service_begin = [t for _, t in service_begin_records] print("客户开始服务时间列表:", service_begin)
运行结果
对于给定的输入,运行后输出:
客户开始服务时间列表: [2, 5, 8, 11, 14]
优先级效果验证
如果修改客户4的到达时间为6(即arrived_at = [2,5,7,6,10]),此时客户4(A类)在服务人员处理客户2(5-8点)期间到达,会插队到客户3(B类)前面,最终输出的开始时间列表为:
客户开始服务时间列表: [2, 5, 11, 8, 14]
可以看到客户4的开始时间早于客户3,符合A类优先的规则。
内容的提问来源于stack exchange,提问作者Simranpreet Gulati
相关产品推荐
相关产品推荐

