import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#100连出S的数目
def f(n=100):
#完全没有保底
Ps = 0.015 #S级概率
Pa = 0.135 #A级概率
i = 0 #抽卡次数
Ts = 0 #S级角色数目
T = 0 #抽卡所得物
p1 = np.array([Ps, Pa, 1 - Ps - Pa]) #单抽概率分布
for i in range(n):
Ts = Ts + np.random.choice([1, 0, 0], p=p1.ravel()) #1表示S级
return Ts
def f_100(n=100):
#只有100发保底
Ps = 0.015
Pa = 0.135
Ts = 0 #S级目标
p1 = np.array([Ps, Pa, 1 - Ps - Pa])
for i in range(n):
Ts = Ts + np.random.choice([1, 0, 0], p=p1.ravel())
if Ts == 0:
Ts = 1
else:
pass
return Ts
def f_10(n=100):
#10发小保底和100发大保底
Ps = 0.015
Pa = 0.135
a = 0 # 连续为抽中角色次数
i = 0 # 抽卡次数
Ts = 0 # S级目标
T = 0 # 抽卡所得物
p1 = np.array([Ps, Pa, 1 - Ps - Pa]) #单抽概率
p2 = np.array([0.1, 0.9]) #保底抽取概率
for i in range(n):
if a < 10:
T = np.random.choice([1, 2, 3], p=p1.ravel()) #1,2,3分别表示S级,A级,未出货
if T == 1:
Ts = Ts + 1
a = 0
elif T == 2:
a = 0
else:
a = a+1
else:
T = np.random.choice([1, 2], p=p2.ravel())
a = 0
if T == 1:
Ts = Ts + 1
else:
pass
if Ts == 0:
Ts = 1
else:
pass
return Ts
#出S级角色所需的最少补给次数
def fun(n=1000):
#完全没有保底
Ps = 0.015
Pa = 0.135
i = 0 #抽卡次数
Ts = 0 #S级目标
p1 = np.array([Ps, Pa, 1 - Ps - Pa])
for i in range(n):
Ts = Ts + np.random.choice([1, 0, 0], p=p1.ravel())
if Ts == 1:
return i+1
else:
pass
return i+1
def fun_100(n=100):
#只有100发保底
Ps = 0.015
Pa = 0.135
Ts = 0 #S级目标
p1 = np.array([Ps, Pa, 1 - Ps - Pa])
for i in range(n):
Ts = Ts + np.random.choice([1, 0, 0], p=p1.ravel())
if Ts == 1:
return i+1
else:
pass
return i+1
def fun_10(n=100):
#10发小保底和100发大保底
Ps = 0.015
Pa = 0.135
a = 0 # 10回保底次数
i = 0 # 抽卡次数
Ts = 0 # S级目标
T = 0 # 抽卡所得物
p1 = np.array([Ps, Pa, 1 - Ps - Pa])
p2 = np.array([0.1, 0.9])
for i in range(n):
if a < 10:
T = np.random.choice([1, 2, 3], p=p1.ravel())
if T == 1:
Ts = Ts + 1
a = 0
return i+1
elif T == 2:
a = 0
else:
a = a+1
else:
T = np.random.choice([1, 2], p=p2.ravel())
a = 0
if T == 1:
Ts = Ts + 1
return i+1
else:
pass
if Ts == 0:
Ts = 1
else:
pass
return i+1
bh3扩充池模拟
最新推荐文章于 2024-07-28 15:46:11 发布