Questions tagged «sat-solvers»

有关布尔可满足性问题的求解器程序的问题。

2
SAT求解器的n分之一编码
我正在使用SAT解算器对问题进行编码,作为SAT实例的一部分,我具有布尔变量,其中这些变量中的一个应该为true,其余的应该为false 。(我有时将其描述为“一次性”编码。)X1个,X2,… ,xñx1,x2,…,xnx_1,x_2,\dots,x_n 我想在SAT中编码约束“一个必须为true”。编码此约束以使SAT求解器尽可能高效运行的最佳方法是什么?X1个,… ,xñx1,…,xnx_1,\dots,x_n 我可以看到许多方法来编码此约束: 成对约束。我可以为所有添加成对约束以确保至多一个为true,然后添加以确保至少一个为true 。我,Ĵ X 我X 1 ∨ X 2 ∨ ⋯ ∨ X Ѭ X一世∨ ¬ XĴ¬xi∨¬xj\neg x_i \lor \neg x_j我,Ĵi,ji,jX一世xix_iX1个∨ X2∨ ⋯ ∨ Xñx1∨x2∨⋯∨xnx_1 \lor x_2 \lor \cdots \lor x_n 这将添加子句,并且没有额外的布尔变量。Θ (n2)Θ(n2)\Theta(n^2) 二进制编码。 我可以引入新的布尔变量来表示(以二进制形式)一个整数,使得(添加一些布尔约束以确保在所需范围内)。然后,我可以添加一些约束来强制是tree,而所有其他都是false。换句话说,对于每个,我们添加强制执行子句。我1,我2,... ,我LG的Ñ我1 ≤ 我≤ Ñ 我X 我X Ĵ Ĵ 我= Ĵ …


1
为什么最近所有的SAT求解器都在CNF而不是电路SAT上工作?
我认为,在2006年某个时候发布AIGER库以处理和反转图形之后(我认为),一些电路SAT解算器在2006-2008年发布,并且在一些SAT Races /竞赛中有AIG赛道。但是自那时以来,似乎重点一直完全放在SMT或改进子句SAT解算器上。 在我看来,专注于电路SAT似乎很有意义:许多(如果不是大多数的话)问题比CNF更自然地表达为电路SAT。电路提供了无法从CNF反向工程的结构信息,但是电路始终可以转换为CNF。而且至少在逻辑上具有重要工业意义的领域似乎特别适合AIG。 所以发生了什么事?事实证明,额外的结构信息对求解器没有帮助吗?基于AIG的SAT解决了失败的实验吗?

1
何时使用SAT vs约束满意度?
如果我遇到难题,一种标准方法是将其表示为SAT实例,然后尝试在其上运行SAT解算器。另一种标准方法是将其表示为约束满足问题,然后尝试使用CSP求解器。两者在某种程度上可以用输入格式自然地表达出什么样的问题,感觉有点相似。 是否有任何准则或经验法则针对特定问题如何识别哪种方法更可能产生良好的结果?对于SAT求解器比CSP求解器能更好地处理哪些类型的问题,是否有人能提供任何指导?反之亦然? (显然,这两种方法都可以解决一些简单的问题。还有一些困难的问题都无法通过两种方法解决。让我们将它们放在一边。指导最有用的情况是其中任何一个SAT都存在问题求解器的性能优于CSP求解器,或者CSP求解器的性能优于SAT求解器如何识别SAT求解器比CSP求解器更合适,或者CSP求解器比SAT求解器更适合SAT求解器-即首先尝试哪种方法?)

3
SAT编码的食谱书?
SAT求解器在解决大型实例方面越来越有效,并在各种情况下用作后端。每当有人想要使用它们来解决特定领域中的问题时,他/她都必须提出一种即席编码,该编码不仅具有正确的解决方案集,而且可以将约束(甚至是冗余的)形式化这有助于求解器的启发式算法更快地找到解决方案。 在我看来,许多这样的编码将是非常常见的,例如:断言将一组有限的节点链接为树或DAG,或者对列表进行排序... 是否有针对优化解决方案中常见问题的通用编码的存储库/食谱书?

3
多核SAT解算器
我正在尝试解决25k子句5k变量SAT问题。由于它已经运行了一个小时(precosat),因此我想在以后解决更大的问题,因此我正在寻找一种多核SAT-Solver。 由于似乎有许多SAT解算器,我很迷茫。 有人能指出我最适合我的情况吗? 如果有人可以给我大概的时间(如果可能的话),我也很高兴。

1
推断优化类型
在工作中,我的任务是推断一些有关动态语言的类型信息。我将语句序列重写为嵌套let表达式,如下所示: return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } 由于我从一般类型信息开始,并试图推断出更具体的类型,因此自然的选择是精简类型。例如,条件运算符返回其真假分支类型的并集。在简单的情况下,它效果很好。 但是,在尝试推断以下类型时遇到了障碍: function …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

1
顶级SAT求解器可以分解为简单数吗?
现代SAT求解器非常擅长求解SAT实例的许多实际示例。但是,我们知道如何生成难的密码:例如,使用从分解为SAT的简化方法,并提供RSA数字作为输入。 这就提出了一个问题:如果我举一个简单的因式分解的例子怎么办。而不是对位取两个大质数,如果我对位取质数而对位取质数q ,则令并编码作为SAT实例。是通过蛮力搜索或筛分法容易分解的数字,因为其中一个因素很小。从分解到SAT的标准减少了的现代SAT求解器是否也采用了这种结构?n / 2ñ/2n/2ppp日志ñ日志⁡ñ\log nñ /日志ññ/日志⁡ñn/\log nñ= p qñ=pqN = pqF A C T O R( N)F一种CŤØ[R(ñ)\mathrm{FACTOR}(N)ññN 可以使SAT求解器的因子,其中快速?ñ= pqñ=pqN = pq| p |=日志ñ|p|=日志⁡ñ|p| = \log n

1
统一与SAT解算器
我在Wikipedia上读到,统一是解决可满足性问题的过程。 同时,我知道这类求解器称为“ SAT求解器”或“ SMT求解器”。那么,对于同一件事,它们是否具有不同的名称? 如果您说他们不同,请指出我的治疗有缺陷。

1
冲突驱动子句学习回溯澄清
在这里的Wikipedia页面上,它很好地描述了CDCL算法(似乎图片是由普林斯顿的Sharad Malik创建的幻灯片拍摄的)。但是,当描述如何回溯时,它只是说“到适当的位置”。MiniSAT还使用了CDCL算法的变体,因此我阅读了本文。他们似乎在说,您应该回溯到Learned子句是unit子句之前。那当然是澄清,但对我来说没有意义。据我所知,最后一个赋值肯定会成为学习到的冲突子句的一部分(也许我在这里错了?),所以当您回溯一步时,您将立即使学习到的子句成为单位,最后分配的值将翻转,并且该算法将完全按照DPLL进行,而不会回溯足够远。另外,维基百科页面不遵循此规则,它似乎可以回溯得多。 应该回溯多远?

2
一阶逻辑验证简介
我正在尝试向自己教授软件验证的不同方法。我读了一些文章。据我了解,带有时间的命题逻辑通常在SAT求解器中使用模型检查(在进行中的-反应系统中),但是带有时间的一阶逻辑又如何呢?它使用定理证明吗?还是可以使用SAT? 非常感谢初学者在这本书上指向书籍或文章的任何指针。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.