约束在整数集变量上编程

时间:2015-01-18 00:43:40

标签: constraint-programming gecode

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

假设我有三个集合变量,其域名为[{},...,{1,2,3}],即{},{1},{2},{3},{1,2} ,{1,3},{2,3},{1,2,3},我的唯一约束是交集(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枚举不同的组合。因为很明显,我的最终模型将在集合中包含更多整数以及更多子集。因此,我无法承担通过自己设置变量来手动进行选择的成本,因为我放弃了约束求解器可以提供的所有好处。

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

1 个答案:

答案 0 :(得分:0)

对这个问题有点困惑,但看起来你正试图理解一般的弧度一致性是如何起作用的。您是否希望澄清为什么Gecode会为您提供所有可能的子集,或者您是否在寻找Gecode本身来输出这些子集以供您分析?