交错战线吧 关注:56,971贴子:455,021
  • 8回复贴,共1

抽卡相关攻略(上)卡池概率

只看楼主收藏回复

这篇攻略本来前两天就能出来着,结果写了一半没存,之后又打了几天末日战线,没寻思这事,现在打完了,喜提14名挤挤一档。再重新写那就花了一些时间去思考,最后这两天学了下怎么去提升代码效率,然后解决了excel计算时的错误,如今才完成了攻略。
******
本攻略准备分为两部分,第一部分为卡池概率部分,第二部分为抽卡资源获取部分,此为第一部分。
******
一.卡池规则修正
首先,官方的描述如下:
1.基础概率六星2%(综合3%),五星8%,四星40%,三星50%。
2.up池五星和六星up概率均为50%。
3.10次内必有五星及以上。
4.50次内必有六星。
5.up池3次六星内必有UP六星。
6.六星保底不重置。
这份规则虽然非常粗略地描述了卡池的规则,但事实上其中含有不少模糊甚至错误的语句。因此,我通过对抽卡记录的仔细筛查,得出了修正后的规则,见图1。
简单来说,修正了规则中最明确的错误,也就是实际的六星保底为48抽,而顺便对于五星保底来说,出六星既不会重置,也不会计数。
其次,确认了模糊的保底机制具体为:
六星保底必!定!为六星,五星保底必!定!为五星,同时触发保底,六星先生效,随后下一发五星再生效。
最后还有鲜为人知的是虽然六星的两个保底均会跨版本继承,但是五星保底实际上每版本都会重置。
以上具体的规则均为观察抽卡记录得出,其中48抽保底海量样本已经实锤中的实锤,而跨版本五星不继承则是一件很明显的事情,翻一翻记录就会很快发现。而六星不计入五星保底和六星优先五星生效且五星保底为100%五星这两件事还称不上海量样本,但也有了数十例例子与零反例。
第一个证伪很简单,只需要找到两个五星之间间隔大于9+n抽,n为六星个数的情况即可,我目前并未找到;
第二个稍微复杂一点,需要找到形如下形式的记录(同期卡池):五星+九个三星或者四星+六星,并且这个六星的后一发不是五星,或者这个六星不是保底六星,那么就是一个成功的反例,而我同样没有找到。
二.卡池抽卡模拟
有了更明确详细的卡池规则,这就会更方便我们去获得其真实的概率。由于五星和六星的保底,我一开始并没有找到良好的方式去精确计算,所以首先想到的自然是模拟抽卡。
于是我编写了一段python代码进行模拟,由于自己水平大概约等于写出逻辑语句,所以这两天也是跟着gpt学习使用numpy的随机数和numba的编译还有加入并行来给我的代码加速,效果也很好啊,差不多加速了一百倍呢。
逻辑语句也是很简单的,两个计数器分别计数六星和五星保底,随机数生成后条件判断一下这一抽是什么结果。三四五星就增加六星计数,六星清零,三四星增加五星计数,五星清零。计数满足就触发保底强制改写为对应结果。
最后获得的结果如图2所示。对于一万亿次模拟,我大体推断小数点后第六位还是比较能够信任的,至少可以考虑保留到第五位。保底频率为保底占有全部的频率。



IP属地:江苏来自Android客户端1楼2025-06-08 05:45回复
    三.卡池模型计算
    有了模拟,其实基本就可以得出结论了。然而白兔练度质检员跑的结果却和我的有较大差异,因此我模拟的正确性最终还是要回归到正确的精确计算。
    过去我曾经认为的那个模型,比我想的更复杂,因此当时我认为那样的模型无法简便计算获得准确结果。而现在经过实测修正后的规则下,保底的触发机制比我预想的简单许多,我也因此能够获得一个精准计算的方式,以下详细讲述。
    首先思考一个队列,这个队列就是抽卡的结果。假设队列极长,在没有任何保底情况下应该由2%的六星,8%的五星,40%的四星,50%的三星组成。我们大可以去掉百分号,将其变为一种简单的权重,分别是2 8 40 50。
    随后开始考虑保底。
    首先思考一个前提,那就是对于这样的保底,维持队列长度不变,直接更改满足要求处的结果,与保持原始队列不变,但是从适当位置插入一个保底的结果,二者最终反映出的各个星级占比是否有区别?答案是没有的。反过来思考,对于一个完全随机的列表,按某些条件选中某些元素,但是去除的是与这个元素有固定位置关系的一个元素,去除的这个元素是哪一种元素的结果依旧是随机的,所以去除前的列表,去除后的列表,去除的列表,三者都是服从规定好的随机分布的。因此,对于上述情形,保底强占原本结果的列表必然等效于另一条长度为上一条列表减去保底长度后的列表采用保底挤占结果而产生的列表。
    接下来,根据规则可以开始引入保底。首先是五星保底,该保底的计数仅与三星四星五星有关,也就是六星其实是可以被剔除的。而对于随机六星来说,列表的每一个位置会是五星保底的概率也应该是均等的,于是可以大胆推测二者的先后不会影响列表的结果。也就是对于这一列表来说,向着带有随机六星的列表加入五星保底,与向着带有五星保底的列表加入随机六星等效。于是我们就可以将原本列表中六星权重先剔除,变为8 40 50权重均匀分布的列表,随后加入符合要求的五星保底,最后将随机六星随机地添加回列表中,与直接添加五星保底锁获得的列表理应等价。
    最后还有六星保底,这一点就简单很多,直接将其插入列表即可,此时最终生成的数列就是含有保底的抽卡数列。在这个过程中,我们只需要算出五星保底占有的权重和六星保底占有的权重,上一节模拟结果中所有频率所代表的概率便都能计算得出。
    而这一点并不难算。比如对于五星保底,其实就是寻找总权重98的列表里,8权重的五星之间间隔n个非五星的概率。这就是很经典的几何分布。譬如,对于任意一个五星,下一个是五星的概率为8/98,不是五星的概率为90/98,第一个不是五星时,第二个是五星的概率为90/98*8/98,第二个同样不是五星的概率为90/98*90/98......以此类推。最终以此可以算出一个五星之后第n个才首次为五星的概率,这依靠excel拉表即可计算。随后考虑什么情况需要插入保底。五星保底为九个五星以下才会触发,所以对于第9个出五星的显然不会触发保底,而第10个出五星则已经触发保底了。随后一直到第18个出五星是上一次保底后的第9个,因此不会触发第2次保底,但是第19个才出就会触发第2个保底了。所以可以由此得出,一个五星后触发1次保底的概率就是10-18发才出五星的概率之和,2次保底的概率就是19-27发才出五星的概率之和,以此类推,连续触发n次保底的概率是第9n+1~9(n+1)次出五星的概率之和。而n趋向于正无穷,该结果趋向于最终的精确值。这显然是一个级数,但其形式我完全没有讨论的欲望,唯一确定的是显然收敛,因此一定可以对其展开到某一级取近似。于是我采用了精确到连续24次保底的近似,此时概率之和已是小数点后8个零,已经是极小的小量了。
    对于每一个五星,其后方有n个保底的概率均知晓,那么每一个五星后平均需要加入的保底五星个数显然就是n*P(n)的求和,对于24次,自然是1~24次保底的求和。此结果乘上五星的权重,显然就是保底五星实际占据的权重。
    获得了保底五星的权重,保底六星的话权重也同样不在话下。基础的概率为2/(100+五星保底权重),以此计算六星保底的概率,精确到了连续21次六星保底,以此获得了保底六星的权重。
    最终,保底五星权重/全部五星权重即可计算出保底的概率,全部五星权重/所有权重的和即可计算出五星的概率,六星同理。
    最终结果如图。该结果为excel拉表获得,事实上使用excel显然会有大量舍入误差的累计,因此实际上对于六星概率来说可能只有三位可信的有效数字,但是对于我来说四位数字也就是3.14%或许已经足够说明我上述模拟代码的正确性,因为所有结果都在小数点后第五位前保持了高度的一致。


    IP属地:江苏来自Android客户端2楼2025-06-08 05:46
    回复
      2025-08-25 22:09:57
      广告
      不感兴趣
      开通SVIP免广告
      四.卡池概率总结
      通过模拟与计算两种方式,我们获得了该卡池的结果。由于一万亿次模拟的稳定性应该将远远大于双精度浮点数成百上千次迭代后的准确度,所以决定取模拟的小数点后五位作为结果,也就是六星概率为3.13874%,五星概率为13.79314%,四星概率为36.91918%,三星概率为46.14894%
      以此,我将继续下一部分抽卡资源的攻略。
      顺便,过去我曾对“满特一个六星需要的抽数”画过一张频率分布图,那张图采用的模型是以往偏高概率的模型,所以我现在必然是要进行改进的。改进后的结果应该会随着下半部分给出。


      IP属地:江苏来自Android客户端3楼2025-06-08 05:47
      回复
        兄弟你这一万亿次现在点完了吗


        IP属地:山东来自Android客户端6楼2025-06-08 07:42
        回复


          IP属地:浙江来自Android客户端7楼2025-06-08 08:33
          回复


            IP属地:辽宁来自Android客户端8楼2025-06-08 11:30
            回复
              什么模拟啊?


              IP属地:上海9楼2025-06-08 13:59
              回复
                挺奇怪的,48小保底这事第一眼看上去就感觉不对劲,因为这游戏的抽卡资源量太多了,保底少两抽玩家也不会感恩戴德哄堂大孝发个视频说米茄>米,保底多两抽玩家也不会水深火热举步维艰,48跟50没啥区别的情况下官方应该是按规则50保底就行了,跟字面一致总不会有错,然后我登录游戏看了眼抽卡记录,每翻一页六星位置往右挪两格,难绷


                IP属地:广东来自Android客户端10楼2025-06-08 16:14
                收起回复