2007年5月26日土曜日

超不定期:第二回PSU検証

はい、勢い企画第二段!

総ての現象を妄想にする・・・

ってことで今回はアイテムドロップについてです。

えー、ファミ通カップでボーナスステージはドロップ率が500%。つまりは5倍ですね。
だけど、超星運で判るとおり素材のドロップ率UPとかな気がしてなりません。
で、よくアイテムのドロップ率が~%だという話は聞きます。
例えば今私が喉から手が出るほど欲しがっているムグンリュクの基板。
あれを1%にして見ましょう。
ボーナスがついて5%。これなら出やすいように感じます。
でもコグナからはそのほか消費アイテムや素材などなどがドロップします。
1%というのはコグナを100体倒して1個でればよいという意味でもありますが、何に対しての%なのかは謎です。
もしコグナがムグンリュク基板のみを落とすのであれば%もわかります。
が、消費アイテムや素材などのアイテムも落とすのでコグナッドがドロップするアイテムの中での1%で素材などは40%と考えた時、その計算方法は私にはわかりません(あるのでしょうがさっぱりです)
例にしてみれば・・・
基板/ムグンリュク:1%
ヴェスタリン:30%
バルカリン:20%
ケレセリン:40%
モノメイト:60%
アグタライド:50%
などにしてみます。
大体確率ものは乱数を使って出すのですが、もし倒した瞬間に乱数(0~100の間)が発生して出た値が45だとします。
出た値と規定値を見比べます(出た値が規定値より小さければドロップ)
45 < 1 ドロップなし
45 < 30 ドロップなし
45 < 20 ドロップなし
45 < 40 ドロップなし
45 < 60 ドロップあり
45 < 50 ドロップあり
という結果になるはずです。ここでドロップするのがモノメイトとアグタライド。
でも実際にドロップするのは1つです。ではどうやってどちらかを決めているのでしょう?
もしこれがランダムであれば確率なんて意味がなくなります。
そもそも何に対しての%かわからんので結果は出せない気がする・・・。
なので単純に500%アップ!といわれても他のアイテムが100%を越えるわけです。
何かしら出るのですが、その判別方法がわかりませんってかできません。






で!ここで加重平均の出番です!加重平均
といっても自分も詳しく判ってるわけではないのですが・・・
物事の優先度を決める時には重みというものをつけることがあります。
コレを利用しているのがアイテムドロップだと思うんですよね。
私は具体的に書けないし、計算式もさっぱり・・・。
なのでちょいとPHPコード風にしてみます。
ここから先は知らない人にはちんぷんかんぷんなので理解せずに結果だけ見るほうがいいかもしれません・・・ orz






えー、まずコグナッドのアイテムドロップテーブル(連想配列、ハッシュともいう・・・・らすぃ)を
$drop = Array("1" => "基板/ムグンリュク", "5" => "バルカリン", "7" => "ヴェスタリン", "12" => "ケレセリン", "20" => "アグタライド", "25" => "モノメイト", "40" => "")
と作ります。このとき、配列のキーとなる数字は重みです。
この重みは値が大きくなればなるほど重要、でやすくなるということになります。
次に重みの合計を出します。これは重み全体に対してその重みが何%であるかを出す為です。
全体の合計は・・・110。この中で重み1の基板/ムグンリュクが出る確率は・・・
なんと驚きの0.909%!!(小数点第三位切り捨て)
Σ(゚д゚`)・・・!?
自分で計算して怖くなった・・・ orz
この調子で他のも計算してみると・・・
バルカリン:4.545%
ヴェスタリン:6.363%
ケレセリン:10.909%
アグタライド:18.181%
モノメイト:22.727%
ドロップなし:36.363%
という結果に。数値の合計は若干オーバーしますが100%です。
まぁ小数点以下をどうしてるのかはソニチしか判らんのですけどね。
眼に見える数値は出ましたが、次はどうやって判断しているかですね。
もしPHPコードでかくならば・・・こうします。(PHPの乱数では小数点出せないのです・・・知らないだけかなあああ)
$weight = "";
$rand = mt_rand(1,110);
foreach ($drop as $key => $val){
     $weight += $key;
     if($rand <= $weight){
         $result_drop = $val;
         break;
     }
}
これの説明としては最初にキーの重みを取りそれを変数に格納。
もし仮に発生した乱数が20であるとします。
まず最初の処理。
$weight に 最初のキー(重み)1が入ります。
発生した乱数と見比べるので
20 <= 1
となるので基盤/ムグンリュクはでません (ノД`)シクシク
で、次。
$weight に次のキーを5足すので
20 <= 6
バルカリンはでません・・・
で、これを延々続けていくと
20 <= 23
でケレセリンがドロップすることになりますた。ドロップした時点で処理は終了するわけです。
で更に例えるなら発生した乱数が70だとします。
めんどいので詳細は省きますが、結果としては
70 <= 70
でモノメイトがドロップ。という具合になるわけです。
ん?配列が順番になってるからじゃね?とお思いのあなた!
じゃあためしに順番を変えてみましょうか!
$drop = Array("5" => "バルカリン", "40" => "", "20" => "アグタライド", "7" => "ヴェスタリン", "12" => "ケレセリン", "1" => "基板/ムグンリュク", "25" => "モノメイト")
としましょう。
出た値が60とすると。
60 <= 65
でアグタライドがドロップします。
ただし、同じ確立のものがあれば先にあるものがドロップするので、おそらくは毎回配列をシャッフルして順序を変えてると思います。
因みに1 ~ 110 の間で特定の数値が出るのは0.909%です。ムグンリュクの確率と一緒ですね。
なので確率的にはあっているのです。






ここから本題!
ヽ(`Д´)ノ ナゲェヨ!
倍率ドロップとはどういうことなのか・・・?
長い寄り道で重みが大きければ確率は上がることが検証できました。
しかし、どの重みを増やせば実質5倍になるのか!?
さっきのテーブルで言えば重みの合計は110。重み1のムグンリュクを出すには0.909%の確率。
ではこの重みを5にしてみたらどうだろう?
バルカリンと同じく4.545%になるのだろうか?
$drop = Array("5" => "基板/ムグンリュク", "5" => "バルカリン", "7" => "ヴェスタリン", "12" => "ケレセリン", "20" => "アグタライド", "25" => "モノメイト", "40" => "")
としましょう。
すると気になる確率は・・・?
4.385%
でございます。
おおう、近いなぁ。これなら5倍だね!






と思ったら大間違い!
これはムグンリュクのみを5倍にした時の話です。
倍率5倍というのは全体を指す言葉だと思うので、全体を5倍にしなければならない気がします。(ドロップなしまで5倍はしません)
$drop = Array("5" => "基板/ムグンリュク", "25" => "バルカリン", "35" => "ヴェスタリン", "60" => "ケレセリン", "100" => "アグタライド", "125" => "モノメイト", "40" => "")
となるはず・・・。
で、重みの合計としては・・・390。
では全体の確立を見てみましょうか。
基板/ムグンリュク:1.282%
バルカリン:6.410%
ヴェスタリン:8.974%
ケレセリン:15.384%
アグタライド:25.641%
モノメイト:32.051%
ドロップなし:10.256%
という結果に。
もしこれが正しければ・・・
ウルァッ(((((;`Д´)≡⊃)`Д)、;'.・ 五倍どころじゃねぇYO!
因みに全体の確立を5倍するということになると・・・
100%の枠に収まらない!!!!






以上が妄想です。
なのでソニチにはレアアイテムドロップ率500%!!と言って欲しいです。
モノメイトまでもが500%!!なんて嬉しくないしなぁ。
なので、超星運でドロップがあがるというのも体感的なもので・・・あんまり変わらないんだろなぁ。
全体じゃなくてレアだけにすれば倍率になるんだけどさ。もしくは素材や消費アイテムなどの確立減らすとか。
※ この記事は脳内妄想100%でお送りしました
(゚∀゚∀゚∀゚∀゚∀゚∀゚∀゚∀゚∀゚∀゚∀゚∀゚∀゚)