handbook of CP 10.4 Adding Constraints Before Search 翻译

毫无疑问,历史上最常用的对称性破坏方法涉及向基本模型添加约束。 在这种情况下,术语“对称性破坏”是完全合适的。 我们从一个具有大量对称性的问题转向一个新的问题,对称性大大降低 - 理想情况下根本没有。 我们为实现这一目标而添加的约束称为“对称破坏约束”。

约束程序员在识别约束问题中的对称性时,总是以一种特殊的方式添加打破对称性的约束。通常很容易想到破坏对称性的所有或大部分的约束条件。例如,假设一个数组X中有100个变量,它们是不可分辨的(因此可以自由排列)。这是直接的,正确的,坚持变量是在非递减顺序,X[1]≤X[2]…≤X [100]。如果我们进一步知道所有变量必须是不同的,我们可以使这个严格递增的顺序:X[1] < X[2]…< X [100]。如果变量取值1..100,那么简单的约束传播就会推导出X[1] = 1,X[2] = 2,…X [100] = 100。如果程序员事先注意到这一点,那么我们就可以重新规划问题,在整个程序中用值i替换每个变量X[i]。在许多例子中,约束程序员添加了更复杂的约束来打破对称性。文献中一个典型的例子是在模板设计问题中添加约束打破对称性[96]。如果做得正确,这很好,但是如果做得不正确,显然会丢失解决方案。已经制定了标准方法,这些方法可以使这个过程更容易,并且在适用的情况下更有可能是正确的。即使在这些约束不直接适用的地方,对它们的了解也会很好地为约束程序员服务,因为它应该简化可以手工添加的正确约束的推导。

10.4.1 The Lex-Leader Method

Puget[97]证明了每当CSP具有对称性时,就有可能通过在原始问题上添加约束,找到一个“约简形式”,消除对称性。Puget发现了三个简单约束问题的这种约简,并证明了这种约简后的CSP比原来的形式更有效。在此之后,关键的进展是展示一种方法,通过这种方法可以生成一组约束。Crawford、Ginsberg、Luks和Roy概述了一种名为“lex-leader”的技术,用于为变量对称[22]构造打破对称的排序约束。在后来的工作中,Aloul等人也展示了如何更有效地表达对称破坏的lex-leader约束。该方法是在命题可满足性(SAT)的背景下发展起来的,其结果同样适用于CP。

lex-leader的想法基本上很简单。 对于我们的对称组下的每个等价类解,我们将预定义一个是规范解。 我们将通过在搜索开始之前添加约束来实现这一点,这些约束由规范解决方案而不是任何其他解决方案满足

该技术要求首先选择静态变量排序。在此基础上,我们对完整的赋值进行排序。完整赋值的顺序很简单。元组只是分配给变量的值,按照我们的静态顺序定义的顺序列出。由于该方法是为变量对称定义的,所以任何排列g都会将这个元组转换成另一个元组,我们更喜欢从词典学的角度来看这些元组中最少的一个。原则上,该方法易于实现。 组中的每个排列都给出了一个约束。 因此,lex-leader方法定义的约束集是

其中V是CSP变量的向量,是词典排序关系。 字典顺序与计算机科学中的标准完全一致,例如, AD  BC如果A <B或A = B且D≤C。

Figure 10.5:包含6个变量的3×2矩阵; 以及交换两行并反转列的结果,将排列映射ABCDEF映射到FEDCBA。 还显示了由12个对称性引起的12个lex-leader约束,包括恒等约束。 注意每个约束如何对应于变量的排列,因为该方法被定义为适用于变量对称:所示的矩阵变换给出约束10。

一个小例子说明了这种方法。考虑图10.5中描述的一个3×2矩阵,其中行和列可以自由排列。对称形成S3×S2组,顺序为3!2!= 12。我们按字母顺序选择变量,所以问题变量的向量是ABCDEF。12个对称导致了图10.5中所示的12个lex-leader约束,包括来自恒等式的空洞对称。

lex-leader约束的一个重要的实际问题是,它们不“尊重”搜索中使用的变量和值排序启发式。也就是说,搜索树中最左边的解决方案很可能是不规范的,因此是不允许的,从而导致搜索量的增加。这与SBDS和SBDD(第10.5.1和10.5.2节)等技术形成了对比,它们确实尊重启发式。在一些简单的例子中,“错误的”启发式可能导致运行时[52]急剧增加。这个问题是该方法固有的,但在许多情况下,很容易找出什么是“正确的”启发式。特别是,如果在搜索中使用与构造lex-leader排序相同的静态变量排序,并且值尝试从小而大,则不应该发生这种冲突。然而,这确实限制了约束程序员使用动态变量排序启发式的能力。

lex-leader的一个不太容易解决的问题是许多组包含指数个对称性。 Lex-leader对该组的每个元素都要求一个约束。 在具有m行和n列的矩阵的情况下,这是m!n !,这通常是不切实际的。 因此,在许多情况下,lex-leader适用但不切实际。然而,lex-leader仍然是最重要的,因为有很多方法可以用来推导新的对称性破坏方法。我们将在下面几节中讨论这些。

最后,我们重申,lex-leader方法只针对变量对称性定义:即那些排列变量但始终保持值不变的对称性。因此,同样的限制也适用于下面基于lex-leader的方法。这在技术的原始域SAT中不是问题,因为只有2个值[22]。如果需要,我们可以添加一个新的变量来表示每个变量的否定,这样就可以将改变值的对称性转换为变量对称性。不幸的是,如果我们有d个值,我们需要每个变量的d!个版本来应用这个简单的思想。因此,适当地一般化lex-leader来处理值对称是有价值的,即使仅限于某些特殊情况。

10.4.2 Simplifying Lex-Leader Constraints

Lex-Leader的约束可以简化,或“修剪”以消除冗余[22,77]。 在Frisch和Harvey [41]之后,我们可以使用图10.5中的例子来说明这一点。 第一个想法是单独查看每个约束。 例如,考虑上面的约束2,ABCDEF  ACBDFE。 我们可以从每个元组中删除第一个和第四个变量,因为很明显A = A和D = D,给出BCEF CBFE。 但是如果B <C,则无论其他值如何都满足约束,否则我们有B = C来满足约束。换句话说,如果元组中的第二个变量是相关的,则它们必须相等。 类似地,对于E和F,实际上约束等于BE CF. 在任何地方应用这种推理,我们得到了图10.6所示的约束。 值得注意的是,约束2和3表明列必须按字典顺序排序,并且约束7强制按行按字典顺序排列行。 我们在10.4.5节回到这个观察。

我们可以更进一步,把约束看作一个集合,而不仅仅是单独的。例如,是传递的,因此约束2和约束3意味着约束4。约束11中有一个更复杂的例子。每个元组的最后一个元素是E和C,但是如果它们是相关的,我们有A=E和B=F=D=C。但是约束3暗示A≤B,由此推出E≤C,所以元组的最后一个元素是不相关的,可以删除。这个推理导致了一组如图10.7所示的8个约束,相当于原来的12个[41]。

不幸的是,这里概述的方法并没有解决指数对称性的基本问题。 一般来说,即使在简化集中,对称性的数量仍然是指数的[77]。 然而,该方法确实说明了如何简化约束集,我们将在下一节中看到结果非常引人注目的特殊情况。

10.4.3 Symmetry with All-Different

“all-different”的约束在约束编程中非常常见。它可能在对称性问题中发生得更频繁。Puget已经证明[101],如果我们在一组n个变量上只有变量对称(定义lex-leader的唯一情况),并且这些变量都受到完全不同的约束,那么只有n - 1个二进制约束才能完全打破对称。这个结果适用于作用于一组变量上的任何G组。这个显著的结果很难再好了,但实际上是相对简单的。

我们从一个示例开始,该示例仅包含一组不同变量的可变对称性,但其中该组不是一个简单的组,如Sn。

Example 10.22. Graceful Graph

我们说,一个有m条边的图是优美的,如果存在一个标记f的顶点是这样的:

  • 对于每个顶点i有
  • 值集 f (i)是完全不同的,
  • 每个边 (i, j)的值集合abs( f(i), f(j) )都是不同的。

如果每个顶点vi都有一个变量vi,则可以直接转换为CSP,参见[78]。 问题的可变对称性是由图的自同构引起的。 有一个值对称,它将v映射到m-v,但我们忽略该对称性以仅保留值对称性。 有关优美图中对称性的更多信息,请参见[89]。 Petrie和Smith在优美图中考虑了各种形式的动态和静态对称破解方法[89],使用这些技术,他们发现了以前不知道的优美图形的实例。作为一个例子,让我们考虑图K3×P2,如图10.8所示。 该组允许K3的3!种排列中的任何排列,只要同时对K3的两个副本应用相同的排列,以及交换两个三角形。 因此有12个对称性。 实际上,该组与图10.5中矩阵的同构,因此约束与我们在那里显示的相同。

使用变量受到all-different约束的事实,我们可以显着减少对称破坏约束的数量。 例如,考虑对称性破坏约束由于A = A很简单,并且因为B = C因为all-different约束而不能成为真,所以这个约束可以简化为:B<C。这种简化通常是正确的,并且可以如下形式化。 给定置换g,令s(g)为最小i,使得,并且令t(g)等于

Lemma 10.23. [101]

给定CSP,其中变量V受到全部不同的约束,并且该CSP具有可变对称组G,则可以通过添加以下约束来破坏所有变量对称:

注意,如果两个排列g和h使得s(g)= s(h)和t(g)= t(h),则相应的对称性破坏约束是相同的。 因此,对于每对i,j仅仅陈述一个对称性破坏约束就足够了,使得存在具有i = s(g)和j = t(h)的置换g。可以使用Schreier Sims算法[108]计算这些对的集合。 在我们的示例中,这些约束是:

请注意,这些约束是多余的。 约束A <C由第一个和最后一个约束引起。 通过考虑<约束的传递性,该注释可用于进一步减少约束的数量。Schreier Sims算法为我们提供了稳定链和一组陪集代表Ui,如第10.1.2节中所定义。 Puget用它来证明:

Theorem 10.24. [101]

给定具有n个变量V的CSP,使得对这些变量存在all-different约束,则所有变量对称性可以被最多n -1个二元约束破坏。

对于我们的例子,我们得到了5个约束:注意在这种情况下这是n  -  1。

虽然这只是对单个约束的简化,但这仅仅是因为示例的大小比较小。一般来说,Puget已经将需要的对称数从可能的n!减少到最小的n - 1,这是在存在完全不同约束的情况下变量对称的常见情况。就其本身的价值而言,这显示了将打破对称性的约束与来自问题的约束结合起来的力量,这仍然是一个成熟的开发领域

10.4.4 Subsets of Lex Leader

上一节展示了在适当的情况下,一个多项式数量的约束如何导致与完整的lex-leader约束集等价的推理。不幸的是,这样的子集并不总是可用的。一些研究人员提出了一种方法,在不破坏对称性的前提下,只陈述一个多项式数量的约束条件。由于完整的lex-leader约束集在每个等价类中只留下一个解,因此使用子集必须在每个类中至少留下一个解,但可能会留下多个解。因此,对称性破坏约束不能保证破坏所有对称性。 一般而言,目标是达到可接受的权衡,大大减少的约束数量导致更有效的搜索。 在某些情况下,已经提出了一组对称性破坏约束,并且仅在后来才意识到它们代表了lex-leader约束的子集。 这证明了lex-leader的普遍性和自然性。

Aloul等人在SAT中已经证明,在FPGA路由问题[1]等例子中,非常小的lex-leader约束子集可以获得非常成功的结果。与目前所描述的基于约束的工作不同,SAT问题的对称性组是通过实例的图自同构过程发现的。令人惊讶的是,使用的对称破坏谓词子集只是图自同构检查发现的组的生成器。值得注意的是,这提供了良好的性能,因为例如,在一个包含10^{16}个元素的组中使用了一组21个生成器。只有非常特殊的生成程序集才具有这样的效率,而且还没有很好地理解是什么使图自同构程序发现的生成程序如此出色。虽然这是在SAT上下文中,但类似的结果应该适用于约束编程。

Shlyakhter指出,对于无环有向图、排列、关系和函数,可以发现lex-leader约束的良好子集(尽管通常不完整)[109]。除了个体的贡献,这建立了使用lexleader约束作为一种方法来寻找不完整的对称破坏约束集,但子集在实践中是有效的。一个特别的例子证明了这一点是非常有趣的是矩阵模型,我们接下来将讨论它。

10.4.5 Specialised Ordering Constraints for Matrix Models

矩阵模型的特殊排序约束

许多作者采用了一种相当不同的方法来选择适当的约束来打破对称性。 这是基于约束编程中经常出现的那种对称性。 鉴于我们认为某些对称性很重要,我们通常可以分析lex-leader约束的一个子集,这些约束通常会破坏大量的对称性并且可以有效地推理出来。这种关注的优点在于可以构建用于处理对称性破坏约束的专用方法,例如用于为给定约束集传播广义弧一致性的专用算法。 大多数工作都集中在矩阵模型的对称破坏约束上; 其中'矩阵模型是一个包含一个或多个决策变量矩阵的约束程序'[36]。矩阵模型确实很常见。例如,高尔夫球手的问题可以建模为一个三维布尔矩阵,其维数对应于周数、球员数和组数。变量x_{ijk} = 1 当且仅当在第i周,玩家j在k组比赛[113]。其他可以作为例证的问题包括平衡不完全块设计、钢面板设计、进步党问题、机架配置、模板设计和仓库位置问题[35]。

这方面工作的主要例子是对矩阵模型[36]中的行和列按字典顺序排序。我们处理的矩阵中行和列是完全独立置换的。这意味着,我们可以同时交换任意两行中的所有变量,保持每行中变量的顺序。或者,我们可以交换任意两列,保留列中变量的顺序。这种对称性很常见,因为我们经常通过建模引入对称性。例如,在高尔夫球手问题的3维模型中,球员,组和周的顺序是任意的,并且每个都可以自由地进行排列。 具有行和列对称性的n×m矩阵由一组阶数n!m!作用。 这些对称性改变了行和列的顺序,但保留了重要的关系:特别是同一行中的两个元素总是在同一行中,而同一列中的两个元素保留在同一列中

如果每一行在字典上都比下一行(如果有的话)小(表示为),那么二维矩阵中的行按字典顺序排列。对行添加字典顺序会破坏所有行对称性。类似地,我们可以通过排列列来打破所有列的对称性。但有趣的情况是,我们坚持行和列应该同时按字典顺序排列。这一点并不明显,这是一致的,也就是说,总是有一个对称,将排列的行和列,使两个集合都是字典顺序。事实上,如果我们坚持行按递增顺序排列,列按递减顺序排列,我们就可以去掉解。然而,如果我们坚持所有维度都是递增的,那么总是有可能的,而理解这一点的最佳方法是,约束集等价于lex-leader约束的子集[109]。通常,对行和列的字典顺序不会破坏行和列对称的所有组成。然而,在实践中,它经常破坏一种有用的对称性。这一点很重要,因为一般来说,在行和列对称的情况下,找到字典上最不具代表性的矩阵是NP-hard的[22,10]。

由于lex排序行和列的有用性以及约束的简单性,Frisch等人引入了一种最优算法来建立两个向量之间 约束[40]的泛圆弧一致性。时间复杂度为O(nb),其中n为向量的长度,b为整型变量调整边界所花费的时间(取决于所使用变量的实现)。因此,这在权衡中给出了一个极具吸引力的点:在约束上建立高水平一致性的线性时间,而约束常常破坏矩阵模型中的许多对称性。该算法可用于在的任何使用中建立一致性,因此特别适用于lex-leader约束的任何使用。 Carlsson和Beldiceanu [18]表明,传播算法可以扩展到一系列向量的广义弧一致性。 如果矢量成对比较,这可以推导出不可用的信息,并且如果存在m个矢量则以线性时间O(nbm)完成。

只要注意,lex排序矩阵可以与附加约束相结合,从而打破更多的对称性,同时仍然利用lex约束的有效算法。通常,这是通过选择适当的lex-leader约束子集来实现的。如果矩阵中变量的顺序与lex约束相同,这是确保正确性的一种简单方法:这意味着从左上角开始,按行或列顺序进行。一种非常常见的技术是坚持左上角被矩阵中的(可能相等的)最小元素占据:这不是由lex约束本身保证的。 如果整个矩阵中的所有值都不同,则这个附加约束可以保证所有对称性都被破坏[36]。 还有其他特殊情况,所有对称性都被打破[36]。

已经以与double-lex约束类似的方式开发了其他约束,并且应用于破坏矩阵中的对称性。 根据Frisch的建议,Kiziltan和Smith研究了多顺序序列(multiset ordering)[70]。 排序是按递增顺序写入的多组元素的词典排序。更正式的是,更正式的是,如果V1的小元素小于V2的最小元素,或者如果最小元素相同,则,并且,其中新的向量来自删除单个最小元素的出现。多顺序排序(multiset ordering)的一个优点是它可以放在(比方说)行而不影响矩阵的列对称性。 因此,即使列对称性不形成组Sn,也可以使用它。 Frisch等人提出了一种线性传播算法,使其具有与双lex算法类似的效率[43]。

另一个相同风格的工作例子是Frisch,Jefferson和Miguel [42]引入的“allperm”约束。 如果阵列V1在字典上小于V2的任何排列,则。 Frisch等人研究了这种方式可能(也可能不会)与其他约束条件(如double-lex和multiset)相结合的方法。例如,坚持行和列是lex排序的,同时第一行是所有其他行,这是一致的,但是我们可能不要求第二行是后面的行。再次,给出了一种适用于allperm的特殊传播算法。

我们可以构造二维的2n*2n矩阵模型,其中我们坚持行和列是按词序排列的,但在一个n*n子矩阵中仍然包含完整的矩阵对称性。图10.9显示了n = 3的示例。变量A到I的值是不受约束的,但是如果我们坚持它们构成一个拉丁正方形,那么这个例子是有效的,因为行是列,按多顺序排序。如果我们坚持所有的A到I都≥0,如果我们坚持第一行<所有其他行,这个例子就成立了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值