我有一个项目在我的脑海中,我很好奇以前是否做过类似的事情。假设有一组不同类型的约束并且这些约束不能一起满足。
C = {c1, c2, c3, ..., cn}
(c1 and c2 and c3 ... cn) : 不能满足
我的目标是将这个集合分成 k 个集合(可能 k 非常小),以使每组约束都可以单独满足。
基本的解决方案是使用贪婪的方法。将选择一个约束作为第一个约束并标记为第一组。然后,将选择第二个并检查它是否可以用第一个约束解决。如果它们是可解的,那么第二个约束也将在第一组中,否则,它将被标记为第二组。这个过程将以这种方式继续,直到集合中没有任何约束。这样做的另一种方法可能是将约束分为 2 组,并检查这些组是否可以单独解决。如果不是,继续递归除法。这两种方法都受到大小的影响,它们将约束集划分为非常小的集合。
我正在寻找一种将约束集划分为 k 集的有效方法,其中 k 接近最优值(最小 k 值)。这里有 2 个挑战,1)可扩展性问题和 2)事先不知道约束结构。