DPS予想3

いま、通常放置したときのDPSの予測値を出すという事を色々試している。
最初の実験では「訓練用武器」「クリなし」「グロなし」「ミスなし」「チェインは1つのみ」というとてもシンプルな状況を想定し、予測値と実際の値が合致することを確かめた。今後、これらの制約を少しずつ外していくつもり。

今日は「訓練用の武器」を普通の武器に持ち替えてみる。これによって与ダメにバラつきが生じることになる。そうなると、以前のような確率分布の95%信頼区間という手法は使い難くなってくる。

そこで今回は、シミュレータで仮想的にダメを発生させ全与ダメを計算する、ということを10万回行い、ダメの分布を見てみることにする。

シミュレータと言うと少々大げさだけれど、実際には乱数を発生させているだけなので、プログラムはこんな感じ

N = 100000  # 実験回数
sec = 2*60  # 時間 (sec)

d1 = [169,176] # 通常攻撃ダメ
d2 = [398*2, 413*2] # SSダメ
q  = 0.15*1.3       # SS発動率
sp = 0              # 攻撃速度上昇

n = (sec/(1.3*13/16/(1+sp*0.01))).to_i

$frand=Random.new()
def occ(q)
  $frand.rand(1.0) < q
end

def dmg(atk, na, nb, ra, rb, q)
  sum = 0
  atk.times do
    sum += rand(na..nb)           # 通常ダメ
    sum += rand(ra..rb) if occ(q) # リアクションダメ (pは発動率)
  end
  sum
end

result= N.times.map { dmg(n, *d1, *d2, q) }

result.each do |d|
  print "#{d}\n"
end

dmgの部分で2分間分のダメージを計算している。

このプログラムで
通常攻撃のダメ 169-176
チェインのダメ 398*2 - 413*2
チェイン発動率が0.15*1.3
攻撃速度 0%

という設定で計算させてみた結果がこちら。
f:id:ochanikki:20190125234206p:plain
横軸が全与ダメで縦軸が頻度になっている。大体 35000-40000くらいになると思って良さそう。これを120で割った値がDPSの予想値となる。

実測

となると、こんどは実際に敵を叩いて実測値を取ってみたいところだけれど、その辺の話はまた後日。