ここ最近、ずーーーっとモンハンばっかりやってました。
そう、先月発売した MHP3 です。
ようやっとレイア希少種を倒したのですが、もう今の装備では限界…。新しく装備を調えるために、レア素材求めてまた乱獲しなくっちゃなぁ…。
ということで、確率について少し語ってみます。
モンハンの攻略を乗っけてるサイトなんかを見てると、アイテムの手に入る確率なんかが書いてあります。たいていパーセントによる表記ですが、これってどうやって算出した値なんですかね?ざらっと見た限りではどうやら直接データを参照したもののようですが、おそらくプログラムの解析はやってないかと思います。
ともあれ、この数値に関しては、確率 50% もあるのに全然手に入らないだとかの文句がよく見られます。さて、この 50% という数値は果たして「100分の50」なんでしょうか。それとも「1000分の500」なんでしょうか。どちらも同じじゃないか、と思われるかもありませんがさにあらず。どんな単位で扱うかによって大きな違いがあるのです。
コンピュータで扱われる乱数はたいていの場合疑似乱数です。疑似乱数というのは、その名の通りでたらめな数値ではなく、でたらめな数値に見えるような数値を計算しているわけです。そして、質のいい乱数には条件があって、その一つに数値のばらつきというものがあります。例えば0~9の数値を発生させる乱数発生器なら、0~9までのそれぞれの数値が同じぐらいの頻度で出現する必要がある、ということです。まあ、一般的な乱数発生アルゴリズムならたいていこの条件はクリアしています。
さて、次に問題になるのはこの発生の周期です。先の例で言うと、例えば「1」という数値が出現してから何回乱数を回せば再度「1」が出現するか、という問題です。(知っている方に言っておきますが、ここで言う周期はアルゴリズムによる限界の周期ではなく、あくまでも目的の数値が出現する頻度の周期です。) だいたい10~20回程度で出現してほしいところですが、そうでない場合もあります。例えば乱数を100回発生させて開始から90回「1」が出現せずに最後の10回に連続して「1」が出現したとしても、先に言った出現頻度の条件はクリアしていますから仕様上問題ないことになります。
まあ、一般的な乱数発生アルゴリズムならここまで極端に偏ることはまずありません。しかし、前に言ったような「100分の50」あるいは「1000分の500」といった単位で考えるとこういった偏りが発生する可能性が非常に高くなります。
「100分の50」で考えると、乱数発生器が「0~99」までの数値を発生させるとして、「0~49」ならアイテムが出る、「50~99」ならアイテムが出ないとすると、100回乱数を発生させるうち最初の10回でアイテムが出ない可能性は決して低くありません。なぜなら乱数発生器が保証するのは「0~99」の各数値が出現する頻度がだいたい同じということであり、どんな順番で出現するかはいっさい保証していないからです。このため、確率が「100分の50」であったとしても、10回やって5回アイテムが手に入るとは限らないわけです。
そしてさらに「1000分の500」となるとこの可能性はさらに高くなります。先の「100分の50」なら最悪のケースでも51回やれば確実にアイテムが1つ手に入ることになりますが、「1000分の500」となると最悪の場合501回目までアイテムが手に入らない可能性があることになります。
つまり、「100分の50」と「1000分の500」とでは確率に大きな違いがある、と言えるわけです。
なので、攻略ページに出現率1%とか書いてあっても、実際プログラム側でどんな単位で扱っているかがわからなければ、手に入るまでに必要な回数もわからないということです。逆鱗とかけっこうな個数必要だったりするですが…いつになったら集まるかなぁ… orz
他にも、多くのプログラマが勘違いしている乱数の扱いがあるのですが、それはまた今度。
0 件のコメント:
コメントを投稿