本章开始讨论具体的算法啦。首先要了解算法复杂度是如何计算的。可以理解为实现目标需要计算的次数。比如遍历n次加法,则复杂度为O(n)。
一个问题可以拆分为5个组成:初始状态、行动、转换模型、目标测试、路径代价。评估算法性能:完备性、最优性、时间复杂度、空间复杂度。
搜索方法来啦
搜索方法分为Uninformed search(Blind search)和Informed search (Heuristic search)
Uninformed search
3.4.1 Breadth-first search(BFS): 广度/宽度优先搜索
这篇博文说的通俗易懂:https://blog.csdn.net/raphealguo/article/details/7523411
宽度搜索扩展一下双向广度搜索算法,即是从起点跟终点分别做广度优先搜索,直到他们的搜索过程中有一个节点相同了,于是就找到了起点跟终点的一条路径。
宽度搜索的问题是:内存容易爆炸式增长。时间也是要考量的因素。
这里面涉及到数的节点搜索。基本概念是
树是数据结构,树有很多节点(node),树形结构就是各个元素之间具有分层关系的数据结构,常用一棵倒置的树来表示逻辑关系。所谓的根节点就是树的最顶端的节点(Root Node:没有父节点)。继续往下分为子节点(Child Note),分散出子节点的是(Parent Node),当不断细分直到不再有子节点时为叶子节点(Leaf Node:无子节点)。具有同样父节点的叫兄弟节点。子节点后的都叫子树。
二叉树:二叉树(binary)是一种特殊的树,它是每个节点最多有两个子树的树结构,通常子树被称作是 "左子树" 和 "右子树",二叉树常用于实现二叉搜索树和二叉堆。(这些在后面都会介绍)
完全二叉树:设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。左边不连续集中,就是不完全二叉树。
满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树被称之为满二叉树。满二叉树一定是完全二叉树,完全二叉树不一定满二叉树。
3.4.2 Uniform-cost search(UCS): 代价一致搜索
一致代价搜索是在广度优先搜索上进行扩展的,也被成为代价一致搜索,他的基本原理是:一致代价搜索总是扩展路径消耗最小的节点N。N点的路径消耗等于前一节点N-1的路径消耗加上N-1到N节点的路径消耗。一致性代价搜索使用了优先级队列并在边缘中的状态发现更小代价的路径时引入的额外的检查。详细的说明见博文https://blog.csdn.net/Suyebiubiu/article/details/101194332
3.4.3 Depth-first search(DFS): 深度优先搜索
https://blog.csdn.net/raphealguo/article/details/7560918
3.4.4 Depth-limited search(DLS): 深度限制搜索
在深度优先搜索中加入最大的深度搜索数值。
3.4.5 迭代深度搜索
当搜索空间大且深度未知时候,在Uninformed用迭代搜索防范会更好。
3.3.6 Bidirectional search 双向搜索
3.3.7 各种策略比较
3.5 Informed/Heuristic启发式搜索策略
3.5.1 Greedy best-first search 贪婪最佳
3.5.2 A* search: Minimizing the total estimated solution cost
这篇博文讲的通俗易懂。
3.5.3 Memory-bounded heuristic search存储限制的启发式搜索
Recursive best-first search
Simplified memory-bounded A*
3.5.4 learning to search better
3.6 启发函数
3.7 Summary 总结
这一章节介绍了智能体在确定、可观察、静态和完全已知的可以寻找行为的方法。过程是搜索。
必要条件:确定的目标、明确定义的困难
困难包含的五部分:初始状态、一系列的行为、转换模型、目标测试函数、路径代价函数。
环境称为状态空间,在状态空间中从初始状态到目标状态的路径成为解决方案。
搜索算法认为状态和行为为原子。
树搜索考虑所有的路径为解决方法。图搜索避免多余的路径。
搜索算法评价:完备性、最优性、时间复杂度、空间复杂度。复杂度与深度和广度相关。
Uninformed search:
Breadth-first search(BFS): 广度/宽度优先搜索
Uniform-cost search(UCS): 代价一致搜索
Depth-first search(DFS): 深度优先搜索
Iterative deepening search迭代深度搜索
Bidirectional search 双向搜索
Informed search:
Greedy best-first search 贪婪最佳
A* search: Minimizing the total estimated solution cost
Memory-bounded heuristic search存储限制的启发式搜索
Recursive best-first search
Simplified memory-bounded A*