前回の記事の記事でレブラスでスタックを貯めた場合の平均値は出せたので今度は真1以降の武具でスタックを貯めた際との比較をします。スタック30、40、50の比較。
前回と同じく、平均値等は計算式で出したわけではなく、10万回シミュレートした結果から出していますので、ロジックが間違っている場合、全部間違ってることになるので、この数値を参考に何らかの被害を被っても当方は一切の責任を負いかねますw
ソースはまた一番最後に貼っておきます。
スタック30 レブラスvs真1
スタック30は真2チャレンジ、銀刺繍+3チャレンジあたりで結構欲しいスタック。
比較した叩き方は、下記の4つ
- 30まですべてレブラス
- 21までレブラスで真1を3回叩く(S1)
- 24までレブラスで真1を2回叩く(S2)
- 27までレブラスで真1を1回叩く(S3)
表の見方(これ以降も基本的に同じ)
到達率:1回で成功する確率
BS:通常ブラックストーン消費数の平均
濃縮:濃縮ブラックストーン消費数の平均
+15:レブラスが15になった回数
真N:真Nが出来る平均値
真NC:真Nへのチャレンジをした回数
平均費用1:「BS平均値」*(210k+6k(修理費)) + 「濃縮」* 2M + 「+15」*100k(浄化費)
平均費用2:上記 - 真2*20M + 真2C*100k(修理費) ※真1から真2になった価値を20M、緑防具の修理費を100kと考えた場合
なんと、30までレブラスを叩くほうがブラックストーンの消費数すら少なくなるという驚きの結果に。到達率を計算した際、レブラスのほうが高かったので、レブラスが優秀なんだろうなとは思っていましたが、まさかブラックストーンの消費数すら一番少ないとは驚き。
一応濃縮BSを利用する場合は副産物として真2装備が出来るので、全くダメというわけではないですが、スタック30がすぐに必要な場合は、何も考えずにレブラスを叩き続けるのが最優という結果に。
スタック40 レブラスvs真1・真2
スタック40は30以上に需要あるんじゃないでしょうか。助言も入れると最大で50までになり、真3チャレンジ、アクセの真2〜真3チャレンジあたりに利用できるスタック。
私は真4チャレンジする際の真3戻し用のスタックとしてこのスタックを大量に助言に変えてから真4チャレンジしてますw
40となると色々な叩き方がありそうですが、比較した叩き方は下記
- 全部レブラス
- 20までレブラス、32まで真1(4回)、40まで真2(2回)(S1.1)
- 23までレブラス、32まで真1(3回)、40まで真2(2回)(S1.2)
- 26までレブラス、32まで真1(2回)、40まで真2(2回)(S1.3)
- 20までレブラス、40まで真2(5回)(S2.1)
- 32までレブラス、40まで真2(2回)(S2.2)
- 27までレブラス、36まで真1(3回)、40まで真2(1回)(S3)
S1は比較的オーソドックス(と考えている)な叩き方。S2は真1を使わない叩き方。S3は真1でなるべく頑張ってみる叩き方という分け方です。
※平均費用2:平均費用 - (真2 - 真3C)*20M - 真3*50M + (真2C+真3C)*100k
真2、真3の在庫の増減と修理費を加味した計算(のつもり)
まだレブラスがかなり優勢の結果に。たださすがにレブラスが15になる確率やBSの消費はレブラスのみだと多くなってくるようになっています。
これを見るとスタック30を狙うときよりも更に、真1の叩く回数を減らすとブラックストーンの消費数はあまり変化がないのに、濃縮の使用数がかなり変わるということが分かります。
S1.2の場合(23までレブラス)、出来上がる真2の平均が3.1個、真3チャレンジの平均が3.3回と差があまりないので、この叩き方をすると叩く真2がなくなることがあまりなくバランス良く叩けるんじゃないでしょうか。
真1を叩かずにレブラスか真2を叩く戦略は到達率はかなり優秀。ただ、真2を叩くためには真1を叩く必要があるというジレンマ。真2の数が増えすぎてしまった場合や早くスタックを貯めたい場合は有効な叩き方。
真1で結構頑張ってみるパターンのS3はかなりダメな結果。レブラスで27まで引っ張ってこれなので、基本的に真1を叩かないで済むならそれに越したことはないという感じですね。
スタック50 レブラスvs真1〜真3
ヴォルクス10入れて真4チャレンジあたりに使いたいスタックでしょうか。
私は今の所スタック50はイベントやクエスト等でもらったものでまかなえているので狙って作ったことはないですがw
比較した叩き方は下記。
- 全部レブラス
- 20までレブラス、32まで真1(4回)、40まで真2(2回)、50まで真3(2回)(S1.1)
- 23までレブラス、32まで真1(3回)、40まで真2(2回)、50まで真3(2回)(S1.2)
- 24までレブラス、33まで真1(3回)、45まで真2(3回)、50まで真3(1回)(S2.1)
- 21までレブラス、33まで真1(4回)、45まで真2(3回)、50まで真3(1回)(S2.2)
- 25までレブラス、34まで真1(3回)、50まで真2(4回)(S3.1)
- 26までレブラス、30まで真1(2回)、50まで真2(5回)(S3.2)
- 30までレブラス、50まで真2(5回)(S4)
S1は比較的オーソドックスな叩き方。S2は真1、真2でちょっと頑張ってみる。
S3は真3を使わないパターン。S4は真1・真3を使わないパターン。
ついにレブラス優勢が終わりを迎えました。ただし、レブラスより優秀な数字を出しているのは真3を叩いているS1,S2だけということに注意。スタック貯める上で真3を叩くのは非常に有効であることが分かります。
40まで貯めたあとに真3を叩くのはコスト的に確率的にもかなり優秀です。しかし、真4チャレンジ2.3回に対して出来上がる真3は1.1個と少ないのに注意。スタック40を作る過程で真3の期待値が大体1個なので、スタック40を作っていき真3が増えてきたら50以上を目指すという感じでやれば無理なくスタックを貯められそうな感じ。
スタック45まで真2で攻める場合は一気にコストが嵩みますが、真4C<真3なので、継続的に叩けます。
真3を叩かずにスタック50を目指す場合はかなり分の悪い戦いになりそうです。無論それまでに真3がかなり出来るので、スタック60、70と狙っていく際には有りかな?(検証してない)
まとめ
スタック40まではレブラスがコスパ最強
特にスタック30まではかなり優秀。ただし、副産物が一切得られないので更に高スタックを目指す場合は行き詰まると思われるので高スタックを目指す場合は真1も叩く必要がありそうです。
真1はスタック貯めるという目的で見た場合、レブラス以下
真1単体で見た場合、スタックを貯めるという目的ではレブラスよりも低い上に濃縮BSを使うのでかなり残念な事がわかります。
ただし、真2、真3は優秀なので、真1を叩く場合は、スタックを貯めるというよりは真2、真3を手に入れるためと考えて叩いたほうが精神衛生上はよさそう
真1を叩くなら23〜34あたりまでが有効そう
23未満だと濃縮の消費がかなり苦しい上に、真3チャレンジの回数に対して真2の期待値が大きすぎるので23〜25くらいまではレブラスで頑張ったほうが真2の出来上がる数以外は通常BSの消費も含めて優秀なケースが多いです。34を超えてくるとかなりカキーンといっちゃうのでこのあたりから真2を叩き出すほうが良さそう。
スタック30〜50の価値
スタック30:20〜30M
スタック40:50〜90M
スタック50:100〜250M
くらいと考えるのが妥当か。ただ、濃縮BSを2Mと考えているので、あくまで目安。
個人的には今後、スタック30は25M、スタック40は75M、スタック50は150Mと考えて費用とか考えていこうと思います。
ソースコード
メソッド関連
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
# 叩くもの情報
# 強化初期確率, 増加スタック, 使用BS(0=普通,1=濃縮), 出来る物
K_14 = [1/50, 1, 0, "+15"]
K_15 = [2/17, 2, 1, "真1"]
K_16 = [1/13, 3, 1, "真2"]
K_17 = [1/16, 4, 1, "真3"]
K_18 = [1/50, 5, 1, "真4"]
K_19 = [3/1000, 6, 1, "真5"]
# 70%を超えた計算は間違ってる
# 成功確率(武具)
def per(item, stack):
return item[0] + (item[0] * (stack/10))
# 強化
# 0~1のランダムな数が成功確率を下回っていれば成功
def challenge(item, stack):
return per(item, stack) > np.random.rand()
# 戦略に沿って目標スタックまで叩いて、使用したBS数、濃縮BS数、副産物を返す
# 戦略は[叩くアイテム, 叩く上限スタック]の連想配列
# 例: [[K_14, 20], [K_16, 30]]
# この場合は20まで+14を叩いて、30まで真1を叩く
def challenge_stack(start, target, strategy):
stack = start
res = {
"BS": 0,
"濃縮" : 0,
"+15" : 0,
"真1" : 0,
"真1C": 0,
"真2" : 0,
"真2C" : 0,
"真3" : 0,
"真3C" : 0,
"真4" : 0,
"真4C" : 0,
"真5" : 0,
"真5C" : 0,
}
while(target > stack):
item = select_item(stack, strategy)
if (item[2] == 0) :
res["BS"] += 1
else :
res["濃縮"] += 1
res[str(item[3]) + "C"] += 1
if(challenge(item, stack)) :
stack = start
res[item[3]] += 1
else :
stack += item[1]
return res
# 叩くアイテムを取得する
def select_item(stack, strategy):
for st in strategy :
if (stack < st[1]):
return st[0]
return
出力用(基本的に数字いじるだけなのでスタック50で使ったやつだけ)
# 戦略
# 順に指定スタックになるまで叩き続ける
sts = {
#全部レブラス
"レブラス" : [[K_14, 60], [K_19, 100]],
"S1.1" : [[K_14, 20], [K_16, 32], [K_17, 40], [K_18, 60], [K_19, 100]],
"S1.2" : [[K_14, 23], [K_16, 32], [K_17, 40], [K_18, 60], [K_19, 100]],
"S2.1" : [[K_14, 24], [K_16, 33], [K_17, 45], [K_18, 60], [K_19, 100]],
"S2.2" : [[K_14, 21], [K_16, 33], [K_17, 45], [K_18, 60], [K_19, 100]],
"S3.1" : [[K_14, 25], [K_16, 34], [K_17, 50], [K_18, 60], [K_19, 100]],
"S3.2" : [[K_14, 26], [K_16, 30], [K_17, 50], [K_18, 60], [K_19, 100]],
"S4" : [[K_14, 30], [K_17, 50], [K_18, 60], [K_19, 100]],
}
l = {}
# 試行回数
count = 200000
# 目標スタック
target = 50
# 開始スタック
start = 0
for k, v in sts.items() :
print(k)
ll = []
i = 0
while(count > i):
ll.append(challenge_stack(start, target, v))
i += 1
df = pd.DataFrame(ll)
l[k] = {
"BS" : df["BS"].mean(),
"濃縮" : df["濃縮"].mean(),
"+15" : df["+15"].mean(),
"真2" : df["真2"].mean(),
"真2C" : df["真2C"].mean(),
"真3" : df["真3"].mean(),
"真3C" : df["真3C"].mean(),
"真4" : df["真4"].mean(),
"真4C" : df["真4C"].mean(),
# 到達率 = 一発で成功した確率 = 副産物が1つもない
"到達率" : len(df[(df["+15"] == 0) & (df["真1"] == 0) & (df["真2"] == 0) & (df["真3"] == 0) & (df["真4"] == 0)])*100/count
}
data = pd.DataFrame(l).T
data