杂谈||Python实现计算含保底抽卡出金期望

       吃饭(等异客)前几分钟看不进论文写着玩的,模型和代码都很简单,闲着的时候练练手。试了几个玩过的游戏,基本都是有保底机制的,对于FGO的保底机制不是很清楚,另外两个游戏是递增模型。至于计算模型就是很简单的概率论模型。just for fun

        mihoyo给出了一个综合出金概率1.600%含保底,吃饭前突然想到这个想看看他是怎么算的,就随手写了个小练习计算了一下这类含保底游戏的出金期望。搜了一下FGO、原神、明日方舟三个游戏的保底机制然后用了简单的概率论模型计算了出金期望。

E\left ( x \right )=p(x)\cdot x

p(x)=p_{n}*q_{n-1}

        p_{n}为第n次出金的概率,q_{n-1}为前n-1次都不出金的概率,因此得出p(x)为直到第x次才首次出金的概率,关于p(x)的计算则直接参考网上搜的数据,num_s为开始概率增加的次数,num_end为最终必出金卡的次数。

代码:

import numpy as np

class wildcard():         # Ex = p1*x1*1 + ... + pn*xn*n
    def __init__(self, base=0.006, num_s=73, num_end=90):
        self.base = base
        self.num_s = num_s
        self.num_end = num_end
        self.add = (1.0 - self.base)/(self.num_end - self.num_s)

    def now_rate(self, n):
        if n <= self.num_s:
            return self.base
        else:
            return self.base + self.add*(n - self.num_s)

    def compute_p(self, n):
        if n == 1:
            return 1.0
        else:
            return self.compute_p(n-1) * (1.0 - self.now_rate(n-1))

    
    def get_ex(self):
        ex = 0
        for i in range(1,self.num_end+1):
            ex += self.now_rate(i) * self.compute_p(i) * i
        return ex

Genshin = wildcard()
exG = Genshin.get_ex()
Arknights = wildcard(0.02, 50, 99)
exA = Arknights.get_ex()
FateGrandOrder = wildcard(0.01, 333, 334)
exF = FateGrandOrder.get_ex()
print('The average number of a SSR in Genshin is:',int(exG))
print('The average number of a SSR in Arknight is:',int(exA))
print('The average number of a SSR in FateGrandOrder is:',int(exF))

        整体实现还挺简单的,算出来的结果也和网上看到的平均出金次数差不多,FGO的那个三百多抽的保底基本上没有效果所以最后结果也很接近100抽,取整后原的62*1.6%和给的概率也差不多。(顺便粥的出货率真的好高啊)

 

你可能感兴趣的:(游戏,python,numpy,概率论)