SAT / CNF优化

时间:2012-01-17 14:08:03

标签: algorithm optimization linear-programming satisfiability

问题

我正在研究SAT优化问题的一个特殊子集。对于那些不熟悉SAT和相关主题的人,这里是related Wikipedia article

TRUE=(a OR b OR c OR d) AND (a OR f) AND ...

没有NOTs,它是联合正常形式。这很容易解决。但是我正在尝试来最小化真正的赋值数以使整个语句成立。我找不到解决这个问题的方法。

可能的解决方案

我想出了以下解决方法:

  1. 转换为有向图并搜索最小生成树,仅跨越顶点子集。有Edmond的算法,但它给出了完整图形的MST而不是顶点的子集。
    • 也许有一个版本的Edmond算法可以解决顶点子集的问题?
    • 也许有一种方法可以用原始问题构建一个可以用其他算法解决的图形?
  2. 使用SAT求解器,LIP求解器或穷举搜索。我对这些解决方案不感兴趣,因为我正在尝试将此问题用作讲义材料。
  3. 问题

    你有什么想法/意见吗?你能想出其他可行的方法吗?

1 个答案:

答案 0 :(得分:9)

此问题也是NP-Hard

可以显示Hitting Set的东减:

点击设置问题:给定集S1,S2,...,Sn和数字k:选择大小为S的集k,以便每个{ {1}} Si中有一个元素sS位于s。 [替代定义:每个SiSi之间的交集不为空。

<强>减少
对于点击集合的S实例,构建问题的实例:(S1,...,Sn,k)其中(S'1 AND S'2 And ... S'n,k)S'i中的所有元素,带有OR。 S'i中的这些元素是公式中的变量。

<强>证明:
击中组 - &gt;这个问题:如果设置了一个hittins实例Si,那么通过将所有S的元素赋值为true,公式就会满足S元素,因为对于每个k,有一些变量S'i位于vS中,因此也位于Si中。
此问题 - &gt;点击集合:构建S'i,其中所有元素都是真的[与点击集合相同的想法 - >这个问题]。

由于您正在为此寻找优化问题,它也是NP-Hard,如果您正在寻找一个精确的解决方案 - 您应该尝试指数算法