想象你是一位美食爱好者,刚到一座拥有上万家餐厅的陌生城市,却只住三晚、每晚只能吃一顿晚饭。想找到全城最棒的那家店,光靠运气乱撞显然不行。你于是准备了一本“探店笔记”:每天根据笔记挑一家最值得去的店,点几道招牌菜,吃完认认真真记下满意度,第二天再参考这些记录做新决定。这家店好吃,就去它附近的同类型店试试;那家店踩了雷,就在笔记里给它记上一笔。三晚过去,你虽然没吃遍全城,却已经对“哪里值得吃”有了很靠谱的判断。这座美食城就是庞大到无法穷举的状态空间,那本探店笔记就是搜索树,而你每晚“挑最值得去的店”的判断,就是在有限预算下权衡探索与利用。这套“吃遍一座城”的聪明策略,正是蒙特卡洛树搜索规划(MCTS)的核心思想:用少量精心安排的模拟,替你在巨大的决策迷宫里找到一条接近最优的路。

岗位关联

学透 MCTS,你就掌握了 AI 在博弈对抗、Agent 行动规划中“算力有限却要做出最优选择”的核心方法论,是面试算法题与工程落地中的高频考点。

目录
  1. 可视化演示
  2. 核心定义
  3. 四步循环
  4. 探索利用
  5. UCB公式
  6. 回溯机制
  7. 树与状态
  8. 规划应用
  9. 安全应对
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示蒙特卡洛树搜索的选择、扩展、模拟和回传四步循环,包含UCB选择策略与价值反向传播更新机制。

本节配有交互动效(进入视口后自动加载,约 3KB)。

选择:UCB策略权衡探索与利用 红色路径为UCB最高选择 每条边标注UCB得分 UCB1 = V_i + C*sqrt(ln(N_p)/N_i) 从根节点沿UCB最大值递归选择直至叶节点。

核心定义

小明刚到美食城时,面对的第一件事就是:城市太大,餐厅太多,而自己只有三顿晚饭的预算。他不可能把每家店都吃一遍,因此必须想一个聪明的办法,让这三顿饭吃得值。这个“想办法在有限预算里做最优选择”的过程,映射到人工智能中,就是蒙特卡洛树搜索规划(MCTS)要解决的问题。

在 AI 决策场景中,Agent 同样面对“状态空间爆炸”的困境:围棋有 \(10^{170}\) 种棋局,网页导航有无数种点击路径,快递调度有数不清的路线组合。MCTS 的定位,是“连接搜索算法与大模型规划能力”的桥梁——它不要求你拥有全局完整地图,而是靠反复模拟试错,一点点修正对“哪些方向值得走”的判断,最终输出一条近似最优的行动序列。

从技术上讲,MCTS 是一种基于采样的最佳优先搜索算法。它把决策问题看作一棵树,树的每个节点代表一个局面,每条边代表一个行动。算法反复迭代四步循环,不断用模拟的胜负结果来更新节点的统计量,从而让搜索重心逐渐向“胜率更高”的区域倾斜。无论是 AlphaGo 下围棋,还是 Agent 决定先搜网页还是先调工具,MCTS 都是背后那个“最值得去哪家店”的决策引擎。

你看,小明最后吃到了全城最棒的餐厅,不是因为运气好,而是因为他把每顿饭都变成了数据分析。MCTS 也一样:它不靠蛮力穷举,而是靠聪明的模拟和复盘,把有限的算力花在真正有希望的地方。

四步循环

小明探店有一套固定流程:先翻笔记,选一家当前得分最高的店;进店后发现菜单上有没吃过的菜,就点一道,给笔记加一条新记录;等餐时,他会想象“如果这顿饭后继续在这附近逛,还会遇到什么好吃的”;吃完回家,他再把真实感受更新到笔记里。这套“选店—加菜—假想—记感受”的流程,恰好对应 MCTS 的四个阶段:选择、扩展、模拟、回溯。

对应到技术上:选择阶段从根节点出发,依据某种策略(通常是 UCB 公式)逐层挑选最有希望的子节点,直到到达一个尚未完全展开的节点;扩展阶段为该节点添加一个新的子节点,记录新的局面状态;模拟阶段从新节点开始,用随机策略快速走子直到终局,得到一个 0/1 的胜负结果;回溯阶段把这个结果沿路径传回去,更新路径上每个节点的统计量。四步循环往复,搜索树就这样一步步长高变密。

为了让“笔记上的分数”有意义,每个节点会维护两个数字:访问次数 \(N(s,a)\) 和累计回报 \(W(s,a)\)。节点的胜率估计就是两者相除:

一次完整的“选店—用餐—记录”,就是 MCTS 的一轮迭代。小明每晚靠这套流程吃出一份越来越可靠的美食地图,MCTS 则靠一次次循环,把搜索树打磨成一张越来越精确的决策地图。

Qˉ(s,a)=W(s,a)N(s,a)\displaystyle \bar{Q}(s,a) = \frac{W(s,a)}{N(s,a)}
这个公式就像“探店满意度均分”:把在这家店吃过的每一顿的满意度加起来,除以吃过的次数,就是平均分。平均分越高,越值得再去。
  1. 累计回报把历次模拟中这家店带来的“满意/不满意”(1 或 0)全部相加。
    W(s,a)W(s,a)
  2. 访问次数这家店一共被光顾(该分支被选中)的总次数。
    N(s,a)N(s,a)
  3. 平均满意度两者相除,得到这家店目前的平均得分,它代表“已知口碑”。
    Qˉ(s,a)=W(s,a)N(s,a)\bar{Q}(s,a) = \frac{W(s,a)}{N(s,a)}

探索利用

小明遇到一个纠结的问题:有一家老店,他去了三次都很好吃,平均分高达 0.9;但城里还有几十家没尝过的新店,其中可能藏着一家 1.0 分的绝世美味,也可能全是雷。如果一直去老店,虽然稳,却可能错过最好的;如果总去新店,又容易连续踩雷。这个“老熟店与新店”的两难,正是探索与利用的经典权衡。

在 MCTS 中,利用指优先选择平均回报高、已经被验证过的节点,让搜索集中到“已知好”的区域;探索指主动尝试访问次数少的节点,因为它们的估值还不准确,可能被低估,也可能藏着惊喜。如果只利用不探索,搜索会陷在局部最优;如果只探索不利用,前面的经验就全浪费了。好的策略必须像聪明的小明一样,在两者之间动态平衡。

更妙的是,MCTS 天然包含一个“冷启动”机制:当一个新节点从未被访问过时,它的吸引力会被设成无穷大,这相当于说“没吃过的新店永远值得优先试一次”。这一设计保证了搜索树不会无限偏向某一支,而是会逐步铺开,让每个角落都有被探查的机会。

所以,小明最终的原则是:把大多数胃口留给口碑扎实的老店,但永远保留一两顿给新店。MCTS 的探索与利用平衡,正是这种朴素生活智慧的数学化表达。

UCB公式

小明需要把“值得去”的直觉变成可计算的分数。他发现纯看平均分不行——一家只吃过一次且刚好好吃的店,不该比一家吃过十次仍好吃的店更值得信赖。于是他设计了一个“探店评分”:平均满意度加上一个好奇心加分。这个加分项会随着光顾次数增多而变小,但不会完全消失。这个公式正是 UCB(上限置信区间)的核心思想。

UCB 全称是 Upper Confidence Bound,它给每个节点计算一个“乐观估计”:平均回报再加一个不确定性带来的奖励。公式如下:

当 \(n(s,a)\) 从 1 变成 100 时,好奇心项会明显缩小,但不会归零;这意味着即使一家店已经吃过一百次,只要它隔壁还有没去过的新店,小明依然会保留一丝探索的冲动。UCB 就这样用一个简洁的公式,自动完成了探索与利用的平衡。

UCB(s,a)=Qˉ(s,a)+cln⁡N(s)n(s,a)\displaystyle \mathrm{UCB}(s,a) = \bar{Q}(s,a) + c\sqrt{\frac{\ln N(s)}{n(s,a)}}
把它读作“探店得分 = 已知平均分 + 好奇心奖分”。\(c\) 是你的“冒险程度”,越大越愿意尝试新店。
  1. 平均回报项已知的满意度均值,代表“利用”这部分价值。
    Qˉ(s,a)\bar{Q}(s,a)
  2. 父节点总访问次数取对数\(N(s)\) 是当前局面被访问的总次数,取自然对数后,让增长越来越平缓。
    ln⁡N(s)\ln N(s)
  3. 子节点访问次数\(n(s,a)\) 是该具体行动被选中的次数,它在分母上——被选中越多,好奇心奖分越小。
    n(s,a)n(s,a)
  4. 平方根与平衡系数开根号让奖分衰减得更温和,\(c\) 则整体控制“好奇心”的强度。
    cln⁡N(s)n(s,a)c\sqrt{\frac{\ln N(s)}{n(s,a)}}

回溯机制

小明吃完晚饭回到住处,不会只更新那一家店的评分,而是会掏出笔记,把这家店所在的那一整条路线上的所有记录都翻出来,挨个更新一遍。比如今晚他去了“老城区—巷子尾—那家川菜馆”,他不仅会更新川菜馆的分数,还会顺带更新“老城区”和“巷子尾”这两个区域的评价——因为这条路线好不好走、周边值不值得逛,也会影响下次该不该再往这个方向走。

在 MCTS 中,回溯就是把模拟阶段得到的结果,沿着搜索路径一路向上传播,更新路径上每个节点的统计量。这样做的意义在于:父节点是子节点的“区域代表”,一个子节点表现好,说明这个父节点所在的区域整体有希望。更新的内容有两项——访问次数加一,以及累计回报加上这次模拟的结果。

为了让更新更高效,实际实现通常用增量均值公式,而不是每次重新求和:

回溯是 MCTS 的“复盘时刻”:每次吃完一顿饭,整条路线上的所有笔记都变得更准确。这正是 MCTS 与随机搜索最大的区别——它不是闷头随机试,而是把每一次试探的教训,系统性地传回给所有相关节点。

Qˉk=Qˉk−1+vk−Qˉk−1nk\displaystyle \bar{Q}_k = \bar{Q}_{k-1} + \frac{v_k - \bar{Q}_{k-1}}{n_k}
这就像记账式更新平均分:不用把每次的满意度都重新加一遍,只需要用“新结果与旧均值的差距”乘以一个缩小的权重,就能快速得到新均值。
  1. 旧平均值更新前节点的历史平均满意度。
    Qˉk−1\bar{Q}_{k-1}
  2. 新旧差距这次模拟的结果 \(v_k\) 与旧均值的差,代表“这顿饭刷新了多少认知”。
    vk−Qˉk−1v_k - \bar{Q}_{k-1}
  3. 学习率\(1/n_k\) 是权重,访问次数越多、新结果影响越小,保证均值稳定。
    1nk\frac{1}{n_k}
  4. 新平均值旧均值加上差距的加权修正,相当于“把最新体验平滑地融入历史判断”。
    Qˉk=Qˉk−1+vk−Qˉk−1nk\bar{Q}_k = \bar{Q}_{k-1} + \frac{v_k - \bar{Q}_{k-1}}{n_k}

树与状态

小明的笔记一开始只有几页,三晚过后已经变成一棵枝繁叶茂的“美食树”:树根是他住的城市,每个树枝是一个城区,再往下的枝桠是街道,叶片是具体的餐厅。但注意,他并没有把八千家餐厅都画进笔记——他只记录自己去过或听路人提过的那些。这就是 MCTS 的高明之处:它只建立“已探索”的局部树,而不是维护完整的全局地图。

从数据结构上看,MCTS 的搜索树中每个节点存着一个局面状态(比如棋局、网页快照、路线位置),每条边存着导致状态转移的行动。节点上的统计量(访问次数、胜率)则记录了“这个局面被探索到什么程度、表现如何”。由于每轮迭代只会扩展一个节点,整棵树的体积增长是缓慢而可控的,内存压力远小于显式枚举所有状态。

为什么不能直接枚举全部状态?因为状态空间是指数级增长的:

面对指数爆炸,MCTS 的应对策略是“局部开花”:让整棵树只向最有希望的几根枝条延伸,同时对表现差的枝条进行剪枝(不再深入探索)。小明的美食树也是如此——他只会三刷喜欢的店,而不会在踩雷的街区继续浪费晚饭。树越长越“偏科”,这恰恰是聪明的体现。

状态数=bd\displaystyle \text{状态数} = b^{d}
其中 \(b\) 是每一步可选行动的平均数,\(d\) 是决策深度。围棋中 \(b \approx 250\)、\(d \approx 150\),\(250^{150}\) 远超宇宙原子总数,穷举毫无可能。
  1. 分支因子每个局面平均有多少个合法行动可选。
    bb
  2. 决策深度从当前局面到终局平均要走多少步。
    dd
  3. 指数爆炸状态数等于 \(b\) 的 \(d\) 次方,两个数字稍微变大,总数就会爆炸式增长。
    bdb^d

规划应用

现在,小明把整套探店方法教给了他的 AI 助手:以后不仅吃饭,就连“先查攻略还是先订酒店”“走哪条路逛夜景”这类决策,助手都会用“探店笔记”的逻辑来推演。这个场景正是 MCTS 在现代 AI 中最受期待的应用方向——Agentic AI 的自主规划。

在大模型驱动的 Agent 中,模型每一步都会生成多个候选行动(搜索网页、调用工具、写代码、读文件……),但哪一步最值得先做?如果只看模型的单步打分,很容易因为局部判断失误而累积成大错。MCTS 的做法是:把这些候选行动当作树的分支,先快速模拟几条完整的“行动-结果”路径,再依据模拟成功率回溯更新每个候选的评分,最后选择整体回报最高的那一步执行。这种方式让 Agent 的规划从“贪心猜”升级为“谋定而后动”。

真实场景已经开始落地:在网页导航任务中,Agent 用 MCTS 在多个点击链接之间做出选择,成功率显著高于单步贪心;在代码生成中,MCTS 可以模拟“先写测试还是先写实现”的多种路线,选一条最可能编译通过的方案;在游戏 AI 中,AlphaGo 的后继者 AlphaZero 完全靠 MCTS 加神经网络,从零学会了击败人类顶尖棋手。这些应用的共同点是:状态空间巨大、单步评估不可靠、但模拟成本可控——这正是 MCTS 的舒适区。

小明的 AI 助手靠着这套方法,从“想到什么做什么”变成了“先想三步再行动”的规划高手。MCTS 给 Agent 的核心能力正是这种远见:用有限的推演,换取全局的决策质量,找到那条“近似最优”的行动序列。

安全应对

小明渐渐发现,“探店笔记”也有被操纵的风险:有些餐厅会雇人刷好评,有些网红店靠营销造出虚假热度。如果 AI 助手完全相信笔记上的评分,就可能被误导,带着他走进一家又贵又难吃的店。这个“笔记可信度”问题,映射到 MCTS 的实际部署中,就是必须正视的安全与伦理挑战。

当 MCTS 被用在真实决策系统里——比如自动驾驶的避让策略、医疗方案的推荐排序、金融交易的行动选择——错误的评估可能带来真实伤害。传统的做法是“先上线再说”,但 MCTS 这类基于模拟的决策方法更强调事前评估:通过大量对抗性测试(故意投喂恶意数据、设计极端场景)来检测搜索是否会被带偏。同时还要建立沙盒防护机制,让 Agent 先在受控环境中完成模拟规划,确认风险可控后再执行真实操作。

从工程实践看,防护机制已经从前瞻讨论进入落地阶段:给搜索树的评分加入不确定性惩罚,防止“小样本高评分”的节点被过度信任;对规划结果进行人工抽检和回滚;对明显偏离正常范围的行动序列设置熔断。更重要的是,伦理讨论必须前置——在 MCTS 被大模型 Agent 大规模使用之前,就要想清楚“什么决策不该交给自动搜索来定”。

小明的 AI 助手最后养成了一个好习惯:看到评分超高但从没听过的店,会先查证评价来源,再决定要不要推荐。MCTS 的安全应对也是一样——既要相信模拟给出的方向,也要对“纸面分数”保持警惕,用制度化的评估与防护,让智能决策在风险边界内稳健运行。

---

AI 应用场景

围棋与电子游戏 AI 的博弈决策

阶段:自主决策 / 强化学习

解决的问题:围棋、星际争霸等游戏的状态空间大得惊人,传统搜索无法穷举,而手写评估函数又极其困难。MCTS 用“模拟+回溯”的方式,在不依赖领域专家知识的情况下,仅凭自我对弈就能持续提升棋力。

具体案例:2016 年 AlphaGo 击败李世石,其核心引擎就是 MCTS 与深度神经网络的结合——神经网络提供落子先验和局面评估,MCTS 负责在有限算力下搜索最佳落子。后来的 AlphaZero 更进一步,用同一套 MCTS 框架从零学会了围棋、国际象棋和将棋。

大模型 Agent 的行动规划

阶段:Agentic AI 规划 / 推理与行动

解决的问题:大模型在长任务中容易“走一步算一步”,单步决策失误会不断累积。MCTS 允许 Agent 在多个候选行动上展开模拟推演,像“先想三步再落子”一样评估行动的长期回报,显著提升任务成功率。

具体案例:在网页导航任务中,Agent 面对一个页面上的十几个可点击元素,用 MCTS 对“点击哪个链接更接近最终目标”进行多轮模拟,再决定真实点击。在代码生成工具中,MCTS 也被用来规划“先写测试、再写实现、最后重构”的步骤顺序,提高生成代码的编译通过率。

机器人路径规划与调度

阶段:决策控制 / 运筹优化

解决的问题:仓库机器人需要在短时间内规划多条取货路径,MCTS 通过模拟不同路径的拥堵与耗时,快速找到一条接近最优的路线,比传统图搜索更能适应动态环境。

具体案例:某电商仓库调度系统中,几十台 AGV 小车共享地面。MCTS 为每台小车模拟“先走 A 还是先走 B”的多种方案,再依据整体吞吐量回溯更新选择,最终让全场效率提升约 15%。

Python 演示

python84 行
import mathimport random  class GameState:    """从 1 开始喊数,每次可加 1 或加 2,先到达 21 者获胜。"""     def __init__(self, value=1):        self.value = value     def legal_moves(self):        if self.is_terminal():            return []        return [1, 2]     def apply(self, move):        return GameState(self.value + move)     def is_terminal(self):        return self.value >= 21     def winner(self):        return 1 if self.value >= 21 else 0  class Node:    def __init__(self, state, parent=None):        self.state = state        self.parent = parent        self.children = []        self.visits = 0        self.wins = 0     def ucb(self, c=1.4):        if self.visits == 0:            return float("inf")        exploit = self.wins / self.visits        parent_visits = self.parent.visits if self.parent else 1        explore = c * math.sqrt(math.log(parent_visits) / self.visits)        return exploit + explore  class MCTS:    def __init__(self, state, iterations=2000):        self.root = Node(state)        self.iterations = iterations     def select(self, node):        while node.children:            node = max(node.children, key=lambda ch: ch.ucb())        return node     def expand(self, node):        if node.visits == 0:            return node        for move in node.state.legal_moves():            node.children.append(Node(node.state.apply(move), node))        return node     def simulate(self, state):        while not state.is_terminal():            state = state.apply(random.choice(state.legal_moves()))        return 1.0 if state.winner() == 1 else 0.0     def backpropagate(self, node, result):        while node is not None:            node.visits += 1            node.wins += result            node = node.parent     def search(self):        for _ in range(self.iterations):            leaf = self.expand(self.select(self.root))            result = self.simulate(leaf.state)            self.backpropagate(leaf, result)        best = max(self.root.children, key=lambda ch: ch.visits)        return best.state.value - self.root.state.value  if __name__ == "__main__":    state = GameState()    mcts = MCTS(state, iterations=2000)    move = mcts.search()    print("推荐走法: 加", move)
目的:用 MCTS 求解“21 点喊数博弈”,在 2000 次模拟迭代后,推荐当前局面下最值得采取的行动。
  1. Node搜索树中的节点,记录局面、父节点、子节点、访问次数与胜场。
  2. def ucb(self, c=1.4)计算节点的 UCB 探店评分,未访问节点返回无穷大以保证优先探索。
  3. def select(self, node)从根出发反复取 UCB 值最大的子节点,直到叶节点。
  4. def expand(self, node)为叶节点生成所有合法行动对应的子节点。
  5. def simulate(self, state)随机走子直到终局,返回 0/1 胜负结果。
  6. def backpropagate(self, node, result)把结果沿父指针一路传回根节点,更新统计量。
  7. max(self.root.children, key=lambda ch: ch.visits)最终选择访问次数最高的子节点作为推荐行动。

常见误区

误区MCTS 的模拟阶段是随机的,所以整个算法就是靠大量随机试错碰运气,和盲目枚举没有本质区别。

正解随机模拟只是其中一个环节。MCTS 真正的智慧在于“选择性扩展”和“回溯更新”:选择阶段用 UCB 把资源导向最有希望的节点,回溯阶段把每一次随机试错的教训系统性地传回路径上每个节点。随机模拟提供的是数据,而选择与回溯保证这些数据被用在刀刃上。就像小明探店:点菜可能是随机的,但选哪家店、之后如何更新笔记,全靠深思熟虑。

为何常见:因为 rollout(模拟)阶段的名字和表现都太像随机过程,初学者容易以偏概全,忽略了前后两个环节的决定性作用。

误区既然探索重要,那就把 \(c\) 调得很大,让算法多尝试新节点,肯定能找到更好的解。

正解\(c\) 控制的是探索与利用的权重,而不是“探索越多越好”。\(c\) 过大时,算法会像“每家店都只去一次”的小明,永远在尝鲜却从不深耕真正好吃的店,搜索变成近似均匀随机;\(c\) 过小时,又会早早锁死在一家店,错过更好的选择。实际工程中,\(c\) 通常取 1~2 之间的经验值,或者随搜索进度动态衰减。

为何常见:探索听起来积极向上,直觉上容易认为“多探索没坏处”,忽略了算力总预算有限、探索过度会稀释有效利用的事实。

误区只要模拟次数足够多,MCTS 最终一定能找到跟穷举一样的最优行动。

正解MCTS 是“近似最优”算法。它只在有限预算内把搜索重心偏向最有希望的区域,收敛速度虽然快,但并不保证在有限时间内找到数学意义上的全局最优。更准确的说法是:随着模拟次数趋于无穷,MCTS 的搜索过程会以概率 1 收敛到最优行动,但现实中的算力预算远达不到无穷。这就像小明三晚不可能尝遍全城,只能保证自己吃到的“很可能是最好的”。

为何常见:很多讲解会提到“收敛于最优”的数学性质,初学者容易忽略“无穷多次迭代”这个前提,误以为实际运行中也能保证最优。

误区MCTS 的 rollout 必须从当前节点一直随机走到终局,否则没法得到胜负结果。

正解完整走到终局只是最基础的形式。实践中模拟可以被截断——比如到达一定深度后,用神经网络价值网络直接评估当前局面,代替后续的随机走子。AlphaGo 就是把 rollout 换成“价值网络评估 + 策略网络引导”,大幅缩短模拟深度。模拟的深度可以灵活设计,关键是得到的回报估计要足够反映局面好坏。

为何常见:教科书中通常以“随机走子到终局”作为标准教学形式,导致学习者把这种简化形式当成了算法的完整定义。

面试题

Q1. MCTS 四步循环的正确顺序是什么?

单选题 · easy

  • A.选择、扩展、模拟、回溯← 正确答案
  • B.扩展、选择、回溯、模拟
  • C.模拟、回溯、选择、扩展
  • D.回溯、模拟、扩展、选择

答案:A。MCTS 的标准流程是先从根节点选择最有希望的分支,再扩展一个新节点,接着从新节点随机模拟到终局,最后把结果回溯更新路径上的所有节点。就像探店:先选店、再加菜、再想象、再写笔记,顺序不能乱。

Q2. 在 UCB 公式中,若某子节点从未被访问,它的 UCB 值应看作?

单选题 · easy

  • A.直接把值记为零
  • B.等于它当前均值回报
  • C.无限制视为正无穷大← 正确答案
  • D.无法计算视为负无穷

答案:C。未访问节点的平均回报无定义,且不确定性最大。UCB 的设计是给未访问节点“正无穷”的优先级,保证每个新节点至少被尝试一次。这就像从没去过的餐厅,永远值得先去试一顿,而不是直接给零分。

Q3. UCB 公式中的探索系数 c 增大,主要会产生什么效果?

单选题 · easy

  • A.更偏向访问次数多的节点
  • B.更偏向从未访问的新节点← 正确答案
  • C.完全忽略胜负结果的影响
  • D.搜索时间会缩短为一半

答案:B。探索系数 c 控制“好奇心加分”的权重。c 越大,不确定性项越占主导,算法越愿意尝试访问次数少的新节点;c 越小则越依赖已知平均回报。但 c 过大也不等于“完全忽略胜负”,只是探索比例明显上升。

Q4. MCTS 回溯阶段的主要任务是什么?

单选题 · mid

  • A.从根节点向下重新做选择
  • B.沿路径更新胜率和访问数← 正确答案
  • C.将整棵搜索树全部清空
  • D.重新执行一次随机快速模拟

答案:B。回溯是把模拟得到的胜负结果沿路径传回,更新每个节点的访问次数和累计回报。这就像小明吃完饭后,把感受写回笔记中涉及的所有区域,让整条路径上的评估都更准确。

Q5. 为什么 MCTS 适合围棋这类超大状态空间问题?

单选题 · mid

  • A.能穷举所有可能棋局
  • B.只把算力聚焦最看好的子区域← 正确答案
  • C.利用专家棋谱替代深层搜索
  • D.每次只模拟一步就停下

答案:B。MCTS 不需要遍历所有状态,而是根据 UCB 评分把搜索资源集中在最有希望的分支上,形成一棵“偏科”但高效的搜索树。这正像小明只深耕几家口碑好的店,而不是把全城每家店都吃一遍。

Q6. MCTS 的模拟(rollout)阶段通常采用什么策略?

单选题 · mid

  • A.使用穷举遍历全部局面
  • B.使用动态规划求精确解
  • C.使用随机快速走子策略← 正确答案
  • D.使用专家千谱辅助选择

答案:C。模拟阶段要求“快而非准”,通常用均匀随机策略快速走子到终局,以较低成本获得一个胜负样本。虽然单次模拟很粗糙,但大量样本的统计平均能提供可靠的胜率估计,这正是蒙特卡洛方法的精髓。

Q7. 在完全确定的博弈中,随迭代次数趋于无穷,MCTS 最终会收敛到什么结果?

单选题 · mid

  • A.收敛到均匀随机选择策略
  • B.收敛到最小化对手胜率策略
  • C.最优行动被选中概率趋近一← 正确答案
  • D.搜索树内存占满提前终止

答案:C。这是 MCTS 的重要理论性质:在无限次迭代下,根节点选择最优行动的概率收敛到 1。但要注意这个结论以“无穷次模拟”为前提,实际有限算力下得到的是近似最优,而非严格最优。

Q8. MCTS 相比传统深度优先搜索的优势有哪些?

多选题 · hard

  • A.无需显式设计评估函数← 正确答案
  • B.可以随时停止并给出答案← 正确答案
  • C.天然支持并行和增量模拟← 正确答案
  • D.能保证每一步都是精确最优

答案:ABC。MCTS 通过随机模拟获得回报统计,不需要人工设计启发式评估函数;由于搜索树逐步构建,任何时刻停止都能返回当前最优估计;各模拟分支相互独立,便于并行加速。但它不保证精确最优,D 错误。

Q9. 下列关于探索-利用权衡的说法,正确的有哪些?

多选题 · mid

  • A.利用让 agent 坚持高回报动作← 正确答案
  • B.探索让 agent 多试未验证动作← 正确答案
  • C.探索项会随访问次数而增大
  • D.最佳策略是只探索而不利用

答案:AB。利用是选择已知高回报的节点,探索是尝试估值不确定的新节点。UCB 中探索项随访问次数增大而减小,所以 C 说反了;只探索不利用会浪费已有经验,不是最佳策略,D 错误。

Q10. 在 AlphaZero 风格的 MCTS 中,神经网络的引入带来了哪些变化?

多选题 · extreme

  • A.用策略网络引导选择阶段← 正确答案
  • B.用价值网络评估叶节点状态← 正确答案
  • C.模拟深度被进一步大幅削减← 正确答案
  • D.数学公式 UCB 完全不使用

答案:ABC。AlphaZero 中策略网络提供落子先验概率来引导选择,价值网络直接评估局面胜负,替代原来自底向上的随机 rollout,从而大幅削减模拟深度。但 UCB 公式依然保留,只是新增了先验概率与价值评估两项,D 错误。