ドラクエ先攻確率計算機2011/7/31僕が昔作った「ドラクエ8先攻確率計算機」が最近一部で話題になっていたようです。あれはドラクエ8とPS2版ドラクエ5に当てはまる計算式に従い、2005年2月20日に作ったもの。昔はこんなこともやってたんだよという昔話を騙った数学の話をこれからしますので、軽くスルーしてください。■■素早さ決定システムの前提(1)あるキャラの素早さをxとする。敵味方の各キャラは戦闘開始時に、「x≧n>x/2」となるnを(ランダムで)取る。(2)戦闘に参加している敵味方全キャラのnを見比べ、数字の大きい順に行動をとるここでnを「持ち点」と表現します。素早さ8のキャラの持ち点は5,6,7,8のどれかになり、素早さ6のキャラは4,5,6のどれかになります。素早さ6では、素早さ8のキャラの方が先攻する確率は高く、前者が5、後者が6を引いた時のみ前者の後攻になります。上記の2つに加えてもう1つ条件を付けますが、これはあくまで「仮定」です。(3)互いのnが同じ値をとった場合は、どちらが先攻するかの確率は5割/5割になる例えば上記の素早さ8と素早さ6の例では、互いに5あるいは互いに6を引いた状態がこれに該当します。■■計算の考え方これ以降、以下のように○・△・×記号を使って説明していきます。「素早さが早いキャラがより低い持ち点を得て後攻する」=×また、2人のうち素早い方のキャラの素早さをa、遅い方のキャラの素早さをbとします。プロセスの数式化まず素早さ8のAさんVS素早さ6のBさんの例で考えてみます。各々が取りうる持ち点を取った時の結果を表でまとめます。次に素早さ10のAさんVS素早さ8のBさんではどうか。これらの例を元に一般化します。Aさん(素早さa)のBさん(素早さb)に対する先攻率を出すには、○の数を数えて「○の数と△の数と×の数の和」で割ればいいことになります。○の数を考えるには、正直に○を数えるよりも、△と×を数えた方が早そうです。簡単な△の数から数えます。上の図を見れば図形的にb-a/2であることがわかります。縦に見たときに最も×が多い列は当然一番右端であり、そこに並ぶ×の数は必ず△の総数より1少なくなります。△の数をtと置くと、×の総数は「1~tまでの総和」、即ち(t-1)t/2であることがわかります。最後に、○と×と△の合計は、図形全体を長方形としてその面積を考えて(a/2*b/2)となります。以上より○の個数が出ます。(a/2*b/2)-(t-1)t/2-tです。○の状態になる「確率」Pは、上記を全体の事象数で割って、P={(a/2*b/2)-(t-1)t/2-t}/(a/2*b/2)と表現できます。以下展開・整理していきますので、追いたい方は※印を参考にしてみてください。大きい時、(4b-2a)/2abは0に近いため近似した以上より、a>bのとき素早さaのキャラが素早さbのキャラに先攻する確率PはP=1-(2b-a)2/2ab基本的な理論は以上です。ちなみに展開の最後の近似は、確か頭の中で暗算する際に便利という用途だったと思います。電車の中とかでぱぱっと計算する際とかに。以下の疑問点が残ります。+素早さ8の場合、取り得る値の範囲は5~8か、4~8か。+素早さが奇数の場合のとりうる値の範囲はどうなるか。+取った値が同じだったばあいどちらが先攻するのか僕の予想は「実はnが自然数だけでなく小数点以下も取る」というもの。逆にそうでない場合は、aとbが小さい時は計算結果がぶれるはずです。最近てかさんという方が実証実験されたようで、どうやらこの6年前の仮定は大体合っていたようです。最近こういう地道な調査をする人あんまりいなくなったよね。追記ん、もしかしたら途中で近似した理由の1つはパクり防止だったかも。式の導き方を公開しなかったのも。(mixiでこっそり公開してた)当時極限で調べたことってことごとく他のサイトにパクられていったからね。すごかったサイトは一字一句コピペしたのを「これは私の兄が考えたものです」って言い張ってた。今でも、RTAのレポートとかで「○○の情報はどこどこのサイトを参考にしました」とか書いてあるものの中に、それ元々は僕が調べたのになあ...ってのが結構あったりなかったり。一般論として、そういう環境下では公開する気も失せるよね。17:06興味深く読ませていただきました。先攻後攻決定プロセスの数式化の演算式に誤りがあるようです。>>以上より○の個数が出ます。(a/2*b/2)-(t-1)t/2-tです。最後の項である-tは△の個数ですが、素早さ決定システムの前提の(3)でnが同じ値をとった場合は、どちらが先攻するかの確率は5割/5割になると定義されてますので、-t/2でなくてはならないかと思います。式を整理すると(近似をしなくても)P=1-(2b-a)^2/2abとなり、同じ素早さでは先攻率が50%になり違和感がありません。余談ですがnは(同値の場合2回判定の必要な)自然数ではなく浮動小数でソートされてると仮定しても、式はP=1-(2b-a)^2/2abとなるため、いずれにせよこの式である蓋然性はとても高いと思われます。08:13>noneさんあ、ほんとでした。08:13>noneさんあ、ほんとでした。01:51こんにちは。いつも楽しく拝見しております。計算式の近似についてコメントにタイプミスがあるようです。無視できるのはa,bが十分大きいときではないですか。最初の例で図から数えたときと式で計算したときは結果が割と違います(75%と83.3%)。01:51こんにちは。いつも楽しく拝見しております。計算式の近似についてコメントにタイプミスがあるようです。無視できるのはa,bが十分大きいときではないですか。最初の例で図から数えたときと式で計算したときは結果が割と違います(75%と83.3%)。