约束满足问题(Constraint Satisfaction Problems——CSPs):回溯操作,向前检验,约束传播,局部搜索
文章目录
- 前言
- 一、约束满足问题是什么?
- 二、CSP问题的回溯搜索
- 回溯搜索(Backtracking search)
- 选择变量的策略一:MRV启发式
- 选择变量的策略二:度(degree)启发式
- 选择变量的策略三:最少约束值(Least constraining value)启发式
- 向前检验(Forward checking)
- 约束传播(Constraint propagation):
- 三,CSP问题的局部搜索(Local search for CSPs)
- In conclusion
前言
约束满足问题
CSP问题的回溯搜索
约束满足问题的局部搜索
提示:以下是本篇文章正文内容,下面案例可供参考
一、约束满足问题是什么?
约束满足问题包含一组变量和一组变量间的约束。找到所有变量的一个(或多个)赋值,使所有约束都得到满足。
举一个经典的例子:澳洲版图的颜色填充( Map-Coloring)
变量集合是各个州郡的单词简写:WA,NT,Q,NSW,V,SA,T
值域:D={red,green,blue}
约束:相邻域的颜色不同
以上就是经典的约束满足问题的例子:颜色填充
下图则是该问题所有解中的一个
为了方便解题,可以将地图转换成约束图(Constraint graph)的方式:节点表示变量,弧表示约束。如下图所示:
ps:约束分为绝对约束和偏好约束两个等级,绝对约束要求任何违反规则的都排除在解之外;偏好约束指出哪些解是更偏好的。
二、CSP问题的回溯搜索
回溯搜索(Backtracking search)
回溯搜索与深度优先搜索概念上非常相似:
但是在DFS中,我们假定通过应用所有可能的操作将节点添加到边缘来扩展节点(然后,如果需要,这些节点将位于边缘上,准备进一步扩展)
回溯搜索仅需执行一个操作即可生成一个后继节点,然后继续向下操作(然后,如果需要,随后返回该节点,将检查是否可以生成其他任何后继节点。
针对填色问题的回溯描述
如图,对版图随机挑选一个州进行随机着色,当程序走到图中最下层时出现一个问题,如果程序选择红色框起来的选项,那么在对中下部分的州,进行下一层的着色时发现,没有哪一种颜色可以符合两个州郡之间颜色不一样这一约束的。
这时程序将返回到红色框圈起来的这一步,并选择与其在同一层的蓝色圆圈的选择,这一当尝试选择失败,返回上一级,对上一级重新做选择的操作成为回溯操作。
需要注意的是,一般回溯是顺序试探,可能无用,应有一定的策略避免无用搜索。
在回溯搜索中,我们可以发现四个问题:
1,下一步选什么变量?按什么顺序尝试它的值?
2,如何减少搜索空间?
3,当前变量与未赋值变量的关系是什么?
4,如何避免失败,即当一条路径失败时,搜索后面的路径如何避免这种失败
下面我们以此解决这些问题
选择变量的策略一:MRV启发式
如图,当我们走完第一步和第二部时,在选择SA为第三步还是Q为第三步,首先分析可供SA和Q选择的颜色数量,我们发现Q有两种颜色可选,而SA只有一种。所以MRV启发式通过优先选择最少剩余量的选项来做出正确选择。
选择变量的策略二:度(degree)启发式
如图所示,着色时按照变量与其他变量之间存在的约束数量由多到少的顺序进行着色。
选择变量的策略三:最少约束值(Least constraining value)启发式
当进行红色方框圈起来的步骤时,有两种着色选择(蓝色和红色),我们尽量不选择之前着色没有出现过的颜色,将更多是颜色选择机会留给后面的操作,即选红色不选蓝色,因为蓝色之前没有出现过。
减少搜索空间
减少搜索空间的核心思想是在选择变量取值前就发现矛盾,减少变量值的试探,即减少搜索空间。
方法有:向前检验,约束传播,处理特殊约束,智能回溯
向前检验(Forward checking)
如图,第一步,当WA选择红色时,在与之有约束关系的NT和SA的值域中删除红色,结果见图中第二行颜色条。
第二步,当Q选择绿色时,同理,在与之有约束关系的NT,SA和NSW的值域中都删除绿色,结果如第三行颜色条所示。
以此类推,这样做的目的是减少下一次选择时的值域来达到减少搜索空间的目的。
但是,向前检查无法检测出矛盾:NT和SA相邻不同取同色,然而经过两次向前检验,NT和SA的值域里都只有蓝色。这就是矛盾所在。
解决这一矛盾的方法是约束传播,因为约束满足问题针对变量有值域和约束两方向,而向前传播只考虑的值域,没考虑约束。
约束传播(Constraint propagation):
约束传播的含义是将一个变量的约束内容传播到其他变量。
介绍约束传播之前,要先明白什么是弧相容(Arc consistency):如果对于变量X的每个值x,变量Y都有某个取值能和x保持相容(相容的意思是满足约束),则X->Y的弧是相容的。如图:
由于SA和NSW有约束关系,所以在约束传播的过程中进行弧相容检测,SA的值域只有蓝色,当SA为蓝色时,NSW可以从它的值域中选择红色来应对,所以这个弧是相容的。
如果反过来,由于NSW的值域中有蓝色,当其选择蓝色时,SA的值域没有相容的选项,所以应该再NSW中删除蓝色。如图:
这里,因为改变的NSW的值域,所以与它有关系的其他变量(Q,SA,V)都要重新进行弧相容检测。
这就是约束传播。应用弧相容能更早检测到向前检查不能发生的矛盾。可在搜索过程中每次赋值后作约束传播,保持弧相容。
三,CSP问题的局部搜索(Local search for CSPs)
局部搜索算法可以求解CSP问题(局部算法在之前的博文里有具体介绍),其中CSP问题的初始状态都要一个赋值,只不过这个赋值可能是不相容的,后续的函数一次改变一个变量取值。启发式选择最小冲突启发式,即选择会造成和其他变量的冲突最小的值。
如图所示,以最小冲突为启发式的局部搜索在n皇后问题上相比简单的回溯操作,空间复杂度有巨大的降低(40000K->4K)
In conclusion
约束满足问题(Constraint Satisfaction Problems——CSPs):回溯操作,向前检验,约束传播,局部搜索相关推荐
- AI(人工智能:一种现代的方法)学习之:CSP(Constraint Satisfaction Problems) 约束满足问题:回溯法——前向检查(过滤法)、弧相容检查、 变量排序
文章目录 参考 CSP 和传统的搜索算法的不同 地图着色问题 N-Queens 问题 为什么要用 CSP 来解决某些问题 回溯法 Filtering 过滤法 (forward checking) 弧相 ...
- Chapter 2 Constraint Satisfaction: An Emerging Paradigm
本章重点论述了在1965年至1985年期间,作为人工智能和计算机科学领域新范式的约束语言,包含语言的满意度. 本手册的其余部分将更详细地介绍这里介绍的大部分内容,当然还有1986年至2006年. 2. ...
- 回溯法采用的搜索策略_下列那种函数是回溯法中为避免无效搜索采取的策略( )_学小易找答案...
[填空题]图示刚架,单元编号.结点编号和结点位移编号如图所示,则单元 3的单元定位向量为 _________ .提示:写成 [ , , , , ,]T的形式 [单选题]下列测量仪器中,最适宜用于多点水 ...
- 代码随想录算法训练营第22天 二叉树 java :235. 二叉树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
文章目录 LeetCode 236. 二叉树的最近公共祖先 题目讲解 思路 LeetCode 701.二叉搜索树中的插入操作 题目讲解 思路 LeetCode 450.删除二叉搜索树中的节点 题目讲解 ...
- linux搜索指定文件夹里文件是否存在,Linux文件操作之文件查询与搜索命令详解...
文件的查询和搜索也是最常用的操作,在嵌入式 Linux 开发中常常需要在 Linux 源码文件中查询某个文件是否存在,或者搜索哪些文件都调用了某个函数等等.本节我们就讲解两个最常用的文件查询和搜索命令 ...
- R语言数据分析笔记——t检验(含正态性检验和方差齐性检验在SPSS和R语言中的操作t检验(单样本、双独立样本、配对样本)在Excel、SPSS、R语言中的操作)
前言:本文为个人学习笔记,为各大网站上的教学内容之综合整理,综合整理了①假设分析的基础知识.②正态性检验和方差齐性检验在SPSS和R语言中的操作.③t检验(单样本.双独立样本.配对样本)在Excel. ...
- 【C++】【学习笔记】【递归与回溯问题详解与例题】排列问题;组合问题;二维平面回溯;flood fill问题;搜索问题(八皇后);
目录 七.递归和回溯 1.回溯 2.回溯应用 - 排列问题 2.回溯应用 - 组合问题 3.回溯应用 - 二维平面 4.回溯应用 - floodfill算法 问题 4.回溯应用 - 搜索问题 - 八皇 ...
- 搜索与回溯算法:DFS(深度优先搜索)
深度优先搜索:1.确定回溯终止条件2.重复生成其他可能 今天开始改用JavaScript 我的LeetCode题解: 力扣,剑指 Offer 12. 矩阵中的路径 力扣,剑指 Offer 13. 机器 ...
- 二叉树part8 | ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点
文章目录 235. 二叉搜索树的最近公共祖先 思路 代码 困难 701.二叉搜索树中的插入操作 思路 代码 450.删除二叉搜索树中的节点 思路 代码 困难 今日收获 235. 二叉搜索树的最近公共祖 ...
- Java文件操作:文件夹中搜索文件
在文件夹中搜索文件,找到的话将文件的绝对路径列表返回 /*** 递归查找文件* @param baseDirName 查找的文件夹路径* @param targetFileName 需要查找的文件名* ...
最新文章
- SOA Notes
- Oracle10gr2 开机自启动脚本
- Native C++ _isnan()函数的应用
- 远程监督关系抽取漫谈:结合知识图谱和图神经网络
- php 禁用外部实体,php – Doctrine 2 – 从实体外部禁用PrePersist
- java poi读取excel公式,返回计算值(转)
- 为什么你的发行版仍然在使用“过时的”Linux 内核? | Linux 中国
- mysql中条件查询加排序和索引的关系
- 软件测试 | APP测试 —— Appium 自动化测试框架的初识与学习要领
- os.path.join;os.makedirs()
- centos6.5下iscsi多路径配置
- [POJ2195]Going Home(带权最大匹配,KM,最小费用流)
- MySQL分表实现上百万上千万记录分布存储的批量查询设计模式
- 机器学习- 吴恩达Andrew Ng Week5 神经网络学习Neural Networks Learning知识总结
- 视频教程-【深入理解计算机网络】入门计算机网络基础视频课程(下)-计算机网络
- 概率论——马尔科夫链
- 手机卸载不了刷机精灵
- 《暗时间》----读书笔记
- JAVA可以从事哪些岗位
- 马云:大数据时代_最重要的是做最好的自己