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

PuLP人员排班优化模型的班次组合约束实现问题

PuLP求解人员排班优化问题的约束实现方案

模型核心约束定义

搭建的排班优化模型共包含两类核心约束:

  • 班次人力需求约束:每个班次配置的员工数不得低于最低要求,示例需求为班次1、2、5各需至少1人,班次3、4各需至少2人。
  • 员工排班规则约束:每名员工的排班可选范围为:不排班、排1个班次、排2个班次。若选择排2个班次,两个班次间必须恰好间隔1个休息班次,合法双班次组合为(1,3)、(2,4)、(3,5);合法单班次为班次1到5中的任意一个。以4名员工Robin、Mathew、George、Elisa的测算场景为例,符合上述规则的可行排班方案可完全覆盖所有班次的人力需求。

第二类约束实现的常见坑点

第一类班次人力需求约束实现难度较低,多数人会在第二类员工排班规则约束上遇到求解不可行的问题:
初期参照通用参考思路编写代码时,通常会构建两个字典聚合决策变量:通过vars_by_shift按班次聚合决策变量,用来匹配人力需求约束;通过vars_by_agent按员工聚合决策变量,用来限制每名员工最多选择1种排班模式。
核心问题出在决策变量重复定义上:如果在两个字典中分别创建、存储决策变量而非复用同一套变量,调用solve()时模型会始终返回不可行解。

可行实现方案

解决该问题的核心是保证全模型决策变量统一定义、不重复创建:
引入coverage_map结构,建立排班模式与对应覆盖班次的映射关系,所有约束均复用同一套决策变量计算:人力需求侧通过映射关系聚合对应班次的排班变量求和校验,员工规则侧直接基于员工维度的排班模式变量做限制,不需要为不同维度的约束单独创建变量。
按该逻辑调整后即可顺利得到符合所有规则要求的可行排班方案,完整实现代码已开源托管。


内容的提问来源于stack exchange,提问作者Robin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 04:18:23