为什么有些人割草割得比别人好
文章摘要
The Pudding 一贯擅长把学术问题做成可玩的交互式叙事,这次的题目是割草。作者团队(Russell Samora、Florina Sutanto、Arjun Kakkar、Sushant Karki)造了一片虚拟草坪,请网友来割,然后用 30954 个人的真实操作数据回答一个问题:人类在路径规划这类计算机很难解的问题上,到底表现如何?
结论出人意料地乐观。第一关草坪只有 49 个格子需要覆盖,理论最优路径有 12 种;参与者一共找出了 14589 种不同的走法,把 12 种完美解全部找到了。52% 的人在最优解的 5 步以内,16% 的人做到了完美,中位数玩家达到了 91% 的效率。
文章顺势科普了背后的计算机科学:割草问题正式名称叫覆盖路径规划(Coverage Path Planning),与著名的旅行商问题(TSP)同源。10 个城市就要检查 360 万条路线,15 个城市 1.3 万亿条,20 个城市 2.4 百亿亿条——所以无论人还是计算机,规模一大就必须放弃「保证最优的算法」,转向「够好就行的启发式」。团队的灵感来自一项研究:人类在 TSP 上能逼近计算机算出的最优解,即使到 70 多个停靠点也只比最优差 11%。
最精彩的是对「关键决策点」的解剖。 团队回放了一位自称 Bones 的、成绩恰好处于平均水平的玩家:他用了 54 步(比最优多 5 步)。开局前他停顿了 2.9 秒观察全局(这也恰好是平均值);走到第五格时遇到第一个岔口——继续向右还是向下?他只犹豫了 0.7 秒就向下走了,和 20% 的人一样。这一步决定了结局:左侧区域是死路,先走左边就必然要原路折返。而成绩在最优解 2 步以内的玩家(包括那些完美通关的)几乎都选择先割右边、把左边留到最后,提前预判了死路陷阱。团队采访到的一位真名叫 Sarah 的玩家说得很直接:「我看到末端有个死路,就想,好,那也得是我结束的地方,所以别先往那边走。」
Sarah 还做了一件「看起来有点不自然」的事:她不是简单地一直走直线,而是直觉性地、预防性地走出蛇形折返——这利用了游戏与真实割草的一个关键差异,强玩家都在利用它。Sarah 是资深游戏玩家,一眼就认出了这个策略。
规模扩大后的结果推翻了团队的预期。 他们做了五个关卡,最大到 14×14、近 200 个格子。按 TSP 研究的规律,人的表现应该随规模下降,但实测中最优率稳定在 90% 左右,无论草坪需要 26 步还是 177 步;最大那关的表现甚至略好于前两关,说明布局比规模更重要。团队的解释是:TSP 把节点随机撒开,而草坪是有结构的,这让人可以依赖两个策略——分解(decomposition)和压缩(compression)。Sarah 的描述堪称教科书:「我一块一块来……我尽量把身后的东西都做完。」面对最大的草坪她很明确:「我没法把这一切都规划出来……光是记住全部就太难了。」
最反直觉的发现是关于「思考时间」。 团队原以为想得久的人割得好,结果在 7235 位通关全部关卡的玩家中,节奏(每格耗时)与最优率几乎不相关——时间本身只能解释不到 5% 的成绩差异(R² 为 4.9%)。真正有区别的是在哪里停顿。以第四关为例:前 10% 的玩家在开局的第一列就花时间思考,在两簇岩石之间的岔口再次深思(是进入杂乱的中段,还是先清掉右侧开阔区),他们能直觉判断出应该在顶部的死路口袋结束以最小化折返;结果到了收官阶段他们一次都不用停。后 10% 的玩家则在开头一路狂奔,直到被角落或边缘逼停才思考——这是在反应,不是在规划;他们要等自己已经走进死路口袋才发现那是死路,然后不得不停下、折返、重新盘算。
文章的落点是:最好的割草者移动速度和别人差不多,只是重复走的格子少得多——他们把注意力花在岔口上,其余部分一路巡航。Sarah 自己有一套理论:「大空间的认知负荷更高,你得琢磨最佳路径;而小空间……需要做的决策更少。」她刻意在容易设陷阱的紧凑区域仔细规划,在开阔区域随便走。所以关键不在于想得更多或更快,而在于思考发生在什么时候——这正是一个好的启发式该做的:把你的注意力花在重要的决策上,在不重要的地方一分不花。
HN 评论精华
这条帖子 204 分。讨论的走向非常「HN」:绝大部分热门评论并没有在谈路径规划算法,而是在争论目标函数定得对不对,以及顺势演变成一场关于割草这件事本身的生活方式漫谈。
「你的最优解不是我的最优解」是压倒性的第一大主题。 cortesoft 的置顶评论指出:这与真实割草的效率是完全不同的问题——转弯需要额外的功和时间,转弯时你会漏掉「格子」的一部分(转弯弧线不是直线);吸尘器边缘还有一圈清洁不到位的区域,所以你需要让路线有重叠。而且真实割草你往往想留下漂亮的纹路,不能纯追求效率。adregan 说他的小院子优化的是「最长的连续直线」(因为好看)和「结束时搬运草屑的最短距离」。tetha 分享了农民父亲教的方法:先处理外围不规则的烦人部分,把剩下的整理成「长边 + 两端有掉头空间」的矩形,然后沿长边来回走,掉头处正好放独轮车收集草屑。toss1 的批评最系统:文章应该一开始就说清楚「效率」的定义——他按「最小化转弯以节省时间」来玩,而作者的定义是「最少步数」,作者的所谓最优解转弯次数远多于其他路径,实际上时间效率更差;测试本身如此次优,导致结果没有意义,因为每个受试者的目标很可能与出题人假设的目标显著不同。D13Fd 补了一刀:他假设最优路径应该让割草机停在场地外侧方便收纳,而文章的「最优解」把割草机楔在三块石头中间。gamerdonkey 则指出文章其实已经承认了这一点——就是那段关于 Sarah 蛇形走位「揭示了真实割草与简化游戏的关键差异」的描述。
「割草是禅修」这一支也格外温暖。 paradox460 讲了自己被裁员后的经历:第一件事就是出门割草,「一小时简单、干净的体力活,进展清晰、目标明确、独自一人」,割完进屋投了几百份简历;接下来几周他修洒水器、清理草坪边缘、翻土施肥。这次求职期比以往任何一次都长,理应更有压力,但并没有——「大概是因为大部分空闲时间都在户外度过?谁知道呢。总之比坐在屋里唉声叹气强。」这条底下拉出一长串共鸣:sealthedeal 说手上沾真泥土有种「真实感」;edoceo 提到一位受够了科技工作的朋友转行做园艺,现在单人接活时薪 70–120 美元;hbn 说「割草像是用一支粗马克笔涂一张巨大的填色页」。hapticmonkey 贴了冯内古特那段著名的话——他明明可以在网上一次买一百个信封,却坚持出门去买一个,因为路上会遇到很多人、看到消防车经过、问别人那是什么品种的狗,「我们来到地球上是为了瞎晃悠,而计算机会把这个夺走……他们不明白的是,我们是会跳舞的动物」。
割草纹路的技术细节意外地硬核。 gavinray 说他年少时做过园艺工,一直以为草地上的条纹只是审美,「结果那些线条是轮换着割的,为了防止草被磨损受伤:先纵向割,再横向,然后对角,最后反向对角,循环往复」。这条引发了一场关于刀片该多锋利的争论:gdhkgdhkvff 说割草机刀片应该像黄油刀一样略钝,太锋利碰到硬物会崩口;therealpygon 反驳说应该像斧头那样开高角度的刃,而不是钝得像黄油刀,钝刀片会伤草;SoftTalker 提供了实测数据——他把电动割草机的刀片磨到接近剃刀级后,电池续航明显变长。collingreen 则纠正了整条串的理解:轮换的重点不是刀片,而是轮子的压痕,避免每次都从同一条线上碾过造成车辙、覆盖物堆积或漏割。
最后是一场关于 JavaScript 的著名 HN 式拉锯。 zahlman 抱怨:禁用 JavaScript 后,整个页面除了开头那段引言和页脚之外没有任何文字。他和 Dylan16807 你来我往辩了十几层:Dylan16807 承认没有 noscript 提示是缺陷,但坚持这个页面的交互(玩游戏、看回放)是 JS 的正当理由,「有些东西本质上就不是文本,你对视频也这么生气吗」;zahlman 则搬出渐进增强原则寸步不让——「标题叫《为什么有些人割草比别人好》,那么禁用 JS 的版本理应显示解释为什么的文字。用 JS 去发出一个『请启用 JS』的邀请,这是纯粹的先有鸡还是先有蛋。」双方谁也没说服谁。