2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【グラブル】ガチャピンモードは罠ではないのか?

Last updated at Posted at 2021-03-19

ガチャピンモードとは

グランブルーファンタジーというソシャゲで、SSR(フェス時6%、それ以外は3%)が出るまで無料10連ガチャをいくらでも回せる機能です。(本当は終了条件があるのですが、本記事では割愛します)
SSRが確定ということもあり、少なくとも虚無にはならないという安心の一方で、ガチャをたくさん回せるということはSSRが出ていないということで、実は損なのでは?という気分にもなってしまいます。そのあたりを、数学の力を借りて調べましょう。
高校数学の知識があれば読むことが出来ます。何言ってるかワカランという方は、今後確率に首を突っ込むのはやめましょう。危険です。

以下、SSR出現確率を$p$とします。

10連ガチャにおけるSSR期待値

ガチャ1回あたりの期待値が$p$ですから、$10p$です。期待値の線形性はかくも偉大。

……なのですが、今後のために愚直に計算しておきましょう。
期待値は(SSRの出た個数)x(その個数のSSRが出る確率)の和で表されるのでした。SSRがk個出る確率を$a_k$とおくと、期待値$P$は次のようになります。

P = \sum^{10}_{k=0}ka_k

$a_k$は $a_k = {}_{10}\mathrm{C}_k p^k (1-p)^{10-k}$ですので、結局

P = \sum^{10}_{k=0}k_{10} \mathrm{C}_k p^k (1-p)^{10-k}

となります。これが10pと一致することは読者への演習問題としますが、一致することだけわかっていれば大丈夫です。

ガチャピンモードのSSR個数期待値

10連でSSRが一回も出なかった場合は、また次の10連を回すわけですから、その10連は個数という観点からはなかったことと同じです。結局、10連ガチャでSSRが1個以上出たときの、SSR数の期待値を求めることになります。条件付き確率というやつですね。
基本的には上の計算方法と同じですが、kの範囲と確率が異なる点に注意しましょう。SSRがk個出る確率は$\frac{a_k}{1-a_0}$です。こうなります。

P = \sum^{10}_{k=1}k \frac{ a_k } {1-a_0}

このままでは扱いづらいので、変形します。まず、シグマの中にkがあるので、k=0を含めても問題ありません。また、$\frac{1}{1-a_0}$はkによらないため、外に出すことが出来ます。よって次のようになります。

P = \frac{1}{1-a_0} \sum^{10}_{k=0}ka_k

あれあれ、この式のシグマ以降は先程求めた期待値そのものではないですか(しらじらしい)。結局期待値は次のようになります。

P = \frac{10p}{1-(1-p)^{10}} 

実際に計算すると、フェス(p=0.06)で1.3個、それ以外(p=0.03)で1.14個となります。

ガチャピンモードのSSR率

SSRの数/ガチャを回した数 で計算される数値をSSR率とします。ガチャピンモードのSSR率はどうなのでしょうか?。SSRの期待値は計算しましたから、ガチャを回す回数の期待値を計算しましょう。

10連一回でSSRが1個以上出る確率は、$1-a_0 = 1-(1-p)^{10}$でした。一般に確率pのガチャを出るまで回したときの回数の期待値は$1/p$です。いま、「SSRを出す」というガチャを回していると考えると、ガチャピンモードでガチャを回せる回数の期待値は

\frac{10}{1-(1-p)^{10}}

となります。10連ガチャ一回につき10回のガチャを回すので、10を掛けました。

さて、SSR率は SSR数の期待値 / ガチャを回す数の期待値 で求まります。

\frac{10p}{1-(1-p)^{10}} \div \frac{10}{1-(1-p)^{10}} = p

答えは$p$となりました。すなわちガチャピンモードでSSR率が低くなったりすることはない、ということです!これで安心してガチャを回せますね。

実験

ここはQiitaなので、このまま終わるとなんか怒られそうです。ということで、Pythonでシミュレーションプログラムを書いて、結果があってるのか確かめてみました。
プログラムがこちら。

import random

P = 6
N = 10000


def gacha():
    result = random.uniform(0, 100)
    if result < P:
        return 1
    else:
        return 0


def gacha10():
    ssr = 0
    for _ in range(10):
        ssr += gacha()

    return ssr


def gachaping():
    ssr = 0
    n = 0
    while ssr == 0:
        n += 10
        ssr = gacha10()
    return ssr, n


if __name__ == "__main__":

    ssrnum = 0
    gachanum = 0
    for _ in range(N):
        ssr, n = gachaping()
        ssrnum += ssr
        gachanum += n

    print(float(ssrnum) / N) #SSR数の期待値
    print(float(ssrnum) / gachanum) #SSR率

結果は……

1.3092
0.06027901837101156

ということで、計算はあってそうです。めでたしめでたし。

とはいえ

SSR個数の期待値は、フェス(p=0.06)で1.3個、通常(p=0.03)で1.14個でした。ガチャそのものの期待値で言えば、フェスでは22連相当、通常では38連相当です。今やってるガチャピンでは30連が出ることもありますから、期待値だけみれば、フェスでのガチャピンの期待値は30連より低い、ということになります。ただ、ガチャピン様はSSR一個以上確定なのに対して、ただガチャを回す場合はSSR0のこともありますから、一概に比較はできません。

まとめ

  • ガチャピンモードのSSR数期待値は、フェス(p=0.06)で1.3個(22連相当)、通常(p=0.03)で1.14個(38連相当)
  • フェスでは30連のほうが期待値で勝る場合もあるが、SSR確定の恩恵もあるため、一概に優劣はつけられない。
  • SSR率は通常のガチャと同じ。

ちなみに

SSRが出たところで止めてもSSR率が変わらないということは、あらゆるガチャにおいて、出たところで止めても確率は変わらないということです。レア泥掘りの検証とかで、「出たとこでやめると本当の確率は出ないから、固定回数分試行して報告しろ」とかいう人がいますが、数学的には間違いだということですね。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?