就是那个经典的「8 数码 / 华容道」拼图。玩着玩着,你会摸到 AI 解谜背后的三件法宝:把问题形式化、用估值找方向、用不变量一眼判生死。
💡 建议按 1 → 2 → 3 顺序闯关:每关玩之前先做「🧮 玩之前先猜一猜」,通关后有 💡 提示点破背后的数学,最后用一页 🧠 数学思维总结把整条主线串起来。
取材自《人工智能·现代方法》的 8 数码(滑块问题)。适合中小学 AI / 信息科技启蒙、课堂演示与亲子探究。
3×3 的格子里有 8 个数字滑块和 1 个空格。点击紧挨空格的滑块(电脑上也可用方向键 ↑↓←→),它就会滑进空格。🎯 任务:把左边拼成右边的目标,动作越少越好。
开局时空格在正中央。如果用广度优先搜索往外走一步,第一层会冒出几个不同的新局面?
🟨 黄色 = 此刻能滑动的滑块 🟩 绿色 = 已经归位 本题最优解 10 步,挑战用最少步数复原!
你用了 0 步(最优 10 步)。
AI 不会「看着拼图凭感觉推」。它会先把问题形式化成六个要素,之后任何搜索算法都能上手:
| 要素 | 在本游戏里是什么 |
|---|---|
| 状态 | 9 个格子上「空格 + 1~8」的一种摆法(一个排列)。 |
| 初始状态 | 开局那张图(左边)。 |
| 动作 | 空格朝 上/下/左/右 滑一格 —— 只需 4 个词。 |
| 转移模型 | 状态 + 动作 → 新状态(空格与相邻滑块交换)。 |
| 目标状态 | 右边的有序排列。 |
| 动作代价 | 每滑一次 = 1,所以总代价 = 总步数。 |
现实里是滑块在动,但课本让空格来执行 L/R/U/D。两者是对偶的(把空格左移=把它左边那块右移),可合法动作数都一样(2~4 个)。差别在词汇表:以滑块建模要写「第几块朝哪滑」,最多 8×4=32 种;以空格建模只要 4 种。简洁近一个数量级 —— 这就是好的形式化。
给每个局面打一个分数 h =「8 块滑块各自离自己目标格的距离之和」。h 越小越接近成功。边玩边盯着 h 看 —— 你会撞见一个反直觉的真相。
这一关开局的分数 h(初始) = 4。那么本题最少几步能复原?
🟨 = 能滑动的滑块。试试看:开局两块能动的滑块,滑哪一块 h 都会变大——这就是「贪心机器人」会卡死的地方。
你用了 0 步(最优 8 步)。
启发式 h 就是给一个局面估个「还差多远」的分。好的启发式要可采纳:永远不高估真实步数,即 h ≤ 真实最少步数。这样用 A* 搜索才保证找到最优解。
📌 一句话:h 是下界,是「指南针」不是「答案」。它告诉你大概该往哪走,但真正多远,还得搜。
惊人的事实:一半的局面根本拼不回去!有没有办法不用瞎试就判定?有 —— 数一个叫「逆序数」的东西,看它是奇是偶。下面亲手做实验。
拿一个能复原的局面,随手挑两块滑块对调一下。新局面还能复原吗?
交换模式:点两块滑块直接对调位置(这不是合法滑动,但能让你看见奇偶怎么翻)。滑动模式:只能合法滑动,逆序数奇偶永远不变 —— 这就是它能当判据的原因。
从左到右、从上到下读出 8 块滑块的编号(跳过空格),数一数有多少对「大数排在小数前面」。比如读成 3 1 2 …:3 排在 1、2 前面,就是 2 对逆序。
目标局面逆序数 = 0(偶)。所以对 3×3:逆序数是偶数 ⟺ 可解。
📌 这类「找一个每步必翻一次的奇偶量」的招式,叫不变量论证:不用搜索,一刀砍掉半个世界。
同样是滑一个拼图,越往后越像数学。把这条主线拎出来——这正是 AI 解决「搜索问题」的通用套路。
先用状态 / 动作 / 转移 / 目标 / 代价六要素把现实问题翻译成 AI 能算的形式。选「空格在动」而非「滑块在动」,动作词汇从 32 种压到 4 种 —— 好形式化让问题更简洁。
3×3 拼图就有 9! = 362880 种局面。穷举行不通,这就是 AI 问题难的根源,也是为什么需要「估值」来指方向。
曼哈顿距离 h 给局面打分,只低估、不高估(h ≤ 真实步数)。它是指南针不是答案:本关 h=4 而真实 8。可采纳的启发式,才能保证 A* 找到最优解。
只顾眼前让 h 最快下降,会在「局部极小」卡死。真正的最优解常要求你先逆行、吃点亏,才能翻盘。眼前最优,不等于全局最优。
找到一个「每步必翻一次」的奇偶量(逆序数),它的奇偶就守恒。靠它不用搜索就能砍掉半个状态空间,判定一个局面到底有没有解。
同一套「状态 / 动作 / 代价 / 最优」的思路,还能解布线、导航、整理……去游戏厅里换个皮接着玩。