问题标签 [cp-sat-solver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
55 浏览

python - OR-Tools 员工排班:最大化连续轮班

我一直在研究 OR-Tools Employee Scheduling 示例,并希望对其进行更改,以便该模型允许每天将员工分配到多个班次,同时优先考虑为员工分配连续班次的解决方案给定一天的跨度。允许多个班次似乎很简单,但我如何定义一个更喜欢连续班次的目标函数?我不希望连续性成为解决方案的硬约束。

0 投票
0 回答
108 浏览

python - Or-tools CP-SAT 求解器:如何确保强制三班休息?

我对这个话题相当陌生,但我已经开始使用这个例子来实现一个轮班调度程序:https ://developers.google.com/optimization/scheduling/employee_scheduling

现在我想添加以下约束:在五班之后,需要强制中断 3 个连续班次,然后才能再次安排一个人

我们已经实现了如下图,逻辑是如果在过去的 6 个班次中有连续 3 个班次的员工不在某个岗位(无论角色)我想强制执行当前的敬业度不能配备人员。需要注意的是,休息 2 次不算作休息,但就像员工工作过一样。

例如,如果过去的班次看起来像这样010011 ,则该员工需要休息一下(0 不工作,1 工作)。

我设置模型如下:

接下来我实施了约束,即在五班之后,当前工作站和员工至少需要休息 3 班

乘法与此类似:https ://github.com/google/or-tools/blob/stable/ortools/sat/doc/boolean_logic.md#python-code-3

如果所有布尔值(b_7_5b_6_4b_5_3b_4_2b_3_1)为真(意味着冷却没有在任何时间窗口发生),我预计最终会强制执行约束,这显然目前没有发生。

任何建议将不胜感激!