Typical clause maintenance strategies
The clause database reduction scheme is one of a small number of key heuristic mechanisms in a CDCL solver。
译文:子句数据库约简方案是CDCL求解器中少数关键启发式机制之一。
综述:
We categorize clauses as likely to be useful (high quality), or not (low quality).
译文:我们将子句分为有用的(高质量的)和无用的(低质量的)。
A very good clause quality measure to involve a combination of many factors。
The quality measure is typically a combination of size, age, literal block distance (LBD) and some measure of usage or activity .
译文:质量度量通常是大小、年龄、文字块距离(LBD)和一些使用或活动度量的组合。
The dominant current quality measure uses VSIDS-like clause “activities”.
To implementation of an algorithmic method to remove low quality clauses efficiently, a lot of new strategies are emerging from empirical evidence.
译文:为了实现有效去除低质量条款的算法方法,大量的新策略从实验证据中涌现出来。
Major changes to the general scheme are rare, but over time many refinements have combined to make the overall mechanism in the best recent solvers quite complex.
译文:对总体方案的重大更改很少,但随着时间的推移,许多改进已经结合起来,使最近的最佳解决方案中的整体机制相当复杂。
Most details have intuitive explanations, and were chosen based on empirical performance.
译文:大多数细节都有直观的解释,并且是根据经验表现来选择的。
典型的子句管理方案1
One scheme, which we call Delete-Half, is to periodically sort the clauses of Local and delete the half with lowest quality.
译文:一种我们称为delete - half的方案是定期对Local的子句进行排序,并删除质量最低的那一半。
Consider a Delete-Half scheme with a sort-and-reduce phase every k conflicts,each clause is inspected every k conflicts, deleted if its quality is below the median of the current clauses in Local.
译文:考虑一个删除一半方案,每个k冲突都进行排序和减少阶段,每个k冲突都检查每个子句,如果它的质量低于本地当前子句的中位数,则删除它。
典型的子句管理方案2
The way activities are computed and maintained in practice makes it hard to combine activity with other measures of quality in a simple and meaningful way.
译文:在实践中,子句活跃度的计算和维护方式使得很难将它与其他质量度量以一种简单而有意义的方式结合起来。
We introduce a simple online clause reduction scheme, which involves no sorting. We instantiate this scheme with simple mechanisms for taking into account clause activity and LBD
译文:我们在此介绍一个简单的在线子句缩减方案,它不涉及排序。我们用简单的机制来实例化这个方案,以考虑子句活动和LBD
Local的子句保存在一个循环列表L中,其中索引变量i沿一个方向遍历该列表。
索引标识当前的“删除候选”Li。
我们有一个子句质量度量Q,以及一些阈值质量值q。
当一个新的learned子句C需要存储在本地时,我们在用顺序搜索列表c,从中选择一个“低质量”子句,并将其替换为C。
只要Q(Li)≥q,则令i递增,即后移排查下一个。后移之前,将刚移过的子句Q(Li)设置为0,此次没有被替换。在随后的冲突分析中,如果该学习子句未被使用,其Q值就不会增加,等索引循环回来又一次排查到该子句时,该子句会被替换掉。反之,如果在冲突分析时被使用,Q增加到≥q,那么会多次避免被替换。
索引移动过程中不断越过的子句,一旦遇到Q(Li)< q的子句时,我们用C替换该子句Li(释放“旧的”Li,用新的学习子句C的指针替换它)。
必须选择质量度量阈值,以便在列表中总是有足够多的“低质量”子句。
有一些算法方法可以确保这一点(例如,使用反馈控制机制),但是没有它们就很难获得良好的实际性能。
we trade off sorting for dynamically estimating the median. In doing so, we get a clause database of uniform size, rather than one that significantly grows and shrinks.
译文:我们用排序来动态估计中值。这样,我们就得到了一个统一大小的子句数据库,而不是一个显著增长和收缩的子句数据库。