- +1
从小玩到大的超级玛丽,计算复杂性是怎样的?
机器之心转载
作者:张诸俊
吃蘑菇长大的「超级玛丽」比你想象的更复杂。

今天我们就来详细介绍一下关于这个游戏的计算复杂性的研究。在文中我们将看到如何设置地图使得超级玛丽能够模拟一些计算困难的问题,从而说明该游戏在计算理论的角度下是难解的。
本篇的第 1 节介绍一个 NP-hard 框架;第 2 节介绍应用框架证明「超级玛丽」属于 NP-hard;第 3 节介绍一个 PSPACE-hard 框架;第 4 节介绍「超级玛丽」属于 PSPACE-hard 的归约;第 5 节说明如何使归约更完善;第 6 节进行总结。
1. NP-hard 框架
我们先来介绍一个用于证明一类 2D 游戏困难性的框架,这个框架来自文献 [1] 。我们假设在这类 2D 游戏中,玩家操控一个角色在地图上移动,玩家的目的是使该角色到达地图上的某个位置。比如 SMB 的目标就是让玛丽从出生点到达旗杆,再比如之前介绍过的华容道玩具的目标就是让特定的滑块移动到出口,再再比如 STG 游戏就是操纵可以发射子弹的角色避开敌方弹幕和地形到达关底。
框架使用的归约问题是经典的 3-SAT 问题(3-conjunctive normal form satisfiability,3 - 合取范式可满足问题)。该问题指的是给定一个由若干子句的合取构成的公式,其中每个子句包含 3 个项,判断是否存在对变量的赋值使得该公式可满足。我们希望通过使用 2D 游戏模拟 3-SAT 问题,从而将 3-SAT 归约到 2D 游戏。
我们用一个例子来说明如何进行这样的模拟。对于公式
我们可以构造如下图的 2D 游戏框架

和
这两个子句中的 x 为 T 后整个子句就为 T。接下来无论选择的是从 variable 部件的左侧出口还是右侧出口离开,角色都将进入到第二个 variable 部件,继续对变量 y 的赋值进行模拟。当所有变量的赋值都确定后,角色进入到验证过程(check in 路径),角色需要从右侧依次通过所有的 clause 部件才能最终达到最左侧的 finish 部件。而每个 clause 部件只有当之前角色从上方进入并打开至少一次后,才允许角色从右侧进入并通过。
为了实现这个 NP-hard 框架,我们需要在 2D 游戏中实现 5 个部件,分别是 start、finish、variable、crossover、clause,其中 crossover 部件用于处理框架中路径的交叉。容易验证,如果某个 2D 游戏能够实现这些部件,那么就能用这个游戏模拟 3-SAT 的任意实例,也就是说 3-SAT 可以归约到这个 2D 游戏,从而就说明这个游戏就属于 NP-hard 了。
不过,有时候在游戏中直接构造 variable 和 clause 部件可能会比较复杂,所以我们可以对这个框架进行一些修改,使得部件更加原子化一点。修改之后的框架含有 start、finish、turn、switch、merge、one-way、crossover、door 这些部件。start 和 finish 部件的含义与修改之前是一样的;turn 部件用于路径的转向;switch 和 merge 部件其实是同样的,通常是一个三叉路口;one-way 部件保证游戏角色只能向一个方向移动,功能类似单行道;door 部件包含两条互不连通的路径,当一条路径被角色通过后(开门),角色才能通过另一条路径。
对于公式
,对应的修改后的框架如下。

2. 超级玛丽属于 NP-hard
我们使用上一节的框架来说明「超级玛丽」属于 NP-hard,为此我们需要在游戏中实现 start、finish、variable、crossover、clause 这些部件,我们逐一进行说明。

finish 部件:需要以大玛丽的状态从左下方进入部件,撞掉一个砖块后才能到达旗杆;如果以小玛丽的状态进入则不能通关。



现在所有的部件都实现了,而且归约显然可以在多项式时间内完成,所以我们就有以下定理
定理 1:「超级玛丽」属于 NP-hard。
3. PSPACE-hard 框架
接着,我们介绍一个用于证明 2D 游戏属于 PSPACE-hard 的框架,这个框架来自文献 [1] 和 [3]。它使用的归约问题是 TQBF 问题(True Quantifified Boolean Formula),指的是问某个含有 「存在」 和「任意」符号的逻辑公式是否可满足,比如问公式
的真值是否是 T。
这里我们对原始论文中的框架作了一些修改,希望能够帮助理解。和之前 NP-hard 框架一样,我们需要定义一些部件。NP-hard 框架中讨论的部件我们就不再重复定义了,这里我们主要定义两个部件,open-close door 和 alternation 部件。

这个 open-close door 相当于是一个状态存储器,门的开闭相当于 0 和 1,每一个 open-close door 部件保存了 1bit 的信息。这也是为什么加上这个部件后,框架的复杂性可以到达 PSPACE-hard。
接着我们介绍 alternation 部件,它其实是一个辅助部件,用于简化框架的描述。我们可以用其他部件的组合来实现 alternation 部件,不必真的在 2D 游戏中实现它。

现在我们就可以用例子来说明如何构造 PSPACE-hard 框架,对于公式
2D 游戏的框架如下图

容易验证,这个框架模拟了 TQBF 问题。因此,如果 2D 游戏中能实现 start、finish、turn、switch、merge、one-way、crossover、open-close door 这些部件,那么这个 2D 游戏就属于 PSPACE-hard。
另外有一点需要提一下,NP-hard 框架中的部件的每条路径只会被角色通过一次,而 PSPACE-hard 框架中的路径就可能会被通过很多次了,这在构造部件时是需要注意的。
4. 超级玛丽属于 PSPACE-complete
为了证明「超级玛丽」属于 PSPACE-hard,我们需要在游戏中实现 start、finish、turn、switch、merge、one-way、crossover、open-close door 部件,其中很多部件是非常简单的,就不提了,这里就介绍一下 crossover 和 open-close door。
注意,这里与 NP-hard 证明中不同的是,玛丽总是处于小玛丽状态的。



5. 完善归约
在给出最后的定理前,归约中的两个小 bug 可能需要再讨论一下。
一个 bug 是 open-close door 部件中央的火球。在「超级玛丽」原始游戏中,似乎没有像这样将火墙(球)放置在空格中的例子。不过这个问题比较好解决,只要把中央的火球替换成下面这样的一大排火墙就行了。这样一来,刺猬的移动不受影响,但是玛丽无法通过这些火墙。

处理掉这两个小 bug 后,我们终于能放心地得到下面的定理了
定理 2:「超级玛丽」属于 PSPACE-complete。
6. 总结
我们介绍了两个用于证明 2D 游戏计算复杂性的框架,并详细解释了如何用这两个框架讨论「超级玛丽」的计算复杂性。「超级玛丽」最终被证明是属于 PSPACE-complete。事实上,文献 [2] 还讨论了一些含有其他元素(比如使用管道移动、获得金币奖励生命)的「超级玛丽」游戏的复杂性。
如果要评选最有趣的关于电子游戏计算复杂性的论文,我相信「超级玛丽」这个肯定能上榜。最后附一下论文的截图

[1] Greg Aloupis, Erik D Demaine, Alan Guo, and Giovanni Viglietta. Classic Nintendo games are (computationally) hard. Theoretical Computer Science, 586:135–160, 2015. arXiv 链接
[2] Erik D. Demaine , Giovanni Viglietta, and Aaron Williams. Super Mario Bros. Is Harder/Easier than We Thought. 8th International Conference on Fun with Algorithms (FUN 2016).
[3] Giovanni Viglietta. Gaming is a hard job, but someone has to do it! Theory of Computing Systems, 54(4):595–621, 2014. arXiv 链接
数据工程师专属福利!1000元服务抵扣券免费领取,直充到 AWS 账户用以抵扣服务消费,轻松体验6大应用场景。
© THE END
转载请联系本公众号获得授权
投稿或寻求报道:content@jiqizhixin.com
原标题:《从小玩到大的超级玛丽,计算复杂性是怎样的?》
本文为澎湃号作者或机构在澎湃新闻上传并发布,仅代表该作者或机构观点,不代表澎湃新闻的观点或立场,澎湃新闻仅提供信息发布平台。申请澎湃号请用电脑访问http://renzheng.thepaper.cn。





- 报料热线: 021-962866
- 报料邮箱: news@thepaper.cn
互联网新闻信息服务许可证:31120170006
增值电信业务经营许可证:沪B2-2017116
© 2014-2025 上海东方报业有限公司




