如何优雅的满足“精确到抽几次能中”的游戏审核新规

作者:李榭恒 2019-05-28

近期原国家新闻出版广电总局公布了一条新的游戏版号规定,在4月22号之后新游审核提出新的规定要求“道具抽取系统不能以抽奖概率百分比表示,必须精确到抽几次能中”。本文介绍一种动态概率算法,可以完美满足此规定同时提供可控和近似纯随机的抽奖体验。

为什么会有这条审核新规

4月20日,有媒体报道一条新的游戏审核规定:


这是自2017年5月1日规定必须公布抽奖概率之后,监管方规范抽奖玩法的又一次尝试。为什么监管方不满足于公布中奖概率而进一步要求公布抽奖保底次数呢?

我猜测其中部分原因是执行中公布的中奖概率数值无法有效的检验真伪,导致概率公布缺乏公信力。更重要的是公布概率并不能有效减少玩家投入了超出预期的金钱而无法中奖的行为,没有有效的减少监管方收到的相关投诉。

我参与运营的游戏就曾多次因为玩家无法中奖而被投诉,监管方提供的案例中确实存在大量玩家投入了超出设计者预期数量的金钱而没有中奖。比方,某个宝箱售价为6QB,中大奖概率为1%,预期投入为600QB中奖,但有的玩家投入了3000+还没有中!


之所以会出现这样的现象,是由于抽奖算法的底层机制决定的,那就是——纯随机算法。

纯随机能有多坑?

纯随机的概率有时候会违反直觉,比方现在有一个宝箱开出某个道具的概率是1%,那么请问:

有100个人,每个人都打开了100个宝箱,会有多少人能得到这个道具呢?

100个宝箱开出1个,100个人会开出100个,但是可能不会刚好一人一个,所以应该会有90人?85人?

正确答案是——63人

是的,100轮之后还有37个非酋会开不出来。我们再来猜:

如果要保证100人中有99个人获得这个道具,需要每个人开多少个箱子?

200个?300个?正确答案是——459个

是的,纯随机就是这么坑爹,为了保证获得这个道具的机会超过99%,你需要打开的箱子数是459个!甚至,无论你打开多少个,也无法保证100%拿到这个道具:事实上,即使打开1000个,你仍然有0.0043%的概率拿不到!你会说这个概率很小,可以忽略不计。对以一个人来说确实如此,但是当考虑海量用户的时候,这个事情发生的数量就是必然的:

每100万玩家中就会有43个,开1000次箱子仍然拿不到概率为1%的道具。

这时你应该能理解玩家的心情了~


为什么会这么坑?

要从根源上解决这个问题,首先要看看为什么明明有100个道具,却只有63个人能得到:

1.当第一个道具产出时,持有这个道具的人数由0个增加到了1个,这是100个人中有1个人持有,我们说新增覆盖率为1%。

2.当第2个道具产出时,由于100个人中已经有1个人有了,这个人重复获得这个道具的概率为1%,其他人获得的概率为99%,也就是说预期会增加0.99个新的持有人,覆盖率会提升到1.99%,新增覆盖率下降到了0.99%。

3.依此类推,越到后面产出的道具就有越大的可能被已经持有的玩家得到,新增覆盖率就会越小。

所以问题的关键是:随着产出道具数量的增加,新增覆盖率在不断的下降,我们需要动态的增加产出概率才能使得新增覆盖率保持稳定。

基于覆盖率设计动态概率的思路

简单起见,我们先假设每一轮新增覆盖率是相同的,需要满足的保底可以获得的轮次命名为P,意味着每一轮都有 的新增中奖人,则每轮中奖概率如下:

1.第1轮中奖概率即为

2.第2轮,当前覆盖率为 ,未中奖的概率为 。假设中奖概率为X,为使得本轮尚未中奖的人中有 人可以中奖,X需满足:


3.第3轮,覆盖率为 ,未中奖的概率为

4....

5.第N轮,覆盖率为 ,未中奖概率为 ,本轮中奖概率为:



上述算法即为一个可以确保玩家在P轮后全部可以中奖的抽奖算法。不信?将代入公式 ,此轮的中奖概率为:



即第P轮是100%中奖的!这个世界上终于不再有非酋这样的存在!


实用主义的优化

基于覆盖率实现保底的原理到这里就讲完了,但是作为一个宝箱设计师,如果你直接拿这个方法去实际使用,就会隐隐觉得这个方法还是有一个小小的缺陷的:

保底的局数和第一轮的概率是固定的倒数关系,玩家从开第一个宝箱到最后一个宝箱获得道具的效率是一样的。但是这样的效果不一定是最优的,也许前期获得慢后期获得加快的实际效果会更好呢?目前这个方法就做不到这一点,需要进行优化。

如果我们每轮画一个矩形,表示当轮新增的覆盖率,所有P轮会是这样的一个形状:


如果我们希望调整某些轮次的概率,而又要保证整体的面积之和不变,只需要改变所有矩形的高度使得矩形高度分布在同一条直线上且中间点的高度不变即可,就像这样:


这样我们就得到了同样可以在P轮之后完成100%覆盖,但是更灵活的方法。我们在保持轮次P不变的情况下,可以在 (因为新增覆盖率不能出现负值)之间随意调整第一轮的概率,我们将它命名为。新的概率计算方法如下:

•第1轮中奖概率为K。

•第2轮的概率参照之前的计算方法,本轮概率=新增覆盖率/未中奖概率。


1.参照上方图片,第2轮的新增覆盖率为 ,未中奖概率为

2.下面求解 的值,由于所有的矩形高度在一条直线上,所有的 值构成一个等差序列:已知 ,故

3.第二轮概率为

•第N轮的概率计算如下:


1.参照上方图片,本轮新增的覆盖率 的值为



2.本轮的未中奖概率为 之后的所有 值之和,即

除以此值,即为最终的概率:



*其中:K为首轮概率、P为保底获得轮次、N为连续未抽中轮次

PS.这个公式虽然看上去很复杂,但只涉及基础的加减乘除运算,程序实现时真正的挑战在于如何存储玩家的中奖状态,所以相对于上一部分中只能指定保底轮次的方案,优化为可以调整初始概率方案的性价比很高。

实际效果如何

为了模拟实际使用时的体验,我设计了一个演示Excel文档,表格中演示了在算法设置保底100轮抽中,首轮概率为0.5%的情况下,玩家抽中则停止、抽不中则继续抽,从第1轮到第100轮的中奖概率和所有玩家中奖的覆盖情况。

最终计算结果如下:


可以看到每轮的概率和新增覆盖率如下:


这个算法可以同时达到3个目的:

1.最后一轮的概率为100%,且轮次数量可以指定。这样就不可能出现超过保底轮次依然没有抽中的现象,避免玩家陷入脸黑的困境,可以完美满足监管方要求明确说明几轮可以抽中的要求。

2.第一轮的概率是0.5%,此值的取值范围是0%~2%的任意值。在实际应用中,大部分的玩家会停留在前几轮,可调的首轮概率能有效控制不同类型玩家的获取能力。

3.每一轮的新增覆盖率是一个等差数列,此数列之和为1。这样的好处是使得每一轮抽中的机会是逐渐变化的、不会出现跳跃式的突变,从而使得抽奖的体验更加接近真实随机,提升抽奖的体验、避免被玩家抓到漏洞。

结语

本文介绍了一种通过动态调整中奖概率确保在指定轮次内必定中奖且轮次和首轮中奖概率可单独配置的动态概率算法,在满足监管要求的基础上使得中奖体验更接近真实随机,在宝箱售卖或掉落系统中均有一定的实用价值。

此算法原理有点复杂,16年我推导出来之后,仅在宝箱掉落系统有过实际应用,一直没能推广到宝箱售卖系统中,欢迎做第一个吃螃蟹的人~


有任何问题,请添加微信交流:


作者:李榭恒
专栏地址:https://zhuanlan.zhihu.com/p/67252977


最新评论
暂无评论
参与评论

商务合作 查看更多

编辑推荐 查看更多