约束规划(Constraint Programming)
- 一种用于制定和解决离散变量约束满足或约束优化问题的方法,该方法系统地采用演绎推理来减少搜索空间并允许各种各样的约束。
- CP通过应用更强大的搜索策略和使用特定问题知识控制其设计的能力,扩展了逻辑编程(logic programming)的能力。
CP涉及使用数学/逻辑建模语言对公式进行编码,并允许用户应用广泛的搜索策略,包括用于查找解决方案的定制搜索技术。CP在公式化能力和解决方案方法方面非常灵活,但需要声明式逻辑编程和开发良好搜索策略的技能。
CP的核心——约束满足问题(Constraint Satisfcation Problem)
- 给定一组离散变量,加上有限域,以及涉及这些变量的一组约束,可以找到满足所有约束的解。
- 在约束满足问题中,变量可以采用不同的类型,包括:布尔型、整数型、符号型、集合元素和集合子集。
- 约束的种类:
- 数学运算:C = s + p (completion time= start time+ processing time)
- 析取:tasks J and K must be done at different times
- 关系型:at most five jobs to be allocated at machine R5O
- 直率表示:only jobs A, B, and E can be processed on machine Y5O
- 一个CSP可以包含各种各样的运算符:
- =,<,>,≥,≤,≠
- subset, superset, union, member
- ∨(Boolean OR), ∙(Boolean AND)
- ⇒(implies), ⇔(iff)
- 除了这些约束之外,CP研究人员还开发了特殊目的的约束,可以有效地实现上述类型的约束的组合
- CSP的(可行)解决方案是将其域中的值分配给每个变量,以满足问题的每个约束。在处理CSP时,我们可能只想确定一个或多个解决方案。