CP基础知识1.introduction

1、introduction

2、Constraint Satisfaction: An Emerging Paradigm(约束满足:一种新兴的范式)

3、Constraint Propagation(约束传播)

4、Backtracking Search Algorithms(回溯搜索算法)

5、Local Search Methods(本地搜索方法)

6、Global Constraints(全局约束)

1、introduction

1.1 Purpose of the Handbook

        约束编程是解决组合搜索问题的有力范例,它利用了人工智能,计算机科学,数据库,编程语言和运筹学等广泛的技术。约束编程目前成功应用于许多领域,例如调度,计划,车辆路线,配置,网络和生物信息学。约束编程的基本思想是用户声明约束,并使用通用约束求解器来解决它们。约束只是关系,约束满足问题(CSP)规定了给定决策变量之间应该保持哪种关系。例如,在计划公司中的活动时,决策变量可能是活动的起始时间和持续时间以及执行它们所需的资源,而约束可能取决于资源的可用性以及一次活动使用资源的数量。约束求解器采用这样的现实问题,用决策变量和约束表示,并找到满足约束的所有变量的赋值。
        约束求解器系统地搜索解空间,如回溯或分支定界算法,或使用可能不完整的局部搜索形式。系统方法通常交织搜索和推理,其中推理包括将包含在一个约束中的信息传播到相邻约束。这种推断(通常称为约束传播)是有用的,因为它可以减少需要访问的搜索空间的部分。
        虽然定义一组约束似乎是一种模拟现实世界问题的简单方法,但找到一个适用于所选求解器的良好模型并不总是那么容易。
选择不当的模型可能很难解决。因此,必须非常谨慎地选择一个好的模型,并设计能够利用所选模型特征的求解器。从这个描述可能看起来约束编程是“编程”的“数学规划”的意义:用户声明性地陈述对一组决策变量的可行解的约束,并且底层求解器解决了约束。然而,约束编程也是“计算机编程”意义上的“编程”:用户需要编写策略来搜索解决方案。没有这个,解决过程将是非常低效的。这在基于逻辑的编程语言中很自然,例如约束逻辑编程,但它也可以在其他编程范例中完成。

1.2 Structure and Content

该手册分为两部分。 第一部分介绍了约束规划的基本基础,包括历史,约束传播的概念,基本搜索方法,全局约束,易处理性和计算复杂性,以及将问题建模为约束问题的重要问题。 第二部分介绍约束语言和求解器,基本框架的几个有用扩展(如区间约束,结构化域和分布式CSP),以及约束编程的成功应用领域。

第一部分:

基础在第2章中,Eugene C. Freuder和Alan K. Mackworth调查了约束满足作为人工智能和计算机科学中新范式的出现。 在1965年至1985年的二十年间,Freuder和Mackworth追踪了两个工作流的发展,他们称之为语言流(language stream)和算法流(algorithm stream)。 语言流的重点是声明性程序语言和用于开发约束应用程序的系统。 语言流提供了许多特殊用途的声明性语言以及一般编程语言,例如约束逻辑编程(constraint logic programming)。 算法流的重点是约束满足框架的算法和启发式算法。算法流给出约束传播算法,例如用于弧一致性的算法以及回溯搜索中的启发式和约束传播。最终,语言流和算法流合并,形成约束编程新领域的核心。约束满足(constraint satisfaction)的出现、语言流(编程语言,eg.约束逻辑编程)、算法流(约束传播Constraint propagation算法、启发式算法),二者最终合并

在第3章中,Christian Bessiere调查了有关约束传播的大量文献。 约束传播是一个核心概念 - 也许是约束规划理论和实践中的核心概念。 约束传播是一种推理形式,其中,从约束和域的子集,推断出更多限制性约束或更多限制性域。 推断通过局部一致性属性来证明,该属性表征值或属于解决方案的值集的必要条件。 弧度一致性是目前实践中最重要的局部一致性属性,并且在文献中受到最多关注。 约束传播的重要性在于它可以极大地简化约束问题,从而提高搜索解决方案的效率。

解决约束满足问题(CSP)的主要算法技术是回溯搜索和本地搜索。 在第4章中,Peter van Beek调查了回溯搜索算法。 回溯搜索算法执行搜索树的深度优先遍历,其中节点外的分支表示必须检查以便找到解决方案的备选选择,并且约束用于修剪不包含解的树。 回溯搜索算法保证可以找到解决方案(如果存在),并且可以用于表明CSP没有解决方案或找到可证明的最佳解决方案。许多用于提高回溯搜索算法效率的技术已经被提出,包括约束传播(constraint propagation),nogood记录(nogood recording),回跳(backjumping),用于变量和值排序的启发式(heuristics for variable and value ordering),随机化和重启策略(randomization and restart strategies)

在第5章中,Holger H. Hoos和Edward Tsang调查局部搜索算法以解决约束满足问题。 局部搜索算法在有向图中执行步行,其中节点表示可能必须检查的变量的替代分配,并且违反约束的数量用于指导搜索解。 本地搜索算法不能被用来表明,CSP没有一个解决方案或找到可证明的最优解。 然而,对于存在解决方案,和可找到最优解的近似解的问题,这种算法通常很有效。 许多用于改进局部搜索算法的技术和策略已经被提出并评估,包括随机迭代改进(randomized iterative improvement),禁忌搜索(tabu search),基于惩罚的方法(penaltybased approaches),以及替代邻域和移动策略(alternative neighborhood and move strategies)

在第6章中,Willem-Jan van Hoeve和Irit Katriel调查了全局约束。 全局约束是可以在变量的任意子集上的约束。 全局约束的规范示例是全不同约束(all-different),其表明约束中的变量必须成对不同。全局限制的力量是双重的。 首先,全局约束简化了使用约束编程对应用程序建模的任务。 例如,所有不同的约束是在许多应用程序中重新出现的模式,包括排班,时间表,排序和调度应用程序。 其次,可以设计特殊目的约束传播算法,其利用约束的语义,因此更加有效。 Van Hoeve和Katriel表明,设计用于全局约束的约束传播算法涉及广泛的学科,包括图论(graph theory),流理论(flow theory),匹配理论(matching theory),线性规划(linear programming)和有限自动机(finite automaton)

1.3 Future Research 

约束规划领域正在迅速发展。 许多新的研究成果一直在发表,并在约束推理领域开设了新的研究领域。 我们总结了这一介绍,并对我们看来有趣且有希望的研究方向进行了一些推测,并且未来可能已经足够成熟,可以构成本手册未来修订的完整章节。

量化约束问题是经典CSP的一个非常有趣的扩展,其中一些变量可以被普遍量化。 这可以帮助对某些场景进行建模,例如那些由于不确定性,不允许我们决定某些变量值的场景。 关于这些问题的复杂性的许多理论结果已经被开发出来。 我们预计该领域及其应用将快速增长。

使用约束求解器时,通常不容易理解出错了什么,或者为什么返回某个解决方案而不是另一个解决方案。 约束求解器的解释工具可以极大地帮助使约束技术易于在交互式系统中使用。 通常,约束系统中的用户交互应该得到很多关注和努力。 这方面的改进可以极大地扩展基于约束的工具的可用性。

很少一次性从约束系统的用户处收集全部约束。 通常,这些约束或偏好一次只收集一些,但是系统必须能够利用部分知识执行一些推理。 此外,基于它具有的部分知识,它应该能够向用户仅询问那些对进行下一次推断有用的约束或偏好。 在这种情况下,偏好引出的问题是至关重要的,并且允许用户智能地与约束系统交互,而不必在交互开始时被迫陈述其所有约束或偏好。 这在用户想要避免泄露他们的所有偏好的情况下也是有用的,例如出于隐私原因。(根据用户提供的部分约束条件进行推理,同时只需询问用户与下一次推理有用的约束

即使用户愿意在交互开始时陈述所有信息,有时候他可能难以在约束条件下实际陈述它。 例如,可以更容易地说明理想或不可接受的解决方案的示例。 在这种情况下,机器学习技术可以帮助从部分和可能不精确的用户语句中学习约束。 至于解释和偏好引出,这可以极大地帮助缓解用户和约束求解器之间的交互。

Satisfiability是一个成熟的研究领域,与约束推理有很多联系,因为满意度问题只是布尔变量的约束问题。 因此,许多理论结果可以应用于不同领域。 我们希望将来能看到更多这样的研究成果。

猜你喜欢

转载自blog.csdn.net/weixin_38354912/article/details/83061291
今日推荐