ガチャの確率の偏りと擬似乱数

先日、TL上に流れてきた以下の記事を読みました。

フレポガチャを使って星5サーヴァント排出率2%を超える調整法

個人的にはありえない話だと言いたいのですが、ガチャのプログラムに問題があれば、当該記事のやり方で確率が上がるかもしれません。可能性は非常に低いと思いますが。

擬似乱数について

当該記事で展開されている理論の核としては、☆5鯖相当の確率(1%)を暫く引けていないとき、確率の偏りが発生しているので☆5鯖を引きやすい状態である、ということですが、これはいわゆるギャンブラーの誤謬というやつです。

カイジに学ぶ – ギャンブラーの誤謬

コイン投げやサイコロは独立事象であり、前回の結果によって次の確率が変わるということはありません。問題は、ガチャの結果が独立事象であるかということです。

コンピュータ上で、ランダムな事象を判定する場合には、擬似乱数を用います。擬似乱数というのは、文字が表す通り擬似的な乱数であり二つの重要な指標があります。「一様性」「独立性」です。一様性というのは、全ての乱数が均等に出現することで、独立性は直前に出た値とその後に出る値は関係がないというものです。ガチャの結果が独立事象になるためには、生成される擬似乱数の「独立性」が確保されていることが条件になります。

擬似乱数の生成をやらかしてしまうと、これらの性質が確保できません。実際に、やらかしてしまったゲームもあります。

カルドセプトサーガの乱数問題

擬似乱数の生成手法はいくつかありますが、有名なものは線形合同法メルセンヌツイスタでしょう。近年専ら使われるのはメルセンヌツイスタで、本手法で作られた擬似乱数は、「一様性」「独立性」を十分にクリアする、質の高い乱数になります。

一番最初にガチャプログラムに問題がある可能性が低いと述べたのは、多くのプログラミング言語でメルセンヌツイスタによる乱数生成が標準ライブラリとして実装されているからです。

ちなみに、擬似乱数を生成する時、乱数生成に必要なデータをシードとして与えます。このシード値が同じであれば、生成される乱数は同じになります。シード値は現在時間で初期化されることが多く、ゲームの乱数調整で起動後○秒とかが出てくるのは、シード値を合わせて、擬似乱数のパターンを再現しようという手法になります。

運営サイドの問題

現状、各社が提供しているガチャは、確率は載せていても本当にその確率で出現するかは保障されていません。ユーザーによってガチャ確率を変えているのでは?という話もたまに聞きますし、ここらへんはオープンにすべきじゃないですかね。

一番良いのは、ガチャプログラムをシード生成の部分を伏せた上で公開することだと思います。シード値がわからなければどのような順序で乱数が出てくるかわかりませんので、直前のガチャ結果からその後の結果を予測することは不可能です。

ネット麻雀サービスで著名な天鳳は、配牌プログラムを以下のように公開しています。

天鳳 – 牌山生成の公開方法

どうやってガチャの判定をしているかわからない以上、ガチャ結果が独立事象ではないと言われても否定はできません。つまり、オカルト的なガチャ調整法も効果があるかもしれません。

ただ、仮に自分がガチャプログラムを実装するならば、ガチャのリクエストが来るたびに、メルセンヌツイスタで生成された擬似乱数に応じて結果を決めるプログラムを作ります。膨大なお金が動くであろうガチャが、前回のガチャ結果から次のガチャ結果が予測できるような杜撰な実装であってほしくはないです。

参考

Algorithm with Python – 番外編:擬似乱数の検定

Wikipedia – 乱数列

Wikipedia – メルセンヌ・ツイスタ

あなたの使っている乱数、大丈夫?-危ない標準乱数と、メルセンヌ・ツイスター開発秘話-

グラブル最適編成計算機 今後について

しばらくグラブル自体、あまりモチベーションが無くて充電期間だったのですが、ちょっとモチベーションが戻ってきたのでぼちぼち復活してます。
計算機の更新については、未だに保留状態です。有志の方に更新していただいていますので、そちらをご利用いただければと思います。


計算機の更新については、いろいろ思うことがあるのですが、現状のグラブルの環境を考えると、最近の追加武器や、背水技巧二手三手スキル、キャラLBの存在、ソーン麻痺などなど、利用環境に応じて編成を変えるケースが増えていると思います。

それに伴って、’最適な’編成ってなんだろう?っていうのが大きくなっています。何処で使うのか、誰を想定敵にするのか、自分のバフ回しはどうなのか、奥義は打つのかなどなど…… 編成の最適化は行動の最適化とセットです。DPSに着眼するならアビリティの演出時間やリロード時間も考えなきゃいけないですし、さらに変数が増えてしまいます。

正直、いろいろ積まれすぎてお手上げ状態になってます。各属性、概ね理想的な編成はここらへんだろうというのは調べれば出てきますし、現在の状況で計算機を使う『手間』に対してのリターンは提供できないかなぁと。

あと、やっぱり自分の武器編成が固定化されてしまっているというのが大きいです。基本的に、今までは自分で使うことをモチベーションに作ってきたので、自分が使わないものを更新するというのはやる気が起きないのです。大変申し訳ないのですが。

また、Googleの仕様変更により、計算機の利用がかなり面倒になったというのも大きいです。こちらは、時間を置けば解消される問題かと思いますが、日本国内でのGoogle Apps Scriptのサポート状況は一概にもいいとは言えないので、時間はそれなりにかかるかもしれません。

GAS で「一部のスコープへのアクセス権限がありません」と怒られたときの対処法

計算機の更新は当面やりませんが、グラブルで面白いことがあれば検証系の記事は出すかもしれません。

それでは!