こんばんは、無課金パワプラーありさじ(@ArimuraSaji)です。
今回は1回のサクセスで何人タッグが何回発生するかについてシミュレーションしましたのでご報告いたします。
条件
・投手専用練習を想定し出現率は18%とする(参照
https://www.arimurasaji.xyz/entry/2018/04/22/155526)。
・1回のサクセスのタッグ可能な週は40とする(10月4週から)。
・サクセス回数(シミュレーション回数)は各条件でそれぞれ10万回。
・得意練習率アップは全員同じとする。
・シミュレーションはPython3で行った。
結果
同じ得意練習が6人の時
同じ得意練習のキャラが6人の場合の1サクセス当たりのタッグ発生回数の平均値は以下のようになりました。
タッグ人数 | 得意練習率アップ | ||
0% | 15% | 30% | |
0 | 12.17 | 9.93 | 8.09 |
1 | 16.01 | 15.58 | 14.82 |
2 | 8.78 | 10.17 | 11.3 |
3 | 2.57 | 3.55 | 4.61 |
4 | 0.43 | 0.7 | 1.06 |
5 | 0.04 | 0.07 | 0.13 |
例えば6キャラとも得意練習率アップ15%でタッグ人数3人は1回のサクセスで3.55回発生する結果となりました。
同様に同じ得意練習のキャラ数を変えた場合を以下に示します。
同じ得意練習が5人の場合
タッグ人数 | 得意練習率アップ | ||
0% | 15% | 30% | |
0 | 14.82 | 12.55 | 10.54 |
1 | 16.29 | 16.37 | 16.11 |
2 | 7.14 | 8.54 | 9.85 |
3 | 1.57 | 2.23 | 3.01 |
4 | 0.17 | 0.29 | 0.46 |
5 | 0.01 | 0.02 | 0.03 |
同じ得意練習が4人の場合
タッグ人数 | 得意練習率アップ | ||
0% | 15% | 30% | |
0 | 18.1 | 15.82 | 13.78 |
1 | 15.87 | 16.52 | 16.82 |
2 | 5.23 | 6.47 | 7.71 |
3 | 0.77 | 1.13 | 1.57 |
4 | 0.04 | 0.07 | 0.12 |
5 | 0 | 0 | 0 |
タッグ発生率
ちなみにタッグ発生回数ではなくタッグ発生率は以下の通りです。
それぞれの結果に100/40をかけると答えが出ます。
同じ得意練習が6人の場合
タッグ人数 | 得意練習率アップ | ||
0% | 15% | 30% | |
0 | 30.425 | 24.825 | 20.225 |
1 | 40.025 | 38.95 | 37.05 |
2 | 21.95 | 25.425 | 28.25 |
3 | 6.425 | 8.875 | 11.525 |
4 | 1.075 | 1.75 | 2.65 |
5 | 0.1 | 0.175 | 0.325 |
同じ得意練習が5人の場合
タッグ人数 | 得意練習率アップ | ||
0% | 15% | 30% | |
0 | 37.05 | 31.375 | 26.35 |
1 | 40.725 | 40.925 | 40.275 |
2 | 17.85 | 21.35 | 24.625 |
3 | 3.925 | 5.575 | 7.525 |
4 | 0.425 | 0.725 | 1.15 |
5 | 0.025 | 0.05 | 0.075 |
同じ得意練習が4人の場合
タッグ人数 | 得意練習率アップ | ||
0% | 15% | 30% | |
0 | 45.25 | 39.55 | 34.45 |
1 | 39.675 | 41.3 | 42.05 |
2 | 13.075 | 16.175 | 19.275 |
3 | 1.925 | 2.825 | 3.925 |
4 | 0.1 | 0.175 | 0.3 |
5 | 0 | 0 | 0 |
感想
1サクセス当たりのトリプルタッグの回数を見てると体感通りかなと思います。
同じ得意練習を5人入れててもトリプルタッグは1,2回しか発生しないことが多きがするので妥当ですね。
トリプルタッグが発生しないのは運が悪いのではなくそもそもの発生率がかなり低いんですね。
自分の運が悪いからだと思っていましたが違ったようですw
あと5人タッグは相当運が良くないと来ないようですw
コード
今回のシミュレーションに用いたコードを証拠として以下に貼っておきます。
import random
times = 100000
week = 40
character = 4
normal_practice_rate = 0.18
good_practice_rate = 1.3
# 得意練習率
def calc_practice_rate():
practice_rate = normal_practice_rate * good_practice_rate
return practice_rate
def week1(practice_rate):
tag_people = 0
for i in range(character):
r = random.random()
if r <= practice_rate: # タッグが発生してる場合
tag_people = tag_people + 1
return tag_people # ある週のタッグ人数
def success1(practice_rate):
tag_list_success = []
for i in range(week):
tag_people = week1(practice_rate)
tag_list_success.append(tag_people)
return tag_list_success # 1サクセスの1週毎のタッグ人数 [1, 1, 0, 2, 0, 1, 1,,,]
def success_many(practice_rate):
success_many_list = []
for i in range(times):
success_many_list.append(success1(practice_rate))
return success_many_list # [[success1], [success2], [success3],,,]
def make_tag_list_summary(success_many_list):
tag_list_summary = []
for i in range(times): # サクセス回数
tag_list_success = success_many_list[i]
tag_list_success_summary = [0, 0, 0, 0, 0, 0, 0] # 1サクセス当たりのタッグ回数まとめ
# タッグ回数カウント
for j in range(week):
for k in range(7): # 0~6人タッグ
if tag_list_success[j] == k:
tag_list_success_summary[k] = tag_list_success_summary[k] + 1
tag_list_summary.append(tag_list_success_summary)
return tag_list_summary # [[12, 13, 8, 4, 3, 0, 0], [13, 14, 10 , 3 , 0, 0, 0],,,]
def calc_average(tag_list_summary):
summary = [0, 0, 0, 0, 0, 0, 0]
for i in range(times):
for j in range(7): # 0~6人タッグ
summary[j] = summary[j] + tag_list_summary[i][j]
summary_average = [0, 0, 0, 0, 0, 0, 0]
for i in range(7): # 0~6人タッグ
summary_average[i] = summary[i]/times
return summary, summary_average
def print_result(summary_average):
print("タッグ0人:", summary_average[0])
print("タッグ1人:", summary_average[1])
print("タッグ2人:", summary_average[2])
print("タッグ3人:", summary_average[3])
print("タッグ4人:", summary_average[4])
print("タッグ5人:", summary_average[5] + summary_average[6])
def run():
practice_rate = calc_practice_rate()
success_many_list = success_many(practice_rate)
tag_list_summary = make_tag_list_summary(success_many_list)
summary, summary_average = calc_average(tag_list_summary)
print(summary)
print_result(summary_average)
run()
ありさじ(@ArimuraSaji)