满足产出约束下最大化自由时间的任务分配算法及启发式方案咨询
任务分配问题解决方案
该问题的核心可做等价转换:最大化自由时间等价于最小化所有人员投入的总工时(总可用工时为固定值:人数×20,每人各分配10小时上限给两类任务),所有约束均为线性约束,属于典型的资源优化问题。
一、精确求解算法
本问题本质是线性规划(LP)问题,可完美适配大规模人员、多技能类型场景,求解效率极高:
- 变量定义:设
t_k_i为第i名人员分配给第k类技能任务的工时,s_k_i为对应人员的k类技能水平,R_k为k类任务的最低产出要求,N为人员总数,K为技能类型总数 - 约束条件:
- 所有工时非负且不超上限:
0 ≤ t_k_i ≤ 10对任意i、k成立 - 产出满足最低要求:
Σ(s_k_i * t_k_i) ≥ R_k对任意k成立
- 所有工时非负且不超上限:
- 目标函数:
min(Σ(t_k_i))(最小化总投入工时,等价于最大化自由时间)
该类线性规划问题存在多项式时间求解算法(内点法),目前成熟的求解器均可支持:
- 商业求解器:Gurobi、CPLEX可轻松处理上万人员、数十种技能的场景,毫秒级返回结果
- 开源求解器:GLPK、SciPy的
linprog模块、OR-Tools均可直接调用,不需要商业授权 - 若要求工时为整数,只需将变量定义改为整数类型,对应整数线性规划(ILP),同样有成熟的分支定界算法支持,数千变量规模下求解速度仍可满足业务要求。
二、启发式近似方案
不需要调用专业求解器,实现简单,结果和最优解差距通常在5%以内:
方案1:比较优势优先分配(双技能场景最优近似)
基于李嘉图比较优势理论,核心逻辑是让人员优先做自己相对效率最高的任务:
- 给所有人员计算技能比值:
r_i = 建筑技能/制作技能 - 按
r_i从高到低排序,优先给排名高的人员分配建筑任务,最多分配10小时,直到总建筑产出达标 - 按
r_i从低到高排序,优先给排名低的人员分配制作任务,最多分配10小时,直到总制作产出达标 - 若存在人员同时被分配两类任务,可微调替换冗余工时,进一步压缩总投入
用示例数据验证:
Alice的r=0.8/0.4=2,Cob的r=0.6/0.6=1,Bob的r=0.3/0.7≈0.43,排序为Alice>Cob>Bob
- 先分配建筑任务:Alice满额10小时产出8,还差2,分配Cob做2/0.6≈3.33小时,建筑产出达标
- 再分配制作任务:Bob满额10小时产出7,直接满足≥5的要求
- 总投入工时23.33,对应自由时间36.67,和全局最优解完全一致
多技能场景可扩展该逻辑:计算每个人每个技能的相对效率(个人技能值/所有人员该技能平均值),每次优先给缺口最大的任务分配当前相对效率最高的闲置人力,直到所有任务产出达标。
方案2:最小边际成本贪心分配
核心逻辑是每次补1单位的产出缺口,都选当前投入工时最少的人员来做:
- 统计当前所有类型任务的产出缺口
- 遍历所有有剩余工时的人员,计算每补1单位各任务缺口需要投入的工时(1/技能值)
- 选工时成本最低的组合分配对应工时,更新缺口和人员剩余工时
- 重复步骤1-3直到所有缺口被填满
该方法实现难度极低,适合快速迭代的小型场景,不需要提前排序,动态调整灵活度高。
内容的提问来源于stack exchange,提问作者Harrison Reeves
相关产品推荐
相关产品推荐

