L3 Informed Search
-
UCS(又称Dijkstra's Algorithm) 很好,它 Optimal & Complete,但是它耗时,因为它没有利用目标的方位信息(而是地毯式搜索),现在启发式Search(Informed Search) 聚焦于利用目标信息加速搜索
-
Heuristics 启发式
- 一个估计状态与目标接近程度的函数
- 有很多种设计方法,比如采用 欧几里得距离、Manhattan距离(最短折线距离只能沿四个正方向行走)等
-
Greedy Search 贪心搜索
- 通过 Heuristics 函数计算每个state到目标的距离
- 策略:从Start State开始,优先选择距离最近的state,以此类推直到到Target
- 实现方式:Fringe是一个优先队列(优先级:H)
- 通常不会是 Optimal 或 Complete的
-
A* Search
- 结合 UCS + Greedy
- 策略:UCS 通过 Cost 来选择下一个state、Greedy 通过 Heuristics 来选择下一个state,而 A* Search 通过 \(F=f(Cost,Heuristics)\) 来决定下一个state,一般来讲就是 \(F=C+H\)
- 实现方式:Fringe是一个优先队列(优先级:F)
- A* Search 何时终止
- 应当在 出队一个G时终止而非入队时
-
Complete & Optimal --- 当然这需要H合理,也就是 Admissible Heuristics
- A heuristic h is admissible if \(0 \le h(n) \le h^*(n)\),where \(h^*(n)\) is the true cost to the nearest goal --- 这个理论的proof相当简单,note上的证明不错
$$
\begin{aligned}
&我们假设有两条候选路径,路径一到G的祖先是A,路径二到G的祖先是B\\ &这两条路径都会到目标G,假设路径一是最优路径 \\ & 已知 f_1(G)=g_1+h_G=g_1 < f_2(G)=g_2+h_G=g_2, f_2(G) \ge f(B), f_1(G) \ge f(A)\\ & 所以 f(A) < f_2(G),因此 A会比路径二的G先出队,这样路径一的G也会比路径二的G先出队,此时符合题设 \end{aligned}$$ - 比如 Manhattan 距离是 Admissible 的
- A heuristic h is admissible if \(0 \le h(n) \le h^*(n)\),where \(h^*(n)\) is the true cost to the nearest goal --- 这个理论的proof相当简单,note上的证明不错
$$
\begin{aligned}
-
Creating Admissible Heuristics --- 创建合理启发式函数很重要
-
一般来讲我们将难的问题进行relax得到简单易算的启发式函数,比如直接用欧几里得距离表示cost而不是实际公路距离
-
8 Puzzle 问题分析(华容道)
- 首先分析三要素
- state space --- 各种state
- successor function(with actions,costs) + transition model
- start state and a goal test(goal state)
- 设置一个Heuristics
- mismatch的方块数 --- 思考一下既然mismatch至少要移动一下吧,那么肯定小于真实cost
- 到真实位置的manhattan距离之和 --- 思考一下至少需要manhattan距离吧
- 想一想manhattan更具有指导意义吧
- 首先分析三要素
-
马走棋 问题分析
- 马走棋会走日,因此马想到Goal位置时的Heuristic该如何分析呢
- Heuristic 其实也是最先想到 Manhattan 和 欧几里得距离不过需要适配
- Manhattan / 3
- 欧几里得距离 / \(\sqrt 5\)
- 水平或铅直距离 / 2
- 以上三者取 max
-
Heuristics的说明
- Dominance(优势): \(h_a \ge h_c\) 如果 \(\forall n: h_a(n)\ge h_c(n)\)
- 大于号说明\(h_a\)优于\(h_c\)(想想8 puzzhle中manhattan更有优势)
- Trivial heuristics
- Start State的直接子节点 h 是精确的
- Goal State的h 是 0
- 其实大多数情况下,我们能找到几个 Heuristics,但是不一定有 Heuristic是绝对优势,因此我们可以采取 \(h= max(h_1,h_2)\) 的方案来规约
- Dominance(优势): \(h_a \ge h_c\) 如果 \(\forall n: h_a(n)\ge h_c(n)\)
-
-
Tree Search and Graph Search --- 概念性 policy
- 在 Tree Search 中,我们会让同一个 state 出现两次,而Graph Search的核心就是 不会拓展已经拓展过的 state
- 当引入 Graph Search的 理念时,我们就==可以处理循环问题,并且简化部分树==
- 将已有的Tree Search 拓展为Graph Search,只需要 Tree Search + the set of expanded states(closed set),每当拓展state时就先看一眼closed set
- 当引入 closed set 后,我们再反观 Heuristics,它需要比Admissible==更强的性质 Consistency==
- Consistency --- 启发式“弧”成本 ≤ 每个弧的实际成本 即 \(h(A) - h(C) ≤ cost(A \to C)\)
- 比如 A、C、G,A到C实际cost是1,C到G实际cost是3,A的h是4,C的h是3,虽然 Admissible,但是不 Consistency
- 其实 Consistency使得我们path上的 F 值是非递减的
- 如果采用 Consistent Heuristic,那么 Graph Search 版本的 A* 依然是 Optimal 的
- Tree Search
- A*在启发式函数 Admissble 时是最优的
- UCS是特殊情况(h = 0)是最优的
- Graph Search
- A*在启发式函数 Consistent 时是最优的
- UCS是特殊情况(h = 0 is consistent)是最优的
-
A* 还有许多变体,主要是为了节省内存,比如类似前面提到的IDS,A* 也有 IDA* 算法但是使用 f 值作为限制,其他诸多的有 RBFS、SMA* 就不赘述了
-
小结
- 在这里我说明一下已经学习的Search方法 --- 同时分为 Tree Search 版 和 Graph Search 版 --- 在project 1 中我们实现了各种搜索算法的Graph Search版本,因此应该都是OK的,同时在Project1中我们实现了一版新的Graph的 A* 算法能够确保在 heuristic 选择不当的时候仍然找到最优路径 project 1
- DFS
- BFS --- Optimal(BFS是特殊情况的UCS)
- IDS --- Great Optimal
- UCS --- Great Optimal(A*的特殊情况)
- Greedy
- A* ---- Great and Powerful Optimal
- 常用的Fringe
- 栈 --- 每次入栈新探索的、每次出栈无路可走的
- 队列 --- 每次入栈刚出栈的所有子state、每次出栈最优条件的state
- 优先队列--- 每次入栈刚出栈的所有子state、每次出栈最优条件的state
- closed set --- 使用 set 集合即可
- 分析Search问题
- 分析三要素 --- state space、successor function(actions、costs、transition model)、start state and goal test(goal state) --- 我们要知道 就是找从 Start State 到 Goal State 的actions 序列,明确State是如何的进而分析State Space等了解完善的初始条件
- 💡要有构建Search Tree的思维,每个节点都是State、弧是successor function(action+cost) --- search tree 和 Tree Search 、Graph Search 无关,它是解决search问题的经典模型,相当于 mechanism 和 policy 的区别
- 采取合适的Search 方法解决 --- 一般都是选用 A* 解决问题,因此这里需要想一个好的 Heuristic
- 在以上学过的如此多种算法中,最通用且确保最优的Search 算法就是
- Graph Search 版的 A* 算法
- 在这里我说明一下已经学习的Search方法 --- 同时分为 Tree Search 版 和 Graph Search 版 --- 在project 1 中我们实现了各种搜索算法的Graph Search版本,因此应该都是OK的,同时在Project1中我们实现了一版新的Graph的 A* 算法能够确保在 heuristic 选择不当的时候仍然找到最优路径 project 1