Week 1 我没有听。
标题为Solving problems with search algorithms
核心内容为:
老师的PPT用Romania作为例子,假设你在Romania的Arad度假。
那么你需要先 Formulate Goal(制定目标),比如说be in Bucharest。然后Formulate Problem(制定问题): states(状态):various cities(各种城市),actions(动作):drive between cities
最后find solution: sequence of cities, e.g., Arad → Sibiu → Rimnicu Vilcea → Bucharest
第一个内容是problem formulation(问题形式化)
问题形式化是指将现实世界的问题抽象并定义为AI可理解的状态空间与规则。 其中包含的决策过程包括:
Abstracting away from unnecessary detail is a key➔ It can drastically reduce the size of the state/search space(去除不必要的细节是关键➔它可以显著减少状态/搜索空间的大小)
Problem formulation: Example
Go(sibiu), Go(rimnicu vilcea), Go(bucharest),...result(in(arad),go(zerind)) ➔ in(zerind)explicit, e.g., in(bucharest); implicit, e.g., checkmate(x)e.g., sum of distances, number of actions executedc(s,a,s') is the step cost of taking action $a$ at state $s$ to reach state $s'$, assumed to be >= 0
这张幻灯片以人工智能中的经典模型“吸尘器世界”(Vacuum World)为例,解释了如何将现实问题形式化(Problem Formulation)为计算机可处理的标准搜索问题。
核心要素拆解
这个图展示了吸尘器世界中所有可能出现的状态(States)。它的核心逻辑是由 3 个二元变量排列组合得出的,总共包含 $2 \times 2 \times 2 = 8$ 种不同情况。
状态计算的三要素
8 个状态的具体对应关系
如何理解它的动态运作
AI 算法的目标就是控制吸尘器通过执行动作(Left 左移、Right 右移、Suck 吸尘),从任意一个初始状态转移到目标状态(7 或 8):
根据上周的PPT,可以看到Agent 主要是基于通过传感器(sensors) 来感知(percept)环境(environment)输入给agent,然后agent基于这些内容对环境(environment)通过执行器(actuators)做出行动 (actions)
这幅图展示的是人工智能中简单问题求解智能体(Simple Problem-Solving Agent)的算法伪代码,用来说明一个基于目标的智能体(Agent)是如何通过“感知-规划-执行” 三部曲来决定每一步动作的
持久状态变量(Persistent Variables)
算法核心执行步骤
这种智能体采用了经典的“先规划再行动(Look-ahead)”机制:在初始阶段或上一个计划完成后,通过搜索算法生成一整套解决路径,随后按步骤依次执行,直到计划耗尽后再重新规划。
Key Concepts(核心概念)
Representing a Problem(问题的 5 大标准表示法)
Definition of Solution(解的定义)
然后提出一个新的问题你应该怎么做呢?从开始的杂乱无绪,到后面的顺时针排序,你因该怎么定义
解决逻辑:
Search tree
首先我们可以想象一下,我们要在 Google 上搜索“如何零基础自学吉他”,你整个查资料、翻网页的过程,其实就是一次标准的 Tree Search(树搜索)。
把上网冲浪映射到树搜索的组件上,对应关系如下:
Classification of Control Strategies in Artificial Intelligence
| 组合分类 | 算法特点 | 代表算法 | 通俗比喻 |
|---|---|---|---|
| 无启发式 + 不可撤销 Uninformed + Irrevocable | 不存在有效算法 (--) | 无 |
蒙着眼睛在悬崖边向前走,走错直接掉下去,既没导航又不能回头,无法稳定解决问题。
|
| 无启发式 + 可回溯 Uninformed + Tentative |
盲目搜索(Blind Search) 虽然没有导航指引,但会记录走过的路,发现死胡同就退回来换条路走。 |
BFS(广度优先) DFS(深度优先) DLS(限深) IDS(迭代加深) UCS(一致代价) |
瞎子摸象/走迷宫: 虽然不知道出口在哪,但用绳子绑着自己,撞墙了就沿着绳子退回来走另一条。
|
| 启发式 + 不可撤销 Informed + Irrevocable |
局部搜索(Local Search) 有导航指引,但为了节省内存,不保存历史路线,只不断尝试改善当前状态。容易陷入“局部最优”。 |
Hill Climbing(爬山法) Simulated Annealing(模拟退火) Genetic Algorithms(遗传算法) Local Beam Search |
浓雾中爬山: 你看不见全局,但能感觉哪边坡度更陡(启发信息),就往哪边走。走了一步就回不去了。
|
| 启发式 + 可回溯 Informed + Tentative |
系统性启发式搜索 既有导航指引(优先走看起来最好的路),又维护了一个备选路线列表(Open List),当前路线不行随时切换。 |
Greedy Best-First Search A 算法 A* 算法 |
使用地图导航: GPS 会推荐最优路线(启发),但如果你偏离路线或遇到堵车,导航能重新计算并指引你走备用路线(回溯)。
|
无信息搜索(又称盲目搜索)指算法在探索状态空间时,仅利用问题定义本身的信息(初始状态、动作集、转移模型及目标测试),不借助任何领域相关的启发式估算函数(如距离、评估值等)。
|
广度优先搜索 (BFS - Breadth-First Search)
|
深度优先搜索 (DFS - Depth-First Search)
|
迭代加深搜索(Depth-First Iterative Deepening, IDS / DFID)通过逐步增加深度限制 L (L = 0, 1, 2, ...),反复运行深度受限搜索(DLS)。
| 搜索策略 | 时间复杂度 | 空间复杂度 | 完备性 (Completeness) | 最优性 (Optimality) |
|---|---|---|---|---|
| BFS (广度优先) | O(bd) | O(bd) (高) | 是 (若 b 有限) | 是 (当步长代价相同时) |
| DFS (深度优先) | O(bm) | O(bm) (极低) | 否 (有限空间且去重时为“是”) | 否 |
| DLS (深度受限) | O(bL) | O(bL) | 否 (当 d > L 时) | 否 |
| IDS (迭代加深) | O(bd) | O(bd) (极低) | 是 | 是 (当步长代价相同时) |
| UCS (一致代价) | O(b1+⌊C*/ε⌋) | O(b1+⌊C*/ε⌋) | 是 (当代价 ≥ ε > 0) | 是 (任意正步长代价) |
传统搜索将状态视为不可拆分的黑盒(Atomic State);而 CSP 将状态结构化表达为变量与值域的赋值组合,使得算法能够利用局部约束进行针对性剪枝。
回溯搜索是针对 CSP 特化的深度优先搜索(DFS)。由于 CSP 解与变量赋值顺序无关(对 A 赋值再对 B 赋值,与先 B 后 A 等价),搜索树每层仅对单个变量赋值,将分支树从 b! 级降至指数级,并能实现早期剪枝(Early Pruning)。
|
1. MRV (最少剩余值)
Minimum Remaining Values
|
2. LCV (最少约束值)
Least Constraining Value
|
3. Arc Consistency (AC-3)
弧一致性前向推断
|
理解算法的分类维度能够帮助我们在面对实际工业界问题时迅速做出正确的技术选型。
| 分类维度 | 不可撤销算法 (Irrevocable) | 尝试性/可回溯算法 (Tentative) |
|---|---|---|
| 核心机制 | 决策一旦做出立刻执行,不保存历史轨迹,无法回头。 | 在内存中维护搜索树/前沿队列,允许回溯并重新尝试。 |
| 典型代表 | 随机游走(Random Walk)、简单爬山法(Hill Climbing)。 | BFS, DFS, IDS, UCS, A* 算法, 回溯搜索。 |
| 适用场景 | 状态空间极度庞大、环境物理不可逆或对响应时间要求极高。 | 允许在计算机内存中进行虚拟推演的求解规划问题。 |