变量分支与约束分支

Variable branching vs. constraint branching

谁能给我解释一下,变量分支和约束分支之间有什么区别(Ryan 和 Foster)?

我正在阅读这篇文章:

“机组排班中海量广义集划分问题的求解”,作者D.M。 Ryan (J. Op1 Res. Soc. Vol. 4)

在我看来,这与制定为集合划分问题的工作人员排班或护士排班问题完全相同。

两种分支方法都在1个变量上分支,有什么区别?

我正在尝试使用 SCIP 在 Python 中实施 Branch-and-Price。

我还没有读过您所指的文字,但希望可以让您理解 vague/handwavey 为什么约束分支是一项强大的技术。

考虑安排护士的大集合划分问题。 如果我们用 可变分支 来解决这个问题,每个分支都类似于说 "nurse 1,543 can/cannot work shift 16,325" 之类的话。此实例中的每个分支对 整体 解决方案只有 次要 影响。

相反,我们可以使用约束分支,这允许我们在每个分支上进行许多更改。我们这样做是为了将更多 完整性 纳入解决方案。

我们自己定义和分支的"imaginary variables"y_ij可以从行覆盖table中选择。鉴于我们有一组分数 x 变量,y_ij 是我们同时满足约束 i 和 j 的分数。虽然你是对的,这是我们正在分支的"one variable",但它会对解决方案产生更大的影响。

例如,如果我们在 y_12 上 1-branch,那么我们将同时禁止所有不满足约束 1 和 2 的列。选择 y_ij 分支的方法是最接近整数(但仍然是小数)的方法,更喜欢 1-branches 而不是 0-branches.