- 状态空间树的两种搜索方法正是我们最近数据结构正在学习的内容,有广度优先搜索,深度优先搜索。深度优先搜索的性质分为以下几点:1.一般不能找到最优解,2.深度限制不合理时,可能找不到解,可以将算法改为可变深度限制,3.最坏情况搜索空间等同于穷举,4.节省内存。广度优先搜索的性质分为以下几点:1.当有问题时,一定能找到解,2.当问题为单位耗散值,且问题有解时,一定能找到最优解,3.方法与问题无关,具有通用性,4.效率较低,存储量比较大。
- 除了了解这两种搜索方法,我还学习了启发式搜索算法A/A算法,但是对于这个算法我了解得不是很透彻,所以只能简单地谈谈我的看法。A/A算法的首先有一个open list(开放列表)和一个closed list(封闭列表),我们把起点A和与A 相邻的可走的、可到达的都放入open list表中,然后找出F的最小值。F=G+H,其中G表示从起点A移动到指定方格的移动代价,H表从指定的方格移动到终点的估算成本。我们的路径是这么产生的:反复遍历 open list ,选择 F 值最小的方格。找出最小F后,就将A从open list表中删除,加入到close list表中,close list表中的都是现在不需要关注的。然后再将选出的下一个结点当做起点,继续重复上述步骤,当 把终点加入到了 open list 中,此时路径已经找到了, 保存路径。从终点开始,每个方格沿着父节点移动直至起点,这就是你的路径。这个过程就是我所了解到的A/A*算法的大致过程,很粗略,也很浅显,当然在以后的学习中应该更进一步的去了解这个算法的详细过程。
人工智能学习之搜索方法
因为自己比较感兴趣的是搜索算法,所以首先了解了搜索的含义以及搜索的类型。根据问题实际情况,不断寻找可利用的知识,构造一条代价最小的推理路线,使问题得以解决的过程称为搜索,比如手机地图导航时规划最优路径,还有之前306实验室玩的那个华容道的游戏。搜索的类型按是否使用启发式信息分为盲目搜索和启发式搜索,按问题的表示方式分为状态空间搜索、与或树搜索。
状态空间表示法用“状态”和“算符”来表示问题,状态是描述问题求解过程不同时刻的状态,算符表示对状态的操作,状态空间是由初始状态集合,算符集合、目标状态集合构成的三元组。状态空间图是状态空间的图表示,节点为状态、有向边为算符,而解是初始状态到目标状态所使用的算符序列。我主要通过理解了几个例子来学习这个搜索方法,其中令我印象最深刻和我觉得最好玩的就是一个叫做“二阶梵塔”的问题,也就是我们之前C语言和java都写过代码的汉诺塔问题,之前我们都是采用递归的方法实现的,我个人认为利用状态空间表示法使得这个问题的解决过程更加的抽象,更加容易理解。
状态空间树的两种搜索方法正是我们最近数据结构正在学习的内容,有广度优先搜索,深度优先搜索。深度优先搜索的性质分为以下几点:1.一般不能找到最优解,2.深度限制不合理时,可能找不到解,可以将算法改为可变深度限制,3.最坏情况搜索空间等同于穷举,4.节省内存。广度优先搜索的性质分为以下几点:1.当有问题时,一定能找到解,2.当问题为单位耗散值,且问题有解时,一定能找到最优解,3.方法与问题无关,具有通用性,4.效率较低,存储量比较大。
除了了解这两种搜索方法,我还学习了启发式搜索算法A/A算法,但是对于这个算法我了解得不是很透彻,所以只能简单地谈谈我的看法。A/A算法的首先有一个open list(开放列表)和一个closed list(封闭列表),我们把起点A和与A 相邻的可走的、可到达的都放入open list表中,然后找出F的最小值。F=G+H,其中G表示从起点A移动到指定方格的移动代价,H表从指定的方格移动到终点的估算成本。我们的路径是这么产生的:反复遍历 open list ,选择 F 值最小的方格。找出最小F后,就将A从open list表中删除,加入到close list表中,close list表中的都是现在不需要关注的。然后再将选出的下一个结点当做起点,继续重复上述步骤,当 把终点加入到了 open list 中,此时路径已经找到了, 保存路径。从终点开始,每个方格沿着父节点移动直至起点,这就是你的路径。这个过程就是我所了解到的A/A*算法的大致过程,很粗略,也很浅显,当然在以后的学习中应该更进一步的去了解这个算法的详细过程。
这不是第一次接触关于人工智能的知识,以前或多或少都了解过学习过人工智能方面的知识。但是这却是第一次写关于人工智能方面的学习笔记,这样的学习笔记,将我们的学习过程记录下来,就算时间过了很久,我们也能回忆起我们现在学习了哪些知识,而不是有一个浅显的大致的了解之后,转眼就忘记了。
参考:清华大学计算机系马少平老师《人工智能》课程PPT课件
