02 搜索探寻与问题求解

搜索:依据已有信息来寻找满足约束条件的待求解问题答案


01 搜索算法基础

形式化描述

状态、动作、状态转移、路径/代价、目标测试

Pasted image 20250605094330.png|350

我们用一棵树来记录算法探索过的路径

搜索算法可以被看成是一个构建搜索树的过程,从根结点(初始状态)开始,不断展开每个结点的后继结点,直到某个结点通过了目标测试

搜索算法具备如下的评价指标:

评价指标
完备性 当问题存在解时,算法是否能保证找到一个解。
最优性 搜索算法是否能保证找到的第一个解是最优解。
时间复杂度 找到一个解所需时间。
空间复杂度 在算法的运行过程中需要消耗的内存量。

而在搜索树中,我们通常使用如下变量,估计复杂度:

符号 含义
b 分支因子,即搜索树中每个节点最大的分支数目
d 根节点到最浅的目标结点的路径长度
m 搜索树中路径的最大可能长度
n 状态空间中状态的数量

搜索算法框架

树搜索

边缘 (fringe) 集合: 集合ℱ用于保存搜索树中可用于下一步探索的所有候选结点,也叫做开表 (openlist)

TreeSearch

  • 输入:节点选择函数 pick_from,后继节点计算函数 successor_nodes
  • 输出:从初始状态到终止状态的路径

  • 算法流程
    • F{根节点}
    • while F do
      •   npick_from(F)
      •   FF{n}
      •   if goal_test(n) then
        •     return n.path
      •   end
      •   FFsuccessor_nodes(n)
    • end

剪枝搜索

树搜索算法存在问题:并不是其所有的后继节点都值得被探索

图搜索

在图搜索策略下,在边缘集合中所有产生环路的节点都要被剪枝,但不会排除所有潜在的可行解。因此在状态数量有限情况下,采用图搜索策略的算法也是完备的

GraphSearch

  • 输入:节点选择函数 pick_from,后继节点计算函数 successor_nodes
  • 输出:从初始状态到终止状态的路径

  • 算法流程
    • F根节点
    • C C 用于标记已经访问过的节点
    • while F ≠ do
      • n ← pick_from (F)
      • F ← F =
      • if goal_test (n) then
        • return n.path
      • end
      • if n.state C then
        • C ← C
        • F ← F successor_nodes (n)
      • end
    • end

广度优先搜索算法

Is a simple strategy in which the root node is expanded first, then all the successors of the root node are expanded next, then their successors, and so on

Pasted image 20250605111020.png

深度优先搜索算法

Always expands the deepest node in the current frontier of the search tree. The search proceeds immediately to the deepest level of the search tree, where the nodes have no
Successors.

Pasted image 20250605111335.png


02 启发式搜索 (有信息搜索)

辅助信息 所求解问题之外、与所求解问题相关的特定信息或知识。
评价函数(evaluation function)f (n) 从当前节点 n 出发,根据评价函数来选择后续结点。 下一个结点是谁?
启发函数(heuristic function)h (n) 计算从结点 n 到目标结点之间所形成路径的最小代价值,这里将两点之间的直线距离作为启发函数。 完成任务还需要多少代价?

贪婪最佳优先搜索

评价函数 f (n)=启发函数 h (n)

Pasted image 20250605113026.png|500

A* 算法

f(n)评价函数=g(n)起始结点到结点n代价()+h(n)结点n到目标结点代价()

Pasted image 20250605113346.png|500

性能分析

符号 含义
h(n) 节点 n 的启发函数取值
g(n) 从起始节点到节点 n 所对应路径的实际代价
f(n) 节点 n 的评价函数取值
c(n,a,n) 从节点 n 执行动作 a 到达节点 n 的单步代价
h(n) 从节点 n 出发到达终止节点的最小代价
一个良好的启发函数需要满足如下两种性质:

03 对抗搜索

对抗搜索 (Adversarial Search) 也称为博弈搜索 (Game Search)

智能体 (agents) 之间通过竞争实现相反的利益,一方最大化这个利益,另外一方最小化这个利益:
Pasted image 20250605121008.png|275

两人对决游戏 (MAX and MIN, MAX 先走) 可如下形式化描述:

状态 状态 s 包括当前的游戏局面和当前行动的智能体。函数 player (s) 给出状态 s 下行动的智能体。
动作 给定状态 s,动作指的是 player (s) 在当前局面下可以采取的操作 a,记动作集合为 actions (s)。
状态转移 给定状态 s 和动作 a∈actions (s),状态转移函数 result (s, a) 决定了在 s 状态采取 a 动作后所得后继状态。
终局状态检测 终止状态检测函数 terminal_test (s) 用于测试游戏是否在状态 s 结束。
终局得分 终局得分 utility (s, p) 表示在终局状态 s 时玩家 p 的得分。

本次讨论中,主要讨论在**确定的、全局可观察的、竞争对手轮流行动、零和游戏(zero-sum)**下的对抗搜索

看 Alpha-Beat 剪枝的例子理解即可

Pasted image 20250605130032.png|450
Pasted image 20250605131208.png|275

给定一个游戏搜索树,minimax 算法通过每个节点的 minimax 值来决定最优策略

minimax(s)={utility(s),if terminal_test(s)maxaactions(s)minimax(result(s,a)),if player(s)=MAXminaactions(s)minimax(result(s,a)),if player(s)=MIN

性能分析

Alpha-Beta 剪枝搜索算法在 Minimax 算法中可减少被搜索的结点数,即在保证得到与原 Minimax 算法同样的搜索结果时,剪去了不影响最终结果的搜索分枝

Pasted image 20250605131541.png|450

Alpha 剪枝

Pasted image 20250605131815.png|300

Beta 剪枝

Pasted image 20250605132043.png|300

算法流程

Pseudo Code

  1. 根结点(MAX 结点)的𝛼值和𝛽值分别被初始化为−∞和+∞
  2. 子节点继承父节点的𝛼值和𝛽值,再按照以下规则进行更新
  3. 对于 MAX 节点,如果其孩子结点(MIN 结点)的收益大于当前的𝛼值(极大层的下界),则将𝛼值更新为该收益
  4. 对于 MIN 结点,如果其孩子结点(MAX 结点)的收益小于当前的𝛽值(极小层的上界),则将𝛽值更新为该收益
  5. 如果一个结点的𝛼值和𝛽值满足𝛼>𝛽的条件,则该结点尚未被访问的后续结点就可以被剪枝

性能分析

根据上述结论,可以得出最优效率拓展下的情形:

在最优效率下扩展的结点数量为 O(bm+12)O(bm2)


04 蒙特卡洛搜索

引入:多臂赌博机问题

问题描述:

形式化分析

因此,问题求解的目标为最小化悔值函数的期望,该悔值函数的取值取决于智能体所采取的策略

贪心算法策略

贪心算法策略如下:

不足:忽略了其他从未摇动或很少摇动的赌博机,而失去了可能的机会 👇

𝝐-贪心算法

lt={argmaxix¯i,T(i,t1),1ϵ随机的i{1,2,,K},ϵ

不足:与被探索的次数无关 👉 需要对那些探索次数少或几乎没有被探索过的动作赋予更高的优先级

上限置信区间算法(Upper Confidence Bounds, UCB 1)

在第t次时选择使得如下式子取值最大的动作alt

lt=argmaxix¯i,T(i,t1)+C2lntT(i,t1)

算法流程

Pseudo Code

  • 选择 (selection)
    • 算法从搜索树的根节点开始,向下递归选择子节点,直至到达叶子节点或者到达具有还未被扩展过的子节点的节点 L
    • 这个向下递归选择过程可由 UCB 1 算法来实现,在递归选择过程中记录下每个节点被选择次数和每个节点得到的奖励均值
  • 扩展 (expansion)
    • 如果节点 L 不是一个终止节点 (或对抗搜索的终局节点), 则随机扩展它的一个未被扩展过的后继边缘节点 M
  • 模拟 (simulation)
    • 从节点 M 出发,模拟扩展搜索树,直到找到一个终止节点
    • 模拟过程使用的策略和采用 UCB 1 算法实现的选择过程并不相同
      • 模拟过程通常会使用比较简单的策略,例如使用随机策略
  • 反向传播 (Back Propagation)
    • 用模拟所得结果 (终止节点的代价或游戏终局分数) 回溯更新模拟路径中 M 以上 (含 M) 节点的奖励均值和被访问次数


Copyright © 2025 Casette.
Made with Obsidian DG.