关于原神抽卡机制的一些思考与随笔
写在前面:啊啊啊啊啊,我的芙芙歪了!!!!!!
前天,鼠鼠浅浅地试水了一下4.2卡池,之前没有攒多少原石,但是抱着赌狗心态,抽了几十发,直到第84发终于出金了,等到动画一过,喜提了西风骑士团团长芙宁娜(此处应该有一个爆筋表情),这不禁引起了鼠鼠的思考,为什么那么晚才出,原神的抽卡机制是什么样的,抱着这样的心理,鼠鼠开始了对抽卡的概率分析,同时也在思考为什么米哈游要这么设计抽卡概率。
一些基本的分析
首先鼠鼠一直注意到,在非小酋网站的统计上,在74发以后,出金的概率明显增加,但是这与我们的尝试是有悖的,因为理论上,我们的抽卡应该是满足负指数分布的特性的,但是显然,如果这样,我们无法解释后期的波峰为什么会出现。
之后,鼠鼠刷了刷贴吧,发现有一个说法是在一定的抽数过后,游戏内部存在着概率的线性提升,直觉的,这个线性的提升应该是在74发以后,结合贴吧的部分分析,鼠鼠对其进行了数值模拟,相应的代码如下:
a = 10000000;
alpha = 0.006; % 五行角色出率
beta = 1 - alpha;
count = zeros(90, 1);
for i = 1:a
start = 1;
temp_add = 0;
while start <= 90
if start > 73
temp_add = 0.06 * (start - 73);
end
if rand() < alpha + temp_add
count(start) = count(start) + 1;
break;
else
start = start + 1;
end
end
if start == 91
count(90) = count(90) + 1;
end
end
% 计算概率
count=count/a;
绘图,我们得到了以下的结果:
可以很明显的看到,左侧的曲线与非小酋的统计出现了明显的吻合,我们计算数学期望,发现对应的综合处率是1.61%,与米哈游官方公布的结果相对误差为0.625%,我们有很大的把握认为,我们的游戏的实际抽卡机制应该与上述的建模过程十分接近。
困惑与求解
看起来我们的问题解决了,但是,鼠鼠却产生了一个更大的疑惑,为什么米哈游要使用这样的机制?他是为了让我们尽可能的晚出货吗?按理来说,从赌狗的心理触发,如果我们的基础概率保持不变,把他跳到一个更高的数值,在保持同样综合出率的基础上,应该可以让我们尽可能更早的出金,从而与赌狗的心理形成相关的正反馈,那为什么我们不这样做呢?
抱着这样的心理,鼠鼠对于这个问题进行了进一步的分析。
首先,我们通过二分法计算,如果想要保持1.6%的综合出率且基本概率不变,那么初始的基本概率应该维持在什么水平。
相关代码如下:
%估计参数alpha
left=0;
right=1;
while right-left>0.000001
sum=0;
mid=(left+right)/2;
for i=1:90
sum=sum+i*power((1-mid),i-1)*mid;
end
sum=sum+90*power((1-mid),90);
if 100/sum<1.6
left=mid;
else
right=mid;
end
end
alpha=(left+right)/2;
经过计算,求解得到alpha=0.008737
而后类似的,我们对于上述出货概率进行分析,再次绘图,我们得到了:
孤立的看这张图似乎说明不了什么问题,我们把这两张图片放在一起看看
现在,我们再回到刚才的问题,如果你是一个游戏者,你会以前期略高的出金的赌狗心态换相当高的概率的吃满90发保底的绝望吗?我相信,但凡多来几次,绝大多数的人都会想着退游了,而我们反观在均衡概率的背景下,吃满保底的概率已经超过了40%,可以说,为了前期略有提升的高出金率带来对赌狗的正向反馈引来的绝大多数玩家的心理不舒服是完全不值得的,而在达到一定抽数后实现线性的概率提升确实可以有效的缓解游戏用户的不满情绪。
一些其他的数学维度的分析
那么最后,我们产生了几个有趣的问题,维持统一的出金比率和固定的保底机制,基础出率和综合出率与保底数会有哪些有趣的关系,固定出率的策略是否还有应用空间?
我们先做出一些基本的假设:
假设综合出货率为
k
k
k,单抽出货率为
α
\alpha
α,此时,我们记
β
=
1
−
α
\beta=1-\alpha
β=1−α,
m
m
m次后会触发保底机制,记
P
(
x
=
n
)
P(x=n)
P(x=n)代表第n发出货概率
首先很显然的,我们可以得到以下关系:
P
(
x
=
n
)
=
{
β
n
−
1
α
x
<
m
1
x
=
m
P(x=n)= \begin{cases} \beta^{n-1}\alpha & x<m\\ 1 & x=m\ \end{cases}
P(x=n)={βn−1α1x<mx=m
记
E
(
x
)
E(x)
E(x)代表了出货抽数的数学期望,很显然的,我们有以下的函数关系
E
(
x
)
=
∑
i
=
1
m
i
P
(
x
=
i
)
E(x)=\sum_{i=1}^{m} iP(x=i)
E(x)=i=1∑miP(x=i)
我们记
S
(
β
)
=
∑
i
=
1
m
−
1
i
P
(
x
=
i
)
α
=
∑
i
=
1
m
−
1
i
β
i
−
1
S(\beta)=\frac{\sum_{i=1}^{m-1} iP(x=i)}{\alpha}=\sum_{i=1}^{m-1} i \beta^{i-1}
S(β)=α∑i=1m−1iP(x=i)=∑i=1m−1iβi−1,从而我们有:
G
(
β
)
=
∫
S
(
β
)
d
β
=
∑
i
=
1
m
−
1
∫
i
β
i
−
1
d
β
=
β
1
−
β
m
−
1
1
−
β
+
C
(
C
为常数
)
\begin{align*} G(\beta) &= \int S(\beta) d\beta \\ &= \sum_{i=1}^{m-1} \int i\beta^{i-1}d\beta \\ &= \beta\frac{1-\beta^{m-1}}{1-\beta}+C \quad (C \text{为常数}) \end{align*}
G(β)=∫S(β)dβ=i=1∑m−1∫iβi−1dβ=β1−β1−βm−1+C(C为常数)
从而,我们可以计算出
S
(
β
)
=
G
′
(
β
)
=
1
+
(
m
β
−
β
−
m
)
β
m
−
1
1
−
β
\begin{align*} S(\beta) &=G'(\beta)\\ &=\frac{1+(m\beta-\beta-m)\beta^{m-1}}{1-\beta} \end{align*}
S(β)=G′(β)=1−β1+(mβ−β−m)βm−1
从而计算得到
E
(
x
)
=
α
S
(
β
)
+
m
β
m
−
1
=
1
−
β
m
1
−
β
\begin{align*} E(x) &=\alpha S(\beta)+m\beta^{m-1}\\ &=\frac{1-\beta^{m}}{1-\beta} \end{align*}
E(x)=αS(β)+mβm−1=1−β1−βm
从而,我们的分析目标转变为了分析
100
(
1
−
β
)
1
−
β
m
\frac{100(1-\beta)}{1-\beta^{m}}
1−βm100(1−β)和
α
\alpha
α的关系,从而,我们将问题又转化为分析
1
−
(
1
−
α
)
m
100
\frac{1-(1-\alpha)^{m}}{100}
1001−(1−α)m的函数特点,其中
m
>
0
,
α
∈
[
0
,
0.1
]
m>0,\alpha \in[0,0.1]
m>0,α∈[0,0.1]
于是,我们开始作图分析,同时,我们需要兼顾两个点:基础出率与保底出率不能相差过大,吃到最终的保底的概率不能过高,伴随这两个约束条件,我们进行下一步的分析:
m = 0:200;
alpha = 0:0.001:0.1;
[M, Alpha] = meshgrid(m, alpha);
z = (1 - (1 - Alpha).^M);
surf(m, alpha, z);
xlabel('保底触发点');
ylabel('基础出率');
zlabel('比值');
title('相关分析');
hold on;
% 计算 (1-alpha)^m=0.5 的解
m_solution = log(0.1) ./ log(1 - alpha);
% 绘制解对应的曲线
plot3(m_solution, alpha, (1 - (1 - alpha).^m_solution), 'r*-', 'MarkerSize', 8, 'MarkerFaceColor', 'r');
xlim([0,200]);
% 添加 colorbar 并将其位置设置为左侧
cbar = colorbar('Location', 'westoutside');
cbar.Label.String = '两出率比例热值对照图';
% 调整图像位置以容纳 colorbar
pos = get(gca, 'Position');
set(gca, 'Position', [pos(1) pos(2) pos(3)*0.85 pos(4)]);
contour3(m, alpha, z, [0.25 0.25], 'k', 'LineWidth', 2);
legend('两出率比例热度图','吃满保底的比率小于10%的等值线','基础出率/综合出率=0.25等值线')
结合图片,很显然,固定出率的策略显然是行不通的,因此,也无怪乎目前绝大多数游戏都引入了一种类似于幸运值的机制,在同等综合出率的背景下牺牲前期的概率以提升整体的体验。