不得不说,自从手机游戏纷纷开始氪金抽卡之后,真的是每个人都深受其害,包括我。
所以,我为什么要写这个答案?就是因为我最近玩一个游戏,为了收集齐那189种收集物简直肝到肝硬化!(手动白眼)
游戏里一共有189种装饰品要收集,其中149种是可以通过一个抽奖过程抽到的。然后任地狱还给这些收集物打出了“collect'em all”的口号,鼓励玩家集齐。于是作为游戏玩家你会看到任地狱是这么哄你的:
然而,这游戏坑的地方在于,它玩一局才能抽一次,而每局都要求起码长达连续三分钟内注意力高度集中,眼球目不转睛一直盯着,手指还要机敏与眼睛协调。
于是,在无穷无尽的反复刷的过程里,当我发现我两周之内集齐了94%的收集品,但代价是近视度数涨了100度,我终于控制不住开始思考这到底多久才是个头了。。。。
关于这一类“抽卡”问题,有一个著名的数学问题的结论可以直接搬过来用,叫做“赠券收集问题”(coupon collector's problem)。具体的原理介绍在维基上有,这里就不过多介绍了:
最核心的一点就是,集齐每张卡需要的总的期望抽卡次数,等于集齐0,1,2,3,……,k-1张卡(1≤k≤n)后要再抽多少次才能抽到第k张新卡这么n个小期望的总和。
那么在我这个游戏的例子里,149种收集物需要的期望抽卡次数就是n=149的时候的值:832.0926≈833次!
我靠,“集齐149个”和“抽833次”,这俩的前后对比根本不要太震撼好吗?告诉我集齐149个我可能还会想着“不就一百来个嘛,估计玩个两三百局就差不多了”,然后还能慢慢玩;要是直接告诉我抽833次,也就是差不多小一千局,我第一眼就会被劝退了……
要知道,我这两周疯狂天天玩,一共也才玩了200多局,然后近视度数就涨了100啊!!难道我要涨400度才能把这游戏里面的东西集齐???
好了,算到这,我已经劝退了,彻底放弃要集齐这些收集品的念头了。。。
实际上,我的这个例子只是能感受到抽取机制有多坑的一角。如果我们对 画一个图像,可以很容易看出,它的斜率不断快速增高。
对于一套6个的盲盒,实际上期望购买次数(也即集齐的人平均买了多少盒)还只是15次,也就一套数量的2.5倍;对于游戏里通常所出现的一共30个人物的设定,集齐需要的期望抽卡次数就变成了4倍的要抽120次,也就是平均12个十连抽;对于我这个游戏的189个收集品,就成了接近6倍的1101次。
(什么,你看到我的回答之前一直以为一套6个的盲盒大概买九个十个就能集齐一套?骚年,你还是太naive辣。)
因为这个公式的前半部分n是随n增大而增大且没有极限的,后半部分括号里那一饼则是协调数(Harmonic number),也是可以被证明是没有极限的。(具体证明请参考维基百科https://en.wikipedia.org/wiki/Harmonic_number,这里不再赘述,简要来说就是这个协调数一定大于 ,也就是 ,而这个数显然没有极限,所以永远比它大的协调数也是没有极限的。)
比如说,对于盲盒,如果一套有6个,就算每个才59块钱,看起来不贵,但如果你想集齐,还是直接做好平均要花900块、实际甚至可能花一千多的心理准备吧。
如果你玩的游戏有50个人物,然后你想抽齐,那么直接使用公式 计算可以得到,平均情况下你需要 次抽取,也就是225次单抽或者23个十连。
考虑到十连抽的价位一般在328一发左右,这意味着你为了集齐需要做好平均得花7544元人民币的心理觉悟——也就是小一万了!
算到这,深深地感觉,抽卡这种机制真是人类游戏史上最大的深坑。。。。。。七千多块,已经可以买十多二十个两三年都打不完的3A大作主机游戏了,却只是一个手机游戏里抽齐一套卡需要投的钱而已。。。。。。
算了之前的东西之后,我还在侥幸地想:我那个游戏的833次是平均需要的抽取次数,可能如果我运气稍微好点的话就不需要这么多?
照理说,集齐卡需要的95%置信区间是可以算出来的,但是维基上给的那个变异(variation)的算法,我不太确定对于一个非正态的分布应该怎么用,于是决定采用数学捉急人士最喜欢用的笨办法爆破这个概率统计问题:让电脑给我暴力模拟!!
于是我用R写了一个脚本模拟一万个玩家玩这个游戏抽卡,看看最欧和最非的人都需要抽多少次才能集齐这149个。
ncard=149 #total number of cards ncollector=10000 #total number of trials / can be regarded as collectors count=rep(0,ncollector) fullset=F for (i in 1:ncollector) { have=rep(0,ncard) while (fullset==F) { draw=floor(runif(1,1,ncard+1)) count[i]=count[i]+1 have[draw]=1 if (sum(have)==ncard) {fullset=T} } fullset=F if (i%%1000==0) {print(i)} } hist(count,50) quantile(count,c(0,0.01,0.05,0.2,0.5,0.8,0.95,0.99,1))
结果运行出来是这样的:
0(万里挑一欧皇):402次
20百分位(普通欧洲人):678次
50百分位(不白不黑亚洲人):800次
(这个中位数和前面的期望不一样的原因是,整个模拟抽卡结果的分布不是对称的正态分布,而是一个右偏态分布,所以前面那个数学期望作为一个算术平均数,会比中位数大)
80百分位(普通非洲人):968次
1(万里挑一脸最黑):2324次
以及,这个样本当中的均数,正如之前公式预测的那样是833,说明数学公式是对的。
连万里挑一的欧皇都要打四百多局才能集齐啊!!!!最非的人甚至要打两千多局才能集齐!!!
按照我目前打了两百来局就近视了100度的速度来算,这尼玛我要是稍微非一点,我就得壮志未酬眼先瞎了。。。
好了,我放弃了,我不集齐了,爱咋咋地吧。。还是命金贵啊╮(╯-╰)╭