人工智能 —— 状态空间的盲目搜索

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/starter_____/article/details/91644419

一、基本过程

(1)先把问题的初始状态作为当前扩展结点对其进行扩展,生成一组子结点

(2)然后检查问题的目标状态是否出现在这些子结点中。若出现,则搜索成功,找到了问题的解;若没出现,则再按照某种搜索策略从已生成的子结点中选择一个结点作为当前扩展结点。

(3)重复上述过程,直到目标状态出现在子结点中或者没有可供操作的结点为止。所谓对一个结点进行“扩展”是指对该结点用某个可用操作进行作用,生成该结点的一组子结点。


二、算法的数据结构和符号约定

Open表:用于存放刚生成的结点

Closed表:用于存放已经扩展或将要扩展的结点

S0:用表示问题的初始状态


三、广度优先搜索

(1)基本思想

从初始结点S0开始逐层向下扩展,在第n层结点还没有全部搜索完之前,不进入第n+1层结点的搜索。Open表中的结点总是按进入的先后排序,先进入的结点排在前面,后进入的结点排在后面。

(2)搜索算法的过程

  1. 把初始结点S0放入Open表中;
  2. 如果Open表为空,则问题无解,失败退出;
  3. 把Open表的第一个结点取出放入Closed表,并记该结点为n;
  4. 考察n是否为目标结点。若是,则得到问题的解,成功退出;
  5. 若结点n不可扩展,则转第(2)步;
  6. 扩展结点n,将其子结点放入Open表的尾部,并为每一个子结点设置指向父结点的指针,然后转第(2)步。

(3)广度优先搜索实例
在这里插入图片描述
在这里插入图片描述


深度优先搜索

深度优先搜索算法和广度优先搜索算法的步骤基本相同,它们之间的主要差别在于Open表中的结点排序不同。在深度优先搜索算法中,最后进入Open表的结点总是排在最前面,即后生成的结点先扩展。

深度优先搜索是一种非完备策略。对某些问题,它有可能找不到最优解,或者根本就找不到解。常用的解决方法是增加一个深度限制,当搜索达到规定深度但没找到解时向宽度搜索,称为有界深度优先搜索。它们的具体算法描述和例子省略。

猜你喜欢

转载自blog.csdn.net/starter_____/article/details/91644419