主要观点总结
本文介绍了登月游戏的开发者Jim Storer在编写这款游戏时面临的挑战,以及退休软件工程师Martin C. Martin在研究这款游戏最佳策略时发现的一个BUG。Martin介绍了他在游戏中寻找最优燃料方案的过程,以及他对于游戏机制的理解。虽然他发现了一个影响游戏结果的BUG,但他仍然认为这个游戏非常有趣。
关键观点总结
关键观点1: 登月游戏的背景和历史
游戏开发者Jim Storer在1969年使用PDP-8编写了一个登月游戏,游戏只能以文字呈现。后来这个游戏成为了最受欢迎的计算机游戏,并有了许多衍生版本。
关键观点2: Martin C. Martin对游戏的探索
Martin C. Martin研究了登月游戏的最佳方案,以确保安全着陆并保留最多的剩余燃料。他惊讶地发现游戏中的最佳策略不符合实际,并发现了一个BUG。
关键观点3: 游戏中的物理和数值计算
Martin介绍了游戏中的物理和数值计算问题,包括火箭方程和泰勒级数的应用。他解释了为什么在游戏中接触地面后方案失效,以及如何使用二次方程来解决这个问题。
关键观点4: 游戏中的BUG
Martin发现了游戏中的BUG,即开发者Jim Storer在计算过程中遗漏了平方根内分母中的2,导致游戏中登月舱的着陆时间被低估。他探讨了可能的原因,并指出了这个BUG对游戏结果的影响。
关键观点5: Martin的评价
尽管发现了这个BUG,但Martin仍然认为这个游戏非常有趣。他认为这个错误存在了几近 55 年却没有被人发现很有趣,同时强调了玩家对于寻找最佳策略的热爱和追求。
正文
根据 Martin 的个人介绍,他自小学六年级起就开始编程,是卡内基梅隆大学机器人研究所的研究生,又成为了麻省理工学院的博士后。毕业之后,他曾在 Meta 工作,也曾在 Rockstar Games New England 担任 AI 主管。
已经退休的的他,近来在闲暇时间开始研究“登月游戏”的最佳方案:在确保安全着陆的前提下, 如何保留最多的剩余燃料。而他惊讶地发现,从游戏中推算出的最佳策略并不符合实际:缺少了一个“除以二”的操作,导致游戏错误地认为已经着陆的登月器还没有触地。
从游戏规则来看,为了在着陆时使用最少的燃料,玩家需要在最短的时间内完成着陆。理想方案是:最初,玩家可以通过关闭发动机来最大限度地提高速度,然后在最后一秒全速燃烧,正好在接触地面时把速度降为零——Kerbal Space Program 社区把这种方法称为“自杀式燃烧”,因为准确掌握时机非常难,且没有任何误差空间。
话虽如此,通过一些反复试验和手动二分查找,还是能找到一种恰好让登月器着陆的燃烧计划:在前 70 秒不燃烧任何燃料,然后在接下来的 10 秒内以每秒 164.31426784 磅的速率燃烧燃料,之后再以每秒 200 磅的最大速率燃烧:
“登月游戏”中认为,完美着陆的速度应小于 1 英里/小时,但在这种情况下,我们以超过 3.5 英里/小时的速度着陆,游戏还提示说“可以做得更好”?然而实际情况是,哪怕每秒再多燃烧 0.00000001 磅的燃料,玩家也会完全错过地面,并以 114 英里/小时的速度上升:
基于此,Martin 提出一个疑问:“我们是如何从硬着陆变成完全没有着陆,且中间没有一个软着陆的过程呢?”
2、接触地面后,方案失效
Martin 本以为,会在这个“登月游戏”中看到一种在如今电子游戏中依然很常见的欧拉积分,也就是在每个时间步(timestep)开始时计算力,然后使用公式 F=ma 计算加速度,再假设加速度在 Δt\Delta tΔt 秒的时间步内保持恒定: