このブログ内を検索可能

2017年9月3日日曜日

モンパレ 魔王強敵の平均スカウト率

掲示板でこんなのを見かけた。
「計算してみたが、平均で44回目(4.5%)でスカウトできるみたいだ。全キャラ同出現率と仮定した場合、支給スタミナ引いて1.6万課金すれば全キャラゲットできる計算になる。」
果たしてこの計算は本当にあっているのか?

みたところ、この問題は普通の学生ではちょっと難しそうな数学の問題にみえなくもない。
しかし我はこういう問題を見るとわくわくする。

こんな事象があるとする。
0.002の確率で起こる事象Aがあるとして、これが起こらなかった場合0.001が加算されていく。
このとき、平均で何回事象Aが起こり続けないか。

一応どんなモンスでも、この事象Aと同じで、同じモンスター2体目でもそれは変わらないので、
平均の値は変わらないであろうことが予想される。

さてその肝心の事象Aの起こり続けない確率である。
ここはちょっと例を出すのがよさそう。
Aが0回まで起こり続けない(=1回目でスカウト) 0.002
Aが1回まで起こり続けない(=2回目でスカウト) 0.998*0.003
Aが2回まで起こり続けない(=3回目でスカウト) 0.998*0.997*0.004
Aが3回まで起こり続けない(=4回目でスカウト) 0.998*0.997*0.996*0.005

Aがn-1回まで起こり続けない(n回目でスカウト) 0.998*0.997*…*(1-0.001n)*0.001*(n+1)
ということになる。

ここで分かりやすくするために、確率分布を表示してみる。
ここではnとしてありえない実数に範囲を拡張しておく。
f(n)=0.998*0.997*…*(1-0.001n)(0.001n+0.001)
すると…なんかややこしい式が出てくる。
一応近似を与えているんだが…。
(1.001*((-1)^n)*e^(-6.90776*n))*(0.001*n+0.001)*Pochhammer[-999,n]
(ちなみにeは自然対数で、(1+t)^(1/t)->e)
                                                            t->0
はあ…この式、普通は理解できない、ていうか我すら実際にPochhammerとか使ったのは初めて。
なんか数学の演習問題にPochhammer記号を用いた問題とかあったが…。

それでPochhammerとは相乗の逆数で、たとえばPochhammer[10.8]とすると、
1/(10*9*8)=1/720を表す。
なのでPochhammer[-999,n]は-999*(-1000)*(-1001)*…*(-999-n)ということになる。

思ったんだが、一応これは近似なので、たとえばnを1から5で考えてみると分かるが、
nの値   真の値  近似
1 0.002           0.00199999
2 0.2994          0.00299397
3 0.003980024      0.00397996
4 0.00495512988     0.00495503
5 0.00591642507672   0.00591628
どうやら、小数第6位までは正確な近似が5まででは得られている。
だがしかし。
これをnに対してグラフにしようとすると、計算ソフトが受け付けない。

ということは…。計算で求まる…?そんなばかな。あのwolfram言語ですら
先にproductを数値化してからplotに代入せよ的なことを行っている気がするので。たぶん。

それでこの式を入れると、やっぱり例のPochhammerを含むやつが出てくる。
一応この値は近似で正しいが、式がややこしすぎてplotが受け付けない。

こういうとき真のmathematicaがあればなんとかなるかもしれないが…。
いやあ計算してみたといっているが、きっと家に高額なmathemaicaを置いている
数学好きな人なのだろうと予想。いやもしかすると我が気づかなかった特別な方法が
あるのかもしれない。そうだとするとこの人はすごい才能を持っていることに。

もうしょうがないので全てのnに対して求めることはやめて、大まかに5刻みでやっていく。
5回目でスカウト成功 0.005916426
10回目でスカウト成功 0.010419739
15回目でスカウト成功 0.014196064
20回目でスカウト成功 0.01701462
30回目でスカウト成功 0.019398312
40回目でスカウト成功 0.017872679
50回目でスカウト成功 0.013954518
75回目でスカウト成功 0.004084392
100回目でスカウト成功0.0005422084
こんな具合になっていく。一応もっとも起こりやすいスカウト成功までにかかる回数は、およそ30回前後となる。だからといってこの人の計算が間違っているとは限らない。
なぜなら平均が30前後でも、30より後のほうが30より前に対し確率が高ければ、平均は当然30より後ろになるから。

平均として期待値を考えると、一応理論的には
Sum[n*(0.001*n+0.001),{n,1,998}]
それで44あたりが期待値として得られた…と。
そこで、これを計算してみる。
なぜ998なのかというと、これ、999以降は0.998*0.997*…*0.002*0.001*0.999で、0.001の部分が延々増え続けるだけで、そもそもまず0.001が1個だけでも、あまりに小さい値になるので無視できるので、一応999以降は考える必要すらない。
…この計算によると、だいたい38回目、すなわちスカウト%が3.9%というのが平均になる。
あれ…?書いた人の計算と違う。

そこでや。我の愛用するwolfRPG(wolframではない)エディターを用いて、統計的に解釈することにする。wolfってすごいわ。「おお」まさに「神」のようだ。

そして、我の考えたプログラムで表示させてみる。


このように、何回目でスカウト成功したか出てくる。
一応プログラムの内容としては、スカウト確率は挑戦n回目に対して
(n+1)*0.001ということにして起こった場合nの値を出力、起こらなければ
n=n+1としてループさせる。開始はn=1から。
確率は擬似的に1~1000までの乱数を発生させて、
n+1の値以下ならば成功、という判定にしている。
左の
表では94回が最高だが、この確率は上の表から0.4%をよりかなり下回るであろうことが予想される。

あとは、この繰り返しイベントをさらに繰り返して、
スカウト回数の総和を試行回数の総和で割ったものが、まさに我々が求めている平均となる。

一応10000回分の平均を取って、ついに試行開始。
わくわくする。

プログラムの詳細は、とりあえず下に添付したとおり。
おそらく間違っていないであろう。

このプログラムによると、その平均スカウト回数は、38を少し超える値、38.2071となった。
計算による値38.34155よほぼ同じ。
ということは…。
これを書き込んだ人は計算間違いか理論が間違っていることになる。

こちらは期待値とプログラムを組んで両方
ほぼ同じ値に収束したので間違いないはず。



ということで結論。平均44回目スカウトは嘘。こちらがたたき出した答えは平均38回である。
みんなまんまと検証せずにひっかかっている…。(その後修正された模様)
しかしだ。

強敵出現!のコメントページには、平均45パレで入手と書いている人と、平均500パレの間違い、と書いている人や、はじめは0.1%からスタートして0.1%ずつ増える、とか書いている。
なおこれ、すべて間違いである。
我が訂正した通り、平均38パレ、というか38回で、平均500パレは一律確率が0.2%と勘違いをしていて、最後のはスカウト率の初期値が間違い。
そういう自分もまだ高校の頃は確率があまり得意でなかったが。