ガシャに偏りが出る理由の1つ、乱数による確率計算の仕組みについて考えてみました。
※本記事は妄想であり、実際の仕様とは異なる可能性があります。ネタ記事として楽しんで頂ければ幸いです。
ガシャの箱の中
ガシャのイメージはどんなものでしょうか。
箱の中に「SSR」や「R」と書かれたボールが入っていて、手を突っ込んで一つ引く――
これは(おそらく)間違いで、プログラム的には、ボールには「0」や「80」などの数字が書かれているのが正しいイメージ(のはず)です。
また次に引くと何が出てくるかは予め決まっていて、引く順番によって当たりはずれが左右されます。
箱の中にこんな感じにボールが積まれていて、好きなものを引けるのではなく
このように
数字が直線的に並んでいて、前から順に引かされるイメージです。
枠外の数字は順番を示しており、左端が先頭になります。
紫=SSR、黄=SR、グレー=Rです。
この数字の羅列は「乱数」と言うものを素に得たもので、一様に分布されており偏りがありません。
確率に関するプログラミングをする場合、大抵こういった値(ここでは便宜上この値も「乱数」と呼びます)を用います。
なぜ結果に偏りが出るのか?
さて、乱数に偏りが無いと上述しましたが、実際のガシャ結果には偏りが出るのはなぜでしょう?
それは乱数を使ったガシャの仕組みを考えてみることでイメージできます。
試しに乱数を使って“SSR率10%”、“SR率30%”のガシャを作ってみましょう。
まず、乱数を2つ用意します。
1つはとりうる値が0~99までの乱数列で
- 0~9が出ればSSR(=10%)
- 10~39が出ればSR(=30%)
- 40~99が出ればR(=60%)
の当選となります。
これは“どのレアリティが当たるか”のみを決めるものです。
とりうる値は100種類ですが、乱数列は100個を超えて無限にあり、0~99の数字がびっしりつまっています。
つまり0~99の数字の出現回数は1回ではなく無限であり、同じ数字が複数回出てきます。
また各数字は偏りなく分布されています。
もう1つはとりうる値が各レアリティのユニットの数だけ用意された乱数列です。
仮にSSRが30体、SRが100体、Rが100体あるなら、
- SSRの場合:0~29
- SRの場合:0~99
- Rの場合:0~99
のようにそれぞれ用意します。
この数字は、SRの0=SRディオ、同1=SRパパウ…というようにユニットと1対1で紐付けられています。
こちらも1つ目と同様、各数字が無限に・偏りなく並んでいます。
乱数が用意できたら、あとはガシャが引かれたら
まず1つ目の乱数表から次の値を取得してレアリティを確定し、
続いて2つ目の乱数表から次の値を取得してユニットが確定する
動きをするようプログラミングします。
ガシャの確率計算はこんな風に作ってあるのではないでしょうか。
なぜ偏りが出るのか? それは、
箱の中に「SSR」や「SR」などのレアリティではなく、「0」や「15」などの数字が入っているからです。
各数字は偏りなく分布されており、例えば0,0,92,0,…と「0」が頻発するようなことはありません。
ですが、0,92,8,13,74,…と、
同じレアリティに属する数字が頻発するケースはありえます(0と8はSSR、92と74はR)。
これが偏りが出る理由の1つと考えられます。
他にも、接続先のサーバが複数あって、それらで確率設定が異なる可能性などもありえますが、今回はこれにて。
PR