用多种假设求解

时间:2017-02-27 21:51:24

标签: sat satisfiability sat-solvers

假设我有一个带变量(a,b,c,d,e,f,g)的CNF表达式。在给定(d,e,f){a,b,c,g} = {1,0,0,1}的情况下,如何使用SAT求解程序查找{a,b,c,g} = {1,1,1,1}的作业?如果是一个假设,调用坐标求解器来查找{d,e,f}的赋值将是直截了当的(例如,通过向CNF添加单位子句)。但是,如果我有多个假设怎么办?这可能吗?

2 个答案:

答案 0 :(得分:3)

以下是哈罗德试图向您描述的内容(我认为)。你对变量a,b,c,d,e,f和g有一些CNF公式F.

  1. 复制公式,调用副本G。
  2. 在G中,将变量a替换为aa,b替换为bb,c替换为cc,g替换为gg。
  3. 将单位子句添加到F,使(a,b,c,g)=(1,0,0,1)。
  4. 将单位子句添加到G,以便(aa,bb,cc,gg)=(1,1,1,1)。
  5. 连接公式F和G并将结果提供给SAT求解器。
  6. 求解器将找到符合(a,b,c,g)和(aa,bb,cc,gg)预设值的令人满意的作业。

答案 1 :(得分:0)

目前尚不清楚您是否需要实际答案或有趣理论答案。我会追求实用。

对于每组假设,调用一个支持求解的坐标求解器,并假设这组假设(betweeness)。在同一个求解器实例上按顺序执行此操作。

优点:

  • 您不会混合相互排斥的假设组合的可满足性。如果假设A的集合为公式F,则另一组假设为A'对于F来说是不可能的,每次调用求解器都会告诉你这些假设是否是坐标/不饱和。
  • 第一次通话的学习条款可能会留在第二次通话中。中间学习条款谈论相同的变量。 (注意:如果你有一个不相交的公式F & G,其中F超过变量X,G超过变量Y,X和Y共享无变量,解决方案 - CDCL中使用的推理规则 - 无法导出混合F的子句没有明显的好处,将两者混合在一起而不是将它们分开,除非一个例子更容易证明不饱和并提前停止。)

缺点:

  • 如果实例A在实践中很难解决,但A'这是微不足道的,你可能会陷入A。
  • 它不是平行的,所以如果你想要解决的实例多于两个,你需要其他机制。

我知道这是一个明显的答案,但值得尝试。如果失败了,你可以尝试做更好的事情,比如解决w.r.t.假设A union A',并且只有在不能解决这个A和A的策略的情况下才能解决。这对您的示例没有帮助,因为(a,b,c,g) = (1,0,0,1)(a,b,c,g) = (1,1,1,1)是互斥的。