【黒い砂漠PS4】レブラスによる強化確率と平均ブラックストーン消費数

 黒い砂漠では強化するためにスタックを貯めるのが重要になるわけですが、大半の人がレブラス+14を使ってある程度のスタックを貯めるということをしていると思います。

確率が表記されているので、到達率は簡単に計算できるのですが、目標スタックまでに消費するブラックストーンの平均値を出そうとすると、単純な計算ではできなさそうでした。すでに誰かが計算してれるかなと思って色々ググってみたんですが、なかなかそれっぽいの見つからず。

というわけで、ないなら自分でやればいいじゃないの精神で作ってみた。計算式を作ったのではなく、10万回シミュレーションを行ってその平均値などを出すという強引な方法ですが/(^o^)\

ソースコードを念の為貼っておく。もし間違いがあればツッコミが欲しい。


レブラス+14でスタックを貯めた場合のブラックストーン消費数

stack確率(実測)確率(計算)平均中央値ハマり失敗回数ハマり失敗平均費用(M)
198.06198.00%1.019812.0410.01981.04100.2223
295.72695.84%2.067424.1880.04451.17400.4510
393.62593.54%3.139436.4930.06801.42000.6849
491.11691.11%4.251449.2690.09771.88400.9281
588.41888.56%5.4026512.2780.13022.14601.1800
685.88885.90%6.6028616.2080.16382.33201.4426
783.17883.15%7.8502720.1000.20182.57601.7158
880.22380.33%9.1740824.0680.24612.93802.0062
977.48777.44%10.5441928.5820.29073.33402.3066
1074.36074.49%12.01931033.8170.34463.58502.6306
1171.62071.51%13.54281139.4240.39843.95802.9651
1268.08568.51%15.23461245.8210.46644.47303.3373
1365.31465.50%16.93401351.8660.52924.71603.7107
1462.78562.48%18.72761458.6450.59335.10104.1045
1559.41559.48%20.79541568.2210.68025.77104.5598
1656.61156.51%22.94301676.7730.76946.20205.0326
1753.53353.57%25.23991787.1440.86676.90905.5385
1850.73950.68%27.72521897.6530.97027.37506.0857
1948.11947.84%30.347621108.8971.08018.06206.6631
2044.89745.07%33.442625122.3241.22228.77307.3458
2142.47442.36%36.649929138.6001.36659.70808.0530
2239.96739.73%39.941632153.0401.505910.43708.7780
2337.12137.19%43.775535171.4871.684211.44309.6239
2434.69334.74%47.974439193.7641.873912.607010.5499
2532.50432.38%52.637642216.1562.092413.908011.5790
2629.99130.11%57.665346239.6282.317315.090012.6874
2727.96027.94%63.064949268.8702.571016.642013.8791
2825.74725.87%69.374954300.6762.869418.175015.2719
2923.90823.91%75.880658328.5833.165719.671016.7068
3022.12322.04%83.747863371.5023.545021.906018.4440
3120.27920.28%91.987970416.7843.933924.360020.2628
3218.70418.62%101.295877466.4244.367326.806022.3166
3317.02417.05%112.028184520.8294.883329.557024.6864
3415.88515.59%122.913392577.4155.388432.262027.0881
3514.07614.21%136.8776102652.5906.069336.086030.1725
3612.92312.93%150.8756112720.2866.726539.413033.2618
3711.80611.74%167.4315124817.1377.526944.324036.9179
3810.77310.64%185.1023136909.6488.358548.684040.8179
399.4599.62%207.09251511030.4009.429354.859045.6749
408.7168.68%229.23191671153.72710.473860.732050.5615
417.7637.81%256.02191861308.14911.772768.620056.4780
426.9837.01%286.73162071476.60313.236276.664063.2577
436.5066.28%320.16692311643.63814.843784.885070.6404
445.7045.62%361.33002601868.75816.832996.186079.7306
455.0315.01%403.70622902102.60818.8658107.786089.0871
464.4524.46%455.57873252416.01421.3525122.6490100.5403
473.9973.96%516.41523702730.76724.2972137.6920113.9754
483.4843.51%584.18584153151.89327.5745158.4780128.9416
493.1253.10%659.16054683590.73931.1852180.3570145.4972
502.8012.74%743.19775244018.00935.2123200.6360164.0519
512.4392.41%853.36926014671.31340.5312232.5650188.3809
522.0442.11%969.65806855255.36346.1175260.7470214.0579
531.8151.85%1115.53647876039.18253.1812298.6520246.2740
541.6081.62%1273.69668996981.90360.7885344.1300281.1973
551.3951.41%1461.313010307950.07669.8743391.4200322.6310
561.2361.23%1685.063011839194.13380.6236452.2140372.0360
571.1141.07%1928.5221134610646.87992.3946522.6110425.8002
580.9610.92%2234.0981156512331.338107.1324603.5520493.2784
590.8480.80%2576.6884180214121.308123.6393689.1170568.9286
600.6550.69%3010.2873209316661.401144.5701812.0250664.6791

表の見方

確率(実測):実際に10万回シミュレーションした結果の平均到達率
確率(計算):表記される確率から計算した到達率
平均:ブラックストーンの消費数の平均値
中央値:ブラックストーンの消費数の中央値
ハマり:ブラックストーン消費数の上位1%(1000件)の平均値
失敗回数:+15レブラスになった回数の平均値
ハマり失敗:+15レブラスになった回数の上位1%(1000件)の平均値
平均費用:BS消費数平均値*(210k+6k(修理費:レブラスの値段/2))+平均失敗回数*100k(浄化代)

計算上の到達率と大きくても0.2%程度の差しかないのでほとんど収束していると見て問題ないかなと思う。
大体いろいろなところでレブラスはスタック20前後まで貯めると言われていることが多いけど、費用の概算は大体7.3M。ハマりの数値は正直あまり意味はないんですが、私はあまり運が良い方ではないので、ハマるとこのくらい消費するよっていう目安が欲しかったんじゃ。
スタック30も100個以内で出来る計算になっているので意外と狙ってもよさそうな感じではあります。
真1以降を叩いてスタックを貯める場合との比較も次回作ってみようかと思います。

ソースコード(python3)

pythonはあまり書いたことないので変なところあるかもだけど、まぁ動いてるからええやろ。
import random
import numpy as np
import scipy as sp
import matplotlib.pyplot as plt
import matplotlib as mpl
import pandas as pd
import seaborn as sns
sns.set()
from pandas import Series, DataFrame
import statistics

%matplotlib inline
%precision 3

# 強化初期確率, 増加スタック, 出来る物
K_14 = [1/50, 1, 15]
K_15 = [2/17, 2, 16]
K_16 = [1/13, 3, 17]
K_17 = [1/16, 4, 18]
K_18 = [1/50, 5, 19]
K_19 = [3/1000, 6, 20]

# 70%を超えた計算は間違ってる
# 成功確率(武具)
def per(item, stack):
    return item[0] + (item[0] * (stack/10))

# 0~1のランダムな数が成功確率を超えていれば成功
def challenge(item, stack):
    return per(item, stack) > random.random()

# 目標スタックが貯まるまでレブラスを叩き続けて、BS消費数と15になった回数を返す
def challenge_stack(target):
    stack = 0
    total_count = 0
    success_count = 0
    while(target > stack):
        total_count += 1
        if(challenge(K_14, stack)) :
            stack = 0
            success_count += 1
        else :
            stack += 1
    return total_count, success_count
 
stack = 1
end = 60
list = []
count = 100000
columns = ["一発成功率", "平均", "中央値", "ハマり個数", "平均失敗回数", "中央値(失敗回数)", "ハマり失敗回数"]
rows = []

while(stack <= end):
    i = 0
    bs_list = []
    suc_list = []
    while(count > i):
        res = challenge_stack(stack)
        bs_list.append(res[0])
        suc_list.append(res[1])
        i += 1
    l = pd.Series(bs_list)
    l2 = pd.Series(suc_list)
    data = [
        bs_list.count(stack)/len(bs_list) * 100, 
        l.mean(), l.median(), l.sort_values(ascending=False).head(int(count/100)).mean(), 
        l2.mean(), l2.median(), l2.sort_values(ascending=False).head(int(count/100)).mean()
    ]
    list.append(data)
    rows.append(str(stack))
    stack += 1
    
df = pd.DataFrame(list, columns=columns, index=rows)
df