约束中的对称性一直很重要,但近年来已成为一个主要的研究领域。 约束编程中的一个关键问题早已被认识到:搜索可以一遍又一遍地重新审视等效状态。 原则上,已经通过许多不同的技术解决了该问题。 在我们写作时,由于两个原因,研究仍然非常活跃。 首先,在对称排除已知的技术的实际应用中存在许多困难,并且克服这些仍然是重要的研究问题。 其次,到目前为止,该领域取得的成功鼓励研究人员找到利用对称性的新方法。在本章中,我们将讨论这些问题,以及已经构思出的对称排除方法的细节。

图10.1:找到一个包含9个皇后和每种颜色的一个国王的象棋位置的难题的解决方案,规则是没有任何棋子与任何相反颜色的皇后在同一条线上(行、列或对角线)。对于对称性,解是唯一的。

为了说明对称性的含义,我们考虑图10.1所示的国际象棋难题。 这个难题的解决方案是独特的“达到对称性”[115],但在这种情况下,对称性是什么意思呢? “对称性”是指一种改变碎片位置的操作,但当且仅当起始状态发生时,其末端状态服从所有约束。给定一个满足所有约束条件的解,我们可以通过对第一个解应用任何对称性来找到一个新的解。例如,给定图中谜题的解决方案,我们可以交换每个部分的颜色,因此黑色皇后出现在白色皇后出现的地方,反之亦然。同样,我们可以将棋盘旋转90度的任意倍数,以得到一个新的解。最后,我们可以反映棋盘的水平轴,垂直轴和两个对角线轴。由于这些对称可以组合在一起,所以有16种可用的对称,包括将所有东西放在原地的标识操作。

为什么对称性很重要?主要原因是我们可以利用对称性来减少解决问题所需的搜索量。这具有巨大的潜在利益。例如,假设我们搜索国际象棋拼图的解决方案,第一个任务是在左上角放置一个白皇后。事实上,搜索决定并不是真正尝试左上角的白色女王,而是决定尝试所有可能的解决方案,在棋盘的任何角落都有任意颜色的女王。由于有16个对称性,我们有可能将搜索减少16倍。对称性的重要性的第二个原因是许多约束问题在它们中具有对称性。此外,建模行为可以引入对称性。例如,如果我们使用每个女王的变量为上面的国际象棋谜题建模,范围从1到64表示其位置,则每个解决方案将有个对称版本,因为每组皇后可以被置换并且交换了两套。然而,这种模型对于有效传播和启发式可能是理想的,因此我们希望能够有效地处理其对称性。

对称在约束规划中最重要的应用是为了减少搜索而进行的“对称性破坏”。对称性破坏的目的绝不是探索两个相互对称的搜索状态,因为我们知道这两种情况下的结果必须是相同的。在约束规划中,确定对称性破坏的三种主要方法是很常见的。第一种方法是重新构造问题,使其具有较少的对称性,甚至完全没有对称性。第二种方法是在搜索开始之前添加打破对称性的约束,从而使一些对称解不可接受,同时在每个对称等价类中至少保留一个解。最后一种方法是在搜索过程中动态打破对称性,对搜索过程进行适当的调整。这种分类是简单的,因为每种方法都有巨大的差异,并且方法之间有很大的共性。然而,这是一个非常有用的非正式分类,我们将围绕它进行讨论。

在本章的其余部分,我们希望回答以下问题:我们如何实现可能的搜索减少? 有哪些一般方法,涉及哪些权衡? 我们怎样才能让日常约束程序员尽可能地使用它? 还有哪些研究方向?

10.1 Symmetries and Group Theory

数学中对对称性的研究叫做群论。在阅读这一章时,我们假设没有小组理论的背景知识,所以我们将介绍所有我们需要的概念。我们不为在这个早期阶段强调群理论的作用而道歉,因为它对于理解对称在约束规划中的作用是至关重要的。我们只能非常简短地介绍关键概念,因此这一部分应该只作为对数学中最大的研究领域之一的最简单的介绍。幸运的是,对于大多数约束程序员来说,一点关于组理论的知识实际上就足以理解到目前为止所做的大部分工作。遗憾的是,数学家对群理论的介绍常常想当然地认为它与对称性有关,因此我们将花一点时间来解释这一点。我们将通过排列来解释群体理论。首先,没有任何东西丢失,因为每个组都可以表示为一组排列。其次,它使我们很容易理解作为一个组元素的对称性和作为一个动作的对称性之间的联系。我们将强调群体动作的概念,因为这表达了对称性如何改变搜索状态,这是我们的主要兴趣所在。

Example 10.1. Chessboard Symmetries 例10.1。棋盘上的对称性

考虑一个3×3棋盘。我们用数字1到9标记9个正方形。这些数字是会被对称移动的点。棋盘有八种自然的对称性。我们总是包含恒等对称,这使得每一点都是这样。标识显示在图10.2的左上角。然后,我们可以顺时针方向旋转棋盘90度、180度和270度。这些点的最终位置显示在图10.2顶部行的其余部分中。最后,在垂直轴上有反射,在水平轴上有反射,在两个主要的对角线轴上有反射,这些都显示在下面一行。

对称性和排列之间的联系可以非常简单地看到。置换是一个集合和它自己之间的一一对应。每一种对称都定义了一组点的排列。写排列的一个简单方法是用柯西形式。柯西式是两行数。第一行是按升序排列的元素的完整集合,这些元素由置换操作完成。第二行显示顶部行中的每个元素映射到的编号。例如,恒等对称和置换将每个点映射到自身,如图10.3左上角的Cauchy形式所示。90度的旋转对称在右上角的柯西式中显示出来。我们看到点1在r90后被7所取代,7依次被9所取代,9被3所取代,3被1所取代。这是一个循环(1 7 9 3)另一个循环是(2 4 8 6)还有一个平凡的循环只包含(5)。一般来说,群理论家不使用柯西形式,他们更喜欢一种基于排列定义的循环集的符号。

图10.3:表示棋盘对称性的排列,以柯西形式书写

Example 10.2. Cyclic form 循环形式

上面的对称r90包含循环(1 3 9 7)、(2 4 6 8)和(5)。r90的循环形式是(1 3 9 7)(2 4 6 8)(5),尽管可以省略长度为1的循环。置换将每个点映射到它所在循环的后续元素,但最后一个元素映射到第一个元素,没有循环中的一个点映射到它自己。在循环形式中,我们可以编写3×3棋盘的对称性,如图10.4所示。

图10.4:表示棋盘对称性的排列,以循环形式书写

比较图10.3和10.4表明,循环形式更加简洁,特别是当许多点不被置换移动时。 一个缺点是它没有准确定义排列作用的点集:例如,上面的排列都没有移动点5,因此数字5没有出现在图10.4中。同样,相同的排列也可以用许多不同的方式写下来,因为循环可以以任何顺序出现,并且每个循环可以从其中的任何元素开始。然而,循环形式对于人们来说是如此自然,以至于计算群体理论系统GAP将其作为排列的输入语言,尽管它随后会在内部将其转换为更高效的计算形式。

两种形式的写下排列都可以很容易地看出置换如何作用于一个点。 一般来说,如果p是一个点而g是一个排列,那么我们将写来记下p被移动到g下的点。 例如, = 7, = 3。我们经常以自然的方式将这种表示法扩展到包含点的其他数据结构集。例如,我们有 = {, , } ={7, 1, 6} ={1, 6, 7}:最后两项之间的等价仅仅是因为集合是无序的。

关于排列的某些关键事实提供了它们与群体之间的联系。 我们将解释这些,然后提供一个组的基本定义。 首先,很容易计算出两种排列的组合,对于排列f和g,我们将写为f◦g。f◦g的结果是将每个点先移到f,然后移到g,通过移动该点的结果来计算的。 也就是说,对于任何点p,。 重要的是要注意动作的顺序,即当我们写f◦g时我们做f然后g,这是与sin(cos(x))等函数组合相比的另一种方式。 由于f和g都是一对一的对应关系,因此它们的组成也是如此,因此两种排列的组合是另一种排列。 我们可以逐点计算出构图:我们只需计算1移动到f下的值,然后将结果移到g下,然后重复每个点。

相当于是将id先转90度,再对x轴轴对称翻转,得到的3*3棋盘结果

我们已经描述了恒等置换的存在,我们称之为id。 这可以定义为任何一组点的空循环集。 对于任何排列f,存在逆置换,使得。 这很容易计算:在循环形式中,我们只是颠倒每个循环的顺序; 在Cauchy形式中,我们交换两行,然后重新排序列,以便第一行按数字顺序排列。

最后,我们注意到排列的组合是满足结合律的。 也就是说,f◦(g◦h)=(f◦g)◦h。 这个事实的真相依赖于排列组成的定义,即g◦h对每个点给出与应用g然后h相同的结果。 因此,例如,是将f应用于7,然后g,然后h:但这与完全相同 也可以通过对结果应用f得到7,g,结果为h。 我们现在最终提出了定义一个群体group的公理。

Definition 10.5. Group Axioms 组是一个非空集G,具有组合运算符◦,这样:
 -  G在◦下关闭。 也就是说,对于所有g,h∈G,g◦h∈G; 
 - 有一个身份id∈G。也就是说,对于所有g∈G,g◦id=id◦g= g; 
 -  G的每个元素g具有逆g-1,使得
 - ◦是满足结合律的。 也就是说,对于所有f,g,h∈G,(f◦g)◦h=f◦(g◦h)。

Definition 10.6. Order of a Group 组G的顺序是集合G中的元素的数量。它由 |G| 表示。

Example 10.7. 棋盘{id,x,y,d1,d2,r90,r180,r270}的对称组形成一组8阶。我们有r90-1 = r270,r270-1 = r90,以及所有其他元素 g是自反的,即g-1 = g。 棋盘组是非交换的,因为d1◦r90= x但是r90◦d1= y。在约束规划的大多数应用中,组不是可交换的。注意,我们省略了与组相关的操作,即置换组合(permutation composition):这通常在不会引起混淆的地方进行。

注意,我们对组的(完全标准的)定义没有提到组元素所做的操作。理解组元素可以以两种不同的方式运行是非常重要的。首先,组元素(即对称)在其作用的点上有作用。在棋盘的例子中,点数是1…9,我们用  表示g作用于p点的结果。这就是我们到目前为止所强调的。其次,group元素g由组合操作符操作,以排列组中其他元素的值。也就是说,f◦g给出了另一个组元素。 后一种操作是群论中大多数研究的重点。 相反,正是群体行为对我们来说更为重要,因为正是这个动作代表了约束问题中变量和值的对称性。

对于排列,操作◦是如上所述的组合。 我们已经证明存在一个同一性排列,所有排列都有逆,并且排列的组合是相关的。 最后的条件是关闭。 我们已经证明两种排列的组成是另一种排列。然而,对于形成组的一组排列,我们必须具有任何两个排列的组合在集合中。 这取决于我们选择的排列集。 有一种简单的方法可以保证闭包,即采取一组排列并产生所有排列,这些排列是由任意组合而产生的。

Definition 10.8. The Generators of a Group 群的生成器

设S是可以由组操作◦组成的任何元素集(例如,排列)(例如,置换组合)。 如果G的每个元素都可以写成S中元素的乘积,并且S的任何元素序列的每个乘积都在G中,则集合S生成G.集合S被称为G的一组生成符,我们写G =<S>。

Example 10.9. Generators of Chessboard Symmetries

棋盘对称性由{r90,d1}生成,因为:

给定任意一组排列,我们总是可以处理由该集合生成的组,因为根据定义它是封闭的。查找并使用生成器是表示组的一种非常重要的方法。如果一个组中有|G|个元素,则总是有一个大小为或更小的生成集。

Definition 10.10. Subgroup 子群

G组的子组H是G的子集,H本身就是一个组,具有与G相同的组合运算符。两个简单且通用的子组示例是G始终是G的子组,{id}也是如此。

Example 10.11. 棋盘对称子组
集合{id,r90,r180,r270}形成顺序4的子组。从例10.1可以看出,这可以由元素r90生成。

【陪集coset】

给定G组的子组H和G的元素g,(右)陪集H◦g是元素集{h◦g|h∈H}。 用不同元素构造的G中的两个H的陪集是不相交的或相同的,即因此,H的陪集cosets分割了G的元素。此外,H的所有陪集都具有大小| H |。陪集数被称为G中的H的索引,并且由| G:H |表示。 如果从H的每个陪集中选择一个元素,则形成一组陪集代表,该集合是正确的横向。 G组是通过组合H的元素与这些陪集代表形成的陪集的结合。

Example 10.12. Cosets of Chessboard Symmetries

G组是全部的棋盘对称可能,H组是棋盘的旋转对称。那么H的两个coset是:{id, r90, r180, r270}和{d1, x, d2, y},其中H = H◦id和H = H◦d1。一组coset表示是{id, d1},但是总共有16个可能的coset表示集,由每个coset中的一个元素组成。

G中一个点的轨道是该点可以通过G的元素映射到的不同点的集合。

Definition 10.13. Orbit

G中的点δ的轨道是集合

Example 10.14. Orbits of Points on Chessboard

回顾实例10.1中给出的棋盘对称图,可以计算给定点的轨道。 例如,1的轨道是{1,3,7,9},因为,并且因为所有其他组元素将1映射到这些点中的一个。

点的稳定器是固定或稳定该点的一组元素。 它指示哪些元素可以应用于某个点,这不会导致该点的值移动。

Definition 10.15. Stabiliser 稳定器

设G是作用于(尤其)点β的置换群。 G中β的稳定器定义为: 稳定器Gβ是G组的亚组。

Example 10.16. Stabilisers of chessboard symmetries

从棋盘对称性的图10.2中,可以识别任何给定点的稳定器。 例如,点1的稳定器是,因为这些元素将点1映射回自身。 点5的稳定器是整个组G,即,因为没有一个对称点移动点5。

10.1.1 Group Theory in Constraint Programming

每当约束问题具有对称性时,我们就可以构造一个组来表示问题中的对称性。 该组的元素置换点,取决于特定问题的对称性。 组的元素作用的点通常是变量值对。

Example 10.17. 表示图10.1中的国际象棋问题的对称性

  • 变量Variables -  CSP具有与棋盘方块对应的个变量,表示变量需要个标签
  • 值Values - 棋盘的每个方格有5个可能的值:白色女王,黑色女王,白色女王,黑色女王,或者是空的。
  • 变量值Variable-Value - 变量有个可能的标签,变量有5个可能的标签,表示变量值对需要5个点。

有一组特别重要的排列。 n个对象的所有排列的集合Sn形成一个组,在n个元素上称为对称组。 组Sn的大小为n!。 这个组经常出现在约束中,因为我们经常有n个彼此无法区分的对象,因此它们被Sn作用。它也以组合形式出现。例如,我们将看到一个常见的情况是一个二维的变量矩阵,我们可以自由地排列m列(保留行)和n行(保留列)。因为我们可以先排列列,然后是行,所以我们有一个组合称为直接乘积Sm×Sn。

10.1.2 Computational Group Theory

计算组理论是数学和计算机科学领域的一个大型跨学科研究领域。 巴特勒写了一本关于这个领域使用的算法的教科书[17]和霍尔特等人。 [65]最近写了一本计算组理论手册。 计算组理论有两个主要的包,称为GAP [46]和Magma [14]。使用对称性的约束程序员通常可以使用GAP或Magma作为外部函数。 但是,如果不可用或不合适,理解计算组理论算法很重要。 最重要的算法是Schier Sims算法,我们给出了一个非常简短的概述。

利用Schreier Sims算法[108]构造了一个稳定链G0, G1,…, Gn如下:

'

根据定义,

Schreier Sims算法还计算了一组coset表示Ui。这些是Gi中i的轨道:Ui = iGi。

根据定义,Ui是一组值,i被G中的所有对称性映射到这些值,这些对称性至少为0…(i - 1)不变。

在约束编程术语中,稳定器可能是上面概述的最有用的概念。 变量/值对的稳定器显示在搜索期间将该值分配给给定变量后未对称的对称性。 关于GAP-SBDS,在10.5.4节中对此进行了更详细的解释。 稳定器链表示在搜索期间分配了变量集合之后保留的对称性。

Chapter 10 Symmetry in Constraint Programming 10.1 Symmetries and Group Theory相关推荐

  1. 【论】Balancing bike sharing systems with constraint programming

    Balancing bike sharing systems with constraint programming 关键词:Applications · Constraint programming ...

  2. [索引]引用Balancing bike sharing systems with constraint programming的文章

    文章目录 1. Dynamic container drayage with uncertain request arrival times and service time windows 2. P ...

  3. Oracle 10.2.0.4和10.2.0.5 中 OEM bug 8350262

    一. Bug 问题表现 2011年安装Oracle 10.2.0.4 和10.2.0.5 版本时,在配置OEM的时候会报错. 忽略这个错误后,DB 可以成功创建或者升级. MOS 上关于这个bug的说 ...

  4. oracle10G rac 10.2.0.1升级10.2.0.4

    前言 ocr版本查询指令:  ocrcheck vote盘路径查询指令: crsctl query css votedisk 相关指令参考来源:http://hzhg12345.blog.163.co ...

  5. int * * a[10] int * (*a)[10]和 int(*a[10])() 是什么意思

    int* (*a)[10]; a是一个指向包含10个int型指针元素的数组. 比如: #include <stdio.h>int main() {// 定义数组,包含10个int*int* ...

  6. 七周三次课(1月24日) 10.11 Linux网络相关 10.12 firewalld和netfilter 10.13 netfilter5表5链介绍 10.14 iptables语法...

    七周三次课(1月24日) 10.11 Linux网络相关 10.12 firewalld和netfilter 10.13 netfilter5表5链介绍 10.14 iptables语法 ====== ...

  7. Java黑皮书课后题第10章:*10.10(Queue类)10.6节给出一个Stock类。设计一个名为Queue的类用于存储整数。像栈一样,队列保存元素。在栈中,元素后进先出。队列中元素先进先出

    10.10(Queue类)10.6节给出一个Stock类,设计一个名为Queue的类用于存储整数 题目 程序 破题 代码 Test10.java Test10_Queue.java UML 题目 程序 ...

  8. Java黑皮书课后题第5章:**5.7(金融应用:计算将来的学费)假设今年某大学的大学为10000美元,学费的年增长率为5%,一年后,学费将是10500美元。编写程序,计算10年后的学费,10~13费

    **5.7(金融应用:计算将来的学费)假设今年某大学的大学为10000美元,学费的年增长率为5%,一年后,学费将是10500美元.编写程序,计算10年后的学费,以及从现在开始10年后开始计算,4年内的 ...

  9. 小米10pro第二个摄像头下面_小米10至尊纪念版、小米10 Pro对比评测:至尊版“至尊”在哪里?...

    在几天前的雷军十周年演讲中,小米10至尊纪念版正式面世,价格刚公布,就引起了不小轰动.在吃瓜群众看来,小米终于迈向了高端,毕竟最贵的版本,售价可以卖到6999元,和三星.苹果旗舰保持在一个水准.而对于 ...

最新文章

  1. 我们为什么选择Kubernetes
  2. Java中的==和equals区别
  3. Java实现AES和RSA算法
  4. 开发HTML5手机游戏的5个注意要点--手机开发前景-- 转
  5. lambda 分类聚合_使用Java 8 Lambda,流和聚合
  6. Spring boot 上传文件大小限制
  7. php 类静态变量 和 常量消耗内存及时间对比
  8. 加菲猫的人生歪理~ 看完果然开心,哈哈~
  9. 财务自由之路读书笔记二
  10. 《Android软件安全与逆向分析》— Android 书籍
  11. 南邮JAVA程序设计实验3 流处理程序设计
  12. mpp格式文用什么软件打开
  13. 什么是物联网数据采集网关?物联网数据采集网关的特点
  14. word如何用制表符对齐公式
  15. 面试必备:Zack 大佬带您深入Spring MVC DispatchServlet 源码分析
  16. for /f 用法详解
  17. 万能解压器安卓版_全能压缩app下载 全能压缩(手机解压软件) for Android v11.5 安卓版 下载-脚本之家...
  18. 哈夫曼树(Huffman Tree)及哈夫曼编码(Huffman Coding)
  19. 一文读懂eBPF/XDP
  20. pycharm连接服务器方法

热门文章

  1. 掘金量化交易接口的类型有哪些?
  2. INIT_DELAYED_WORK() 函数剖析
  3. linux开机启动故障,Linux启动系统及故障排除
  4. Nginx轮训tomcat服务器配置流程
  5. 梅州医院检验科建设标准:设计规范
  6. docopt——好用的Python命令行参数解释器
  7. C/C++ 之 printf 输出函数的使用
  8. 移动开发-使用contentprovider的方法类进行数据获取
  9. android屏幕翻转时onSaveInstanceState的使用
  10. IT产品原型与UI设计之二