【发布时间】:2019-08-13 20:08:06
【问题描述】:
我是约束编程的新手,并试图弄清楚如何做一个“至少 n”的约束。
例如,我的 int 变量 x、y 和 z 都在 0 到 5 的范围内。
现在我想要所有解决方案,其中至少有 2 个变量在 2 到 3 之间。
所以类似于“给定条件的总和 >= 2”
我将如何在 python 中执行此操作,最好使用 Google 的 OR-Tools?
谢谢
【问题讨论】:
-
您可以为此使用 reified 约束:developers.google.com/optimization/cp/channeling
-
谢谢@WillemVanOnsem - 有没有更可扩展的版本?我需要增加它以找到解决方案,其中 6 个变量的组合必须适合 10 个插槽的表。例如,我需要安排 6 名教师轮班 8 小时,每班有 30 分钟的休息时间,并确保在上午 8 点到下午 12 点之间房间里至少有 4 名教师,在下午 12 点到下午 6 点之间房间里至少有 5 名教师。
-
@Christine 我在这里看不到可扩展性问题。使用纯 SAT 求解时的 1000 var / 10000 槽问题会吓到我。但是具有这些数字的(懒惰的)CP-SAT Hybrid(尽管很难预见这种小范围的行为)......好吧......先试试。当然,模型的其余部分同样重要,如果没有更多,那么 CP-SAT 是否应该优于 MIP 方法恕我直言。
-
首先,我根本不会使用整数变量。只是布尔变量。其次,在这类问题上,我的经验是CP-SAT比CBC/SCIP好,比Gurobi/CPLEX差。
标签: python algorithm constraints constraint-programming or-tools