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

Or-Tools排班开发:如何在护士排班场景中添加员工技能匹配约束

你需要的技能约束可以按以下方式实现,直接替换你代码中// define shifts skills requirements的占位部分即可:

// define shifts skills requirements
const int SKILL_A = 0;
const int SKILL_B = 1;

for (int d : all_days) {
    for (int s : all_shifts) {
        LinearExpr a_skill_count;
        LinearExpr b_skill_count;
        
        for (int n : all_workers) {
            auto key = std::make_tuple(n, d, s);
            // 持有对应技能的员工,当班状态计入对应统计项
            if (skills[n][SKILL_A] == 1) {
                a_skill_count += shifts[key];
            }
            if (skills[n][SKILL_B] == 1) {
                b_skill_count += shifts[key];
            }
        }
        
        // 要求每个班次两类技能的当班人数均不低于1
        cp_model.AddGreaterOrEqual(a_skill_count, 1);
        cp_model.AddGreaterOrEqual(b_skill_count, 1);
    }
}

补充说明:

  • 该实现完全复用你现有的skills数组定义,不需要修改之前的变量结构
  • 当员工同时具备A、B两类技能时,他的当班状态会同时被计入两类技能的人数统计,天然支持你要求的「同一员工可同时满足两项技能要求」的规则
  • 约束逻辑和你已实现的班次人数上下限逻辑层级一致,不会和你后续添加的工时、员工排班诉求等其他约束产生冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:45:03