0

我是 Choco Solver 的初学者。我想做一个简单的班次调度程序。我已经设置了这样的整数变量

IntVar day1 = model.intVar("day1", new int[] {0,1,2,3,4,5});  

其中 0 , 1,...5 是员工的参考 ID。

我总共有 30 个变量(每个月的每一天都有一个),因为这是基于每月的轮班时间表。我已经设置了限制,例如不允许连续两天不值班。

我的问题是,我如何设置一个约束,使每个雇主至少有 5 个班次,即。域中的每个值在所有 30 个变量中至少出现 5 次?

谢谢!

4

1 回答 1

1

有几种方法可以做到这一点。看看 model.globalCardinality 和 model.count,这些约束可以计算一组变量使用值的次数。

http://choco-solver.org/apidocs/org/chocosolver/solver/constraints/IConstraintFactory.html

例如,model.count(3, vars, model.intVar(5,10)).post(); 意味着 vars 中的 5 到 10 个变量应该等于 3,因此员工 3 应该轮班 5 到 10 个。

于 2016-08-10T10:05:36.540 回答