各位好,这里是404,欢迎来到我的个人专栏【探索未然】!这个专栏是受迷宫终点公众号委托建立,其中的系列文章会专注于万智牌中不怎么被关注的部分,或是从新颖的角度分析万智牌中常见的问题;本专栏建立的初衷是“言之有物图一乐”,我姑且这么一说,诸位呢也姑且这么一听,若是能交流讨论,乐呵乐呵,那就再好不过了。
(原则上来说这个专栏里的一切言论仅与笔者有关,并不代表迷宫终点公众号/旅法师营地的观点;本文首发迷宫终点公众号)
(本期内容很大程度上基于文章Randomness in Magic,如果你对延伸阅读有兴趣,那里有更加系统的讲解,原文地址附于文末)
你有没有经历过这样的午后?慵懒的阳光从行道树的叶间投下,你带着愉悦而轻快的心情走进一家安静的咖啡厅,挑选了一个临街的位置,拿起本书(在这种情况下,我优先假设那是加缪或卡尔维诺的集子)或是kindle,另一只手不紧不慢地晃动茶匙——
然后手机亮了,一个群友说到“卡爆是因为mtga采用伪随机”;就在这时,你知道,一个美好的午后就这么毁了。
熟悉我的朋友可能还记得,我曾经与大白合作写过一篇配地指南(不接受催更!要催也得催大白),研究的是随机对于配地的影响。不过这一次,我们要讨论的问题更大且更宽泛,加之这篇只是浅谈,所以对于概率基础知识不牢固的朋友来说更易于阅读——倒不如说,本来就是为这一部分朋友而写的。
赌徒谬误:什么是随机?
你站在赌场里,对面就是荷官;骰子在骰盅里翻飞,发出悦耳的撞击声;你舔了舔嘴角,暗暗想到:你已经因为押小输了2局了,第三局总不可能还不是小吧?
你正在打万智,抓起了一个2地的起手,很不巧只有一张2费牌;"我可是一个28地的套牌啊..."你在心里默念,"总不可能抓不到第三块地吧?"
什么是赌徒谬误?简单来说,就是「总不可能」。人们总是希望在事物中看到规律,把25%这样的概率理解为"每4次之中至少一次",认为霉运之后必然是幸运;但是事实并非如此。概率可不是你的妈妈,不会在你做错事之后帮你收拾残局;在现实世界里,第三局仍然可能是小,你也可能抓不到第三块地然后开始抱怨运气。硬币1000次面朝上的结果并不影响第1001次,每个实验的结果总是独立的。
"那么,"你问到,"25%总该有个意义吧?难道概率学家只会在我失败之后嘲笑我吗?"
没错,25%确实有意义,但是,那需要极其庞大的样本量。而且,即使在那么大的样本空间里,你也并不一定能看到毫无偏差的25%,它更可能是,嗯,"接近25%"。一个更好的例子是如下的两张图,他们之中一个的点是随机分布,一个是以显而易见的规律分布。
大多数人都会认为图像B是随机分布的那个;事实上,图像B的规则显而易见:每个点都与其他点保持着一个最小距离。如你所见,随机并不是均匀;倒不如说,绝大多数时候,随机都不可能导致均匀。
下次,当你构筑时,请别相信"每3-4张牌里都会有1张地"这样的话,再完美的配地也不能保证像这样的事情,倒不如问问你自己,"如果每3-4张牌都只有1张地的话,我起手的7张该有多少地?"
搞明白随机是什么之后,我们可以进入下一个话题了。
真随机,还是伪随机?
首先,让我们先明确一个概念:无论是真随机还是伪随机,他们都是随机。这意味着,无论如何,它们都得表现地像随机一样,不确定地产生结果,不确定地呈现正反,不确定地让你卡爆。
产生这个分类的原因是,真随机几乎不可能人为得到(除非牵涉到混沌系统或是量子力学这样的东西),它就是不可计算的随机,真正意义上的听天由命;至于其他的一切?全部都是伪随机。拉普拉斯妖端坐于它的王座上,微笑着注视着一切伪随机——是的,凡是可以通过计算精确得到概率的,包括但不限于抛硬币、洗牌、你的梦中情人明天会不会登门拜访和会不会有陨石让地球再次变成烤肉自助餐厅,全部都是伪随机。
当然,也存在更广义的真随机与伪随机定义;它们往往只会强调观测者能否计算出概率;然而,无论是狭义还是广义,无论是实体还是电子端,万智牌能做到的都毫无疑问是属于伪随机。(除非你抽牌与洗牌是量子触发器决定的,不觉得用原子衰变来决定抽牌很酷吗?作为一名万智牌手我觉得这太酷了,很符合我对后现代万智牌的想象,科技并带着趣味)
但是,这是一篇浅谈
这意味着你需要学习的绝不止是这么一点;而且,我相信仅凭上面的文字绝不足以让某些万智牌玩家放弃"伪随机"论,所以,接下来的文章会稍微深入一点,介绍几个相关的名词,然后讨论讨论mtga的随机到底是怎么做到的。
真随机与伪随机在电子游戏、密码学、计算机科学领域有更详尽更应用性的定义,也有着相似但截然不同的相关概念,我们一个一个看过去。
首先,我们需要分清真随机数生成器(HRNG)与伪随机数生成器(PRNG)两个概念。
先聊聊PRNG,也就是伪随机数生成器,或者说伪随机数生成算法。从这个简单粗暴的名字里你也能明白,这指的是特定的一系列算法,它们都能用于生成伪随机数。最常见的PRNG就是取当前时间的几位数经过一系列计算,生成范围内的一个数字。它"伪"在什么地方呢?只要你知道了当前的时间与进行的计算,你就可以准确地预测出生成的数字。当然,除此之外,它的表现就十分优秀了,以这样的生成器为基底进行的排序(或者说洗牌)呈现的结果会与实体卡牌高度相似,你几乎不可能分辨出哪个才是计算机生成的。
另一个HRNG,是相对而言很少提及的概念。大部分时候,PRNG都足够优秀了,但是,在设置密钥这样的时候,更可靠的HRNG就能派上用场了。你可能已经通过上面真/伪随机的定义猜到真随机生成器是怎么工作的了——它往往采用收集热噪声、光电效应或是其他量子效应的物理手段来生成原始数据,经过模数转化输出为数字,然后再处理得到需要的随机数。它的表现?嗯,也许真随机能让人心安一些吧,我猜?
"但是,我听说,伪随机和真随机的表现是不一样的啊?"你可能还是抱有这样的疑问,而我要说的是,没错,它们的表现确实不一样,但那是因为,这时候它们指的是以下两个概念:伪随机概率分布(PRD)与真随机概率分布(TRD)。
先说真随机概率分布,它的定义可以说是一句废话:随机概率的分布。总之概率是什么样它就是什么样,25%发生的事件每次发生的概率都是25%。
另一个则是伪随机概率分布,这个就要有意思多了,我们先看个例子。
小明是个普通人,他玩的手游抽奖时有25%的概率出一个他很想要的东西。他抽啊抽,连续3次之后他还是没抽到;于是他想,第4次总该抽到了吧。
第4次的小明会比第三次更容易抽到吗?你可能会认为这又是一种赌徒谬误——很可惜,对大部分手游来说,第4次确实更容易抽到。究其根本,大部分游戏在类似的事情上都会采用伪随机分布,也即,有保底的分布。与TRD不同的是,PRD每次实验的概率都是变化的,是与之前实验的结果有关的,你可以想象成有一个人在盒子里,他为了保证25%的概率,会有选择地递给你不同的小球。(具体的实现会复杂一些,例如,为了保证25%,第一次抽取到的概率往往都会远小于25%)
讲到这里,各位应该就都能明白了。尽管TRD与PRD可以呈现出同一种概率,但PRD的相比之下的确更有规律——它更能避免一直发生或是一直不发生的极端情况。
那么,在MTGA里呢?
看到这里,你应该也能意识到,如果wsz真的需要操纵发牌(也就是某些人口中的“系统制裁”),那需要额外做的工作可太多了,包括但不仅限于识别对局优劣、识别单卡强度、识别单卡在对局中的某个时间点用处有多大——就算是上文讨论的PRD,要在一个牌库确定的游戏里采用也过于繁琐(且愚蠢)了。尽管这里还能有一大堆类似的思辩来说明mtga只会采用最简单的洗牌算法来实现,但那些都不如wsz自己发布的声明有力:
ChrisClay(mtga的前任游戏总监):
既然人们在问,而且这也不是什么大秘密。在MTGA中,我们使用梅森旋转算法(Merseene Twister,MT199937)基于256位的加密随机种子来产生随机数,然后运用Fisher yates算法来洗牌。我们用同样的方法来抛硬币(即决定先后手),只是我们要找的是1或2,而不是一整副牌。
梅森旋转算法是个很著名的伪随机数生成算法,很多时候也被称为最好的随机数生成算法,你可以轻易地在中文互联网上找到关于它的资料与相关代码;大体上而言,它是所有随机算法里最快的,并且在绝大部分区间内随机数的分布都足够均匀(也就是说,在统计学意义上很正确)。而Fisher yates算法也是个足够高效的洗牌算法——整体上来说,mtga采用的算法都科学而高效,没有任何问题。
结语&Fun Fact环节
写到这里差不多要谈的全都说完了,如果读者老爷认为有疏漏或者错误,也欢迎在评论区留言交流!总之,希望这篇文章能为你解决一些困惑,或是在有人又在宣扬有关万智牌洗牌的错误论调时能让你多一件称手的武器!接下来照例是一些有趣的小知识/事实——说实话我已经在考虑取消这个环节了,感觉这里面随便拎几个出来都能再水写一篇文(
1.尽管文章一直在强调mtga的洗牌算法绝对正确而科学(基于目前已知的信息),但实体万智的洗牌却很难说是完全随机的——实体往往不能做到与电子端相同的完全洗牌,事实上你需要至少9次的鸽尾洗牌(也就是扑克洗牌常用的边角插洗,相关论文链接附在文末)才能完全洗混一套牌。这往往会让你产生实体与电子的洗牌表现不一致的感觉。但是,这个不一致大部分时候是电子优于实体——完全的洗牌事实上会增加你抓起理想起手的概率(只要你的套牌构筑合理)。
2.mtga的bo1起手优化已经是公开的事实了;但是,根据wsz官方的公告(原文已经随着官方论坛的关闭而无法访问了,唯一能找到的是mtgazone上一篇文章对原文的引用,链接附在文末),bo1的起手优化事实上只是“倾向于”在两个起手中选择法术力基础更好的那一个,而并非大部分人认为的“一定”选择更优的起手。这意味着这一机制事实上很难真的运用到构筑套牌中,bo1赛制的最优构筑还是不会受到这一机制的影响。
3.通过收集数据来反向验证mtga的先后手/抓地是可行的,然而正如正文中所写,你不可能根据它表现的频率不严格等于概率就认为mtga的算法有问题,你真正应该做的是采用贝叶斯校验数据(而且有趣的在于,通过检验log收集的数据往往都比手动收集的更接近正确的概率)
4.尽管对大部分人来说都是常识,但还是不得不提的一点是,很多时候你认为卡爆过于频繁完全是心理因素,也就是认知偏差;人往往倾向于记住那些不符合预期的结果而略过那些符合预期的结果,电子端的大量对局与实体几个月也不能玩上多少局的数量差距也会让人误认为电子端更容易卡爆。
5.另一个有关认知的例子是,考虑到限制与构筑的大部分套牌的地比例都是40%,构筑套牌其实更容易遭遇卡爆地的问题(一个典型的比例谬误)——不妨想想,这与你的“感觉”是否相同呢?
6.常见的关于卡爆地的抱怨还有在限制赛接了地与咒语颜色完全不同的起手,然后认为卡色是不正常的——这样的抱怨显然没有想到,抓到特定颜色地的概率远低于抓到地的概率,所以卡色而死再正常不过了。
7.我很喜欢maro曾在行路杂谈里说过的一句话:
当然你可以把游戏设计成“技术更好的玩家更有可能赢得胜利”,不过技术较差的玩家不仅应该有一定获胜的可能,同时当他们输掉游戏的时候,你应该给予他们的自尊心一些台阶。法术力系统的巧妙之处在于它是一个很好的替罪羊,一个非常非常棒的替罪羊。事实上我认为法术力系统在万智牌中最棒的作用就是让牌手在输掉游戏后有一个可以用来抱怨的对象。(【行路杂谈】万智牌的法术力系统(下)-46336-旅法师营地 (iyingdi.com) )
所以,当你不爽时,请尽情地抱怨卡爆地吧。
感谢你的阅读,这里是404,期待我们的下次见面。
推荐阅读: