単発攻撃と複数回攻撃の話(2)

※この記事は,ジャスティスド以前に書かれた記事です.ジャスティス後に通用する場合は十分ご注意ください※

ん~,すっかり間が空いてしまいましたが,複数回攻撃の話パート2です.

ブログはある程度まとまった内容がないと更新しませんが,「くそ忙し~ゲロゲロ」みたいな話はtwitterに流しています.ここ本拠地ブログでも左側のウィジェットで確認できますので,必要な方はご利用ください.同じ内容がFacebookでも確認できます.

本来ならば,Windows Liveのプロフに連動していて欲しいものですが.残念ながら今後両者が接続される可能性はほぼゼロだと思います.実は,かつてWindows Liveとtwitterが接続していたことがあったのですが,比較的短期間で接続できなくなったという経緯があります.次郎の無責任な憶測では,接続方式についてMicrosoft側とtwitter側で意見が合わなかったんじゃないかと思いますが.

さて.

当初の予定を変更して,二回目でシミュレーションに入ります.

条件としては,

  • 最大攻撃力:10,000
  • 熟練度:75%
  • クリティカル:なし

で,1,000回攻撃した時の攻撃力です.クリティカルを除外したのは,とりあえず,

「複数回攻撃の効果を知りたいから」

ということで,ご了承ください.クリティカルを含んだ場合のシミュレーションは後日ということで(気が向いたら).

この計算を1~6回攻撃の場合について調べてみます.ただし,2回攻撃の時は,10,000/2の攻撃力で,3回攻撃の時は,10,000/3の攻撃力で,というように,攻撃回数によってトータルの最大攻撃力が変わらないように調整します.

間違いやすいので,しつこく繰り返しますが,2回攻撃とは,攻撃力10,000で二回攻撃するのではありません.半分の攻撃力(5,000)で二回です.4回攻撃とは,1/4の攻撃力(2,500)で四回です.

 

$MAX_ATK = 10000;
$MIN_ATK = $MAX_ATK * 0.75;

for ($times = 1; $times <= 6; $times++) {
  for (1..1000) {
    $atk = 0;
    for (1..$times) {
      $atk += ($MIN_ATK + rand()*($MAX_ATK - $MIN_ATK))/$times;
    }
    print "$times, $atk\n";
  }
}

 

これが実際のコードです.perlです.

子供も作文程度のコードなので,見せびらかすほどのものではありませんが,具体的に何をやったのかを説明するのに一番効果的なのがコードの公開ですのでね.よく,「何得意げに見せびらかしてんの?自慢ですか??プゲラッチョ」などと絡んでくる厨学生がいますが,そういうことで公開してるわけじゃないので.具体的に何をどうやったのかを公開もしないで,他人様に信用して貰おうなんて図々しいにもほどがありますよ.

最大攻撃力は10,000,熟練度が75%ですので,攻撃力は7,500~10,000の範囲でばらつきます.1,000回繰り返した結果,どれだけ攻撃力が何回出現したかを調べる方法として,「ある値以上の攻撃力が出てきた確率」を調べます.

※前回は,「ある値以下」で考えたのですが,ここでは華麗にスルーしますw

具体的には,攻撃力の範囲7,500~10,000を10分割して250とし,7,500+250以上,7,500+500以上,というように区間でカウントします(その方が楽だからって話ですけど).ただし,ヒストグラムじゃないんで「7,500~7,500+250の攻撃力の回数」という区間の集計ではありません.あくまでも,7,500以上,7,500+250以上,7,500+500以上の回数です(だから,重複ありです).

そうやって集計した結果を次の表に示します.

表:複数回攻撃の効果

攻撃力 1回攻撃 2回攻撃 3回攻撃 4回攻撃 5回攻撃 6回攻撃
7,500以上 100% 100% 100% 100% 100% 100%
7,750以上 90% 98% 99% 100% 100% 100%
8,000以上 80% 91% 96% 99% 99% 100%
8,250以上 70% 84% 87% 92% 94% 95%
8,500以上 59% 71% 71% 72% 78% 80%
8,750以上 49% 52% 51% 49% 50% 51%
9,000以上 41% 32% 29% 25% 22% 21%
9,250以上 31% 20% 12% 9% 6% 5%
9,500以上 22% 9% 4% 2% 1% 1%
9,750以上 12% 2% 0% 0% 0% 0%
10,000以上 0% 0% 0% 0% 0% 0%

 

スプレッドシート(表計算ソフト)なんかに読み込ませて,countifでカウントするのが楽でしょう.GoogleやWindows Liveなどには無料で使えるスプレッドシートがありますので,そっちを利用するのも良いですが,流行りはLibreOfficeでしょうかね.さらに,ポータブルで使うのがクールでしょうか.

もちろん,この集計までもperlにやらせても構わないんですが,どうせ一回ぽっきりの使い捨てコードですので,集計部分を書き足してチェックすることを考えると,別ソフトで集計やらせたって手間は変わんないじゃん!というところです.しかも中間データがスプレッドに残れば使い回せる可能性もありますし.

おっと,ここまで書いて気がついたのですが,実際のMapleStoryでは,端数切捨てでやってるはずですが,うちの集計では四捨五入でやっちゃいました.まあ,大勢に影響はありませんが,一言お詫びしておきます.今から集計(とグラフ化)をやり直すのが面倒くさいので勘弁して下さい.

で,この結果のグラフをしますとこうなります.

複数回攻撃の効果  図:複数回攻撃の効果

どうですかね,分かり難いでしょうか?

朱色の線は攻撃力10,000の一回攻撃です.攻撃力は一様乱数で決まりますので,最小攻撃力の7,500から最大攻撃力の10,000にかけて直線で下がります(理論上).つまり,最小攻撃力以上になる確率は100%,最大攻撃力以上になる確率は0%,その半分の攻撃力ならなら50%ですね.

このグラフから,複数回攻撃にすると高い攻撃力と低い攻撃力が出難くなっていることが分かります.

例えば6回攻撃を見ると,8,000以上の攻撃力が100%ですので,8,000未満の攻撃力は1,000回の観測では一回も出なかったということになります.また,9,500以上の攻撃力もほぼゼロ(正確には1,000回中5回観測の0.5%)ですので,9,500以上の攻撃力もほとんど観測できなかったということです.

つまり,

  • 最大攻撃力10,000
  • 熟練度75%

の場合,理論上7,500~10,000の範囲で攻撃力がバラつきますが,最大攻撃力を1/6で6回攻撃すると,攻撃力のばらつきの実質的な幅は8,000~9,500まで狭くなるということです.

ただし,全体の平均は増えも減りもしません.複数回攻撃にしても,同じです.熟練度が上がった場合,最小攻撃力が底上げされるので,平均値も上がって幅が狭くなるのですが,攻撃を複数回に分割しただけで攻撃力の平均値が上がりはしません.これは,実質的な最大攻撃力を下げて,実質的な最小攻撃力を上げているということです.

これによって,より高いHPの敵も一確で狩れるようになります.

敵の防御率を無視した場合で考えます.1回攻撃では,8,000以上の攻撃力は80%の確率で出てきます.これが6回攻撃だと100%です.HP8,000の敵を狩る場合,1回攻撃では一撃で倒せる確率は80%ということになり,20%(5匹に1匹)は狩り残しが出てしまいます.一方,6回攻撃の場合,一撃でほぼ100%倒せることになります.

つまり,1回攻撃だと一確の敵はHP7,500ですが,6回攻撃だとHP8,000の敵も一確と言えます.

ただし,これはあくまでも「実質的」な話であり,「理論上」の話ではありません.6回攻撃で,HP8,000の敵を狩り残してしまう確率が非常に低いというだけで,ゼロというわけではありません.何万匹も狩っていれば,数十匹くらいは狩り残してしまうでしょう.しかし,その程度ですので,実質的に問題にならんでしょう.

また,この副作用(?)も忘れてはいけません.1回攻撃では9,500~10,000の敵を一撃で倒せる可能性が20%もあったのに,6回攻撃になるとほぼ絶望的になってしまいます.火力自慢で,「○×を一撃で倒したぜ~」なんて言いたい人にとっては,複数回攻撃は余計なお世話ということになりますね.

さてさて.

グラフ見ての最初の感想は,「2回攻撃でも結構影響がデカイなぁ」でした.やっぱりシミュレーションやって良かったなぁと思いますわ.つくづく.

しかし,一確の底上げという意味では,効果が実感できるのは3回攻撃からではないでしょうかね.また,攻撃回数が増えるにつれて効果が収束に向かっていて,5回攻撃と6回攻撃ではほとんど差がありませんでした.サベッジスタブの6回攻撃が一応の上限でしょうかね.10回攻撃なんてスキルがあっても,無駄に重たくなるだけだってことです.

では,まとめに入ります.

  1. 複数回攻撃になっても,攻撃の平均値は変わらない.
  2. 複数回攻撃にすると,実質的な最大攻撃力が下がり,実質的な最小攻撃力が底上げされる.
  3. 実質的な最小攻撃力の底上げに伴い,より高いHPの敵も一確で狩れるようになる.
  4. その反面,高いHPの敵を一撃で倒せる確率は減ってしまう.
  5. 火力の安定性の効果は,攻撃回数が2回になっただけでも十分にある(次郎の感想).
  6. 攻撃回数が6回以上に増えても,火力の安定性という意味での効果は頭打ち(見た目の派手さや鯖の負担増には効果あり).
  7. 3回攻撃で,実質的な最小攻撃力は10%底上げされる(攻撃力のばらつきの幅は20%減).
  8. 6回攻撃で,実質的な最小攻撃力は20%底上げされる(攻撃力のばらつきの幅は40%減).

今回のシミュレーションでは,攻撃回数を振ってその効果の変化を調べたのですが,現実には,スキルによって攻撃回数は固定ですので,「攻撃回数が増えると~になる」という言い回しには違和感があります.が,まあ,そういう表現になってしまうのも致し方ありません.ご了承ください.

広告

コメント / トラックバック3件 to “単発攻撃と複数回攻撃の話(2)”

  1. モンパデュオ狩り考~1 « 次郎宗光の本拠地@WordPress Says:

    […] 「100%三回攻撃」と「300%一回攻撃」とでは,予ダメの分布がまるで違ってくるのですから. 参考記事:単発攻撃と複数発攻撃の話(1),単発攻撃と複数回攻撃の話(2) […]

  2. Evange Says:

    なんだろ…宗光さんの本領発揮というか…なんかすごいしか言葉しか出てこないです。
    過程が?(´・ω・`)?みたいな感じでも最後にしっかり要約して書かれているので分かりやすいですね。

    てか私はいつの間にコードが読めなくなったの…勉強しないと忘れちゃいますね。

    この前、最新型のAレイを体験しましたが使い勝手は悪くなったかなーって感じです。BB前のにくらべたらすごく進化したとも言えるのでしょうが…完全に対複数目標スキルに生まれ変わってますね。
    私としては弾道の偏向がなくなって直線番長になったのが残念と言ったところでしょうか。
    多くの人が気にしてるであろう火力面はやはり気にしなかったEvangeでした。
    それと、いつも解説ありがとうございます。
    多忙な日が続いておられるようですが寒い時期になりましたのでお体にお気を付けて…

    • 次郎宗光 Says:

      フリーさん,毎度どうもです^^

      Aレイが貫通弾になったことについては,別途記事を用意しています.仰る通り,完全に対複数目標スキルですわ.従来の散弾タイプよりもずっと破壊力があります.

      ジェネが残念なスキルになって,QEも相変わらずですので,四次聖魔はAレイ一本で食ってかなきゃならんので,どうやったら面白く狩を組み立てられるか,そればっかり考えてますけど,まだ答えは見えてきません><


コメントを書く:匿名のコメントも歓迎しますが,名前欄が空欄だと自動的に承認待ちになってしまいます.名前欄には,なるべく文字を入れて下さい.

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。