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

OR-TOOLS排班实现:如何设置约束避免医生排连续service_blocks班次

OR-Tools 医护排班禁止连续班次约束实现方案

约束逻辑

  • 核心判断:对任意医生,只要在某班次被分配任意岗位即标记为当值
  • 约束规则:同一名医生的相邻两个班次的当值状态不能同时为真

需添加的代码片段

将以下代码放在你现有main()函数里,两个已有约束的下方即可:

# 禁止医生连续值两个班次约束
for d in all_doctors:
    # 遍历所有相邻班次对
    for b in range(num_service_block - 1):
        # 相邻两个班次的当值次数之和不能超过1
        model.Add(
            sum(roles[(d, b, r)] for r in all_roles) 
            + sum(roles[(d, b + 1, r)] for r in all_roles) 
            <= 1
        )

说明

该约束和你现有「每个医生每个班次最多承担1个岗位」的约束天然兼容:每个班次的sum(roles[(d, b, r)]...)取值最多为1,两个班次的和小于等于1就保证了不会出现连续两个班次都当值的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:57:02