Ref: Russell & Norvig Chapter 6: Constraint Satisfaction Problems (CSP)

常用的求解策略

  • 节点相容性:对单个节点的赋值必须在其取值范围内
  • 邻边相容性:一个节点的合法取值不会导致其相邻节点无法取值;一个网络里的每个节点都与其相邻节点相容,则这个网络满足邻边相容性
  • AC-3:计算邻边相容性的算法;目标是为了减少后续搜索量
  • 路径相容性:指的是两个变量相对第三个变量的相容性;如果这两个变量的每对合法取值都不会导致第三个变量无法取值,则前两个与第三个是路径相容的。
  • K-相容性:把上面的路径相容性扩展到 K 个
  • 强 K-相容性:不止是 K-相容,而且 (K-1)-相容,(K-2)-相容,...
  • 全局约束:比如要求所有涉及的变量不能取重复值,比如总的资源消耗不能超过多少 (对应边界传递算法,以及相应的边界一致性),等等
  • 逆向寻踪搜索:深度优先;每次为一个变量赋值,当某个变量没有合法值时,回退,让上一步尝试别的值。
  • 先处理可能取值最少的节点:MRV, minimum-remaining-values
  • 先处理限制最多的节点:degree heuristic
  • 先选取让别的节点可能取值最多的:least-constraining-value
  • 前向检查,邻边相容维持:Maintaining Arc Consistency (MAC)
  • 逆向跳跃:为每个节点维护一个冲突集合;回溯时,直接跳回最近的冲突节点,而不是上一个节点
  • 对于使用了 MAC 策略的前向检查算法而言,简单的逆向跳跃是多余的
  • 冲突导向的逆向跳跃:冲突集合不只是针对一个节点,而是同时针对这个节点之后所有的节点
  • 局部搜索:局部改变变量的值;最少冲突策略,选取与别的变量冲突最少的值;适合在线更新
  • 禁戒搜索:避免重复过去的状态
  • 模拟退火算法
  • 约束权重:不同约束有不同的权重,优先选择最高权重的约束;每个约束的权重会不断调节:被当前赋值违背的那些约束的权重要调高
  • 任务分解,独立子问题:约束图的连通成分,树形 CSP,拓扑排序
  • 分布式约束问题:每个工作代理解决约束问题的一部分