目录
搜索的概念
什么是搜索?
根据问题的实际情况不断寻找可利用的知识,从而构造一条代价较少的推理路线,使得问题得到圆满解决的过程称之为搜索。
-
搜索方向:
(1) 数据驱动:从初始状态出发的正向搜索。
正向搜索:从问题给出的条件 出发
(2)目的驱动:从目的状态出发的逆向搜索。
(3)双向搜索
从开始状态出发作正向搜索,同时又从目的状态出发作出逆向搜索,直到两条路径在中间的某处汇合为止。
-
盲目搜索与启发式搜索
状态空间知识表示方法
状态描述
八数码问题(3×3的二维数组)
行动规则
假设r[i][j]=0, 则它跟相邻元素可以互换。
r[i][j-1] r[i-1][j]
r[i][j+1] r[i+1][j]
搜索方法的一般步骤
-
定义状态描述形式
-
定义算符——把问题从一种状态变换到另一种状态的方法代号,即状态演变规则
-
确定初始状态(初始节点)和目标状态(目标节点)
-
状态更新——根据算符更新当前状态(扫描操作算子集,将适用当前状态的一些操作算子作用于当前状态而得到新的状态,并建立指向其父节点的指针)
-
目标测试——判断更新后的状态是否目标状态,若不是则转到4再进行搜索,否则转到6
-
搜索成功,记录搜索路径(沿着有关指针从结束状态反向到达开始状态,给出一解答路径)
用open表和closed表保存搜索经过的各个节点
盲目的图搜索策略
又称穷举式搜索,只能按照预先规定的搜索控制策略进行搜索,没有任何中间信息来改变这些控制策略。
具有盲目性,效率不高,不便于复杂问题的求解
常用的方法有广度优先搜索和深度优先搜索这两种搜索方法的改良方法。
宽度优先搜索
目的是系统地展开并检查图中的所有节点,以寻找结果。
基本思想是首先搜索与初始节点距离为1的所有项点,然后再去搜索与初始节点距离为2的其他项点,以此类推。
它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。
步骤:
1) 把初始节点放入OPEN表中。
2)若OPEN表为空,则搜索失败,退出。
3)取OPEN表中前面第一个节点N放在CLOSED表中,并冠以顺序编号n。
4)若目标节点Sg=N,则搜索成功,结束。
5)若N不可扩展,则转步骤2。
6)扩展N,将其所有子节点配上指向N的指针依次放入OPEN表尾部,转步骤2。
例:8数码问题