杂谈||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%和给的概率也差不多。(顺便粥的出货率真的好高啊)

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值