【发布时间】:2017-02-27 21:51:23
【问题描述】:
假设我有一个带有变量 (a,b,c,d,e,f,g) 的 CNF 表达式。考虑到{a,b,c,g} = {1,0,0,1} 和{a,b,c,g} = {1,1,1,1},我将如何使用SAT 求解器来查找(d,e,f) 的作业?如果这是一个假设,调用 sat 求解器来查找 {d,e,f} 的分配将是直截了当的(例如,通过向 CNF 添加单位子句)。但是如果我有多个假设呢?这可能吗?
【问题讨论】:
-
你能解释一下你的意思吗,到目前为止它看起来对我来说是微不足道的(例如 b 不能同时是 0 和 1)
-
假设 a,b,c,d = (1,0,0,1) 和 a,b,c,d = (1,1,1,1) 是两个“观察”。如何为 (d,e,f) 赋值以使这些观察结果一致?
-
那个编辑让它再次变得混乱。这是否意味着比“允许 abcg 为 1001 或 1111,无论哪个可以得到一些令人满意的模型”更复杂?还是必须对集合中的所有 abcg 向量都使用相同的 def?
-
很抱歉给您带来了困惑。我绝对不是指第一个(在这种情况下,您可以将它们用作阻塞子句,然后就完成了)。我的意思是 (a,b,c,d) 可以取两个值:(1,0,0,1) 和 (1,1,1,1)。当然,它也可以采用其他 (2^4 - 2) 值。但是我可以为 (d,e,f) 分配什么,以便至少满足 (a,b,c,d) 的这两个值?
-
但是你可以只复制 abc(d?g?) (以及所有依赖它们的子句),然后再次使用单元子句强制它们,每组副本一个分配。好的,这使得 CNF 表达式相当大.. 反正就是你的意思
标签: sat satisfiability sat-solvers