作者在 Recurse Center 玩一个 3D 打印的实体拼图:白色"玉米棒"上开有沟槽,若干由 3 到 10 颗玉米粒粘成的形状要滑进沟槽,恰好铺满、不重叠也不留空隙。按程序员的直觉他会写递归回溯——不断尝试、走进死路就回退,再考虑旋转对称性与孤立空格提前失败等剪枝。但他让 Claude 写脚本时,第一行就是导入 OR-Tools 的 CP-SAT 模型:这是一个精确覆盖问题的变体,而 Google 的 CP-SAT 正是为这类约束满足问题准备的工业级求解器。做法是把每个"某块以某种方式放置"的布尔变量列出来,把所有不能同时成立的组合写成约束,再交给几十年的研究成果去搜索满足全部约束的赋值。作者感慨这比自己会写的版本好得多,也从中学到了东西。
🔑 核心要点
拼图属于精确覆盖问题的变体:铺满、不重叠、不留空隙。
直觉解法是递归回溯加对称性与孤立格剪枝。
实际解法的第一行是导入 Google OR-Tools 的 CP-SAT 求解器。
建模方式是布尔变量表示某块以某方式放置,再把冲突写成约束。
求解器蒸馏了几十年的约束求解研究,不是手写回溯能比的。
作者的结论是这次经历让他从 AI 生成的方案里学到了新工具,而不是被替代。
💡 金句
Instead of backtracking, Claude just imported an industrial-strength library made to solve these sorts of problems.