文章目录
- 📚 核心逻辑 (一句话概括)
- 第一部分:搜索问题形式化
- 第二部分:基础搜索策略
- 一、核心问题:如何系统地搜索问题的解?(The Core Problem):理解搜索的本质挑战
- 二、解决方案:无信息搜索与启发式搜索(Solutions):理解不同搜索策略的设计思路
- 三、解决方案的逻辑关系(Logical Relationships):理解策略之间的演进逻辑
- 四、核心设计原理总结(Design Principles):理解搜索设计的本质
- 1. 形式化设计的本质(The Essence of Formulation Design):五个核心要素共同构成搜索问题的形式化
- 2. 扩展策略的本质(The Essence of Expansion Strategies):不同的扩展策略决定了搜索的特性
- 3. 优化技术的本质(The Essence of Optimization Techniques):双向搜索减少节点数,图搜索避免重复探索
- 4. 信息利用策略的本质(The Essence of Information Utilization):不同的信息利用策略决定了搜索的特性
- 5. 启发函数性质的本质(The Essence of Heuristic Properties):可采纳性和一致性是A*算法最优性保证的基础
- 6. 设计权衡(Design Trade-offs):没有完美的算法,只有适合不同场景的算法
- 📝 本章总结
📌 适合对象:希望深入理解基础搜索算法原理的学习者
⏱️ 预计阅读时间:75-90分钟
🎯 学习目标:理解搜索问题形式化和基础搜索策略的核心问题、解决方案和设计逻辑
📚 核心逻辑 (一句话概括)
核心问题:如何将实际问题形式化为搜索问题?如何系统地搜索问题的解,无论是否有额外信息?
解决方案的逻辑:首先通过定义状态空间、动作、目标测试、状态转移函数、路径代价五个核心要素,将实际问题转化为可搜索的形式化问题;然后通过不同的扩展策略(按层、按代价、按深度)和优化技术(双向搜索、图搜索)在无信息情况下搜索,通过启发函数提供信息引导,结合实际代价和估计代价(贪婪策略和A*策略)在有信息情况下搜索,在完备性、最优性、效率之间权衡。
第一部分:搜索问题形式化
一、核心问题:如何形式化实际问题?(The Core Problem):理解形式化的本质挑战
问题的本质(The Essence of the Problem):理解形式化的需求
许多实际问题(如路径规划、拼图问题、游戏AI)都可以转化为搜索问题,但如何将实际问题形式化为搜索问题,是解决搜索问题的关键步骤。形式化需要将问题的本质特征提取出来,用状态、动作、目标等概念精确描述,同时要平衡表示的完整性和简洁性。就像将自然语言翻译成计算机能理解的形式语言,需要准确捕捉问题的本质,同时保持表示的简洁和高效。
设计搜索问题形式化时必须权衡的维度:
- 完整性(Completeness):状态表示是否包含解决问题所需的所有信息?
- 简洁性(Conciseness):状态表示是否简洁,避免冗余信息?
- 可操作性(Operability):状态表示是否便于执行动作和状态转移?
- 效率(Efficiency):形式化后的搜索空间是否足够小,便于搜索?
二、解决方案:形式化的五个核心要素(Solutions):理解形式化的设计思路
1. 状态空间设计(State Space Design):如何表示所有可能的状态
状态空间设计:定义所有可能的状态集合,包括初始状态、目标状态和中间状态。状态表示需要完整描述问题的当前状态,同时保持简洁和可操作。就像绘制地图,需要标明所有可能的位置,同时保持地图的清晰和易读。为什么需要:状态空间定义了搜索问题的所有可能状态,是搜索的基础。好的状态空间设计能够简化问题,提高搜索效率。
状态空间设计的核心考虑:
- 状态表示:如何用数据结构表示状态(如城市名、拼图配置)
- 状态空间大小:可能状态的数量(可能是有限的或无限的)
- 状态的有效性:如何判断状态是否有效(如拼图是否可解)
2. 动作定义(Action Definition):如何定义状态之间的转换
动作定义:定义在给定状态下可以执行的动作集合,包括动作的前置条件、效果和代价。动作定义了状态之间的转换方式,就像地图上的路线,标明从A到B的路径。为什么需要:动作定义了状态空间的结构,决定了搜索空间的大小和形状。好的动作定义能够减少搜索空间,提高搜索效率。
动作定义的核心考虑:
- 动作集合:在某个状态下可以执行的所有动作
- 前置条件:执行动作需要满足的条件
- 动作效果:执行动作后状态如何变化
- 动作代价:执行动作需要付出的代价
3. 目标测试设计(Goal Test Design):如何判断是否达到目标
目标测试设计:定义判断当前状态是否是目标状态的函数。目标测试需要准确判断是否达到目标,同时计算效率要高。就像判断是否到达目的地,需要快速准确地判断。为什么需要:目标测试决定了搜索何时停止,是搜索算法的终止条件。好的目标测试能够快速判断是否找到解,提高搜索效率。
目标测试设计的核心考虑:
- 目标状态的定义:什么是目标状态(如到达Bucharest、完成拼图)
- 目标测试的效率:如何快速判断当前状态是否是目标状态
- 多个目标:如何处理多个可能的目标状态
4. 状态转移函数设计(Transition Model Design):如何描述状态变化
状态转移函数设计:描述执行动作后状态如何变化,包括确定性转移和不确定性转移。状态转移函数定义了状态空间的结构,就像地图上的路线图,标明从A到B的路径。为什么需要:状态转移函数定义了搜索空间的结构,决定了搜索的复杂度。好的状态转移函数能够简化状态转移,提高搜索效率。
状态转移函数设计的核心考虑:
- 确定性转移:执行动作后,状态确定地转移到新状态
- 不确定性转移:执行动作后,状态可能转移到多个新状态(概率分布)
- 转移的完整性:所有可能的状态转移都需要定义
5. 路径代价设计(Path Cost Design):如何评估解的质量
路径代价设计:定义从初始状态到当前状态的路径代价,用于评估解的质量。路径代价需要准确反映解的质量,同时计算效率要高。就像评估旅行路线的费用,需要准确计算总费用。为什么需要:路径代价用于评估和比较不同的解,是搜索算法选择最优解的依据。好的路径代价设计能够准确评估解的质量,帮助找到最优解。
路径代价设计的核心考虑:
- 单步代价:执行单个动作的代价(如距离、时间、费用)
- 路径总代价:路径上所有动作代价的总和
- 代价函数的一致性:代价函数是否满足一致性要求(如三角不等式)
三、形式化要素的逻辑关系(Logical Relationships):理解形式化要素之间的关系
依赖关系:状态空间设计是基础,定义了所有可能的状态;动作定义依赖于状态空间,定义状态之间的转换;目标测试设计依赖于状态空间,判断状态是否是目标;状态转移函数设计依赖于状态空间和动作定义,描述状态如何变化;路径代价设计依赖于状态转移函数,评估解的质量。这些要素相互依赖,共同构成搜索问题的形式化。
第二部分:基础搜索策略
一、核心问题:如何系统地搜索问题的解?(The Core Problem):理解搜索的本质挑战
问题的本质(The Essence of the Problem):理解"从无信息到有信息"
基础搜索策略面临的核心挑战:如何系统地搜索问题的解,无论是否有额外信息? 就像在一个迷宫中找出口,可能没有任何线索(无信息搜索),也可能有地图指引(启发式搜索)。无信息搜索只能通过系统化探索来找到解,启发式搜索可以利用额外信息更高效地找到解。
设计搜索算法时必须权衡的维度:
- 完备性(Completeness):能否保证找到解?(如果解存在,算法一定能找到吗?)
- 最优性(Optimality):能否保证找到最优解?(找到的解是最短路径或代价最小的吗?)
- 效率(Efficiency):需要多少时间和空间?(搜索速度快吗?内存消耗大吗?)
- 信息利用(Information Utilization):如何利用额外信息提高效率?(启发函数)
- 重复状态(Repeated States):如何避免重复探索?(会不会多次走到同一个地方?)
二、解决方案:无信息搜索与启发式搜索(Solutions):理解不同搜索策略的设计思路
1. 无信息搜索(Uninformed Search):盲目探索
核心思路:在没有任何附加信息的情况下,通过不同的扩展策略(按层、按代价、按深度)和优化技术(双向搜索、图搜索)系统地搜索问题的解。就像在一个完全陌生的迷宫中找出口,没有地图、没有指南针,只能一步步探索。为什么需要:当没有额外信息时,只能通过系统化探索来找到解,不同的扩展策略在完备性、最优性、效率之间权衡。
关键策略:
- 按层扩展(BFS,广度优先搜索):像水波扩散一样,一层一层向外扩展,保证找到最短路径,但内存消耗大
- 按代价扩展(UCS,一致代价搜索):按路径代价选择,优先探索代价小的路径,保证找到代价最小的路径
- 按深度扩展(DFS,深度优先搜索):像走迷宫一样,一条路走到底,内存消耗小,但可能找不到解或不是最短路径
- 限制深度(DLS,深度有限搜索):在DFS基础上设置最大深度限制,避免无限路径问题
- 迭代深入(IDDFS,迭代深入深度优先搜索):先尝试深度1,找不到就尝试深度2,兼顾BFS和DFS的优点
- 双向搜索:从起点和终点同时搜索,在中间相遇,大幅减少搜索节点数
- 图搜索:记住已经走过的位置,避免重复探索,特别适用于有大量重复状态的问题
2. 启发式搜索(Heuristic Search):利用信息引导
核心思路:利用额外信息(启发函数)更高效地搜索问题的解,通过启发函数提供信息引导,结合实际代价和估计代价(贪婪策略和A*策略),在搜索效率和最优性之间权衡。就像从没有地图的盲目探索,到有地图指引的智能导航,知道大概方向后可以更快速地找到目标。为什么需要:当有额外信息时,可以利用这些信息引导搜索,减少搜索空间,提高搜索效率。
关键策略:
- 贪婪最佳优先搜索:只考虑启发函数 h ( n ) h(n) h(n),总是选择离目标最近的节点扩展,快速但不一定最优
- A*搜索:结合实际代价 g ( n ) g(n) g(n)和估计代价 h ( n ) h(n) h(n), f ( n ) = g ( n ) + h ( n ) f(n)=g(n)+h(n) f(n)=g(n)+h(n),优先扩展总代价最小的节点,既能利用信息提高效率,又能保证最优性
- 可采纳性:启发函数 h ( n ) ≤ h ∗ ( n ) h(n) \leq h^*(n) h(n)≤h∗(n),估计值不超过真实值,保证A*能找到最优解
- 一致性:启发函数满足三角不等式,保证A*图搜索的最优性
三、解决方案的逻辑关系(Logical Relationships):理解策略之间的演进逻辑
1. 问题-解决方案映射(Problem-Solution Mapping):无信息搜索解决无信息情况,启发式搜索解决有信息情况
2. 演进逻辑(Evolution Logic):从形式化到搜索,从无信息到有信息,从基础策略到改进策略
从形式化到搜索:问题形式化(定义状态空间、动作、目标等)→ 搜索算法(应用不同的搜索策略)。形式化是搜索的前提,只有将问题形式化后,才能应用搜索算法。
从无信息到有信息:无信息搜索(盲目探索)→ 启发式搜索(利用信息)。从没有任何额外信息,只能系统化探索,到利用额外信息引导搜索,提高效率。
从基础策略到改进策略:BFS(按层扩展)→ UCS(按代价扩展)→ DFS(按深度扩展)→ DLS(限制深度)→ IDDFS(迭代深入)。从基础扩展策略到改进策略,在完备性、最优性、效率之间权衡。
从快速到最优:贪婪策略(快速但不一定最优)→ A*策略(完备且最优)。从只考虑估计代价快速搜索,到综合考虑实际代价和估计代价保证最优性。
演进逻辑:基础搜索策略的发展体现了从形式化到搜索、从无信息到有信息、从基础策略到改进策略、从快速到最优的演进过程。问题形式化是搜索的基础,无信息搜索通过不同的扩展策略和优化技术在完备性、最优性、效率之间权衡;启发式搜索通过利用额外信息提高效率,同时保证最优性。这种演进使得搜索算法能够适应不同的问题场景和信息条件。
四、核心设计原理总结(Design Principles):理解搜索设计的本质
1. 形式化设计的本质(The Essence of Formulation Design):五个核心要素共同构成搜索问题的形式化
五个核心要素:状态空间、动作、目标测试、状态转移函数、路径代价,共同构成搜索问题的形式化。每个要素都有其特定的作用,相互依赖,共同决定搜索问题的复杂度和搜索效率。好的形式化是高效搜索的前提。
2. 扩展策略的本质(The Essence of Expansion Strategies):不同的扩展策略决定了搜索的特性
三种基本扩展策略:按层扩展(保证最短路径)、按代价扩展(保证代价最小)、按深度扩展(节省内存)。不同的扩展策略决定了搜索的特性。选择按层扩展,就保证了最优性但牺牲了空间效率;选择按深度扩展,就节省了内存但可能失去完备性和最优性。
3. 优化技术的本质(The Essence of Optimization Techniques):双向搜索减少节点数,图搜索避免重复探索
两种优化技术:双向搜索(减少搜索节点数)、图搜索(避免重复探索)。这些技术可以应用于不同的基础策略,提升搜索效率。双向搜索通过从两端同时搜索,将搜索深度减半;图搜索通过记录已访问状态,避免重复探索,特别适用于有大量重复状态的问题。
4. 信息利用策略的本质(The Essence of Information Utilization):不同的信息利用策略决定了搜索的特性
两种信息利用策略:只考虑估计代价(贪婪策略)、综合考虑实际代价和估计代价(A*策略)。不同的信息利用策略决定了搜索的特性。选择只考虑估计代价,就快速但不一定最优;选择综合考虑,就既能利用信息又能保证最优性。
5. 启发函数性质的本质(The Essence of Heuristic Properties):可采纳性和一致性是A*算法最优性保证的基础
可采纳性和一致性:可采纳性保证A能找到最优解,一致性保证A图搜索的最优性。这些性质是A*算法最优性保证的基础。
6. 设计权衡(Design Trade-offs):没有完美的算法,只有适合不同场景的算法
核心权衡:在形式化设计中,需要在完整性、简洁性、可操作性和效率之间权衡;在搜索算法设计中,需要在完备性、最优性、效率(时间和空间)之间权衡。保证完备性和最优性通常需要更高的复杂度(更多时间和内存),但可以通过重复搜索(如IDDFS)换取空间效率,或通过利用信息(如A*)提高效率。设计搜索算法的核心就是在这些维度之间找到平衡点。没有完美的算法,只有适合不同场景的算法。
📝 本章总结
核心逻辑(Core Logic):通过形式化和不同搜索策略在完备性、最优性、效率之间权衡
- 核心问题:如何将实际问题形式化为搜索问题?如何系统地搜索问题的解,无论是否有额外信息?
- 解决方案:首先通过定义状态空间、动作、目标测试、状态转移函数、路径代价五个核心要素,将实际问题转化为可搜索的形式化问题;然后通过无信息搜索和启发式搜索的不同策略,在完备性、最优性、效率之间权衡
- 设计逻辑:形式化是搜索的基础,好的形式化能够简化问题,提高搜索效率;在完备性、最优性、效率之间权衡,利用信息可以提高效率,但需要保证启发函数的性质才能保证最优性
- 演进逻辑:从形式化到搜索,从无信息到有信息,从基础策略到改进策略,从快速到最优
知识地图(Knowledge Map):从问题形式化到无信息搜索和启发式搜索的知识结构
关键洞察(Key Insights):形式化是搜索的基础,设计权衡是核心
-
形式化是搜索的基础:好的形式化是高效搜索的前提。状态空间、动作、目标测试、状态转移函数、路径代价五个要素共同构成搜索问题的形式化,每个要素的设计都影响搜索效率。
-
要素之间的依赖关系:不同要素相互依赖,共同决定搜索问题的复杂度。理解要素之间的关系,才能设计出好的形式化。
-
扩展策略决定搜索特性:按层扩展保证最优性,按深度扩展节省内存。选择不同的扩展策略,就决定了搜索算法的基本特性。
-
优化技术提升效率:双向搜索减少节点数,图搜索避免重复探索。这些技术可以应用于不同的基础策略,进一步提升效率。
-
信息利用决定搜索特性:只考虑估计代价快速但不一定最优,综合考虑实际代价和估计代价既能利用信息又能保证最优性。
-
启发函数性质保证最优性:可采纳性保证A能找到最优解,一致性保证A图搜索的最优性。
-
设计权衡是核心:在形式化设计和搜索算法设计中都需要权衡。没有完美的算法,只有适合不同场景的算法。
1764

被折叠的 条评论
为什么被折叠?



