人工智能启发式图搜索算法

启发式图搜索算法

摘 要:启发式搜索策略概述和有序搜索。启发式搜索弥补盲目搜索的不足,提高搜索效率。一种方法用于排列待扩展节点的顺序,即选择最有希望的节点加以扩展,那么,搜索效率将会大为提高。进行搜索技术一般需要某些有关具体问题领域的特性的信息。

关键词:启发式搜索;估价函数;有序搜索;A*算法;

正文:

启发式图搜索的意义因为无信息图搜索算法的效率低,耗费过多的计算空间与时间,这是组合爆炸的一种表现形式。所以引入了启发式图搜索算法。

启发式图搜索算法就是进行搜索技术一般需要某些有关具体问题领域的特性的信息,把此种信息叫做启发信息。利用启发信息的搜索方法叫做启发式搜索方法。关于图搜索的启发式搜索算法就叫做启发式图搜索算法。

启发式图搜索策略:假设初始状态、算符和目标状态的定义都是完全确定的,然后决定一个搜索空间。因此,问题就在于如何有效地搜索这个给定空间。

启发信息按其用途可分为下列3种:

(1) 用于决定要扩展的下一个节点,以免像在宽度优先或深度优先搜索中那样盲目地扩展。

(2) 在扩展一个节点的过程中,用于决定要生成哪一个或哪几个后继节点,以免盲目地同时生成所有可能的节点。

(3) 用于决定某些应该从搜索树中抛弃或修剪的节点。

启发信息的状态空间搜索算法,即决定哪个是下一步要扩展的节点。这种搜索总是选择“最有希望”的节点作为下一个被扩展的节点。这种搜索叫做有序搜索(ordered search)。有关具体问题领域的信息常常可以用来简化搜索。一个比较灵活(但代价也较大)的利用启发信息的方法是应用某些准则来重新排列每一步OPEN表中所有节点的顺序。然后,搜索就可能沿着某个被认为是最有希望的边缘区段向外扩展。应用这种排序过程,需要某些估算节点“希望”的量度,这种量度叫做估价函数(evalution function)。所谓的估价函数就是为获得某些节点“希望”的启发信息,提供一个评定侯选扩展节点的方法,以便确定哪个节点最有可能在通向目标的最佳路径上 。f(n)——表示节点n的估价函数值建立估价函数的一般方法:试图确定一个处在最佳路径上的节点的概率;提出任意节点与目标集之间的距离量度或差别量度;或者在棋盘式的博弈和难题中根据棋局的某些特点来决定棋局的得分数。这些特点被认为与向目标节点前进一步的希望程度有关。

有序搜索应用某个算法(例如等代价算法)选择OPEN表上具有最小f值的节点作为下一个要扩展的节点。这种搜索方法叫做有序搜索(ordered search)或最佳优先搜索

(best-first search),而其算法就叫做有序搜索算法或最佳优先算法。尼尔逊曾提出一个有序搜索的基本算法。估价函数f是这样确定的:一个节点的希望程序越大,其f值就越小。被选为扩展的节点,是估价函数最小的节点。选择OPEN表上具有最小f值的节点作为下一个要扩展的节点,即总是选择最有希望的节点作为下一个要扩展的节点。 有序状态空间搜索算法

(1) 把起始节点S放到OPEN表中,计算f(S)并把其值与节点S联系起来。

(2) 如果OPEN是个空表,则失败退出,无解。

(3) 从OPEN表中选择一个f值最小的节点i。结果有几个节点合格,当其中有一个为目标节点时,则选择此目标节点,否则就选择其中任一个节点作为节点i。

(4) 把节点i从OPEN表中移出,并把

它放入CLOSED的扩展节点表中。

(5) 如果i是个目标节点,则成功退出,

求得一个解。

(6) 扩展节点i,生成其全部后继节点。

对于i的每一个后继节点j:

(a)计算f(j)。

(b)如果j既不在OPEN表中,又不在

CLOSED表中,则用估价函数f把它添入OPEN

表。从j加一指向其父辈节点i的指针,以

便一旦找到目标节点时记住一个解答路径。

(c)如果j已在OPEN表上或CLOSED表

上,则比较刚刚对j计算过的f值和前面计

算过的该节点在表中的f值。如果新的f值

较小,则

(i) 以此新值取代旧值。

(ii) 从j指向i,而不是指向它的父辈

节点。

(iii) 如果节点j在CLOSED表中,则

把它移回OPEN表。

(7) 转向(2),即GO TO(2)。

有序搜索方法分析

宽度优先搜索、等代价搜索和深度优先搜索统统是有序搜索技术的特例。对于宽度优先搜索,选择f(i)作为节点i的深度。对于等代价搜索,f(i)是从起始节点至节点i这段路径的代价。

有序搜索的有效性直接取决于f的选择,如果选择的f不合适,有序搜索就可能失去一个最好的解甚至全部的解。如果没有适用的准确的希望量度,那么f的选择将涉及两个方面的内容:一方面是一个时间和空间之间的折衷方案;另一方面是保证有一个最优的解或任意解。

如像解八数码难题

就采用了简单的估价函数

f(n)=d(n)+W(n)

其中:d(n)是搜索树中节点n的深度;W(n)用来计算对应于节点n的数据库中错放的棋子个数。因此,起始节点棋局

2 8 3

1 6 4

7 5

的f值等于0+4=4。

A*算法

A*(A-Star)算法是一种静态路网中求解最短路最有效的方法。公式表示为: f(n)=g(n)+h(n), 其中f(n) 是节点n从初始点到目标点的估价函数,g(n) 是在状态空间中从初始节点到n节点的实际代价,h(n)是从n到目标节点最佳路径的估计代价。

保证找到最短路径(最优解的)条件,关键在于估价函数h(n)的选取:估价值h(n)实际值, 搜索的点数少,搜索范围小,效率高,但不能保证得到最优解。估价值与实际值越接近,估价函数取得就越好。例如对于几何路网来说,可以取两节点间欧几理德距离(直线距离)做为估价值,即f=g(n)+sqrt((dx-nx)*(dx-nx)+(dy-ny)*(dy-ny));这样估价函数f在g值一定的情况下,会或多或少的受估价值h的制约,节点距目标点近,h值小,f值相对就小,能保证最短路的搜索向终点的方向进行。明显优于Dijstra算法的毫无无方向的向四周搜索。 主要搜索过程:

创建两个表,OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。遍历当前节点的各个节点,将n节点放入CLOSE中,取n节点的子节点X,->算X的估价值->

While(OPEN!=NULL)

{

从OPEN表中取估价值f最小的节点n;

if(n节点==目标节点) break;

else

{

if(X in OPEN) 比较两个X的估价值f //注意是同一个节点的两个不同路径的估价值

if( X的估价值小于OPEN表的估价值 )

更新OPEN表中的估价值; //取最小路径的估价值

if(X in CLOSE) 比较两个X的估价值 //注意是同一个节点的两个不同路径的估价值

if( X的估价值小于CLOSE表的估价值 )

更新CLOSE表中的估价值; 把X节点放入OPEN //取最小路径的估价值 if(X not in both)

求X的估价值;

并将X插入OPEN表中; //还没有排序

}

将n节点插入CLOSE表中;

按照估价值将OPEN表中的节点排序; //实际上是比较OPEN表内节点f的大小,从最小路径的节点向下进行。

启发式搜索其实有很多的算法,比如:局部择优搜索法、最好优先搜索法等等。当然A*也是。这些算法都使用了启发函数,但在具体的选取最佳搜索节点时的策略不同。象局

部择优搜索法,就是在搜索的过程中选取“最佳节点”后舍弃其他的兄弟节点,父亲节点,而一直得搜索下去。这种搜索的结果很明显,由于舍弃了其他的节点,可能也把最好的

节点都舍弃了,因为求解的最佳节点只是在该阶段的最佳并不一定是全局的最佳。最好优先就聪明多了,他在搜索时,便没有舍弃节点(除非该节点是死节点),在每一步的估价

中都把当前的节点和以前的节点的估价值比较得到一个“最佳的节点”。这样可以有效的防止“最佳节点”的丢失。那么A*算法又是一种什么样的算法呢?其实A*算法也是一种最

好优先的算法。只不过要加上一些约束条件罢了。由于在一些问题求解时,我们希望能够求解出状态空间搜索的最短路径,也就是用最快的方法求解问题,A*就是干这种事情的!

我们先下个定义,如果一个估价函数可以找出最短的路径,我们称之为可采纳性。A*算法是一个可采纳的最好优先算法。A*算法的估价函数可表示为:

f'(n) = g'(n) + h'(n)

这里,f'(n)是估价函数,g'(n)是起点到终点的最短路径值,h'(n)是n到目标的最断路经的启发值。由于这个f'(n)其实是无法预先知道的,所以我们用前面的估价函数f(n)做

近似。g(n)代替g'(n),但 g(n)>=g'(n)才可(大多数情况下都是满足的,可以不用考虑),h(n)代替h'(n),但h(n)

函数是可以找到最短路径的,也就是可采纳的。我们说应用这种估价函数的最好优先算法就是A*算法。哈。你懂了吗?肯定没懂。接着看。

举一个例子,其实广度优先算法就是A*算法的特例。其中g(n)是节点所在的层数,h(n)=0,这种h(n)肯定小于h'(n),所以由前述可知广度优先算法是一种可采纳的。

启发式图搜索算法的应用非常广范,在现代社会的很多领域都有应用如图像边缘提取的启发式搜索算法、基于启发式图搜索的最小测点集优选新算法、求图的最大独立集的启发式搜索算法、模糊图的启发式搜索算法等等都是在启发式图搜索的基础上发展起来的。

参 考 文 献

[1] 杨成林 田书林 基于启发式图搜索最小测点集优选新算法 仪器仪表学报-2008年

[2] 王迎庆 模糊图的启发式搜索算法FA 计算机工程与应用-1991年

[3] 吴江 求图的最大独立集的启发式搜索算法 计算机应用与软件-1990年

[4] 李长青 《人工智能》 中国矿业大学出版社

[5] 尚福华 《人工智能及其应用》 电子工业出版社

[6] 王士同 《人工智能教程》 电子工业出版社

启发式图搜索算法

摘 要:启发式搜索策略概述和有序搜索。启发式搜索弥补盲目搜索的不足,提高搜索效率。一种方法用于排列待扩展节点的顺序,即选择最有希望的节点加以扩展,那么,搜索效率将会大为提高。进行搜索技术一般需要某些有关具体问题领域的特性的信息。

关键词:启发式搜索;估价函数;有序搜索;A*算法;

正文:

启发式图搜索的意义因为无信息图搜索算法的效率低,耗费过多的计算空间与时间,这是组合爆炸的一种表现形式。所以引入了启发式图搜索算法。

启发式图搜索算法就是进行搜索技术一般需要某些有关具体问题领域的特性的信息,把此种信息叫做启发信息。利用启发信息的搜索方法叫做启发式搜索方法。关于图搜索的启发式搜索算法就叫做启发式图搜索算法。

启发式图搜索策略:假设初始状态、算符和目标状态的定义都是完全确定的,然后决定一个搜索空间。因此,问题就在于如何有效地搜索这个给定空间。

启发信息按其用途可分为下列3种:

(1) 用于决定要扩展的下一个节点,以免像在宽度优先或深度优先搜索中那样盲目地扩展。

(2) 在扩展一个节点的过程中,用于决定要生成哪一个或哪几个后继节点,以免盲目地同时生成所有可能的节点。

(3) 用于决定某些应该从搜索树中抛弃或修剪的节点。

启发信息的状态空间搜索算法,即决定哪个是下一步要扩展的节点。这种搜索总是选择“最有希望”的节点作为下一个被扩展的节点。这种搜索叫做有序搜索(ordered search)。有关具体问题领域的信息常常可以用来简化搜索。一个比较灵活(但代价也较大)的利用启发信息的方法是应用某些准则来重新排列每一步OPEN表中所有节点的顺序。然后,搜索就可能沿着某个被认为是最有希望的边缘区段向外扩展。应用这种排序过程,需要某些估算节点“希望”的量度,这种量度叫做估价函数(evalution function)。所谓的估价函数就是为获得某些节点“希望”的启发信息,提供一个评定侯选扩展节点的方法,以便确定哪个节点最有可能在通向目标的最佳路径上 。f(n)——表示节点n的估价函数值建立估价函数的一般方法:试图确定一个处在最佳路径上的节点的概率;提出任意节点与目标集之间的距离量度或差别量度;或者在棋盘式的博弈和难题中根据棋局的某些特点来决定棋局的得分数。这些特点被认为与向目标节点前进一步的希望程度有关。

有序搜索应用某个算法(例如等代价算法)选择OPEN表上具有最小f值的节点作为下一个要扩展的节点。这种搜索方法叫做有序搜索(ordered search)或最佳优先搜索

(best-first search),而其算法就叫做有序搜索算法或最佳优先算法。尼尔逊曾提出一个有序搜索的基本算法。估价函数f是这样确定的:一个节点的希望程序越大,其f值就越小。被选为扩展的节点,是估价函数最小的节点。选择OPEN表上具有最小f值的节点作为下一个要扩展的节点,即总是选择最有希望的节点作为下一个要扩展的节点。 有序状态空间搜索算法

(1) 把起始节点S放到OPEN表中,计算f(S)并把其值与节点S联系起来。

(2) 如果OPEN是个空表,则失败退出,无解。

(3) 从OPEN表中选择一个f值最小的节点i。结果有几个节点合格,当其中有一个为目标节点时,则选择此目标节点,否则就选择其中任一个节点作为节点i。

(4) 把节点i从OPEN表中移出,并把

它放入CLOSED的扩展节点表中。

(5) 如果i是个目标节点,则成功退出,

求得一个解。

(6) 扩展节点i,生成其全部后继节点。

对于i的每一个后继节点j:

(a)计算f(j)。

(b)如果j既不在OPEN表中,又不在

CLOSED表中,则用估价函数f把它添入OPEN

表。从j加一指向其父辈节点i的指针,以

便一旦找到目标节点时记住一个解答路径。

(c)如果j已在OPEN表上或CLOSED表

上,则比较刚刚对j计算过的f值和前面计

算过的该节点在表中的f值。如果新的f值

较小,则

(i) 以此新值取代旧值。

(ii) 从j指向i,而不是指向它的父辈

节点。

(iii) 如果节点j在CLOSED表中,则

把它移回OPEN表。

(7) 转向(2),即GO TO(2)。

有序搜索方法分析

宽度优先搜索、等代价搜索和深度优先搜索统统是有序搜索技术的特例。对于宽度优先搜索,选择f(i)作为节点i的深度。对于等代价搜索,f(i)是从起始节点至节点i这段路径的代价。

有序搜索的有效性直接取决于f的选择,如果选择的f不合适,有序搜索就可能失去一个最好的解甚至全部的解。如果没有适用的准确的希望量度,那么f的选择将涉及两个方面的内容:一方面是一个时间和空间之间的折衷方案;另一方面是保证有一个最优的解或任意解。

如像解八数码难题

就采用了简单的估价函数

f(n)=d(n)+W(n)

其中:d(n)是搜索树中节点n的深度;W(n)用来计算对应于节点n的数据库中错放的棋子个数。因此,起始节点棋局

2 8 3

1 6 4

7 5

的f值等于0+4=4。

A*算法

A*(A-Star)算法是一种静态路网中求解最短路最有效的方法。公式表示为: f(n)=g(n)+h(n), 其中f(n) 是节点n从初始点到目标点的估价函数,g(n) 是在状态空间中从初始节点到n节点的实际代价,h(n)是从n到目标节点最佳路径的估计代价。

保证找到最短路径(最优解的)条件,关键在于估价函数h(n)的选取:估价值h(n)实际值, 搜索的点数少,搜索范围小,效率高,但不能保证得到最优解。估价值与实际值越接近,估价函数取得就越好。例如对于几何路网来说,可以取两节点间欧几理德距离(直线距离)做为估价值,即f=g(n)+sqrt((dx-nx)*(dx-nx)+(dy-ny)*(dy-ny));这样估价函数f在g值一定的情况下,会或多或少的受估价值h的制约,节点距目标点近,h值小,f值相对就小,能保证最短路的搜索向终点的方向进行。明显优于Dijstra算法的毫无无方向的向四周搜索。 主要搜索过程:

创建两个表,OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。遍历当前节点的各个节点,将n节点放入CLOSE中,取n节点的子节点X,->算X的估价值->

While(OPEN!=NULL)

{

从OPEN表中取估价值f最小的节点n;

if(n节点==目标节点) break;

else

{

if(X in OPEN) 比较两个X的估价值f //注意是同一个节点的两个不同路径的估价值

if( X的估价值小于OPEN表的估价值 )

更新OPEN表中的估价值; //取最小路径的估价值

if(X in CLOSE) 比较两个X的估价值 //注意是同一个节点的两个不同路径的估价值

if( X的估价值小于CLOSE表的估价值 )

更新CLOSE表中的估价值; 把X节点放入OPEN //取最小路径的估价值 if(X not in both)

求X的估价值;

并将X插入OPEN表中; //还没有排序

}

将n节点插入CLOSE表中;

按照估价值将OPEN表中的节点排序; //实际上是比较OPEN表内节点f的大小,从最小路径的节点向下进行。

启发式搜索其实有很多的算法,比如:局部择优搜索法、最好优先搜索法等等。当然A*也是。这些算法都使用了启发函数,但在具体的选取最佳搜索节点时的策略不同。象局

部择优搜索法,就是在搜索的过程中选取“最佳节点”后舍弃其他的兄弟节点,父亲节点,而一直得搜索下去。这种搜索的结果很明显,由于舍弃了其他的节点,可能也把最好的

节点都舍弃了,因为求解的最佳节点只是在该阶段的最佳并不一定是全局的最佳。最好优先就聪明多了,他在搜索时,便没有舍弃节点(除非该节点是死节点),在每一步的估价

中都把当前的节点和以前的节点的估价值比较得到一个“最佳的节点”。这样可以有效的防止“最佳节点”的丢失。那么A*算法又是一种什么样的算法呢?其实A*算法也是一种最

好优先的算法。只不过要加上一些约束条件罢了。由于在一些问题求解时,我们希望能够求解出状态空间搜索的最短路径,也就是用最快的方法求解问题,A*就是干这种事情的!

我们先下个定义,如果一个估价函数可以找出最短的路径,我们称之为可采纳性。A*算法是一个可采纳的最好优先算法。A*算法的估价函数可表示为:

f'(n) = g'(n) + h'(n)

这里,f'(n)是估价函数,g'(n)是起点到终点的最短路径值,h'(n)是n到目标的最断路经的启发值。由于这个f'(n)其实是无法预先知道的,所以我们用前面的估价函数f(n)做

近似。g(n)代替g'(n),但 g(n)>=g'(n)才可(大多数情况下都是满足的,可以不用考虑),h(n)代替h'(n),但h(n)

函数是可以找到最短路径的,也就是可采纳的。我们说应用这种估价函数的最好优先算法就是A*算法。哈。你懂了吗?肯定没懂。接着看。

举一个例子,其实广度优先算法就是A*算法的特例。其中g(n)是节点所在的层数,h(n)=0,这种h(n)肯定小于h'(n),所以由前述可知广度优先算法是一种可采纳的。

启发式图搜索算法的应用非常广范,在现代社会的很多领域都有应用如图像边缘提取的启发式搜索算法、基于启发式图搜索的最小测点集优选新算法、求图的最大独立集的启发式搜索算法、模糊图的启发式搜索算法等等都是在启发式图搜索的基础上发展起来的。

参 考 文 献

[1] 杨成林 田书林 基于启发式图搜索最小测点集优选新算法 仪器仪表学报-2008年

[2] 王迎庆 模糊图的启发式搜索算法FA 计算机工程与应用-1991年

[3] 吴江 求图的最大独立集的启发式搜索算法 计算机应用与软件-1990年

[4] 李长青 《人工智能》 中国矿业大学出版社

[5] 尚福华 《人工智能及其应用》 电子工业出版社

[6] 王士同 《人工智能教程》 电子工业出版社


相关内容

  • 人工智能算法综述
  • 人工智能算法综述 人工智能算法大概包括五大搜索技术,包括一些早期的搜索技术或用于解决比较简单问题的搜索原理和一些比较新的能够求解比较复杂问题的搜索原理,如遗传算法和模拟退火算法等. 一.盲目搜索 盲目搜索又叫做无信息搜索,一般只适用于求解比较简单的问题. 包括图搜索策略,宽度优先搜索和深度优先搜素. ...

  • 人工智能a算法
  • 1.启发式搜索算法A 启发式搜索算法A ,一般简称为A 算法,是一种典型的启发式搜索算法.其基本思想是:定义一个评价函数f ,对当前的搜索状态进行评估,找出一个最有希望的节点来扩展. 评价函数的形式如下: f (n )=g (n )+h (n ) 其中n 是被评价的节点. f (n ).g (n ) ...

  • 禁忌搜索算法求解旅行商问题研究
  • 第!"卷第#期西南师范大学学报(自然科学版)!$$!年%月 &'()!"*')#+',-./('01',234562738./*'-9/(:.8;5-682 文章编号:>$$$?@">(!$$!)$#$#@>$? 禁忌搜索算法求解旅行商问题研究 ...

  • 蚁群优化算法研究综述
  • 一I IIR'I'IHII_IIIIIII -Review.Prospect<园陵-圆圆 蚁群优化算法研究综述 ResearchProgressofAntColonyOptimization Algorithm 梅红李俊卿 (山东理工大学农业工程与食品科学学院,山东淄博255049) 摘要:介 ...

  • 搜索技术在人工智能领域的实际应用
  • 搜索技术在人工智能领域的实际应用 摘要:介绍了搜索引擎的分类.工作原理,并具体分析了搜索引擎的体系结构,包括信息的搜集系统.索引系统以及查询接口.基于现在人工智能技术的迅速发展,对于在搜索引擎中运用的人工智能技术进行了研究,且着重分析了搜索引擎重要模块: Robot的智能化.智能代理技术以及查询接口 ...

  • 数模-蚁群算法的应用研究与发展
  • 科技信息.本刊重稿o sc皿NCE&TECⅢ帕LoGY矾fD砌姒TION 2007年第28期 蚁群算法的应用研究与发展 杨海112王洪国3徐卫志1 (1.山东师范大学信息科学与工程学院山东济南250014: 2.山东交通学院信息工程系山东济南250023:3.山东省科技厅山东济南250011 ...

  • 求解0-1二次规划问题的迭代禁忌搜索算法
  • 计 算 机 工 程 第卷 第1期 38 Computer Engineering V ol.38 No.1 文章编号:文章编号:1000-3428(2012)01-0140-03 ·人工智能及识别技术·人工智能及识别技术· 2012年1月 January 2012 文献标识码:文献标识码:A 中图分 ...

  • 漫谈聚类搜索引擎的研究现状
  • 1 聚类搜索引擎概念和工作流程 所谓聚类搜索引擎,就是运用聚类技术对搜索结果进行自动聚类分析的搜索工具.其特点是去重性强.分类性强.汇集性强,即可以及时去除重复信息,对搜索的结果进行分门别类,并可以汇集各大知名搜索引擎的信息资源.目前,典型的聚类搜索引擎的基本工作步骤为:①依据用户查询的关键字,从一 ...

  • 车辆路径问题的模型及算法研究综述
  • 管 理 工 程 学 报 Vol119,No11 JournalofIndustrialEngineeringΠEngineeringManagement 2005年第1期 外论评介 车辆路径问题的模型及算法研究综述 刘云忠,宣慧玉 (西安交通大学管理学院,陕西西安710049) 摘要:本文在文献[1 ...