Encoding 验证组合CNF SAT编码?
我试图用一个简单的方法来解决一个组合问题 这包括以下步骤:Encoding 验证组合CNF SAT编码?,encoding,combinatorics,boolean-expression,satisfiability,Encoding,Combinatorics,Boolean Expression,Satisfiability,我试图用一个简单的方法来解决一个组合问题 这包括以下步骤: 将问题编码为布尔表达式集 将表达式的连词翻译成 (使用自制工具,或) 解决问题 (使用SAT解算器,如,或) 将解决方案(假设“SAT”结果)转换回问题域 这在我的小样本情况下有效。但对于更具挑战性的问题,SAT解决方案需要数小时甚至数天才能得出SAT/UNSAT结论。我试着调整我的编码以得到一个解决方案。但我在编码上投入的精力越多,我就越不确定我的编码是否正确(即“可满足性等价物”) 从布尔表达式到CNF的步骤相当复杂,在可管理的子
(使用自制工具,或)
(使用SAT解算器,如,或)
有什么最佳实践可以完成这样的检查吗?所以你要问的是: 给定一个布尔表达式B和一个CNF C,有没有办法判断它们是否相等可满足 换句话说: 存在满足B但不满足C的模型,或者满足C但不满足B的模型?如果不存在这样的模型,那么两者都是可平等满足的 我对这个问题的解决办法如下:
这个库生成的CNF不是很有效!但是它经过了很好的测试。您想在要求解的同一个表达式上运行验证,还是在较小的测试用例上运行验证?我脑子里能想到的所有验证方案可能至少和解决SAT问题本身一样复杂。你是对的。验证的例子比较小。我应该强调(参见我列表中的第2点),我的布尔表达式是许多较小表达式的结合。所以,我可以分别验证每个子表达式。答案不错,但是检查CNF和布尔表达式可能还不够。我更愿意验证CNF是否确实代表了原始问题。实际上,我在这里检查CNF与CNF,并通过使用“已知良好”参考布尔->CNF实现来创建第二个,从而将其扩展到CNF与布尔值。CNF。当然,您可以通过使用“已知良好”问题->布尔代码来生成第二个CNF来扩展此功能。对不起,但我仍然有疑问。作为单一最小项的原始问题的已知解决方案并没有涵盖所有可能的解决方案,因此无法通过CNF进行检查。非优化的已知良好CNF对于非平凡情况来说太大。目前,我的方法是分割CNF is簇/锥体,它们是分界wrt。切换变量。我希望能够通过迭代单元传播逐一验证它们。一有更清楚的情况,我就更新这个问题。