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%
という設定で計算させてみた結果がこちら。
横軸が全与ダメで縦軸が頻度になっている。大体 35000-40000くらいになると思って良さそう。これを120で割った値がDPSの予想値となる。
実測
となると、こんどは実際に敵を叩いて実測値を取ってみたいところだけれど、その辺の話はまた後日。