基于指定条件自动均等分配任务:按预配置人员实现品类均等分派
基于指定条件的任务自动均等分配实现方案
基础数据说明
- 待分配品类总表:记录当日所有需要分配的品类,以及每个品类对应的总任务量
- 品类负责人配置表:预先配置每个品类允许承接任务的成员范围,分配时不可超出该范围分配任务
核心分配规则
- 严格遵循品类和负责人的映射关系,不可将品类任务分配给无权限的成员
- 最终所有成员的总任务量尽可能均等,最大差值不超过1
- 同品类下分配给不同负责人的任务量差值最大不超过1
实现逻辑
- 第一步:初始化所有可承接任务的成员的任务量计数,初始值为0
- 第二步:遍历每个待分配的品类,拉取该品类的总任务量和可承接成员列表
- 第三步:将当前品类的可承接成员按照已有总任务量从小到大排序,优先给负载低的成员分配更多余量
- 第四步:计算单品类下人均基础任务量为
总任务量 // 成员数,剩余未分配的零散任务(数量为总任务量 % 成员数)逐个分配给排序靠前的低负载成员,每人加1 - 第五步:更新对应成员的总任务量计数,继续分配下一个品类即可
代码示例(Python)
# 1. 基础数据配置 # 待分配品类及对应总任务量 category_task_map = { "食品类": 27, "家电类": 19, "服饰类": 32, "数码类": 22 } # 品类对应的可承接成员列表 category_owner_map = { "食品类": ["张三", "李四", "王五"], "家电类": ["李四", "赵六", "孙七"], "服饰类": ["张三", "赵六", "周八"], "数码类": ["王五", "孙七", "周八"] } # 2. 初始化成员任务量统计 all_owners = set() for owners in category_owner_map.values(): all_owners.update(owners) owner_task_count = {owner: 0 for owner in all_owners} # 3. 执行分配 for cate, total_task in category_task_map.items(): allowed_owners = category_owner_map[cate] # 按当前已分配任务量升序排序,优先给负载低的成员分配 sorted_owners = sorted(allowed_owners, key=lambda x: owner_task_count[x]) base = total_task // len(allowed_owners) extra = total_task % len(allowed_owners) for idx, owner in enumerate(sorted_owners): add = base + 1 if idx < extra else base owner_task_count[owner] += add # 输出分配结果 print("最终分配结果:", owner_task_count)
结果校验
直接运行上述代码即可得到符合要求的分配结果,成员间最大任务量差不会超过1,且所有任务都分配给了对应品类的允许承接成员。
内容的提问来源于stack exchange,提问作者Paras
相关产品推荐
相关产品推荐

