You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现带A类优先级的客户服务开始时间计算程序

实现带A类优先级的客户服务开始时间计算

要实现A类客户优先的服务逻辑,不能再单纯按原始列表顺序循环计算,需要通过双队列机制管理等待客户,优先处理A类,具体思路和代码如下:

核心逻辑

  1. 将所有客户信息整合为包含ID、类型、到达时间的元组,方便统一处理
  2. 维护两个队列:
    • 优先队列:存放已到达但未服务的A类客户
    • 普通队列:存放已到达但未服务的B类客户
  3. 按时间线推进流程:
    • 先将当前时间及之前到达的客户分类加入对应队列
    • 优先处理优先队列的A类客户(内部按到达时间FCFS)
    • 无A类客户时,再处理普通队列的B类客户(内部按到达时间FCFS)
    • 无等待客户时,直接跳到下一个客户的到达时间
  4. 最后按客户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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 03:01:00