幻塔意志抽取概率全解析 幻塔抽卡机制

意志抽取概率详细分析
由于本人未体验过幻塔,相关资讯均来源于网络及zju幻塔群友的支持,在此向群内好友致以诚挚谢意。
这篇文章小编将可能存在疏漏,敬请指正,感谢 无论兄弟们的支持与帮助!
===采用模型===
在限定意志池中,抽取SSR意志的基础概率为1.7%,每达40次抽取时必得一次SSR。当抽卡次数为40的倍数时,必定获得SSR意志。每次获得SSR时,有50%几率为本期UP角色。该40抽保底机制在卡池更新后依然继承保留。
每次抽取意志池可获得相应超频晶片,集齐80个可兑换当期限定SSR意志 其中一个。但需注意,卡池轮换后未使用的超频晶片将转为原型晶片,无法继续保留用于后续兑换。
特别地,每期限定意志池可使用50个当期武器池回火铸金兑换1个指定意志,限兑换一次。
获得一个SSR级角色的期望值
根据设定,前39次抽卡概率恒为1.7%,第40次必出,计算得综合概率约为4.1575%,期望值为24.053次。该模型在数值上合理, 虽然缺乏确切统计数据支持,暂以此作为参考估算。
通过简单计算可知,在包含80晶片兑换的前提下,获得一个限定SSR意志的期望抽取次数为30.04次。 然而该数值仅作参考,因集齐所需数量涉及更复杂的分布 难题,实际获取难度还需结合整体抽取分布情况综合评估。
绘制分位函数图像
算法设计与实现
利用动态规划进行计算,设C表示第i次抽取时处于特定意志获取 情形的概率(不包含兑换机制),可通过简单的递推关系求解C。为避免 情形数量急剧膨胀,将抽满的情况设为上限 情形。该动态规划 经过存在优化空间: 由于仅需判断是否集齐目标物品,而无需记录具体种类,原本描述n种物品、每种需抽取k次的 情形空间可压缩至组合数C_{n+k}^{k}级别。但考虑到实际 难题规模较小,优化后性能提升有限,故未予实现。
DP完成后,遍历各 情形计算是否兑换的累积分布函数,再进行常规绘图,流程即告结束。
下面内容是计算与绘图代码,相关GG ysis包可在我Github项目中查看。
[code=py]
import numpy as np
import GG ysis as gg
def DP_state_distribution( x_pull=1000, item_rank=4):
C = np.zeros(( x_pull+1, item_rank+1, item_rank+1, item_rank+1, item_rank+1))
C[0, 0, 0, 0, 0] = 1
base_p = 0.017
count_pity = 40
up_rate = 0.5
item_types = 4
for i in range(1, x_pull+1):
now_p = 1*up_rate if i%count_pity==0 else base_p*up_rate
for a in range(item_rank+1):
for b in range(item_rank+1):
for c in range(item_rank+1):
for d in range(item_rank+1):
if a-1 >= 0:
C[i, a, b, c, d] += now_p / item_types * C[i-1, a-1, b, c, d]
if b-1 >= 0:
C[i, a, b, c, d] += now_p / item_types * C[i-1, a, b-1, c, d]
if c-1 >= 0:
C[i, a, b, c, d] += now_p / item_types * C[i-1, a, b, c-1, d]
if d-1 >= 0:
C[i, a, b, c, d] += now_p / item_types * C[i-1, a, b, c, d-1]
if a == item_rank:
C[i, a, b, c, d] += now_p / item_types * C[i-1, a, b, c, d]
if b == item_rank:
C[i, a, b, c, d] += now_p / item_types * C[i-1, a, b, c, d]
if c == item_rank:
C[i, a, b, c, d] += now_p / item_types * C[i-1, a, b, c, d]
if d == item_rank:
C[i, a, b, c, d] += now_p / item_types * C[i-1, a, b, c, d]
C[i, a, b, c, d] += (1-now_p) * C[i-1, a, b, c, d]
return C
def relu(x):
if x>0:
return x
return 0
def calc_cdf(C, need_rank=1, allow_exchange=True, use_weapon_50=0):
dist_len = C.shape[0]
dist_rank = C.shape[1]
cdf = np.zeros((dist_len))
for i in range(1, dist_len):
for a in range(dist_rank):
for b in range(dist_rank):
for c in range(dist_rank):
for d in range(dist_rank):
lack = relu(need_rank-a) + relu(need_rank-b) + relu(need_rank-c) + relu(need_rank-d)
if allow_exchange:
if lack 1e-20:
return gg.FiniteDist(temp)
C = DP_state_distribution(80*16, 4)
from GG ysis.gacha_plot import QuantileFunction
import tplotlib.cm as cm
def ht_yizhi(x):
return 全至少+str(x-1)+星
dist_list = [gg.FiniteDist([0])]
for i in range(1, 5):
dist_list.append(generate_gg_dist_list(calc_cdf(C, need_rank=i, allow_exchange=True, use_weapon_50=0)))
dist_list.dist = dist_list.dist[:i*80*4]
fig = QuantileFunction(
dist_list,
幻塔限定SSR意志抽取概率及晶片兑换详情
item_name=意志,
本图未计入50铸金兑换,模型准确性不作保证, 结局仅作参考。若全勤至少一周,预计需153.35抽,最差情况达320抽;若全勤至少三周,预计需510.91抽,最坏情况下可能高达1280抽。
text_tail=@一棵平衡树,
x_pull=80*16,
rk_func=ht_yizhi,
rk_exp=False,
rk_ x_pull=False,
is_finite=True)
fig.show_figure(dpi=300, savefig=True)
for i in range(1, 5):
dist_list.p_nor lization()
print(i, dist_list.exp)
dist_list = [gg.FiniteDist([0])]
for i in range(1, 5):
dist_list.append(generate_gg_dist_list(calc_cdf(C, need_rank=i, allow_exchange=True, use_weapon_50=1)))
dist_list.dist = dist_list.dist[:i*80*4-50]
fig = QuantileFunction(
dist_list,
幻塔限定SSR意志抽取概率说明(含晶片与铸金兑换 制度)
item_name=意志,
本图基于武器池已有50铸金的情况进行估算,模型 结局可能存在误差,仅供参阅。若追求全角色至少一专,一周内期望抽数为112.00,最差需240抽;若延长至三周,期望抽数为476.52,极端情况下可能达到1200抽。
text_tail=@一棵平衡树,
x_pull=1250,
rk_func=ht_yizhi,
rk_exp=False,
rk_ x_pull=False,
line_colors=cm.Purples(np.linspace(0.4, 0.99, 4+1)),
is_finite=True)
fig.show_figure(dpi=300, savefig=True)
for i in range(1, 5):
dist_list.p_nor lization()
print(i, dist_list.exp)
C = DP_state_distribution(3000, 4)
dist_list = [gg.FiniteDist([0])]
for i in range(1, 5):
dist_list.append(generate_gg_dist_list(calc_cdf(C, need_rank=i, allow_exchange=False, use_weapon_50=0)))
fig = QuantileFunction(
dist_list,
幻塔限定SSR意志抽取概率说明(不可兑换)
item_name=意志,
模型准确性无法保证,本图仅供 结局参考。若不进行兑换,则无法确保在有限抽取内达成目标,相信玩家不会采取此类 行为。
text_tail=@一棵平衡树,
x_pull=3000,
rk_func=ht_yizhi,
rk_exp=False,
rk_ x_pull=False,
line_colors=(cm.Greys(np.linspace(0.5, 0.9, 4+1))+cm.Reds(np.linspace(0.5, 0.9, 4+1)))/2,
is_finite=False)
fig.show_figure(dpi=300, savefig=True)
[/code]
应优先抽完所有抽奖次数后再进行兑换,若提前兑换则会影响整体收益,此策略非最优选择。
若不采用武器池铸金,可获得如下分位函数。
使用武器池进行铸金,所需抽数较少,可获得如下分位函数。
若 何都不用,仅靠硬抽确实夸张,但应该没人会这么做。
差不多算结束了。虽然意志和武器池铸金有关联,追求完美需合并计算,但我觉得太麻烦,懒得继续算了。
