不同概率模型的抽奖体验
游戏中大量使用概率模型来决定事件,而不同的概率模型会带来不同的感受。以下列举了一些常见的概率模型在抽奖中的应用以及产生的体验。
¶普通概率模型
策划希望平均每 10 次抽奖能中一次,则每次抽奖中奖率为 10%
使用普通概率模型可以用以下程序模拟:
function roll(probability) {
return Math.random() <= probability;
}
roll(0.1);
经过模拟统计,可以得到如下数据:
抽奖次数 10000
设定中奖率 10%
中奖次数约 10000 * 10% = 1000
两次中奖的平均间隔 10
标准差 9.62
实际期望 10%
普通概率模型是最常用的一种模型,但是在游戏运营过程中的确发现很多小白玩家不能正确理解——他们认为中奖率 10% 的设定等同于抽 10 次肯定会中一次。这显然是错误的,普通概率模型的中奖抽奖次数是基于正态分布的,而且每次抽奖的事件是独立的,并不会因为你前面抽了 9 次没中奖,第十次就一定能中奖。
虽然在大量的统计中,两次中奖的平均间隔是 10 次,但是还有一个有趣的数据是连续 10 次都没中奖的概率约为 (1-10%)^10 ~= 34.8% 可不小呢。
此外「标准差」是一个很有意思的数据,经过模拟统计,10% 中奖率得到的标准差为 9.62 ——也就是说绝大分部人经过 10 ± 9.62 次抽奖即能中奖,运气再背抽 20 次也差不多能得到奖励了。
这种概率模型能非常准确地实现策划的需求,但是会惹来一些小白玩家的差评——为什么你说中奖率是 10% 但是我抽了 20 次还没有中奖!然后给你打个一星。所以很多游戏运营商为了顾及玩家的体验,会对普通概率模型进行修订,增设一些保底抽奖次数,例如每第 10 次固定中奖(10,20,30…)
对于这种做法,我暂不于评价。但是让我们看看如果硬生生地加入固定中奖的设定,会给数值带来什么变化吧。
¶固定中奖模型
每次抽奖中奖率依旧为 10% ,但每第十次抽奖必中。
程序中需要增加计数器,来标记玩家的累计抽奖次数:
var count = 0;
function roll(probability, threshold) {
count++;
if (count % threshold == 0)
return true;
else
return Math.random() <= probability;
}
roll(0.1, 10);
经过模拟统计,可以得到以下数据:
抽奖次数 10000
中奖次数约 10000 / 10 + (10000 - 10000 / 10) * 10% = 1900
两次中奖的平均间隔约 5.26
标准差 3.26
实际期望 19%
这时候玩家得到的抽奖体验是:10 次抽奖肯定能中奖,而且不止中一次,爽暴了是不是。实际期望高达 19% 这远远超出策划 10% 的预期。所以策划琢磨着不能便宜了玩家,只能把中奖率调低。但是这会导致中奖集中在每 10 次附近,抽奖的乐趣几近丧失。
这样看来,固定中奖模型是否真的无药可救?其实还是有可以优化的地方。
¶计数器模型
每次抽奖中奖率依旧为 10% ,若连续 9 次未中奖,下一次抽奖必中奖。
这个需求看起来和上面好像没什么不同,但是保底的条件不再是每第 10 次,而是发生在每连续 9 次未中奖后。也就是说计数器会在每次中奖后清 0 重计。
var count = 0;
function roll(probability, threshold) {
var result = false;
count++;
if (count % threshold == 0)
result = true;
else
result = Math.random() <= probability;
if (result)
count = 0;
return result;
}
roll(0.1, 10);
经过模拟统计,可以得到以下数据
抽奖次数 10000
中奖次数约 1533(使用程序统计)
两次中奖的平均间隔约 6.51
标准差约 3.39
实际期望约 15.3%
不同于前两个模型的中奖次数可以很直观地列出公式来,这里只能用「蒙特卡罗方法(Monte Carlo method)」写程序模拟统计出实验数据;
玩家的体验依然是 10 次抽奖肯定能中奖,而且不止中一次。但是我们在没有改变概率的情况下将期望降了下来。此外玩家不会有每第 10 次抽奖一定中奖的刻板印象。缺点是这个模型很难一次到位地调出想要的期望概率,需要不停的尝试修改参数并模拟。
但这样真的好玩吗?反正我不觉得。
¶其它
其实还有很多有意思的抽奖模型可以琢磨,例如「随机步长累加模型」也是一种保底中奖模型,只不过去掉了独立随机事件,并把计数增长改为随机量,最终在累计超过阈值时得奖。
这种模型如果有个较大的阈值和较小的步长下限,还可以起到让玩家在头几次抽奖必然不中(大)奖的效果。另外在这种模型下,计数器甚至可以对玩家可见,让看玩家看到进度和目标,感受到奖励是可达的、近在眼前的。
除了抽奖,这种模型也经常出现在一些游戏机制里,例如装备锻造(亡灵杀手:夏侯惇)、踩地雷(宠物小精灵)等。