【メダロットS】ダメージ計算の試み #3
こんにちは。ダメージ計算検証記事の第3弾です。今回は防御時の耐性、回避、補助スキルレベルの影響について報告します。
成功、威力についての調査をした前回記事はこちら。
はじめに
冒頭で触れた通り、今回は防御時に的を絞ったうえで、被弾側の耐性、回避、補助スキルレベルの3つのステータスがダメージに及ぼす影響を調べました。以下では、、の3つのステータスをまとめて簡単に"耐性三値"と呼ぶことにします。
前回までの検証で次のことがわかっていました。防御時のダメージは攻撃スキルレベルと耐性三値をある値(、、、)におよそ固定したときで、
(1)
のように成功と威力の1次項の和で表されます。そうしてこの(1)式の-930という定数項が、固定していた耐性三値によるダメージの軽減項に相当すると予測していました。
この逆を行ったのが今回で、特定の成功、威力、攻撃スキルレベルの攻撃に対し、耐性三値を変化させてダメージ計測を行いました。その結果、、、のとき、近似式として
(2)
を得ました。ここでです。つまり耐性三値をまとめた新しい変数の2次関数として、これらの寄与を与えることができます。#1では耐性三値はそれぞれ線型近似の引数として見なしていましたが、このたびの詳細な追加検証によりその仮定と結果が覆されることとなりました。
また、ここまで当然のように三値と呼んできましたが、式(2)から明白なように回避も防御時のダメージ軽減に作用しています。かすり時に回避が高いと被ダメージが小さくなることは経験からわかっていましたが、これまでの検証では回避は防御時ダメージには影響しないとしていました。本検証において自身が衝撃を受けた結果の一つです。さらにこれまで暗黙のうちに寄与がないとしていた(被攻撃機の)メダルレベルも、ダメージに有意な影響を与えないことを確認しました。
こうして、式(1)と合わせて5つのステータスがダメージに与える作用が明らかになりました。あとは残りのステータスである攻撃スキルレベルの作用の調査、くわえて個別に変化させたとおよびを同時に変化させても問題ない式を立てることができれば、6つの変数を持ちあらゆる状況におけるダメージを予測することができる”完全なダメージ計算式”が、防御時においては完成することになります。
手法
セッティング
超襲来のvsテオドラベリル2にて、相手3番機が使用するスカソルを検証用の攻撃パーツと見なし、自身が出撃させた任意の格耐、回避、補助スキルレベルの機体で受けたダメージを繰り返し記録しました。各被攻撃機の詳細は以下の通りです(耐性三値に影響を与えないセッティングについては割愛しています)。
(A) ゲソカケシタLv90
(B) ジェットスラップLv90、格耐I*2、ヒコオLv3
(C) ミニスカートLv90、格耐III、格耐I
(C') オチツカンLv90、格耐I*2、ヒコオLv3、スピード(slv150/0時)
(C") モコモコLv90、スピード
(D) ダイコクチョーLv90
(E) ジャガーノートLv90
(F) ブラックオーラLv90、格耐II、ヒコオLv3、スピード(slv99/51時)
(F') アンビリカルLv90、スピード(slv150/0とslv99/51時)
(F") りゅうのねどこLv82、格耐II、格耐I、シオカラLv20
(G) カバレットLv90、slv150/0、99/51、0/99、0/150
(H) ダッシュアタック(ホプライト+75%)Lv90
(I) オスワリLv90、サケカースLv20
(J) ブラックスタッグ(メダチェンジ)Lv90、サケカースLv20、スピード、slv150/0、99/51、99/1
(K) ダッシュアタック(ホプライト+75%)Lv90、サケカースLv20、スピード(slv0/150時)、slv0/0、150/0、0/10、0/20、0/30、0/40、99/51、0/60、0/70、0/80、0/90、0/100、0/110、0/120、0/130、0/140、0/150
末尾のslvに続くa/bはそれぞれ被攻撃機の攻撃スキルレベルと補助スキルレベルを表しています。特に記載のないものはslv150/0、99/51、0/150の3通りの計測を行っています。以下補助スキルレベルnの被攻撃機(X)の標本を(X_n)と略記することにします。
(C)と(F)にはそれぞれ3種類の脚部がありますが、これらは同一の格耐を持っています。計測および記録が迅速かつ楽に行えるため、検証初期において同一格耐脚部=同一耐性脚部と見なした機体を同時に出撃させたわけですが、後に回避もダメージに影響するとわかりました。したがって、異なる回避値を持つこれらは同一耐性脚部ではありません。計測データの追加、異なる耐性三値を持つ標本として分離することも考えましたが、検証に深刻な影響を与えないと判断し、3機を単純平均した回避を持つ同一標本として扱いました(以下まとめて標本(C)、(F)とします)。同様の誤解により、一部の標本で意図せず性格スピードによる回避バフが行われました。こちらは回帰モデルの考慮を行ううえで多少邪魔ではあるというだけで、計算の障害にはなりません。
以上(A)から(K)までの11種の防御機体が持つ格耐と回避の実行値を表1と図1にまとめました。低耐性・低回避、高耐性・低回避、低耐性・高回避、高耐性・高回避の四領域を不足なく網羅するようになっています。
表1 被攻撃機の耐性・回避
耐性 | 回避 | |
---|---|---|
(A) | 236.8 | 1677.6 |
(B) | 548.4 | 2262 |
(C) | 548.8 | 649.1 |
(D) | 920 | 567.2 |
(E) | 924 | 0 |
(F) | 1472.9 | 1017.9 |
(G) | 1488 | 0 |
(H) | 2171 | 865 |
(I) | 2208 | 0 |
(J) | 2210.4 | 2674.8 |
(K) | 2807 | 865 |
超襲来、vsテオドラベリル2
プレイヤー側を被攻撃役とする最大のメリットは、メダロッターを含めた高い耐性を持つ脚部を用意することができる点でしょう。バフの効果が多大かつ発動が容易である脚部特性ホプライトを有するダッシュアタックを所持していたため、より高い方の耐性である格耐を活かした格闘スキルを使用する相手に絞って計測場所を探しました。
これも重要なことですが、相手が使用する攻撃パーツの種類は少ない方が望ましいです。今回は耐性三値だけを変化させたいため、攻撃パーツすなわち成功・威力は1組で構いません。記録を迅速に進めるために、目的の攻撃以外のダメージは捨てることになります。また、仕様上3倍速で確認できる情報は行動パーツではなく技であるため、同種技を持つ異種パーツが装備されている機体による攻撃は、基本的に候補から外れることになります。
超襲来のvsテオドラベリル2の相手の編成は図2から図4の通りです。ここに検証対象となる被弾役の3機を出撃させ、基本的にはオートでチャージ行動を連打、3機とも脚部破壊ないし機能停止するまで攻撃を受け続けることになります。
この際の相手AIの傾向として、1番機は終始火薬ガード、2番機はコンシール後はCG連打からのMFサバイバルをループ、3番機はほぼソード連打でまれに(特に初手)デストロイを打ってきます。すなわちほぼ1種の攻撃だけを浴びることができ、本検証に適しています。また、2、3番機ともに腕狙いの性格であるため脚部が残りやすく、1戦で多くのデータを取ることが可能です。サバイバルで削られる分の装甲が無駄であるため、MFcアブソーバー持ちのゴーストメダルがあれば、さらに効率を高められそうです。極めてニッチではありますが注意点として、どうも戦車脚部など一部の脚部相手にはデストロイを多用する癖があるようです。これは編成のガード装備の有無にも関係なく、およそ因果関係の想像がつきません。戦車以外と同時出撃させた場合も、戦車にだけ使用してきます。
収集データの扱い
#2から大きく見直した部分です。同一の耐性三値を持つデータの集合を一つの標本と見なし、統計的扱いを行うことで乱数によるダメージの誤差を排除します。luxさんの検証から、防御時のダメージは有限の幅を持つ一様分布であるとします。以下で説明する母集団を一様分布とした統計誤差の算出方法もluxさんのアプローチにならいました。
さて、繰り返しになりますがダメージは母平均、幅を持つ離散一様分布で与えられるとします(図5、これは離散というより連続になっていますが)。このというのが各ステータスを反映させた内部の計算式によって与えられる平均ダメージ、これにの範囲で乱数が掛かり、実際のダメージとして出力されているとするということです。
、ともに整数であるので、からまでの間には個の値があることになります。くわえて一様分布であることから、どの値を取る確率も等しくで与えられます。これで母集団について必要な情報がそろいました。
今度は検証におけるダメージ計測作業についてみていきます。仮定した分布から回ダメージを計測する作業を試行して得られたダメージの最小値を、最大値をとします。このときからまでの間には個の値があることになります。
すると1回の試行でこの間の値を取る確率はであり、これを回繰り返したときの確率はとなることがわかります。ここで、となる最小のを実験的に得られた母集団の幅とします。
また、平均は計測した最小値と最大値の単純平均すなわちで求め、その誤差はを母集団の最小値ないしを同最大値としたときの幅で付けています(図6)。このときを大きくするほどは速やかに小さくなり(十分起こりうる確率から遠ざかっていき)、の幅を限定することができる、言い換えれば標本サイズを増やすだけ誤差を小さくできるということです。
結果
取得全データ
今回取った、また解析に用いたデータを表2にまとめました。回避の*表記は異種の脚部ステータスを平均した値です。乱数幅(実測)は観測値のうち平均から最大・最小値が何パーセント振れているかを表しています。乱数幅(上限)はとなる最小のをパーセント表記しています。(複数の脚部がまとめられているものを除いて)実際には7.3%程度で最大・最小乱数を記録しており、精度の高い平均ダメージが得られていると考えています。
表2 取得データ一覧
耐性 | 回避 |
標本サイズ |
乱数幅(実測) |
乱数幅(上限) |
平均ダメージ |
誤差 | |
---|---|---|---|---|---|---|---|
(A_0) | 236.8 | 1677.6 | 69 | 7.26 | 7.73 | 3911 | 20 |
(A_51) | 236.8 | 1677.6 | 113 | 7.23 | 7.52 | 3520.5 | 11 |
(A_150) | 236.8 | 1677.6 | 65 | 7.17 | 7.67 | 2847 | 15.5 |
(B_0) | 548.4 | 2262 | 85 | 7.00 | 7.38 | 3591.5 | 14.5 |
(B_51) | 548.4 | 2262 | 70 | 7.13 | 7.58 | 2980.5 | 14.5 |
(B_150) | 548.4 | 2262 | 97 | 7.06 | 7.40 | 2047.5 | 7.5 |
(C_0) | 548.8 | 649.1* | 74 | 7.75 | 8.18 | 3808 | 19 |
(C_51) | 548.8 | 649.1* | 67 | 7.26 | 7.74 | 3308 | 17.5 |
(C_150) | 548.8 | 691.7* | 108 | 8.17 | 8.50 | 2626.5 | 9.5 |
(D_0) | 920 | 567.2 | 84 | 7.03 | 7.41 | 3527 | 14.5 |
(D_51) | 920 | 567.2 | 78 | 7.00 | 7.41 | 2935.5 | 13 |
(D_150) | 920 | 567.2 | 74 | 7.16 | 7.59 | 2110 | 10 |
(E_0) | 924 | 0 | 45 | 7.00 | 7.71 | 3598 | 27.5 |
(E_51) | 924 | 0 | 33 | 7.07 | 8.06 | 3026 | 32.5 |
(E_150) | 924 | 0 | 50 | 6.44 | 7.40 | 2297 | 14.5 |
(F_0) | 1472.9 | 1017.9* | 91 | 7.36 | 7.73 | 3143.5 | 12.5 |
(F_51) | 1472.9 | 1135.2* | 103 | 7.46 | 7.79 | 2347.75 | 8.25 |
(F_150) | 1472.9 | 1076.5* | 119 | 7.50 | 7.79 | 1446.5 | 4.5 |
(G_0) | 1488 | 0 | 42 | 6.97 | 7.73 | 3241 | 26.5 |
(G_51) | 1488 | 0 | 33 | 6.88 | 7.85 | 2520.5 | 26.5 |
(G_99) | 1488 | 0 | 45 | 7.05 | 7.77 | 2048.5 | 16 |
(G_150) | 1488 | 0 | 96 | 7.05 | 7.37 | 1689 | 6 |
(H_0) | 2171 | 865 | 74 | 7.16 | 7.59 | 2799.5 | 13 |
(H_51) | 2171 | 865 | 69 | 7.15 | 7.63 | 1943 | 10 |
(H_150) | 2171 | 865 | 76 | 7.19 | 7.63 | 1057 | 5 |
(I_0) | 2208 | 0 | 51 | 7.22 | 7.86 | 2860.5 | 20 |
(I_51) | 2208 | 0 | 54 | 6.94 | 7.52 | 2054.5 | 13 |
(I_150) | 2208 | 0 | 79 | 6.92 | 7.34 | 1206.5 | 5.5 |
(J_1) | 2210.4 | 2674.8 | 76 | 7.22 | 7.65 | 2597.5 | 12 |
(J_51) | 2210.4 | 2674.8 | 55 | 7.03 | 7.61 | 1670.5 | 10.5 |
(J_150) | 2210.4 | 2674.8 | 42 | 6.84 | 7.60 | 1030.5 | 8.5 |
(K_0) | 2807 | 865 | 80 | 7.13 | 7.53 | 2531.5 | 11 |
(K_10) | 2807 | 865 | 107 | 7.18 | 7.48 | 2306.5 | 7.5 |
(K_20) | 2807 | 865 | 75 | 7.28 | 7.72 | 2115 | 10 |
(K_30) | 2807 | 865 | 96 | 7.17 | 7.51 | 1944.5 | 7 |
(K_40) | 2807 | 865 | 105 | 7.11 | 7.42 | 1793.5 | 6 |
(K_51) | 2807 | 865 | 86 | 7.18 | 7.54 | 1637.5 | 6.5 |
(K_60) | 2807 | 865 | 111 | 7.23 | 7.54 | 1527.5 | 5 |
(K_70) | 2807 | 865 | 103 | 7.18 | 7.50 | 1414.5 | 5 |
(K_80) | 2807 | 865 | 113 | 7.15 | 7.44 | 1314 | 4 |
(K_90) | 2807 | 865 | 107 | 7.16 | 7.47 | 1221.5 | 4 |
(K_100) | 2807 | 865 | 89 | 7.14 | 7.51 | 1134 | 4.5 |
(K_110) | 2807 | 865 | 54 | 7.13 | 7.74 | 1052 | 7 |
(K_120) | 2807 | 865 | 53 | 7.32 | 7.97 | 984 | 7 |
(K_130) | 2807 | 865 | 56 | 7.02 | 7.60 | 947.5 | 6 |
(K_140) | 2807 | 865 | 74 | 7.21 | 7.66 | 916 | 4.5 |
(K_150) | 2807 | 865 | 73 | 7.31 | 7.78 | 882.5 | 4.5 |
(K_スピ_150) | 2807 | 1025 | 111 | 7.31 | 7.62 | 882.5 | 3 |
補助スキルレベルの評価
耐性と回避を固定し、補助スキルレベルをおよそ10間隔で変化させた(K_0)から(K_150)までのダメージを図7に示します。
ダメージは補助スキルレベルに対し単調減少するものの、変化率は一定ではありませんでした。全領域にまたがった直線性が否定され、これまでの成功、威力の寄与とは様相が異なることがわかります。また、ここには様々なメダルレベル・メダルランクの標本が混在していますが、その違いによってダメージに異常が現れることはありませんでした。同じ補助スキルレベル0でメダルレベル0と150とのダメージを比較した際も有意差はなく、メダルレベル・ランクのダメージへの寄与は皆無であると結論付けられます。
グラフは概ね下に凸の曲線の傾向を示しており、図7には2次関数でフィットした曲線を併記しています。ただし、この曲線と誤差の範囲で完全に一致するわけではないです(図8)。この不一致は単に多項式の次数を増やしても解決せず、指数関数や対数関数を適用しても解消されませんでした。完璧に合う単純な式がない、いわば頼れる回帰モデルがない現状では、いたずらに式を複雑にしても仕方ないため、以降も線型近似ができないものについては2次関数でのフィッティングを中心に議論を進めていきます。
耐性の評価
図9は戦車脚部(回避0)の(E_150)、(G_150)、(I_150)について耐性対ダメージでプロットしたものです。こちらも補助スキルレベルを変化させた時と同様、1次関数には従わず、観測範囲内で下に凸の傾向を示しています。どのような曲線と見なすのが妥当か判断するために、より広範囲で多くの点を加えたいところですが、回避の影響がノイズとなります。
回避の評価
耐性についての掘り下げをすると同時に、回避の影響を見ていく必要が出てきました。同程度の耐性と異なる回避を持つ4グループ((B)-(C)、(D)-(E)、(F)-(G)、(H)-(I)-(J))について、回避とダメージの関係を図10(補助スキルレベル150)に表しました。
第一に注目したいのが、異なる耐性間で比較して絶対値が異なるのは当然として、回避の変化に伴うダメージの減少量まで異なっている点です。より具体的には、耐性が低いならびにダメージが大きいラインほど、回避の上昇によって多くのダメージ軽減がなされています。
脚部のラインナップの関係で、回避は耐性以上に、一方を固定したまま広く複数変化させる操作の実行が難しいです。そんな中唯一同耐性で3点を確保した(H)-(I)-(J)のグループを見ると、回避についてもやはり下に凸の傾向が見えました。これが二つ目のポイントです。
耐性と回避の同時評価
ここまで寄与が1次でない、相互に影響する、広域かつ多点の確保が難しいといった事情が浮かび上がり、多少強引にでも耐性と回避を組み込んだ議論に移っていく必要が生じました。
ではどのように2変数を扱うかですが、結論から書くと、耐性と0.2を掛けた回避の和を取ったものを、ダメージについての新たな独立変数とするとうまくいくことがわかりました(図11)。
この変換は定性的には、耐性、回避ともに下に凸の減少関数であること、一方の増大に伴って他方の寄与も小さくなることを反映します。
こうして並べることでいずれの補助スキルレベルにおいても一部の点を除いて単調減少となり、寄与の評価の見通しが良くなりました。さらに同時評価が可能となったことでより広い領域で多くのデータを並べることができ、下に凸の2次関数で近似することの妥当性が強化されました。一方で補助スキルレベルの評価と同様に、誤差で説明できない近似値からのずれが確かに存在しています。
耐性三値の同時評価
回避の組み込みが片付いたところで、いよいよ耐性三値を同時に評価していきます。
ここで耐性-回避を横軸に取った図11に立ち返ると、近似曲線の係数が異なる補助スキルレベル間で変化していることがわかります。これは耐性-回避の寄与と補助スキルレベルの寄与が単純な和では表せないことを意味します(もし和であれば縦軸方向に曲線を平行移動させたようになります)。
和の次に簡単な積はどうでしょうか。実はこれがそれなりにうまくいきました。その話の前に、補助スキルレベルについて改めて見ておきます。図12は点の多い(K)に加えてその他の耐性・回避を持つ標本についても補助スキルレベルの評価をしたグラフです。図11と図12に共通するのが、複数並んでいる曲線を横軸の負方向に伸ばしていくと、どれも似たような場所で交わるということです。
たとえば図12を見ると、x座標が-70の周辺で4本の曲線が互いに交わる、すなわち同程度のダメージを返すことが予想されます。実際のゲームではスキルレベルを-70に取ることはできませんが、この外挿には解析上の意味があります。それは補助スキルレベルが-70であるとき、耐性-回避のダメージへの影響はゼロになることを示します。図8についても同様の論理を適用できます。
これらの状況証拠を必要条件とすることを出発点として立てた、ダメージの近似式が式(2)です。
(2)
ここでです。耐性と(補正を掛けた)回避に補助スキルレベルを掛けたものの2次関数となっています。これは耐性三値の寄与を一つにまとめた新たな独立変数を持つような式と見ることもできます。実際にこの新しい変数を横軸に取ってグラフにすると、全データが概して一本の曲線上に並びました(図13)。実測値の近似値からのずれはおよそ100程度に収まり(図14)、今後ダメージ予測に応用していくうえで問題にならない程度の差だと考えています。
考察
回帰モデルが見つからない原因
今回独立に行った補助スキルレベル、耐性・回避のいずれにおいても寄与は曲線となり、かつ誤差範囲内で完全に従うような近似式を見つけるに至りませんでした。これには今も頭を悩ませています。測定しているデータがある計算式によって導かれたものであれば、(乱数の影響を排除した)測定データはそのまま元の計算式に従うはずだからです。
まずデータに不備がないかですが、サイズ不足により最小・最大乱数にほど近いダメージを記録できていないと思われる標本はいくつかあります。しかし防御時の乱数幅が±7.4%以下であるという立場からは、そのいずれについても真の平均値が誤差範囲内に十分含まれていると言え、ずれを説明する材料にはなり得ません。
次の可能性として、今回近似を試さなかったより複雑な式でゲーム内の計算式が与えられているということが挙げられます。図8や図14を見ると、2次近似に対して振動するような振る舞いが確認できます。これはより高次の項を加えたり、複数の異なる型の関数を組み合わせたりすることで少なくとも限定的には説明できそうではあります。しかしながら内部の式をいたずらに複雑にするのは、ゲームの開発・運営をする側からは邪魔になるとしか思えません。たとえば2次多項式関数の弊害として、頂点を境に寄与の正負が逆転してしまう問題があります。これに対し、うまく3次に増やしてやれば単調減少にすることができますが(これはこれで問題も持っていますが)、せいぜい増やしてそこまでではないでしょうか。
現在もっともらしいと見ているのは、変数あるいはダメージの範囲に応じて計算式が変わるという説です。開発側からすればこれはこれで面倒事はありそうですが、負のダメージが生じないといったような調整がもしかしたらやりやすいのかもしれません。しかし、この説は検証側からすれば厄介極まりない代物です。そもそも全領域での回帰を否定したうえで、式の境界条件(変数、その値)から各式そのものまで、莫大で精緻な調査を要求されることになります。直線のみの折れ線方式ならともかく、もし複数の曲線が滑らかにつながっているとなると、その証明は実質不可能ではないかと思います。正直やる気がしないです。
耐性三値とかすり、ヒット、クリティカル
防御時のデータとともに、その他の攻撃結果についての記録もしており、散らかりはあるもののある程度の集積ができています。解析作業がいつになるかわからないため、先に記録作業における肌感覚をごく簡単にですが書いておくことにします。
3種の攻撃結果時では防御時と同様に、耐性三値が相互にダメージ軽減に働いているようです。本検証で用いた近似式では耐性と回避の寄与が5対1でした。同様の式で類推すると、回避に対する耐性の寄与の割合は防御>ヒット、クリティカル>かすりといった感じではないかと思います。
また、膨大な記録作業を通じて強く感じるのは、耐性三値の攻撃結果の抽選確率への多大な影響です。これも具体的な数字は出せませんが、同じ補助スキルレベル0でも超高耐性脚部だと大抵防御しますし、他方同じ補助スキルレベル150でも低耐性・低回避だとヒット、クリティカルが目に見えて増えます。その逆もまた然りです。耐性三値のこうした影響は、被ダメージを総合的に見たときにダメージ軽減効果以上に大きいのではないでしょうか。
今後の展望
まずはこのまま防御時のダメージ計算式の完成を目指したいところです。残る手付かずのステータスである攻撃スキルレベルの影響の調査、そして個別に調査を行った変数の関係性のチェックが必要になるでしょう。
耐性三値評価のブラッシュアップも課題です。今回でいうと(B_150)など、どう近似しても外れ値となる点がいくつか存在しています。その周辺を探るなどして原因が見つかれば、より良い近似ないし根拠のある回帰モデルの確立ができるかもしれません。また、曲線というのは直感的に理解しにくいところがあるため、領域で分けるなどしてより実用に即した簡易な近似ならびに計算式の立案も考慮しています。
まとめ
今回は防御時における耐性、回避、補助スキルレベルのダメージへの影響を調査しました。その結果、これらの寄与は1次では説明できず、下に凸の曲線としてふるまうことがわかりました。2次多項式関数として立てた近似式は、広域で計算式として問題ない精度を返します。一方で内部の計算処理ははっきりしないままであり、今後も耐性における検証の余地があります。シリーズを通して残す未検証ステータスは攻撃スキルレベルのみとなり、6変数すべてを含む完全な予測式の完成が見えてきたといえます。
おわりに
寄与が1次でない、回避も影響するなど、今回はあらかじめ立てた仮説や予想が覆される結果が続出で、そのたびに仮設の立て直しと再検証を強いられる大変で面白い作業でした。報告に当たっては、なるべくそうした紆余曲折の苦労を排除して見通しを持った視点からの執筆を心掛けました。とはいえ誤解を招く表現や、重要事項の書き落としも多くあると思いますので、どうぞご指摘、ご質問ください。