首页 > 编程知识 正文

人工智能搜索策略,记笔记的方法

时间:2023-05-04 01:14:16 阅读:112563 作者:1924

1 .检索算法是许多优化和规划问题的基础,许多问题的解决有赖于检索策略。

2 .需要将一个问题转化为检索问题(即问题的形式化) :

将问题表示为状态(STATES )和操作符(OPERATORS )的集合,操作符可以将问题从一种状态转换为另一种状态。 使用不同的操作器将问题从初始状态转换为目标状态。 所有这些操作算子的序列是问题的一个解。 因此,要找到一个问题的解,就是在状态空间中找到连接初始状态和目标状态的操作算子的序列。

盲目搜索(统一搜索,Blind Search ) http://www.Sina.com/(depth-first search ) :

虽然以深度优先的方式遍历搜索空间,但这种方法会一直沿非目标状态的方向深度遍历,从而可能找不到解。 33558 www.Sina.com/(蓝牙-第一次搜索) :

广度优先搜索总是保证找到问题的答案,但时间和空间的消耗很大。 33558 www.Sina.com/(iterativedeepeningsearch ) :

认为深度优先搜索不一定能找到问题的解,但可以将深度优先和广度优先组合,即加以深度限制。 如果遍历到某个深度却找不到解,则将搜索方向移动到另一个状态分支继续深度遍历,不断增加受限层数直到找到问题的解。

启发式搜索(Heuristic Search,最佳第一搜索)深度优先搜索

通过提供有助于搜索的信息(知识),可以增强搜索方向,避免不必要的状态扩大,节约时间和空间。 在当前状态和目标状态相似度最高的情况下,为了能够更快地找到解,引入了评价函数f[n]=h[n]g[n]。 这里,h[n]是当前状态和目标状态不同的棋子的数量,g[n]是当前状态的深度。 f(n )的值最小的是最接近目标状态的状态,因此优先扩展。广度优先搜索

棋子移动的步数也是已知的,并且考虑到影响排列的数量,设为f[n]=h[n]g[n]。 这里,h[n]是各棋子的当前状态到达目标状态的步数之和,g[n]是当前状态的深度。 这样可以进一步减少不必要的扩展。

一般图搜索算法是将这些算法集成到一般图搜索算法中,以便于各搜索算法的实现

创建一个包含要扩展序列的open表和一个包含扩展序列的close表。 一些算法的区别只是表和表的方法和排序方法

以九宫位错问题为例,比较几种算法的优劣实现码

1 .盲搜索(宽度优先搜索算法) ) ) ) ) )。

以广度优先遍历九宫格所有可能的状态:

2 .盲搜索(深度优先搜索算法) ) )。

一般深度优先遍历九宫格所有可能的状态:

如图所示,深度优先扫描可能一直在不是目标状态的分支处深度扫描,并且因而深度优先扫描不一定找到正确的结果。 因此,在搜索某个分支的固定层数后,考虑增加层数限制,以便在没有解的情况下能够返回并继续遍历其他分支

3 .盲搜索(迭代搜索算法) ) ) )。

层数为10 :

规定层数为50 :

4 .启发式搜索(A*搜索算法) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )。

规定评价函数f(n )=h(n ) g (n ),

这里,h(n )是目标状态与当前状态不同棋子的个数,h(n )是当前状态的深度:

5 .启发式搜索(增强启发条件的A*搜索算法) ) ) ) ) ) ) ) ) ) ) )。

规定评价函数f(n )=h(n ) g (n ),

在这里,h(n )是各棋子的当前状态到达目标状态的步数,h(n )是当前状态的深度。

比较每个搜索算法:

从上表的比较数据可以看出:

广度优先搜索保证一定能找到解,但时间复杂度和空间复杂度较高。 增加深度限制的深度优先搜索比广度优先搜索扩展步数少,时间短。 在检索中添加评价函数的A*算法使检索具有方向性,可以大大减少扩展步骤的数量,节约扩展序列的存储空间; 时间效率也大大提高了。 通过加强A*算法评估函数的条件,不断避免不必要的扩展,可以进一步提高搜索效率。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。