不死身になった凡プレイヤーが偶然の力だけで ScoreSaber #1 になるとき


このページは Beat Saber Advent Calendar 2023 21 日目の記事です。

導入

人生の二大苦悩は次の二つだといいます。

  • いつか死ぬ。

  • Beat Saber の PP が伸びない。

ガチランク勢ではないけれどやっぱり PP は気になる、という日和ったプレイヤーの筆者は、トップに半年以上前のスコアが並ぶ景気の悪い ScoreSaber ページを眺めながら、ふと疑問に思いました。

「これ、実力がまったく伸びなくても、ひたすらプレイしまくっていれば PP は上がり続けるのかな」

まず前提として、譜面 PP に上限があれば、プレイヤー PP にも上限があります。たとえば譜面 PP が 300 pp 以上とれないなら、どんなにたくさんの曲をプレイしてもプレイヤー PP が $${ 300 / (1 - 0.965) \, \mathrm{pp} \simeq 8572 \, \mathrm{pp} }$$ 以上になることはありません。

しかし「上ぶれ」「下ぶれ」という言葉があるように、実際にプレイした場合の PP にはゆらぎがあり、偶発的に実力より高いスコアが取れることがあります。

この記事唯一の図がこんなふにゃふにゃでよいのか

では、ただひたすらにプレイ回数を重ねれば、まったく上達せずとも偶然任せで PP は伸びていくのでしょうか。伸びるとしたら、どれくらいの時間がかかるのでしょうか。

本記事は、この後ろ向きすぎる疑問を強引に解決しようという試みです。以降は簡単のため、プレイヤー PP ではなく「譜面 PP の最大値がプレイ回数とともにどう変化するか」を考えることにします。

解析

この節は飛ばしても問題なく読めます。数式をペロペロするのが好きな人以外は「結果」節まで飛ばしてください。

理論

まず、一回のプレイで獲得する PP の確率密度 $${ p(x) }$$ から、 $${ N }$$ 回プレイしたときの最大 PP の確率密度 $${ p_{\mathrm{max}}(x; N) }$$ を求めます。これを計算するには累積分布

$$
P(X \le x) = \int_{-\infty}^x dx' \, p(x') \, ,
$$

を経由すると簡単です。各プレイの PP に対応する確率変数を $${ X_i }$$ とおくと、最大 PP の累積分布は

$$
\begin{align*}
P(\mathrm{max}\{X_i\} \le x) &= P(X_0 \le x \land X_1 \le x \land \dots \land X_{N-1} \le x) \\
&= \left[ P(X \le x) \right]^N \, ,
\end{align*}
$$

と書けます。これを微分したものが $${ p_{\mathrm{max}}(x; N) }$$ ですが、ここでは累積分布をそのまま使って中央値 $${ x_\mathrm{m} }$$ 、つまり $${ x_\mathrm{m} }$$ を超える確率が $${ 1/2 }$$ になる条件を考えます。

$$
P(\mathrm{max}\{X_i\} \le x_\mathrm{m}) = \left[ P(X \le x_\mathrm{m}) \right]^N = \frac{1}{2} \, .
$$

$${ N }$$ について解きます。

$$
N(x_\mathrm{m}) = \frac{\log \frac{1}{2}}{\log P(X \le x_\mathrm{m})} \, .
$$

この式は「最大 PP の中央値が $${ x_\mathrm{m} }$$ になるプレイ回数」を表し、つまり求めようとしていた関数です。

次に具体的な $${ p(x) }$$ を与えます。ここでは正規分布を仮定します。中心極限定理の成り立つ状況ではないので、この仮定が正当化されるかは非常に疑問ですが、今日はすでに記事投稿日の前日であり、そんなことを検討している時間はありません。最後に適当にスケーリングすればよいので、 $${ \cal{N}(0, 1) }$$ で計算します。

$$
p(x) = \frac{1}{\sqrt{2 \pi}} \exp \left(- \frac{1}{2} x^2 \right) \, .
$$

$${ N(x_\mathrm{m}) }$$ に代入すると次式が得られます。

$$
N(x_\mathrm{m}) = \frac{\log \frac{1}{2}}{\log \left( \frac{1}{2} + \frac{1}{2} \mathrm{erf} \left( \frac{x_\mathrm{m}}{\sqrt{2}} \right) \right)} \, .
$$

原理的にはこの式に代入すれば答えが求められます。しかしこのままでは関数の性質が分かりづらいのと、大きな $${ x }$$ に対して $${ \log(1 + \mathrm{erf}) }$$ の項で桁落ちが発生してまともに計算できません。

$${ x }$$ が十分に大きいときの振る舞いをみるため、 $${ \mathrm{erf} }$$ の漸近展開

$$
\mathrm{erf}(x) \simeq 1 - \frac{1}{\sqrt{\pi} x} e^{-x^2} \,\,\,\, (x \rightarrow \infty) \, ,
$$

を用いて展開します。

$$
N(x_\mathrm{m}) \simeq \left( \sqrt{2 \pi} \log 2 \right) x_\mathrm{m} e^\frac{{x_\mathrm{m}}^2}{2} \,\,\,\, (x \rightarrow \infty) \, .
$$

$${ x }$$ (= 正規化した目標 PP) に対してプレイ回数は非常に大きなオーダーで増えることが分かります。ちなみに $${ N(x_\mathrm{m}) }$$ の逆関数、つまりプレイ回数に対する PP の関数は Lambert $${ W }$$ 関数というものを使うとあらわに書き表せます。

データ解析

次に ScoreSaber の実データから、平均と分散を求めます。

ここで問題となるのは分散です。必要なのは「一つの譜面を何度もプレイしたときの分散」ですが、 ScoreSaber に残っているのは譜面ごとのトップスコアに関する情報のみです。本来は実際に同じ譜面を何度もプレイして統計を取るべきですが、めんどくせーし時間もないので ScoreSaber のデータから強引に計算することにします。

とはいえ単純に ScoreSaber のデータから分散を計算するのでは、次のような要因で値が過大評価されます。

(0) 実際にはプレイヤーの実力が時期によって変動する。
(1) 譜面によって平均的に得られる PP が異なる。
(2) 複数回プレイした譜面の PP が平均より高めに出る。

Taichidesu さんのデータ

詳細は省きますが(あとから追加するかも)、今回は「その譜面をプレイするまでの総プレイ回数」と「譜面の star difficulty」を変数として、影響を除く処理を行っています。筆者のデータについては (2) の影響は大きくないはず。ちなみに主に (1) が理由で、幅広い難易度の譜面をプレイしている人の生 PP 分布は正規分布から大きくずれています。

ただしこれらの補正を行っても、譜面の star difficulty に対する真の難易度のゆらぎ、いわゆる「おいしい譜面」と「まずい譜面」に対応する分散が加算された状態です。これは見方を変えれば「譜面も随時追加されるという条件下で、特定の難易度の譜面をランダムにプレイしたときの分散」であるともいえます。これについては問題設定の方を合わせてしまいましょう。

実際に ScoreSaber からデータをダウンロードして解析してみると、筆者のプレイデータでは、最近の平均 PP がおよそ 300 pp (Fail 除く) に対して分散は (15 pp)^2 くらいでした。人によって分散は異なりますが、おおまかにはどの PP 帯のプレイヤーでも、√分散は平均 PP の 5 % 程度のようです。以下ではこの値 (5 %) を用います。

結果

では前節での結果をもとに、具体的な値を計算してみます。ぶっちゃけ一連の解析にはかなり無理があり、年の精度はせいぜい「桁数の桁数くらいは合っているかも」というレベルです。この記事を参考にプレイされる方はご注意ください。

最初は景気良く伸びる PP

タイトル通り、せっかくなので偶然の力だけで世界一を目指しましょう。筆者の譜面 Top PP は現在 334.40 pp です。世界一のプレイヤーは Bytesy さんで、譜面 Top PP は 700.31 pp (2023-12-20 現在) です。

タイトルでネタバレしていますが、ヒトの寿命程度で筆者が世界一になることは到底不可能なので、まずは不死身になります。不死身になったので月月火水木金金、 24 時間不眠不休で Beat Saber をプレイします。平均 3 分の譜面をプレイすれば 1 日で 480 回、 1 年で 175200 回プレイできます。前節での解析の都合上、マッパーも不死身になってランク譜面を制作しつづけてもらい、適切な難易度の譜面をランダムにプレイし続けます。マッパーの皆様に感謝。

では不死身になった Beat Saber 人生をダイジェストで見てみます(蛇足コメントは Wikipedia で調べたレベルのものです。識者のつっこみ歓迎)。

  • 1 年後: 367 pp 到達。快調。

  • 100 年後: 381 pp 到達。ん?

  • 30 万年後: 400 pp 到達。

  • 2 億年後: 413 pp 到達。太陽系が銀河を一周する。

  • 40 億年後: 419 pp 到達。アンドロメダ銀河と天の川銀河が衝突する。

  • 50 億年後: 420 pp 到達。太陽が寿命を迎える。地球も消滅する。

  • 140 億年後: 421 pp 到達。宇宙が誕生してから Beat Saber を始めるまでと同じ時間が経過。

  • 1000 兆年後: 440 pp 到達。宇宙のあらゆる恒星が燃え尽きる。

  • 10^30 年後: 487 pp 到達。銀河のすべてが中心のブラックホールに呑み込まれる。

  • 10^35 年後: 500 pp 到達。

  • 10^83 年後: 600 pp 到達。

  • 10^96 年後: 621.96 pp (10^96 年前の Taichidesu さんの Top PP) 到達。ブラックホールが蒸発。

  • 10^151 年後: 700.31 pp (10^151 年前の Bytesy さんの Top PP) 到達。

ちなみに今回の解析は譜面 Top PP に関するものですが、基本的にプレイ回数が増えるほどソートした譜面 PP の間隔は詰まっていきます。この方法で譜面 PP を超えたなら、プレイヤー PP も余裕で超えているはずです。

結論

冒頭の人生二大苦悩、「いつか死ぬ」と「PP が伸びない」は、前者が解決すれば後者も自動的に解決することが分かりました。一石二鳥!

おまけ

ScoreSaber のリプレイファイルを読んで VirtualMotionCapture に送るプログラム。
https://github.com/ffiiss/bsreplay2vmc


いいなと思ったら応援しよう!