关于明日方舟抽卡概率的计算
前言:虽然本文发表得有点晚,但是由于明日方舟的抽卡机制总体上保持不变,所以本文的结论对所有卡池都成立,可以作为今后大家抽卡的参考。
另外,UP本人也曾向其他人咨询过这个问题,我听到的所有回答都是在大量模拟实验的基础上给出的,没有纯理论上的推导。本文将尝试从纯理论的角度出发,来得到与模拟实验相一致的结果。如果有错误之处,还请大家斧正。

Part 0 研究的问题
本文的目的是算出来我总共抽x次,最后得到某个六星(比如W)的概率。

Part 1 抽卡规则
这一部分在游戏里写得很清楚,我不多赘述,直接放图:


Part 2 分析
这是最关键的部分,决定了我们是否可以得到正确的结果。
首先,我们可以想到,在每次抽卡前,计数器总会记录一个数,我们称这个数为a。由于Part1中介绍的抽卡机制,我们不难发现,当0<=a<50时,抽到六星的概率一直是2%;当a>=50时,抽到六星的概率是[2*(a-48)]%,那么当a=98时,抽到六星的概率为100%,抽卡后计数器必然归零,所以a的取值有一个范围,即0<=a<=98。
其次,对于每一次抽卡,a的值有且只有一个。那么,对于每一次抽卡,如果a的取值我们无法确定,那么我们可以假设某个值a_0出现的概率为p(a_0)。显然,p(0)+p(1)+···+p(98)=1。对于某个a值,我们抽到非六星的概率p(a)*P(a)为:
p(a)*0.98 {0<=a<50}
p(a)*[0.98-(a-49)*0.02] {50<=a<=98}
这样一来,在某次抽卡时a不确定的情况下,我们得到了抽到非六星的概率,同时确定了抽到六星的概率。
接着,我们引进一个新记号:p(x,a)。它的含义为:当我在一个池子里抽第x次时,计数器记录的数为a的概率。
那么让我们来想一下这种情况:如果a不等于零,这意味着什么?显然,对于某个确定的a,这意味着在前a次抽卡中,我一直抽到非六星。那么我们知道:p(x,a)=p(x-1,a-1)*P(a)=···=p(x-a,0)*P(a)*···*P(1)。其中从P(a)到P(1)的值我们已经可以确切地知道。
如果a=0,又会怎样呢?显然,这意味着我在前一次抽卡中抽到了六星(也有可能是我一次都没抽过,这是特殊情况),使得计数器归零了。那么就有:p(x,0)=sigma(0<=i<=98)[p(x-1,i)*(1-P(i))]。其中sigma是累加符号。
最后回到我们在Part0中提出的问题。假设我们抽了x次后得到目标六星的概率是m,那么抽不到的概率就是(1-m)。假设目标六星的出率占所有六星出率的k%,那么记我们抽了x次抽不到目标六星的概率为m(x),计数器记录的数为a的概率为p_(x,a)。
根据上面的分析,我们很容易得到:
m(x)=sigma(0<=i<=98)[p_(x,a)]
p_(x,a)=p_(x-a,0)*P(a)*···*P(1) (a不等于0)
p_(x,0)=sigma(0<=i<=98)[p(x-1,i)*(1-P(i))*(1-k%)] (这里乘上(1-k%)是为了区分其余六星)
再加上一些限制条件和初始条件:
p_(x,a)=0 (x<=a)
p_(1,0)=1
然后按照这个思路写出程序,就可以算出具体概率。

Part 3 一些数据
为了对比结果,我挑出一些数据,供大家检查。(以抽出W为例
x=10,m=0.0678
x=50,m=0.2962
x=100,m=0.6290
x=150,m=0.7955
x=200,m=0.8859
x=250,m=0.9361
x=300,m=0.9642

如有谬误,欢迎在评论区中指正!