0

我正在使用 GeCode 构建用于解决特定任务的软件。我使用整数集变量和对这些变量的一些约束来模拟我的问题。但是对于这个问题,让我们考虑一个更简单的情况。

假设我有三个集合变量,其域为 [{},..., {1,2,3}],即 {}、{1}、{2}、{3}、{1,2}、{1 ,3}, {2,3}, {1,2,3} 并且我唯一的约束是 intersection(var_i, var_j) 对于所有 i 和 j 都是空的,并且 i 与 j 不同。

显然,如果我理解自己的逻辑,它应该至少给出 var_1 = {1}、var_2 = {2} 和 var_3 = {3}。但它也可以给出 var_1 = {1,2,3} 和 var_2 = var_3 = {}。事实上,使用这些变量和约束运行 GeCode 只会得到一个结果:var_1 = var_2 = var_3 = {1,2,3} 的所有可能子集,这表明存在不同的解决方案(建议我可以在 var_1 中选择一个子集并且可以找到满足约束的其他两个变量的子集。

我的问题是如何让 GeCode 自己枚举不同的组合。因为很明显,我的最终模型将包含更多的集合中的整数和更多的子集。因此,我无法承担通过自己设置变量来手动进行选择的成本,因为我失去了约束求解器可以提供的所有好处。

有没有可能帮助我解决这个问题?

4

1 回答 1

0

这个问题有点困惑,但看起来您正试图了解一般弧线一致性是如何工作的。您是想弄清为什么 Gecode 会为您提供所有可能的子集,还是要让 Gecode 本身输出这些子集供您分析?

于 2015-01-18T00:53:19.063 回答