[人工智能导论学习笔记] CSP

1. 简介

Constraint Satisfaction Problems – 约束满足问题。即是在满足所有变量的约束条件下,达到目标结果。

2. 回溯搜索 – Backtracking search

基础的无信息搜索算法,原理是每次为一变量选择一个赋值,当没有合法的值可以赋给某变量时就回溯到上一个阶段,继续选择domain中可用的值;如果domain为空则继续回溯,如此往复直到最终满足目标。
缺点: 不断回溯试错,效率不高,可以通过以下方法(预先剔除错误结果集等)提升效率

3. 三个方向提升搜索效率

3.1 Ordering

3.1.1 Minimum remaining values (MRV) – 最少剩余值

  • 思想:选择对应的域中合法值最少的变量 ,减少搜索空间,提升效率
  • 开始时遍历所有的变量找出合法值最小的那一个,然后赋值,如果在某一步中出现变量合法值为空时,就回溯到上一个阶段重新赋值合法值…
  • 可能导致局部最优的情况发生;所以往往配合LCV使用

3.1.2 Least Constraining Value (LCV) – 最少约束值

  • 思想:在每一次选择一个变量进行赋值时,优先选择对其他变量产生最少约束的取值,减少搜索空间,提升效率
  • 由于选择对其他变量产生约束最少的解,所以可以大大减少回溯次数!!但是任然会有局部最优的情况

3.2 Filtering

3.2.1 forward checking – 前向检查

在匹配的过程中,判断剩余变量的合法值范围,如果发现某一个变量的合法值范围为零时,应该立即回溯
如图配合约束传播,如图中显示的NT、SA在迭代的过程中发现不能颜色相同,即应立即回溯

3.2.2 Arc Consistency – 弧相容

比前向搜索更快的检查到错误方案

  • 弧相容算法的基本思想
    通过在变量之间建立相互约束关系,在迭代中剔除相互冲突的约束条件,直到所有变量之间的约束满足为止。
    如下图,我们可以建立NT与SA的约束关系,发现当 NT - blue 时,SA删除蓝色解(注意在尾巴删除),导致其解集为空,即检测到错误
    在这里插入图片描述
  • 缺点:
    任然在回溯搜素之内,而且弧相容算法的结果可能有0、1、…个解

结合上面知识,可以通过MRV先确定选择的变量,再通过LCV确定该变量的可行域中应该选择哪一个解;同时结合前向检查、弧相容等提前剔除失败路径,达到整体提升效率的目的

3.3 Structure

Tree structure 大大降低原来结构的时间复杂度 O(d^N) 到 O(nd^2)
简单来说 Tree-Structured CSPs 把无向无环图中任意挑选一个节点作为根节点,剩余节点从左到右构成拓扑结构,如下例子模拟过程:
在这里插入图片描述

  • 以A作为根节点,根据原图节点顺序从左到右连接各个节点形成有向无环图的线性化

  • Remove backward – 向后移除,即从第n个节点到第2个节点,Parent(i) -> i 两两经行弧相容算法剔除可行域中冲突的部分,最终结果如下
    在这里插入图片描述任意两个节点之间都不会存在颜色冲突的情况(无回溯

  • Assign forward – 前向赋值,即按照箭头顺序从最左边开始一一赋值,最终获得正确的结果集

由于在实际应用中往往并不是无环图,所以引入割集的概念将一般的树推广

割集简单来说就是找到一个图中受约束变量的最小子集,只要删去这一子集就能得到一棵树(无环)
如下图例子中找到最小的割集,不难看出A、B组成最小割集使得其变成无环图
在这里插入图片描述
一旦找到了最小割集,就可以将变量逐一都分配进去并删去附近所有节点的域(可能存在回溯)。剩下的就是我们熟悉的树形结构CSP

4. 本地搜索 – Local search

另一个也经常用的解决约束满足问题算法。

  • 思想:
    min-conflicts heuristic 最小冲突启发式策略,即每次选择一个跟其他变量相关性约束最强的变量来赋值,将其转变为相关性约束最弱的变量

举个例子吧,在四皇后问题中,要将四个皇后相互分开互不攻击,可以先将平行四边形左上的皇后移动上一格(相关性约束为3 最大)变成与其他三个皇后无约束… 以此类推只需两步达成目标
在这里插入图片描述

  • 优点:除了任意n的n皇后问题,本地搜索对任意生成的CSP的运行时间几乎是常数
  • 缺点:非备完备性和非最优性,不一定有最优解。而且在如下的极端范围内,所需要的时间空间消耗大大提升
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值