从棋盘到牌桌:七大常见策略游戏的变化量金字塔与 AI 决策思维进化史

原博客地址:https://blog.huanment.top/posts/ai-strategy

如果把可观测宇宙中的所有原子——大约 10⁸⁰ 个,想象成一排排编号机器,那么这台机器连给围棋的所有合法局面编号都远远不够。围棋的状态空间约有 10¹⁷² 种,相当于把“宇宙原子计数器”再复制出接近一亿亿亿亿亿亿座摩天大楼。

但围棋甚至还不是今天故事里最值得讨论的地方。

因为真正有意思的,从来不只是:

“一个游戏到底有多大?”

而是:

当这个数字越来越大,人类和 AI 到底该怎么思考?

从斗地主里的贪心决策,到象棋里的深度优先搜索;从 Alpha-Beta 剪枝,到动态规划式的状态复用;再到扑克里的概率推断、围棋里的 MCTS(蒙特卡洛树搜索)和神经网络——

这七款游戏,其实像一条隐藏的算法进化史。

先搞清楚:什么叫“状态空间”,什么叫“博弈树”?

很多人第一次看到这些数字,会把“状态空间”和“博弈树”混为一谈。

其实可以把它们想象成两种完全不同的东西。

状态空间,就是:

“这个游戏理论上到底有多少种不同的局面?”

比如棋盘上的棋子换一种摆法,就是一个新的状态。

博弈树则是:

“从开局开始,把所有可能的行动一层一层展开,最终会有多少条可能的游戏过程?”

它们一个更像“地图上总共有多少个城市”,另一个更像“从起点出发一共有多少条可能的路线”。

所以你会看到一些非常反直觉的数据:

有的游戏状态空间巨大,但博弈树估算反而没有那么大;有的游戏状态不算离谱,真正恐怖的却是它的决策路径数量。

这也是为什么:

“状态空间排行榜”不等于“AI 难度排行榜”。

AI 真正头疼的,是三个东西同时膨胀:

状态越来越多、信息越来越少、可选择的行动越来越多。

01 斗地主:先学会“贪心”,再学会“猜人”

斗地主是这七款游戏里最适合作为起点的一个。

规则并不难:

三个人拿牌,其中一人叫地主,另外两人合作;随后按照牌型依次出牌,谁先把手里的牌打光,谁就赢。

简单吧?

但它的状态空间常见估算已经达到 10³⁰

这大概是什么概念?

就是你可以把地球上的每一粒沙子都想象成一个游戏局面,但沙子队伍排到太阳系外,可能都还没数完。

它的博弈树更达到约 10⁸⁵

这已经超过可观测宇宙原子数 10⁸⁰,像宇宙里的每个原子旁边再复制出十万个原子,依旧不够给这些可能的出牌路径一一编号。

但斗地主最有意思的地方,不是“搜索树巨大”。

而是它非常适合展示一种最朴素的算法思想:

贪心

所谓贪心,就是每一步先选一个眼前看起来最划算的方案。

例如:

“我现在出这手牌,可以一下减少很多手数。”

或者:

“对方快走完了,那我优先阻止他。”

又或者:

“我的单牌很多,先想办法处理掉。”

这些判断,本质上都是局部最优。

但问题马上来了:

局部最优真的等于全局最优吗?

通常不等于。

你这一手牌少打了两张,可能下一轮就被迫拆掉一个顺子。

你现在为了抢一轮牌打出了炸弹,可能最后反而失去最大的控制权。

于是斗地主很适合让人理解一个重要概念:

贪心算法不是“每次看起来最好”,而是“我相信当前这个局部选择,足以导向最终最优解”。

一旦这个条件不成立,贪心就会翻车。

而斗地主恰恰大量存在这种“先赚一点,后面亏一大坨”的情况。

所以更高级一点的 AI,会开始搜索。

从贪心到 DFS:不只看眼前一步

DFS,也就是深度优先搜索,可以理解成:

“我先沿着一种打法一路走到底,再回来换另一种。”

在斗地主里,就是:

“如果我现在出 A,对方可能出 B,那我继续看我下一手能干什么;如果这条路线不行,就退回来重新试。”

这其实已经和后面的棋类 AI 接轨了。

只不过斗地主比象棋多了一层麻烦:

你不知道对方手里到底有什么。

所以你搜索的并不是一棵确定的树。

而是一棵“带迷雾的树”。

这就是斗地主开始进入第二阶段的地方:

搜索只能解决“我能算什么”,概率才能解决“我应该相信什么”。

02 国际象棋:DFS + Minimax + Alpha-Beta,把暴力搜索变成艺术

国际象棋的规则并不复杂。

8×8 的棋盘——就是一个只有 64 个格子的小战场——双方轮流移动棋子,将对方的王逼入无法逃脱的状态。

棋盘不大。

规则也不像很多卡牌游戏那样复杂。

但它的状态空间约为 10⁴⁶

这意味着如果每一个局面都对应一粒沙子,你需要一片远远超过太阳系规模的“数字沙漠”才能装下这些局面。

而它的博弈树约有 10¹²³

相比宇宙中的 10⁸⁰ 个原子,还高出了几十个数量级。

问题来了:

这么大的树,怎么搜?

答案是:

深搜 + Minimax + Alpha-Beta

首先是 DFS

把整个决策过程想象成一棵树:

你走一步,对手走一步,你再走一步……

DFS 就是一条路先往深处钻。

但只会 DFS 还不够。

因为你不能只考虑“我希望对方怎么走”,而必须假设:

对手一定会选对我最不利的那一步。

这就是 Minimax,也就是“极小极大”。

你负责最大化自己的利益。

对手负责最小化你的利益。

于是 AI 的思维变成:

我走 A,对手最狠能怎么回?

我走 B,对手最狠能怎么回?

在这些最坏情况中,哪个对我最好?

这已经比单纯 DFS 高了一个层级。

但仍然有个问题:

树太大了。

如果每一步有几十种选择,搜索十几层以后,数字就开始起飞。

于是 Alpha-Beta 剪枝登场。

它的思想非常漂亮:

既然这条分支已经不可能超过当前最优答案,那后面就别看了。

这就是典型的分支限界思想

例如你已经找到一种走法,保证结果至少有 5 分。

现在搜索另一种方案。

结果发现对手只要这一招,你最多只能得到 3 分。

那么后面那些变化还有必要继续算吗?

没有。

因为你已经知道:

这条分支无论怎么优化,都不可能打败前面的 5 分。

砍。

这就是 Alpha-Beta。

它不是让计算机“算得更快”这么简单。

而是让计算机开始懂得:

哪些东西根本不值得算。

03 中国象棋:搜索树更复杂,状态复用开始变得重要

中国象棋把这个思路继续推了一层。

9×10 的棋盘——也就是 90 个交叉位置组成的战场——比国际象棋的 64 个格子更大。

常见估算中,中国象棋状态空间约 10⁴⁸

如果把一个局面看作一栋房子,这意味着光是不同“户型”,就已经多到远远超过宇宙里的 10⁸⁰ 个原子能够充当门牌号的程度。

而它的博弈树约 10¹⁵⁰

这已经像一座摩天大楼长出了摩天大楼,楼里的每间房又连接出新的城区。

中国象棋最有意思的地方,是它会自然引出另一个算法概念:

动态规划的核心思想:重复的东西,不要重复算

动态规划常被误解成:

“碰到表格就叫 DP。”

其实不是。

动态规划最核心的一句话是:

一个已经算过的状态,就不要再算第二遍。

棋类搜索里存在大量这种现象。

你从不同的走法出发,可能在很多步之后重新到达同一个棋局面。

如果 AI 傻乎乎重新搜索,那么就等于:

同一道数学题今天做了一遍,明天换个颜色的纸再做一遍。

显然很蠢。

于是棋类程序会使用**置换表(Transposition Table)**之类的缓存机制:

“这个局面我以前见过。”

“它往后的结果我已经算过。”

“直接拿答案。”

这本质上就是:

搜索 + 记忆化。

从算法结构上看,它和动态规划的精神高度一致。

所以如果把整个棋类 AI 拆开看,你会发现一个非常有趣的组合:

DFS 负责探索。

Minimax 负责对抗。

Alpha-Beta 负责剪枝。

缓存 / 置换表负责避免重复计算。

这已经不只是“会下棋”。

而是一整套算法思想的联合编队。

04 五子棋:规则少,不代表搜索简单

五子棋可能是这七款游戏里规则最简单的。

15×15 的棋盘——也就是几百个交叉点铺成的一张大网——双方轮流落子,谁先形成五连,就赢。

没车。

没马。

没炮。

甚至连棋子移动都没有。

但它的状态空间却可以达到约 10¹⁰⁵

这个数字已经超过宇宙原子数 10⁸⁰ 二十五个数量级以上,相当于你把“一个宇宙的原子”复制成成千上万亿亿亿份,才开始摸到这个数字。

它的博弈树估算约 10⁷⁰

注意,这和状态空间不完全一致。

因为一个局面可能通过不同的落子顺序到达。

这正好再次说明:

“可能的局面数量”和“可能的游戏过程数量”不是一回事。

而五子棋又特别适合展示一个算法思想:

威胁优先:一种非常强的启发式贪心

比如对手已经形成活三。

你还在想:

“中心要不要占?”

“边上有没有潜力?”

“这个形状以后有没有发展空间?”

实际上可能根本不用想。

因为你只有一个任务:

先处理眼前最大的威胁。

于是 AI 会优先搜索:

活四、冲四、活三、双三……

这其实是一种“启发式贪心”:

把最有威胁的着法排在最前面。

为什么?

因为搜索算法最怕的不是“正确答案不存在”。

而是:

正确答案藏在海量垃圾分支的后面。

如果你能提前把高价值分支排在前面,Alpha-Beta 剪枝就能砍掉更多无关分支。

于是一个非常漂亮的组合出现了:

贪心负责排序。

DFS 负责深入。

Alpha-Beta 负责剪枝。

这就是算法之间真正的协同。

不是“某个算法单挑解决问题”。

而是一群算法一起工作。

05 麻将:当信息藏起来以后,搜索开始失去确定性

麻将的转折意义非常大。

它拥有巨大的状态空间,部分估算达到 10¹²¹

如果把这些状态都打印成一本书,每一页只记录一个麻将局面,那么即使宇宙里的 10⁸⁰ 个原子每个都变成一家出版社,也根本印不完。

更麻烦的是:

你看不见别人的牌。

隐藏手牌信息可以达到 10⁴⁸ 量级。

这意味着你面对的不是:

“真实状态 S。”

而是:

“我现在不知道真实状态究竟是 S1、S2、S3 还是 S4。”

这时传统 DFS 遇到了一个根本性问题。

搜索树要求你知道:

这一节点到底是什么状态。

可麻将里这个问题本身就没有答案。

于是 AI 开始从:

确定性搜索

走向:

概率推断。

贝叶斯推理:不是“他有什么”,而是“他多大概率有什么”

例如对手一直不打某种花色。

一开始,你觉得:

“他可能有,也可能没有。”

这就是一个先验。

然后他连续打出几张其他牌。

于是你的判断改变:

“现在他手里持有某些牌的概率明显提高了。”

新证据来了。

再更新。

再更新。

这就是贝叶斯思想最朴素的解释:

先有一个猜测,再根据新证据不断修改猜测。

人类麻将高手嘴里的:

“他这张牌打得不正常。”

在算法语言里,其实就是:

这个动作改变了隐藏状态的后验概率分布。

这已经不是 DFS 了。

它更像:

概率版的搜索。

06 德州扑克:从“算牌”进入“算对手”

无限注德州扑克又把问题推进一步。

状态空间常见估算在 10¹⁶⁵ 量级。

这意味着即使拿可观测宇宙 10⁸⁰ 个原子当计数单位,还得再乘上一个超过十的八十五次方的数量级,才能碰到它。

而德州扑克最麻烦的是:

你的行动本身,会改变别人对你的判断。

例如你下注。

对手可能认为你是强牌。

于是他弃牌。

但你也可能知道他会这么想。

所以你故意拿弱牌下注。

于是:

对手猜你在诈唬。

然后跟注。

然后你又可以用强牌下注。

这时候游戏变成了一层又一层的“你猜你猜你”。

这里最重要的算法思想之一就是:

Range:从一个答案变成一个概率分布

不要问:

“他拿的是什么牌?”

而应该问:

“他可能拿哪些牌?每种牌的概率是多少?”

这就是 Range。

它非常像机器学习里的概率分布。

你不再把世界理解成:

“答案是 A。”

而是:

“答案有 20% 是 A,15% 是 B,5% 是 C……”

进一步,你还得考虑:

不同 Range 下,我的下注策略应该怎么变?

于是博弈论中的纳什均衡开始进入核心位置。

所谓纳什均衡,可以粗略理解为:

双方都找到了一个相对稳定的策略,以至于谁单独改变策略,都很难从中获得额外收益。

这和棋类完全不同。

棋类更像:

“找到唯一最佳路线。”

扑克更像:

“找到一个不会被对手轻易利用的策略体系。”

这是一种非常重要的思想跃迁。

07 围棋:当树大到搜不完,AI 开始学习“什么值得搜索”

然后终于到了围棋。

19×19 的棋盘——361 个交叉点组成的战场——让棋局从局部战斗变成了整张地图上的长期博弈。

它的状态空间约 10¹⁷²

记住前面的宇宙原子:

10⁸⁰。

现在把那个宇宙再复制出大约 10⁹² 份,数量级上才接近围棋状态空间。

而博弈树更恐怖:

10³⁶⁰

已经不是“宇宙装不下”了。

更像是:

给宇宙里的每个原子都再配一个宇宙,然后给每个新宇宙里的原子再配一个宇宙……

所以 Alpha-Beta 的传统思路在这里开始遭遇真正的极限:

我不是不会剪,而是不知道该剪掉谁。

于是 MCTS 登场:让搜索变成“抽样”

MCTS,也就是蒙特卡洛树搜索。

它不再幻想:

“我要把整棵树全部看完。”

而是:

“我随机或者重点抽样很多次,然后观察哪些方向更有希望。”

这和统计学里的蒙特卡洛方法非常像。

假设面前有十万条路。

传统搜索想办法尽可能把路都走一遍。

MCTS 则更像:

“我先派大量侦察兵去各个方向看看。”

跑很多次模拟。

统计胜率。

然后把更多计算资源投给表现最好的方向。

这又出现了一个非常熟悉的算法思想:

探索与利用

你不能永远探索新路线。

因为可能错过已经明显很强的方案。

但你也不能只利用当前最好的一条路线。

因为万一它只是暂时看起来不错呢?

所以 MCTS 在做一件非常典型的决策问题:

探索未知,还是利用已知?

这其实已经和强化学习、在线决策这些更广泛的 AI 问题连接起来了。

但 MCTS 还是不够:搜索负责看路,神经网络负责挑路

AlphaGo 真正惊艳的地方,不只是用了 MCTS。

而是:

它让神经网络负责提前判断“哪些地方值得搜索”。

这一步极其重要。

因为 MCTS 如果什么都平均看,仍然会浪费大量计算。

所以神经网络可以先告诉它:

“这几个点,高手更可能下。”

于是搜索重点集中到这些区域。

这和人类高手非常像。

高手看到一个棋盘,不会真的考虑:

“361 个点,我逐个计算。”

他通常第一眼就知道:

“这里是战斗中心。”

“这里可能有先手。”

“这里虽然暂时没棋,但以后很关键。”

所谓棋感,从某种角度看,就是:

把海量历史经验压缩成非常快的模式识别。

于是围棋时代的算法组合变成:

神经网络负责直觉。

MCTS 负责搜索。

模拟负责评估。

AI 到这里终于不再像一台单纯的“暴力计算器”。

它开始像一个会先判断重点,再集中算力的选手。

七款游戏,其实串起了一条完整的算法进化路线

把它们重新看一遍,会发现一个非常漂亮的隐藏结构。

游戏 核心难题 对应的算法思想
斗地主 局部选择 + 隐藏信息 贪心、DFS、概率推断
国际象棋 巨大确定性搜索树 DFS、Minimax、Alpha-Beta
中国象棋 搜索 + 大量重复状态 DFS、剪枝、状态缓存 / 动态规划思想
五子棋 强制威胁与先手优势 贪心排序、DFS、剪枝、威胁搜索
麻将 隐藏状态 贝叶斯推理、概率决策
德州扑克 对手策略与范围 概率分布、博弈论、纳什均衡
围棋 搜索空间极端膨胀 MCTS、强化学习、神经网络

这张表背后其实隐藏着一个非常重要的规律:

游戏越来越复杂,AI 并没有简单地“把旧算法做得更快”。

相反,它在不断换问题。

第一阶段:把问题当成一棵树

国际象棋、中国象棋、五子棋最典型。

思路是:

我知道当前状态。

我知道有哪些动作。

那我就把未来展开。

于是:

DFS → Minimax → Alpha-Beta → 状态缓存

这一整套东西诞生了。

这时候 AI 的核心能力是:

计算。

第二阶段:发现世界不确定

麻将、斗地主、德州扑克告诉我们:

“等等。

你连当前状态都不知道。”

于是问题从:

“这一步应该怎么走?”

变成:

“在我不知道真实状态的时候,我该怎么行动?”

这时候:

概率、贝叶斯推理、信息集、纳什均衡

开始取代单纯的暴力搜索。

AI 的核心能力变成:

推断。

第三阶段:发现连搜索都不值得全部做

围棋又给出最后一记暴击:

“就算你知道整个棋盘,也别想把所有未来都算完。”

于是 AI 进一步学会:

不是所有信息都值得处理。

神经网络负责压缩经验。

MCTS 负责分配搜索预算。

策略网络告诉搜索器:

“去这里。”

价值网络告诉搜索器:

“这个局面大概有多好。”

这时 AI 的核心能力变成:

抽象。

所以真正的“AI 决策进化史”,并不是算力越来越大

而是:

从“算什么”走向“为什么算”。

最开始的 AI 会说:

我有算力,我把所有可能都算一遍。

后来它学会:

这条路已经不可能赢了,剪掉。

再后来:

这个状态我以前算过,不要重复算。

再后来:

对手的牌我不知道,我得用概率猜。

再后来:

对手知道我知道他在猜你,所以我要考虑策略之间的相互影响。

最后:

整棵树太大了,我先判断哪些枝条值得看。

这其实就是从:

暴力 → 剪枝 → 记忆 → 概率 → 博弈 → 抽象

的一条完整算法进化路径。

最后:复杂度越高,真正稀缺的就越不是“算力”

七款游戏摆在一起,会得到一个很有意思的结论。

游戏复杂度越低,我们越容易相信:

只要算得足够多,就能得到最优答案。

但随着复杂度继续上升,这种信念开始崩塌。

因为现实世界存在隐藏信息。

存在随机性。

存在对手。

存在重复状态。

存在数不清的分支。

更存在一个最根本的问题:

你的计算资源永远是有限的。

于是,一个越来越重要的能力出现了:

在有限资源下,把计算花在最值得的地方。

这其实才是从棋盘到牌桌,再到现代 AI 决策系统最值得研究的地方。

贪心告诉我们:

先抓眼前最重要的东西。

DFS 告诉我们:

把可能性展开。

动态规划告诉我们:

算过的不要再算。

剪枝告诉我们:

没价值的分支直接砍掉。

贝叶斯告诉我们:

不知道答案,就根据证据更新概率。

博弈论告诉我们:

别只考虑自己,还要考虑对手会怎么想。

MCTS 告诉我们:

搜索预算有限,就优先探索最有希望的地方。

神经网络则进一步告诉 AI:

很多时候,与其穷举,不如先学会“什么值得看”。

所以,从某种意义上说,围棋并不是这场故事的终点。

它只是让一个问题第一次变得特别明显:

真正强大的智能,也许不是“什么都能算”,而是“知道什么根本不值得算”。

那么问题就来了。

如果未来出现一种复杂度远超围棋、隐藏信息远超扑克、状态变化甚至比现实世界还混乱的游戏——

AI 还能继续统治吗?

还是说,当搜索、概率和神经网络都被逼到极限之后,真正稀缺的能力最终又会回到最古老的东西:

直觉。

而那时所谓的“直觉”,也许只是另一种我们还没学会解释的算法。

更多推荐