这篇攻略本来前两天就能出来着,结果写了一半没存,之后又打了几天末日战线,没寻思这事,现在打完了,喜提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所示。对于一万亿次模拟,我大体推断小数点后第六位还是比较能够信任的,至少可以考虑保留到第五位。保底频率为保底占有全部的频率。


******
本攻略准备分为两部分,第一部分为卡池概率部分,第二部分为抽卡资源获取部分,此为第一部分。
******
一.卡池规则修正
首先,官方的描述如下:
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所示。对于一万亿次模拟,我大体推断小数点后第六位还是比较能够信任的,至少可以考虑保留到第五位。保底频率为保底占有全部的频率。

