我正在使用 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 自己枚举不同的组合。因为很明显,我的最终模型将包含更多的集合中的整数和更多的子集。因此,我无法承担通过自己设置变量来手动进行选择的成本,因为我失去了约束求解器可以提供的所有好处。
有没有可能帮助我解决这个问题?