机器智能-高频问题:CSP搜索

CSP搜索的作用就是在应用约束传播缩小值域范围后开始使用搜索算法来得到最终结果。

首先来看一下通用搜索模式:

输入是一个CSP问题,输出是一个解决方案。
a、转态是由赋值的变量决定的
b、初始状态设为空{}
c、步骤:给一个没有赋值的变量赋值,该赋值不与当前已赋值的变量相冲突
d、目标测试:如果所有的赋值完成且满足终止状态,则搜搜结束
e、CSP适用于通用的搜索模式,并采用深度搜索方法
f、缺点:重复计算,每一层对所有节点赋值进行枚举
g、变量的赋值顺序是可以交换的
h、改进:每一层只需要考虑一个变量的赋值
①、算法之前固定赋值顺序
②、可减少到d^n
i、对CSP采用深度优先的单个变量赋值,当检测到(某个分支)不相容时,返回上一层赋值(这条路走不通,走另一个)
实际上就是就优化过的值域范围中遍历所有的可能性,然后找到满足条件的结果。
以上一次的问题为例:上一篇——机器智能-高频问题:AC-3算法
在这里插入图片描述
上次我们得到了,ABC三个变量的值域分别为:{1,2,3};{0,1,2};{0,2,4}
那么,我们就可以用通用搜索模式,获得这个问题的CSP搜索树:
最初的是这样的:
在这里插入图片描述
这个并没有画完,还有很多。
可以看出来,很明显有很多的重复的分支,比方说A=1B=0C=0和B=0A=1C=0这样的,所以,很自然的就有了改进,即每层只考虑一个变量,如第一层就考虑A,第二层就考虑B,以此类推,得到了下面的CSP搜索树:
在这里插入图片描述
可以看到,又改进了很多,减少了很多的分支。但这种方法还是有很多的问题,比方说我为什么第一层不能是变量B?,所以就有了

提高回溯搜索算法的效率的方法:

①、选择变量赋值的顺序:

先A还是先B
·最受约束的变量:优先选择最少剩余值的变量进行赋值(即当前值域最小的变量);减少回溯的次数。但这个题目中A、B、C的值域都只有三个,所以只能任选一个了。
·约束最多的变量:优先选择最能约束其他变量的变量进行赋值(即约束条件中提到最多的变量);减少回溯的次数。比方说这个题目中,B这个变量被约束条件提到了两次,A和C各一次,所以可以先从B开始搜索。

②、选择值域赋值的顺序:

变量先选1还是2
给定一个变量,算法决定他的取值顺序。
·最少约束值:选择使得剩余变量赋值空间更大的值,使剩下的节点有更大的赋值空间。

③、更早检测不可避免的失败:

·前项检测法:追踪未赋值变量的剩余合法赋值;当任何一个剩余变量没有合法赋值时搜索终止。提早检测可能失败的取值。从赋值变量向未赋值变量传播信息,但不能对失败提供早期检测。可以通过弧相容(维护弧相容)算法,如果结果为空集说明这种方法将来会失败,就可以结束。
·智能回溯:回溯到和当前变量有约束关系的变量,考虑一下回溯节点的位置来提高算法的效率。建立冲突集,回溯到冲突集中时间最近的赋值。

发布了280 篇原创文章 · 获赞 168 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_40851744/article/details/104998415
今日推荐