希望从该文章中获取BCP的认识以及叙述方式

sharpSAT – Counting Models with Advanced Component Caching and Implicit BCP

Thurley M. (2006) sharpSAT – Counting Models with Advanced Component Caching and Implicit BCP. In: Biere A., Gomes C.P. (eds) Theory and Applications of Satisfiability Testing - SAT 2006. SAT 2006. Lecture Notes in Computer Science, vol 4121. Springer, Berlin, Heidelberg. https://doi.org/10.1007/11814948_38


 

Abstract

  We introduce sharpSAT, a new #SAT solver that is based on the well known DPLL algorithm and techniques from SAT and #SAT solvers. Most importantly, we introduce an entirely new approach of coding components, which reduces the cache size by at least one order of magnitude, and a new cache management scheme. Furthermore, we apply a well known look ahead based on BCP in a manner that is well suited for #SAT solving. We show that these techniques are highly beneficial, especially on large structured instances, such that our solver performs significantly better than other #SAT solvers.
   

Keywords

Conjunctive Normal Form   Cache Size   Unit Clause   Bound Model Check    Branch Variable

 

Introduction

  The appearance of highly optimized SAT solvers [7, 5, 8] encouraged applying these SAT solvers to the closely related problem of counting the solutions of a propositional formula, known as #SAT. Applying the DPLL algorithm [4] to model counting was proposed in [3]. relsat 2 (cf. [2]) combined clause learning [11, 12] with component decomposition. Recently, Cachet by Sang et al. [9, 10] provided component caching and new branching heuristics.译文:组件缓存和新的分支试探法.
 

We introduce sharpSAT - a new #SAT solver that inherits these techniques, improves upon them and contributes new ideas, such that it is able to outperform the best #SAT solvers (its source code is available at [1]).

 

After some basic definitions we will give a brief overview of our #SAT solver. Then we will discuss a new way of component caching that differs significantly from the scheme known so far (see [9]). It reduces cache sizes by at least by one order of magnitude. In the course of this, we will propose a cache management scheme which bounds the cache size explicitly and deletes old cache entries by means of a simple utility function.

 

Section 2 provides a discussion of implicit BCP - an adaptation of a well known ”look ahead” technique based on boolean constraint propagation (BCP) (cf.[6]). Implicit BCP is built to integrate this technique well with other common #SAT solving techniques. This frequently results a smaller search space and reduces the cache size even further.

 

Eventually, in section 3, we will compare sharpSAT to the sate-of-the-art #SAT solver Cachet. This will reveal that the new techniques perform exceptionally well especially on very large instances, such as those from bounded model checking, which often contain several thousands of variables.

 

1 Component Caching

 

Cache Management. On hard formulas the cache size quickly exceeds any reasonable bound, which necessitates a good cache management. 译文:在硬公式中,缓存大小很快就会超过任何合理的限制,这就需要良好的缓存管理.

 

In our experiments, we observed drawbacks of bounding the cache size by an oldest age bound: a good bound depends highly on the formula size and has to be set manually.

译文:在我们的实验中,我们观察到用最老的年龄界限来限定缓存大小的缺点:一个好的界限高度依赖公式大小,必须手动设置。

 

In sharpSAT an absolute bound maxSize in bytes on the cache size is set. Furthermore, we keep scores for each cache entry in a way reminiscent of the VSIDS heuristic (cf. [7]).

译文:在sharpSAT中设置了缓存大小的绝对上限(以字节为单位)。 此外,我们保存每个缓存条目的分数的方式让人想起vsid启发式.

 

If an entry is hit its score is increased. All scores are divided periodically. The cache is cleared only if it exceeds a fixed fraction (0.9, say) of maxSize, if so all entries with a score lower than minScore are deleted.

译文:如果命中一个条目,它的分数就会增加。所有的分数都是定期划分的。只有当它超过maxSize的一个固定比例(比如0.9)时,缓存才会被清除,如果是这样,所有得分低于minScore的条目都会被删除。

 

Directly after cleanup we try to keep the cache size at about 0.5 · maxSize. To achieve this, we increase or decrease minScore accordingly.译文:在清理后,我们试图将缓存大小保持在0.5·maxSize左右。为此,我们相应地增加或减少minScore.

 

This quickly stabilizes the cache size after cleanup to about the desired value. Furthermore, this scheme is quite fast, as entries are deleted only when necessary and updating scores creates almost no time overhead.

译文:这将快速稳定缓存大小后清除大约所需的值。此外,这个方案非常快,因为只有在必要时才删除条目,而且更新分数几乎不会产生时间开销。

   

 

2 Implicit BCP

 

BCP plays a central role in the performance of SAT and #SAT solvers. Branching heuristics based on BCP, called Unit Propagation (UP) heuristics (cf. [6]) try to maximize the possible effect of BCP by applying a form of ”look ahead”.

 

UP heuristics determine branch variables by estimating the effect an assignment has for BCP.

译文:向上启发式法通过估计分配对BCP的影响来确定分支变量。

 

To achieve this, for each variable x of a certain set S of free variables the assignments x ← 0 and x ← 1 are made independently and BCP is applied in each case.

译文:为此,对于某一自由变量集合S中的每个变量x,分别独立地做赋值x←0和x←1,并在每种情况下应用BCP。

 

If any of these cases, say x ← 0, causes a conflict, a failed literal (¯x) is found and x is chosen directly as branch variable.

译文:如果其中任何一种情况(比如x←0)导致冲突,则找到一个失败的文字(¯x),并直接选择x作为分支变量。

 

Otherwise, the variables in S are evaluated according to their effect on BCP and one of these is chosen.

译文:另外,根据S中的变量对BCP的影响进行评估,并选择其中一个。

 

   
 

sharpSAT applies an algorithm for finding failed literals. It deviates from the traditional UP heuristics approach, as for example pursued in Cachet, in at least two ways.译文:sharpSAT应用了一种算法来查找失败的文字。它至少在两方面偏离了传统的启发式方法,比如Cachet所追求的启发式方法。

First, it is applied independently of the branching heuristics and only failed literals are sought. 译文:首先,它的应用独立于分支启发式,并且只搜索失败的文本。

 

The process stops either if a conflict occurs, or no failed literals are found anymore.译文:如果发生冲突,或者没有找到任何失败的字面值,进程将停止。

 

In SAT solvers this might show no big difference to UP heuristics, but in our #SAT solver a large amount of component analysis and cache look up and storing is avoided by this procedure as in the course of implicit BCP these operations are not applied.

译文:在SAT求解器中,这可能与上启发式没有太大区别,但在我们的#SAT求解器中,由于隐式BCP过程中没有应用这些操作,因此该过程避免了大量组件分析和缓存查找和存储.

   
 

Furthermore, the set S of candidates for failed literals is computed differently. We only consider literals from original clauses that have become binary in the most recent call of BCP.译文:此外,对于失败的字面值候选集S的计算方法是不同的。我们只考虑在最近的BCP调用中变成二进制的原始子句中的文字。

Thus in instances that allow for few implications only, S is small and thus implicit BCP induces almost no overhead. 因此,在只考虑少数含义的情况下,S很小,因此隐式BCP几乎没有开销。In cases of many implications S is larger but failed literals are more likely as well.译文:在很多情况下,S更大,但是失败的字面值也更可能出现。

   

 

posted on 2020-12-09 09:07  海阔凭鱼跃越  阅读(223)  评论(0)    收藏  举报