level 1
以如下数据为基础计算,全部抽到3个新角色所需的抽数,模拟10000次取平均:
S级2个新角色
+3
个原有角色,完整概率0.25%,碎片6.75%
A级1个新角色+6个原有角色,完整概率1.50%,碎片8.00%
2018年02月07日 19点02分
3
level 1
不up概率时:499抽
2倍up(新角色概率是原有角色的2倍):346抽
3倍up(同上): 294抽
5倍up: 251抽
原有A级,S级概率为0时(也就是出的所有A,S都是新角色):193抽
2018年02月07日 19点02分
6
取2倍UP,一抽28块钱,和有人算的九千块钱平均抽齐结论接近~
2018年02月08日 02点02分
level 1
import random
import numpy as np
target = {
(2, 3): (0.25, 6.75, 10.0/10.0), # (2个S, 每个3个碎片): (整只S概率, S碎片概率), S级3+2=5个
(1, 2): (1.50, 8.00, 5.0/5.0) # (1个A, 每个2个碎片): (整只A概率, A碎片概率), A级6+1=7个
}
card = []
offset = 0.0
prop = {}
for tar in target:
w_prop, p_prop, ratio = target[tar]
w_cnt, p_cnt = tar
w_prop /= w_cnt
p_prop /= (p_cnt * w_cnt)
# ratio 是针对up概率作的调整
w_prop *= ratio
p_prop *= ratio
for i in range(w_cnt):
offset += w_prop
prop[offset] = (len(card), p_cnt) # offset, length
card += [0] * p_cnt
for p in range(p_cnt):
offset += p_prop
prop[offset] = (len(card) - p_cnt + p, 1)
print(card)
print(prop)
def draw():
rel = [0] * len(card)
d = random.random() * 100
for p in prop:
if d < p:
s, l = prop[p]
rel[s:s+l] = [1] * l
break
return rel
def draw_all():
rel = [0] * len(card)
for i in range(10000):
rel = [ 1 if (r+d)>=1 else 0 for r,d in zip(rel, draw())]
if sum(rel) == len(card):
return i+1
print(np.average([draw_all() for i in range(10000)]))
2018年02月07日 19点02分
7
level 1
代码也贴了,大家可以帮忙debug一下,看看有没有问题
2018年02月07日 19点02分
8
后半夜脑子不清醒,有问题的话我明天晚上再修一下
2018年02月07日 20点02分
level 1
总结一下,氪6k以下能抽全3只的都是欧,1w以上还没全的才能叫非
2018年02月07日 20点02分
11
好了,楼主打消了我继续送钱的念头
2018年02月08日 02点02分