问题标签 [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 回答
315 浏览

python - 随着时间跨度的多个工作中心的员工轮班安排

我是 ORTools 的新手,并尝试使用 ORTools 为涉及多个班次和工作中心的员工调度问题实施算法,

https://notebook.community/google/or-tools/examples/notebook/sat/schedule_requests_sat ,
https://github.com/google/or-tools/blob/master/examples/python/shift_scheduling_sat.py ,

等等......对于给定的工作中心,需要在给定轮班期间对员工的需求(例如:3名员工上班,2名员工上下午班和1名员工上晚班。目标是分配选择员工轮班和工作中心。我在下面为 40 名员工、10 个工作中心和一个月做了类似的事情,但解决方案以一些员工 42 小时和其他 7 小时结束......

每位护士每天最多工作一班。

每位护士每周工作 5 天

站点 l 轮班 s 中第 d 天的护士人数应小于或等于 week_cover_demands[l][d][s]

0 投票
2 回答
357 浏览

optimization - 计算变量和约束 PuLP 和 CP-Sat

有谁知道我如何打印在 Python CP-Sat 和 PuLP 中创建的每个优化问题中创建的变量和约束的数量?

谢谢

0 投票
1 回答
140 浏览

or-tools - CP-Sat 的 OR-Tools 优化

我正在使用 OR-Tools / CP-sat 求解器解决 python 中的优化问题。我正在使用一个需要几个小时才能达到最佳解决方案的文件。有什么方法可以在终端中查看流程的进展情况,例如迄今为止找到的最佳解决方案、经过的时间等......?我知道使用 cplex 求解器我们可以看到这一点。

谢谢

0 投票
1 回答
200 浏览

or-tools - ORTOOLS CP SAT - XOR 和 AND 组合

我还在学习 ORTOOLS CP-SAT,这是一个很棒的工具!我遇到了布尔运算困难。例如,在 Python 中,我有一个表达式数组(我的意思是 BoundedLinearExpression)的数组,其组织方式如下:

我想在每一行上做一个逻辑与...然后对我得到的所有结果做一个异或。我不知道该怎么做。有人知道答案吗?谢谢你的帮助

0 投票
1 回答
73 浏览

or-tools - 约束中可能的整数溢出:线性

亲爱的,我在 python 中使用 CP-SAT。我有两个变量:

以及以下决策变量:

我有两个限制:

如果我删除约束 2) 一切正常,但使用约束 2 我会收到此错误:

我真的不明白为什么。请问你能帮帮我吗?

0 投票
2 回答
665 浏览

python - Google ortools CP-SAT 最大化耗时太长

我正在尝试解决调度问题。作为输入,我有工人的数量和班次的数量。

之后,我放置了所有约束,包括:

  • 每个人都必须围绕相同数量的轮班工作,
  • 每个人都必须度过所有给定的假期,
  • ...ETC。

然后我尝试最大化给定的班次序列。

例如,我可以收到序列:123BBBB。这意味着我必须在他们的日历中为每个工人最大化这个序列的外观。

  • 1 表示工人工作 1 班,
  • 2 代表班次 2,
  • 3 表示第 3 班次,以及
  • B 代表休息。

我计算每个工人全年的时间表(比如说 365 天)。我试图为每个可能的序列制作布尔值:所以对于范围(1,长度(序列)),范围(2,长度(序列)))等的天数。

然后我添加一个约束,即从今天到的变化总和len(sequence)len(sequence)。因此,我也将班次表示为布尔值(shifts[(w, d, s)]),这对于shifts[(0, 3, 0)]第 3 天的工人 1 工作班次 1 来说意味着。

给定序列的约束是 OnlyEnforcedIf 为该序列创建的 bool 为真。然后我尝试最大化为每个序列创建的布尔值的总和。

问题:我尝试运行它,运行 8 小时后我放弃了。它为我找到了大约 62 个序列,但是花了很长时间才停下来或找到另一个。我的问题是:如何更有效地做到这一点?

编码:

0 投票
1 回答
89 浏览

or-tools - IntVar 的域会影响 CP-SAT 求解器的性能吗

亲爱的,即使不需要它们,我通常也会指定大 IntVar:

它会影响求解器的性能还是无关紧要?我的意思是最好将变量的域限制在一个合理的范围内,还是不影响求解器逻辑?

谢谢

0 投票
1 回答
74 浏览

or-tools - CP-SAT 平衡任务分配

亲爱的,
我想知道 CP-SAT 是否有任何内置功能可以让我平衡分配给用户的任务数量。
现在我正在计算方差,并在目标函数中将其最小化,因此有可能使用内置函数计算方差会很棒,但我想知道我是否有其他选择。

谢谢

0 投票
0 回答
75 浏览

conditional-statements - Google or-tools 序列最大化

我试图在一年内最大化 5 名工人的轮班顺序。假设我有 3 个班次(1、2、3)和休息(B)。然后我得到一系列班次作为输入,假设我得到'111222333BBBBBB'。

我需要做的是最大化该序列在我的工人日程安排中的出现次数。我将我的工人时间表定义为 shifts[(w, d, s)] = 1,这意味着工人 w 在第 d 天工作轮班 s。

我试图做的:为工人创建布尔值(w_d),这意味着序列将在第 d 天开始。然后我尝试最大化正布尔值的数量。

问题:这需要很长时间并且即使在 1 天后也不会停止运行,我确实将核心数设置为 8。如果有人对如何执行此操作有更好的想法,请告诉我!

编码:

示例: required_sequence="112233BB" 4 个工人

0 投票
1 回答
59 浏览

python - OR-tools CP-SAT 求解器是否支持“反射”方法,例如 x.Min() 和 x.Max()?

我正在将我的旧(从 2010 年)OR-tools CP 求解器模型移植到 CP-SAT 求解器(在 Python3 中)。这些系统之间有很多差异,但大多数都非常容易移植到 CP-SAT 求解器。

但是,我在 CP-SAT 求解器文档中没有找到的一件事是旧 CP 求解器支持的“反射”方法,例如获取决策变量的下限/上限。例如

然后可以使用变量的这些下限/上限来实现其他约束。(这是一个使用和方法实现cumulative约束的 CP 求解器:http: //hakank.org/or_tools/furniture_moving.pyMinMax

CP-SAT 求解器是否支持这些反射方法?