Or-Tools CpSolver 获取最小和最大总和或绝对值

Or-Tools CpSolver Get Minimum and Maximum Sum or absolute

我是混合整数编程的新手。我之前使用过 gurobi 工具来构建这个模型。但由于成本问题,我想切换到 or-tools,但我无法执行相同的逻辑。

我要解决的问题是最小化变量之和的差异。

换句话说,我有雇员,我想按时间表平均分配他们,让他们的分配对每个人都公平。

所以我按照以下步骤构建了我的模型:

1- 为每个员工每天每个班次创建 IntVar。 2- 我添加了一个限制,即每个员工每天应该轮班

现在我想让我的模型解决每个员工参加的拉屎次数的总和,并尽量减少员工参加的最小班次和最大班次之间的差异。

这可以通过多种方式实现

1-获取linearExpr的最小值和最大值(员工的总和)并将差值最小化 2- 或 , 班次平均值与每个员工参加的每个班次数之差的绝对总和。

不幸的是,我无法为此找到最大、最小或绝对实现。

如果你们有什么建议我可以做到这一点,请解释一下。

谢谢

您正在寻找的功能是:

但在这个官方示例中,他们将 delta 最小化为平均值:

https://github.com/google/or-tools/blob/master/examples/python/reallocate_sat.py

这是一个简化版本:

from ortools.sat.python import cp_model

model = cp_model.CpModel()

total = 35
n = 5
avg = total // n

ints = [model.NewIntVar(0, 10, str(i)) for i in range(n)]
delta = model.NewIntVar(0, total, "delta")

for i in ints:
    model.Add(i >= avg - delta)
    model.Add(i <= avg + delta)

model.Minimize(delta)

solver = cp_model.CpSolver()
solver.Solve(model)

print([solver.Value(i) for i in ints])