论文Propagation via Lazy Clause Generation(1)

通过延迟子句生成进行传播

abstract

有限域传播求解器通过一组可自然建模为布尔变量的选项有效地表示变量的可能值。在本文中,我们描述了如何模拟有限域传播引擎,将传播器映射到SAT求解器中的子句中。这立即导致有限域传播的强nogood。但是,除非在有限的情况下,简单的静态转换是不切实际的。我们将展示如何为SAT解决程序将传播器转换为lazy clause generators。由此产生的系统引入了建模的灵活性,因为变量是在传播引擎和SAT求解器中双重建模的,我们探索了各种方法的双重建模。结果表明,该系统在求解许多有限域问题时明显快于其他技术。

1 Introduction

传播是有限域约束求解的一个重要方面,它通过交叉搜索和限制变量(传播)的可能值来解决难以组合的问题。构成有限域传播引擎核心的传播器表示信息推断速度与被推断信息强度之间的权衡。好的传播器至少对于某些问题类来说是一种很好的折衷。有限域传播在解决困难组合问题中的成功源于这些良好的权衡和可编程搜索。

命题可满足性(命题可满足性,SAT)求解器正变得非常强大,越来越多的论文提出对SAT中的硬组合(有限域)问题进行编码(如[20,33])。现代SAT解决方案的成功很大程度上是由于多种技术的结合,包括:手表文字、1UIP nogoods和VSIDS变量排序启发式[26]。

在本文中,我们提出了SAT组合问题的建模方法,不是通过建模问题的约束条件,而是通过建模/模拟问题的有限域模型中使用的传播器。变量是根据在传播执行过程中发生的域更改建模的。然后,我们可以将传播器的域更改行为建模为子句

编码有限域传播可以测试SAT求解器的极限。虽然现代SAT解决程序通常可以处理包含数百万子句和数十万变量的问题,但许多问题很难在不突破这些隐含限制的情况下编码成SAT。我们提出了一种混合方法。我们没有预先引入表示传播器的子句,而是在SAT求解器中以惰性子句生成器的形式执行原始(有限域)传播器。当传播器能够触发新的单元传播时,它们会精确地引入它们的传播子句。这种混合方法结合了SAT求解的优点,特别是强大高效的nogood学习和回溯,以及有限域传播、简单强大的建模和专业高效的信息传播的优点。

例1。考虑传播在约束z x + y = x,y和z值从−1000到1000之间。在有限域传播引擎中,传播器是一小段高效的代码。例如,给定x和y只能取小于或等于5的值,传播器确定z只能取小于或等于10的值。传播器非常高效,每当x、y或z的域发生变化时都会调用它。

使用布尔变量[[v\leqslantd]]上的子句对这个简单约束进行编码,其中v∈{x,y,z}和d∈[-1000..1000]涉及超过200万个子句,例如¬[[x \leqslant 5]]∨¬[[y \leqslant 5]]∨[[z \leqslant 10]]和¬[[x \leqslant-500]]∨¬[[y \leqslant-501]]。对于这样一个简单的约束,这是一个巨大的表示。

在延迟子句生成中,整型变量的域使用布尔变量表示,因此布尔变量[[x\leqslant5]]表示x只能取小于或等于5的值。它不是在执行之前静态地构建contraint的表示,而是在搜索期间惰性地构建。在搜索过程中,传播器被运行,其结果被转换为添加到SAT求解器中的子句。例如当x \leqslant 5和y \leqslant 5,传播算子确定z\leqslant10,这变成了条款¬[[x \leqslant 5]]∨¬[[y \leqslant 5]]∨[[z \leqslant 10]]。这个子句被添加到SAT解决程序中。由于在任何执行过程中,用于x、y和z的域的组合要比实际可能出现的组合少得多,因此,在200多万个子句中,只有极少数会出现在SAT解决程序中

创建这些子句的优点是,SAT求解器可以使用其专门的搜索方法直接进行搜索,更重要的是,可以使用SAT机制进行nogood的学习和回跳。此外,请注意,传播器添加的子句是全局正确的,永远不需要撤销。例如,如果x \leqslant 5和y \leqslant 5由于回溯而变得untrue,那么传播子句¬[[x \leqslant 5]]∨¬[[y \leqslant 5]]∨[[z \leqslant 10]] 在单位传播下不再有效,并且不再暗示z \leqslant 10。 实际上,该子句可以以其他方式传播:给定x \leqslant 5和z> 11(等效地为¬z\leqslant10),SAT求解器可以确定y> 6.这是x + y = z的真实结果。

我们展示了惰性子句生成方法允许整数变量的布尔表示与作用于它们的传播器之间的独立性。这种表示独立性导致了一种新的传播类型:混合边界表示 mixing bounds representation 和域传播器 domain propagators。这种新传播器导致了析取传播disjunctive propagation,即通过本质上是析取的传播方式来创建新的信息,尽管这种传播方式最初并不是析取的。由于传播的底层SAT表示可以有效地表示析取信息,因此它允许我们从头创建新的“析取传播器”。

我们将混合求解方法与基于有限域传播的求解方法和静态建模方法进行了比较,并在一些基准测试问题上使用SAT进行了求解。我们证明,我们的原型实现可以显著改进精心设计的SAT和有限域传播求解器。我们还说明了如何将问题的布尔模型从传播方式中分离出来,从而改进混合方法的行为。这项工作的贡献是:

  • 根据子句clause对传播器进行形式化,以及使用传播器和SAT解决器所产生的clause之间的对应关系;
  • 利用SAT求解器实现基于传播的混合求解系统的设计
  • 探索由混合系统产生的建模选择,包括新的“析取传播器”,它比标准传播器更快地在SAT求解器中创建子句;
  • 我们所知道的第一个将nogoods与边界传播器结合起来的系统;
  • 实验证据表明混合方法具有显着的潜力。

本文的其余部分组织如下。在第2节中,我们给出了有限域约束求解的术语,在第3节中,我们给出了SAT问题和单位传播的术语。在第4节中,我们将引入原子约束和传播规则,作为理解传播器点态行为的一种方法。然后在第5节中,我们将展示如何将传播器表示为子句。在第6节中,我们引入了惰性子句生成的概念,在这里我们惰性地构建传播器的小句表示。在第7节中,我们探讨了一些建模选择,这些选择源于变量作为布尔文字的双重观点。在第8节中,我们讨论了实现惰性子句生成方法的问题,在第9节中,我们展示了一些实验的结果。我们将在第10节中讨论相关工作,然后进行总结。

2 Propagation-based Constraint Solving 

Vi是整数变量的集合,Vs是整数变量集合的集合。小写字母表示整数变量,大写字母表示整数变量集合。域D是V的完整映射,对于VI中的变量,到有限整数集的完整映射,而对于VS中的变量,到有限整数集的有限集的完整映射。我们可以将域D理解为公式,表明每个变量v的值在其域中。

D1和D2是V的域,定义D1比D2强,D1和D2对于V等效,D1和D2的交集:

We use range notation我们使用范围表示法:对整数l,u,[l..u]意味着。对于整数集合L和U,[L..U]表示A domain D is convex if D(T) is a range for all T ∈ .我们将注意力限制在凸域。 我们假设初始域Dinit是凸的,使得出现的所有域D将更强,即D \sqsubseteq Dinit。

valuation赋值:赋值θ是整数和集变量到相应类型值的映射我们将赋值θ扩展为以自然方式映射涉及变量的表达式或约束。 让vars成为返回表达式、约束或估值中出现的变量集的函数。 在滥用符号时,我们将赋值θ定义为域D的元素,如果对于任意都有,那么可写为

约束是对一组变量的同时允许值的限制。 我们将约束c的解决方案solutions定义为使约束成立的赋值集合θ,

我们将每个约束与一组传播器,prop(c)相关联。 传播器f∈prop(c)是域上的单调递减函数,其为c保持解决方案。也就是对所有域

这是一个弱约束,因为,例如,标识映射是任何约束的传播器。在本文中,我们限制在设置映射凸域到凸域的边界传播器

传播器f的输出变量是传播器改变的变量:,那么,也就是说,output(f)中都是那些因为f而改变了域的变量。传播器f的输入变量输入是可以改变传播器结果的变量,即最小子集,使得对于每个有:意味着。 只有输入变量才能用于计算传播器对域的应用。

用于一组传播器F和当前域D的传播解算器(propagation solver ),solv(F,D),从域D开始重复应用F中的所有传播器,直到得到的域中没有进一步的变化。 solv(F,D)是最弱域,它是所有f∈F的固定点(fixpoint)(即)。

 换句话说,solv(F,D)返回一个由以下公式定义的新域:

其中gfp表示关于\sqsubseteq提升到函数的最大值。

3 SAT and Unit Propagation 

命题(proposition)p是从一个布尔变量P的universe中产生的布尔变量。文字( literal) l是:命题p,它的否定¬p,虚假文字⊥或真正文字。如果l = p,则表示为¬l的文字l的补码是¬p,如果l =¬p则是p,而。子句(clause)C是文字的析取,我们也把它看作是一组文字。赋值(assignment)是从P到{,⊥}的部分映射μ或失败的赋值{{⊥}}。 赋值μ被视为一组文字A = {p | μ(p)=}∪{¬p| μ(p)=⊥}。我们在赋值上定义一个格(lattice)如下:最小上限运算( The least upper bound operation)\sqcup定义为,除非:union包含{p,¬p}用于某些文字p,或A和A‘中有一个是{{⊥}},在这种情况下 {{⊥}}。

如果clause C中的一个literals出现在赋值A中,则赋值A满足C子句。A theory T是一组子句。 如果满足所有C∈T,则该赋值是T的解。

SAT求解器采用理论T并确定它是否有解。 完整的SAT求解器通常涉及某种形式的Davis-Putnam-Logemann-Loveland算法[9],它通过递归地将命题的值固定为(true)或⊥(false)并使用单位传播来确定到目前为止所做出的每个决策的逻辑结果,从而将搜索和传播结合起来。该单元传播算法利用T理论求出赋值A的所有单元解决方案。具有赋值A的子句C =C'∪{l}的单位解决方案,如果C中的每个literal的否定都出现在A中,则将文字l添加到A,因为这是在给定赋值A的情况下满足C的唯一方法。单位传播连续应用单位解决方案(unit resolution),直到赋值A不变。 它可以正式定义如下:

现代DPLL SAT解决方案结合了使用 watched literal 技术的非常有效的单元传播、1UIP nogoods和backjumping[26],一起创建非常强大的求解器。

4 Atomic Constraints and Propagation Rules

原子约束和传播规则最初是为传播冗余的推理而设计的[4,5]。它们提供了一种描述传播器行为的方法。

原子约束(Atomic Constraint)表示在传播期间域中发生的基本更改。对于整型变量,原子约束表示从整型域中消去值,i.e. xi \leqslant d, xi \geqslant d, 对于集合变量,原子约束表示向整数的下界集合添加一个值,或从整数的上界集合删除一个值我们还认为原子约束是错误false的,这表明传播的直接结果是unsatisfactability。

定义一个传播规则(propagation rule)为C\rightarrowc,其中C是原子约束的并集,c是单个原子约束,使得。传播规则C\rightarrowc以明显的方式定义传播器propagator(我们使用相同的符号)。

换句话说,C\rightarrowc定义了一个传播器,它仅在D暗示C时才基于c从D中移除值。我们可以根据它实现的传播规则来表征任意传播器f。传播器f实现传播规则,暗示 

许多传播器更适合使用使用边界的原子约束,例如x \leqslant d,尽管总是可以只使用x \neq d的原子约束来描述它们的行为。

令 rules(f) 是f实现的所有可能传播规则的集合。 对于所有D \sqsubseteq Dinit,一组传播规则 F⊆rules(f)实现f 如果solv(F,D)= f(D)。

rules(f)的这种定义通常是不合理的大,并且充满了冗余。 例如,示例6中的第四传播规则明显弱于第三传播规则。 为了更有效地推断给定传播器f的传播规则,我们寻求简洁表示rep(f) ⊆ rules(f)来实现f。

如果是而不是,则传播规则相对于另一个规则是直接冗余的。 如果rules(f)中的任何规则没有直接冗余,则传播器f的传播规则r是紧的。 显然,如果可能的话,我们宁愿只在rep(f)中使用严格的传播规则。

边界传播规则仅使用x \leqslant d,x \geqslant d和false形式的原子约束。 如果传播器f具有仅使用边界传播规则的典型rep(f),我们可以将传播器f分类为边界传播器。

5 Clausal Representations of Propagators

传播器可以简单地理解为传播规则的集合。这为理解它们作为子句的并集提供了关键的见解,因为我们可以直接将传播规则转换为子句

5.1 Atomic constraints and Boolean variables 

(讲述如何将原子约束映射到布尔文字上)

变量域的变化是传播求解器记录的信息。 例如,x = d是将x的值固定到域值d的变化,并且x \geqslant d是将x的值限制为大于或等于域值d的变化。在这个意义上,原子约束是提出“决策”或存储代表性子问题。 在将传播转换为布尔推理时,这些决策成为布尔变量。例如,[[x = d]]和[[x \leqslant d]]表示布尔变量,其编码关于变量x的可能值的信息,其中d是(有限)整数域中的元素。我们采用整数域作为布尔值编码,该编码简洁,与原子约束匹配良好。它可以被认为是两种经过深入研究的表示形式的组合:直接编码(参见[35]);和一元编码(见例[7,2])。对于直接编码,对应于整数变量x的布尔变量对于域中的每个值d具有[[x = d]]形式,并且添加了子句以确保对于给定的x,最多一个这样的变量为真;对于一元编码,其中布尔变量的形式为[[x \leqslant d]],并且添加了子句以确保[[x \leqslant d]]暗示域中所有d' <d,都有[[x < d']]。Ans'otegui和F. Many'a在[1]中提出了类似的编码,它被称为常规编码。 我们像往常一样使用[[e∈S]]形式的布尔变量对集合边界域进行编码,以表示元素e在集合S中。

这种布尔变量的选择使我们能够直接表示原子约束对域所做的更改。我们定义了一个原子约束映射lit到布尔文字如下:

其中d是变量xi域中的值:。 注意,lit是一个双射,除非结果是,因此lit^{-1}(l)在l\neq时才能被定义。

从变量v的域到布尔变量[[xi \leqslant d]],[[xi = d]]和[[e∈Si]]的赋值的映射定义为:

(这里有个疑问:为什么对于assign(D,x),没有x\geqslant1,和x\leqslant6?)

5.2 Faithfullness of Domains

(上一节讲到如何将原子约束表示成布尔子句的形式,但是简单地转换会导致多个不同原子约束表示成同样的布尔子句,为了保证布尔表示的忠实性,现在要对原本的原子约束引入两种新的子句形式)

鉴于我们模型约束传播的布尔变量的形式[[xi \leqslant d]],[[xi = d]], [[e∈Si]],有必要确保布尔表示忠实地代表一个整数变量的可能值。例如,布尔变量[[x = 3]]和[[x \leqslant 2]]不能都取值 (true)。

为了保持对整数变量x的忠诚,其中Dinit(x)= [l..u],我们添加两种类型的子句:(a)对于[[x \leqslant d]]形式的变量,我们添加了用于编码的子句[[ x \leqslant d]]→[[x \leqslant d +1]](下面的等式1); (b)对于[[x = d]]形式的变量,我们添加了编码[[x = d]] \leftrightarrow([[x \leqslant d]]∧[[x \leqslant d-1]])的子句(公式2-6),见下文)。 在子句形式中,让DOM(x)成为以下子句:

集合变量的布尔表示不需要额外的子句以保证忠诚性,因此我们为集合变量S定义DOM(S)= {}。最后,我们定义了一组子句(对于所有变量):

忠诚子句DOM(x)涉及2n个布尔变量和4n个子句,其中n是域Dinit(x)的大小。 相反,将有限整数变量域直接编码为SAT(仅涉及[[x = d]]形式的变量)需要O(n^{2})的子句来强制确保忠诚

如[35]中所述,或者采用[11]中描述的BDD方法,该方法需要线性数量的子句,但也引入了2n个新变量(除了n个原始变量之外)。 请注意,常规编码是线性的,仅涉及2n个变量,并且具有与直接逼近的二次编码相同的强单位传播。

这是v的所有值的域,它与所有与v相关的布尔变量一致。

使用域子句DOM,在翻译的原子约束集上的单元传播会产生原子约束的所有后果,即忠实地表示域。

以下引理表明,对于赋值A,任何由A中的决策引起的原子约束会直接出现在带有DOM的A的单位fixpoint中。

下面的定理表明,在变量v上给出一组原子约束c,那么满足这些约束的域D(v)与在忠实子句DOM上的单元传播结果和原子约束的布尔表示是同构的。

注意,对于整数变量x的对数编码为布尔值,其中被编码为

,由于原子约束的编码不是单个文字,因此与定理2类似的结果是不可能的。

5.3 Propagation Rules to Clauses

从传播规则到子句的转换很简单:

不等式文字的优点在这里很明显:为示例6中给出的域仅使用[[x = d]]命题来定义该子句需要≈100个文字的子句。

传播规则到子句的转换提供了一个子句系统,其中单元传播至少与原始传播器一样强大。

特别是如果我们有代表所有传播器F的子句,则保证单元传播至少与有限域传播一样强。

以上例子主要说明子句传播比传播器传播要强

基于上述推论,不难看出,对于传播器F,如果使用与基于传播的求解器相同的搜索策略,那么使用子句的SAT求解器不需要更多的搜索空间就可以找到相同的解。

但是这种方法存在一些不足之处。 通常rep(f)非常大。 对于实例6的x1 = x2×x3的传播器f的rep(f)的大小是大约100,000个子句。但是很明显,rep(f)中的大多数子句在任何计算中都是无用的,否则传播求解器将执行大量的传播步骤,而这几乎总是不成立的。这激发了本文的基本思想,将传播器懒洋洋地表示为子句,只有在能够传播新信息时才在其表示中添加子句

6 Lazy Clause Generation

其关键思想是,在SAT搜索期间执行传播器并记录哪些传播规则作为子句引起了实际触发,而不是预先用一组子句表示传播器f。

我们在理论T⊇DOM上执行SAT求解器。 在单位传播的每个点处,我们有一个赋值A,它对应于一个域D = domain(A)。 然后,我们在该域上(单独地)执行每个传播器 f∈F,获得新域D' = f(D)。 然后,我们选择由f实现的一组传播规则R,使得solv(R,D)= D',并将子句添加到SAT求解器中的理论T。事实上,我们将这些子句一个接一个地添加到SAT解决程序中,因为添加单个新子句可能会导致失败,这意味着余下的工作被避免了。

鉴于上述讨论,我们修改了传播器,因此它们不是返回新域,而是返回一组传播规则,这些传播规则会向域添加新信息

让lazy(f)是从域到传播规则集R \subseteq rules(f)的函数,如果f(D)=D'则lazy(f)(D)=R,其中solv(R,D)=D',同时对于每个,不再保持(即R中的每个规则生成新信息)。

定义了传播器的延迟版本lazy version后,我们可以将延迟传播定义为算法1。我们反复搜索不在固定点的传播器,并添加传播规则的小句形式 clausal version ,该小句形式将使用传播器的延迟版本触发。

我们感兴趣的是为域D建模以自动创建传播器的延迟版本的最小赋值。设A = UP(A,DOM(v)),则一个信息等效的赋值是任何一个能使A = UP(A’,DOM(v))的A‘。 将minassign (A, v)定义为最小基数的集合A',其中A = UP (A', DOM(v)),并且优先选择正等式文字literals,然后不等式文字literals,最后负等式文字literals。

输入的是赋值、传播器集合、子句集,输出的是更大的赋值和更大的子句集

我们可以自动从f创建lazy(f),如下所示。 设f(D)= D'并让Cv=minassign(D', v) - assign(D, v)成为通过在域D上传播f确定的关于v的新信息(命题propositions)。然后一组正确的规则集合R = lazy(f)(D)是传播规则的集合

我们几乎肯定可以做得更好。通常,传播器很清楚它发现一些新信息的原因。下面的示例说明了如何改进传播器的默认延迟版本。

鉴于我们理解传播器f的实现,通常可以直接看到如何实现lazy(f)。

我们声称扩展传播器f来创建懒惰(f)通常是直截了当的。 例如,Katsirelos和Bacchus [19]解释了如何通过理解f的算法为不同的域传播器f创建lazy(f) (或它们的术语中的等价物)。对于由索引[34]定义的传播器,我们可以直接构造lazy(f),因为索引定义直接说明了哪些原子约束对结果有贡献。 lazy(f)的直接构造可能不一定是tight紧的。 对于使用二进制决策图实现的传播器,我们可以使用BDD操作自动生成严格的传播规则[16]。如果我们想从任意传播器f中生成紧的传播规则,那么我们可能需要对f的算法进行更大的修改,以获得lazy(f)。

不管传播规则的严密性如何,惰性子句生成方法确保单元传播的结果至少与应用传播器本身一样强大

由于我们只在单元传播的固定点上执行传播器,因此生成一个右侧提供新信息的传播规则意味着该子句以前不可能出现过。紧密传播器的优点是,如果由lazy(f)生成的传播规则R集是紧密的,那么在搜索的生命周期内它不会涉及任何直接冗余

7 Choices for Modelling in Lazy Clause Generation

延迟子句生成将SAT求解器与有限域求解器相结合。 因为我们有两个可用的求解器,所以在建模约束问题时会出现各种可能性。 在本节中,我们将探讨延迟子句生成这一新颖求解技术允许的一些建模可能性。

7.1 Laziness and Eagerness 

延迟子句生成方法中的一个重要选择是是否lazily或eagerly地实现传播器。 传播器f的eager representation是在开始搜索之前将所有r∈rec(f)的子句cl(r)添加到SAT求解器中。 这显然可以改善搜索,因为更多信息是先验已知的,但是从句表示 clausal representation 的大小可能使其效率低下。

在实践中,eager representation仅对具有small representation的约束有用。

7.2 Variable representation

延迟子句生成方法以双重方式表示可能值的变量域:布尔赋值和整数变量上的域D。对于如何用布尔变量表示整数变量,有许多选择。默认选择(全整数表示)在第5节中进行了描述。我们在下面给出新的选择。

Non-continuous variables

我们可以表示一个整数变量,其中Dinit(x)= {d1,...,dn},其中di <di + 1,1 \leqslant i \leqslant n,并且这些值是非连续的。 与表示域[d1 ..dn]相比,这需要更少的布尔变量和更少的域约束。 布尔表示使用变量[[x = di]],1 \leqslant i \leqslant n和[[x \leqslant di]],1 6 i <n。保持布尔赋值忠实度所需的子句DOM(x)是:

Bounds variables 

我们只能用边界变量[[x \leqslant d]], l \leqslant d < u表示整数变量,其中Dinit(x) = [l..u]。虽然这意味着我们不能表示[l..u]的所有可能子集。但它的优点是需要更少的布尔变量,并且域表示只需要子句(1):

Non-continuous bounds variables 

我们可以明确地将非连续变量的表示限制在一个近似范围内,只使用布尔变量[[x \leqslant di]]和子句(8)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值