约束满足问题的定义
约束满足问题(Constraint Satisfying Problem, CSP)
– 由一个变量集合和一个约束集合定义;
– 每个变量都有一个非空可能值域;
– 每个约束指定了包含若干变量的一个子集内各变量的赋值范围。
例如: 地图染色问题, N-皇后问题。
CSP问题的解
CSP的一个状态(最终解): 对一些或全部变量的赋值
• 一个不违反任何约束的对变量的赋值称为相容赋值或合法赋值。
• 对每个变量都进行赋值称为完全赋值。
• 一个( 一组) 对变量的赋值, 若既是相容赋值又是完全赋值(即对每个变量都赋了值,且这组赋值是合法的), 则这个(组) 赋值是CSP问题的解。
某些CSP问题要求问题的解能使目标函数最大化——约束优化。
• CSP问题常常可以可视化, 表示为约束图, 更直观地显示问题, 帮助思考问题的答案。
CSP问题的分类
根据变量的类型划分: 离散值域和连续值域。
变量—离散值域
有限值域, 如地图染色问题, 八皇后问题。
无限值域, 如整数集合或者字符串集合。
• 例如, 对于作业规划问题, 无法枚举所有可能取值,要使用约束语言 ( 线性约束 / 非线性约束 ) 描述 , 如。
变量—连续值域
最著名的连续值域CSP是线性规划问题。
– 线性规划中的约束必须是构成一个凸多边形的一组线性不等式。
– 线性规划问题可以在变量个数的多项式时间内求解。
根据约束的类型划分:
– 线性或非线性约束。
– 一元或多元约束。
• 一元约束: 只限制一个变量的取值
• 二元约束与2个变量相关
• 高阶约束: 涉及3个或更多变量。
– 通过引入辅助变量, 转为二元约束。
– 绝对约束 vs 偏好约束。
• 我们仅讨论绝对约束
CSP问题求解的复杂度
CSP问题的求解目标是找到相容的完全赋值,最朴素的想法是依次取变量的赋值组合并检查其是否满足约束条件。
– 若CSP问题的任何一个变量的最大值域为d, 那么可能的完全赋值数量为。
– 指数级计算量。
例子:澳大利亚地图染色问题
澳大利亚地图染色问题: 用红绿蓝3色标出各省, 相邻者颜色不同。
• CSP问题具有一个性质: 可交换性, 变量赋值的顺序对结果没有影响。
– 所有CSP搜索算法生成后继节点时, 在搜索树每个节点上只考虑单个变量的可能赋值。
• CSP问题的求解: 深度优先的回溯搜索。
– 每次给一个变量赋值, 当没有合法赋值(不满足约束时)就要推翻前一个变量的赋值, 重新给其赋值, 这就是回溯。
澳大利亚地图染色问题的搜索树
一个简单的回溯算法(深度优先)
改进思路:约束满足问题改进技术:基于变量和赋值次序的启发式-CSDN博客