モンクDPS予想2

DPS予想プログラム

前回の日記で書きかけだったDPS予想プログラムを完成させた。

こんな感じ

N=10000                  # 実験回数

FB=0.45*(1.21+0.05)      # FB発動率
BB1=0.05*(1.21+0.05)     # BB発動率
BB2=BB1+0.45             # BB発動率(FBからの発動)

DM_N  = 371              # 通常攻撃与ダメ
DM_FB = 824              # FB与ダメ
DM_BB = 1396             # BB与ダメ

ST_N  = (2+1)*1.3*1.3    # 通常攻撃スタミナ
ST_FB = (4+1)*1.3        # FBスタミナ
ST_BB = (6+1)*1.3        # BBスタミナ
TM_N  = 1.04             # 通常攻撃の時間
TM_FB = 0.53             # FBの時間
TM_BB = 0.53             # BBの時間
CRI=0.8                  # クリ率
CRI_DM=1.5+1.0+0.07      # クリダメ増
GRO_DM=1.0+1.2           # グロダメ増
MaxStamina = 280         # かかしの最大スタミナ

DM_Hash={:normal => DM_N, :fb => DM_FB, :bb => DM_BB}
ST_Hash={:normal => ST_N, :fb => ST_FB, :bb => ST_BB}
TM_Hash={:normal => TM_N, :fb => TM_FB, :bb => TM_BB}

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

# 攻撃の種類を決める
def at_type(prev)
  case prev
  when :start
    return :normal
  when :normal
    return :bb if occ(BB1)
    return :fb if occ(FB)
    return :normal
  when :fb
    return :bb if occ(BB2)
    return :fb if occ(FB)
    return :normal
  when :bb
    return :fb if occ(FB)
    return :normal
  end
end

def sim (max_time)
  type=:start
  stamina=MaxStamina
  gro_time=0
  time=0
  total=0
  
  while time < max_time
    type=at_type(type)
    dm = DM_Hash[type]
    dm *= CRI_DM if occ(CRI)
    if time <= gro_time then   # グロ中
      dm *= GRO_DM
    else                       # グロ中でない
      stamina -= ST_Hash[type]
    end
    total+=dm.to_i
    time  +=TM_Hash[type]
    if stamina < 0 then
      stamina = MaxStamina
      gro_time = time + 5      # 5秒間グロ
    end
  end
  total
end

N.times do
  p sim(2*60)
end

てかプログラム長い><
これまでは、シミュレート回数を10万回でやっていたけれど、処理が重いので1万回に減らした。そして、このプログラムを使って2分間かかしを通常放置で叩くシミュレートをした結果がこちら。
f:id:ochanikki:20190217232446p:plain
横軸が総与ダメで縦軸が頻度。与ダメは大体 320,000 - 420,000 くらいに収まる感じ。

実測

そしたら、実際に叩いてみたらどうなるかが気になるところだけれど、やってみた結果がこちら。

310,873
338,954
303.108

んー。正直外れていると言えば外れてる。ただ、この実験をしたのは結構夜遅い時間で、実験中も通信遅延でキャラが結構止まっていたりした。なので、そのせいで1割ぐらい下がったんだと考えれば、一応つじつまは合っている。

やはり、鯖の空いている時間帯に実験しないとだめみたい。