我正在使用Gecode来解决一个问题,你可以在其中标记多图的弧,以便从单个源到单个槽的每条路径中的弧标签总和来自多集。因此,例如,我们可能有一个包含8个路径的图形,并希望路径弧和来自集合{5,5,5,4,3,2,1,0}。所以我们必须有3条路径,总和5和5路径,唯一的总和为0..4。
您可以将此问题重新表述为询问{5,5,5,4,3,2,1,0}的某些排列是否位于图的路径弧入射矩阵的列空间中。 我用“计数”约束模拟这个多集匹配。弧和是线性方程。
我的图表有许多成对的平行边。使用对称性我使用它来对路径总和施加部分顺序。这也意味着存在具有相同差异的多组路径和。所以从我的例子中,如果路径是b0 ... b7我有以下对集:
b0 - b1 = b3 - b4 = b5 - b6,b0 - b2 = b5 - b7,b0 - b3 = b1 - b4,b0 - b5 = b1 - b6 = b2 - b7
b1 - b2 = b6 - b7,b3 - b5 = b4 - b6
将这些差异包含在模型中似乎可以将Gecode中的搜索空间减少两个数量级。我对此很满意,因为我认为它告诉我一些关于我正在研究的图表的重要信息,它符合我工作领域的一些猜想。
偏序现在告诉我们只有b0,b2,b3,b5和b7可以取值5。 现在可以证明这个系统不能得到满足。我对约束满足等技术感兴趣,可用于分析不等式系统(!=)和“计数”。显然,Gecode可以通过赋值和失败来证明这一点。我对通用技术感兴趣,既可以学习约束满足,也可以帮助改进模型,也可以对我正在调查的事情有所了解。
为了看问题不可解,我们可以证明6组对差系统中的每一组都不能有零差。如果他们这样做,他们会生成错误值的副本或太多5的重复。
例如b0-b1 = b3-b4 = b5-b6将具有b0 = b1这是不可能的,因为b1不能是5并且这是唯一可以具有重复的值。 或者b0 - b2 = b5 - b7意味着b0 = b2和b5 = b7需要4 5。
所以我们最终在路径上得到一组不等式,其总和可以是5:
b0!= b2,b0!= b3,b0!= b5,b2!= b7,b5!= b7
我们可以看到b0!= 5因为如果它是我们只能得到2五。从剩下的4个值中,我们被迫能够设置最多2到5个,这样整个系统就不可能了。