一、引言
图搜索技术时人工智能中的核心技术之一,并且在其他场合也有着非常广泛的应用。这里的图称为状态图,指由节点和有向(带权)边所做成的网络,每个节点即状态。按照搜索的方式不同,图搜索一般分为树式搜索和线式搜索。两者最大的区别就在于搜索过程中所记录的轨迹不同,顾名思义,树式搜索记录的是一颗搜索树,而线式搜索是一条折线。我们一般用一个Closed表的数据结构来记录搜索节点,对于树式搜索来说,Closed表存储的正是一颗不断成长的搜索树,而线式搜索存储的则是一条不断伸长的折线,如果能找到目标节点的话,它本身就是搜索的路径。而树式搜索需要通过目标节点进行回溯,直至初始节点,从而找到路径。
二、树式搜索的一般算法
对于树式搜索算法,我们需要将待考察的节点放在一起,并做某种排列,以控制搜索顺序,实现某种策略。因此,使用一个Open表的数据结构来记录当前待考察的节点。(这是可回溯线式搜索和深度优先搜索的区别)。
下面给出Open表和Closed表的数据结构:
| 节点 | 父节点编号 |
| 编号 | 节点 | 父节点编号 |
GRAPHSEARCH:
(1)建立一个只含有起始节点S的搜索图G,图中每个节点有一个指向其父节点的指针, S的这一指针为一特殊值(如0), 并把S放入未扩展节点表OPEN中.
(2)建立已扩展的节点表CLOSED,初始时该表为空.
(3)LOOP:若OPEN表为空,则失败退出.
(4)把OPEN表中的第一个节点移出,放入CLOSED表中, 称其为n节点.
(5)若n为目标节点,则成功退出. 问题的解是沿指针 追踪G中从n到S的路径而得到的.
(6)扩展节点n, 生成不是n的祖先的那些后继节点的集合M.如果没有后继节点,则转LOOP.
(7)把那些不在G中的M的成员作为n的后继节点加入G,并设置一个通向n的指针,把它们加入OPEN表. 对已在G中的M的成员,调整有关指针.
(8)按某种方式, 重排OPEN表.
(9)转LOOP.
三、基于一般图搜索算法的搜索策略根据搜索策略的不同,图搜索算法一般分为两大类:盲目搜索和启发式搜索。顾名思义,盲目搜索是一种无向导的搜索,穷举所有可能的状态,这种算法实现简单,但效率很低;启发式搜索是根据具体的问题,在搜索的过程中产生启发性的信息,指导搜索过程,启发式搜索能极大提高搜索效率,并且有可能得到问题的最优解。
之所以有这样的搜索策略的区分,是因为在图搜索一般算法中的Open表设计造成的,Open表是待考察的节点状态,那么考察Open表中节点的顺序,便指导了整个搜索的顺序,从而产生了不同的搜索策略。以常见的盲目搜索算法:广度优先算法和深度优先算法为例,不难想象,广度优先算法中的Open表是一个队列,即先进先出,那么后加入的节点永远都是后扩展的节点,即深度小的节点永远都是优先扩展的,因为他们是先加入Open表的。而深度优先算法的Open表是一个栈结构,即后进先出,扩展总是沿着一条线纵深扩展,再回溯的。
对启发式搜索,又根据所依据的估价值不同,分为基于代价函数g(x)的搜索,基于启发函数h(x)的搜索,和基于估价函数f(x) = g(x)+h(x)的搜索(A算法和A*算法)。
本文介绍了图搜索技术在人工智能领域的应用,详细解释了树式搜索和线式搜索的区别,并给出了图搜索的一般算法流程。此外,还探讨了盲目搜索与启发式搜索的不同策略。

被折叠的 条评论
为什么被折叠?



