ポテンシャルについて

はじめに

雪道攻略の書という素晴らしい攻略サイトが存在します。以下の議論ではこれを読破していることを前提とします。さらにアナザークリアで手に入るおまけ.txtを読んでいることも前提とします。まだの人はクリアしてからお越しください。

きっかけ

同攻略サイトのポテンシャル値の増減規則のページに相当たくさんプレーしてやらないと全然5%になってないとあったので,それなら実際のところどうなのよと実験してみました。

実験内容

  1. すべてが増加する条件を整えるため,ポテンシャル15以上・MP最大値1以上のセーブデータを用意する。
  2. そのセーブデータを繰り返しロードし,レベルアップ時の能力変化を記録する。
  3. 実験結果を分析する。

実験結果

関連するファイルを書庫ファイルにかためました。以下,簡単な説明を。

save.dat
今回の実験で繰り返しロードしたセーブデータ。実験のしやすさを考え,経験値があと1でレベルアップするようにしました。同じ理由でStage0のまま条件を整えました。
レポート.txt
save.datのときのレポート.txtです。
raw.txt
実験データ。HP+nのnがHP最大値の増加量。そのレベルアップでMP最大値が上がればMP+1,基礎攻撃力が上がればAtk+1,基礎防御力が上がればDef+1と続けています。ポテンシャルは15なのでHP最大値の増加量は4~9となっています。
stat.rb
分析に使ったスクリプト。何をやっているのか正確に知りたい人は見てください。結果が知りたいだけならば見る必要はありません。
stat.txt
stat.rbの出力をリダイレクトしたもの。こちらは最も見ていただきたいファイルなので直接リンクでも用意しました。
fake.rb
今回の実験のシミュレーションを行うものです。再起動のたびに種が再セットされるであろうことから,同様の処理を行っています。第一引数で試行回数,第二引数で種の初期値,第三引数で種の増加量を設定できます(すべて省略可)。引数を同じ値にすると同じ結果が出力されます。
fake1000.txt, fake100000.txt
fake.rbの第一引数をそれぞれ1000,1000000にしたときの出力です(第二,第三引数は省略)。形式はstat.txtと同じです。
pruby.exe, pruby.rb
Rubyをインストールしていない環境でもRubyスクリプトを動かせるようにしたもの。pruby.rbを読めばわかるように,ただ第一引数をrequireするだけです。これをExerbで実行形式にしたのがpruby.exeです。コマンドライン上で「pruby fake 100」などと打って遊んでください。prubyは「添付ライブラリを,用意しない限り使えない」「起動オプションを使えない」といった制限を持ちます。

次にstat.txtに書かれている内容を説明します。

最初の「1000 samples」は実験の標本の数が1000ということ。次の段落は賽の目(おまけ.txtのソースコードでいうdice)について。その次の段落はポテンシャルの減少についての分析結果です。

賽の目
最初の6行は各目について。左がどの目か,中がその目が出た回数,右がその目が出た確率です。
meanは実験データの平均値。expectは無限の試行を行ったときに期待される値(定義より算出した値)です。(expectは以下同様)
standard error of the mean は平均値についての標準誤差です。
standard deviation は実験データの標準偏差です。
ポテンシャル減少
最初の3行は各能力値について。能力の種類,回数,確率となっています。Sumは三つの合計です。
meanはポテンシャル減少量の期待値です。Sumの確率に-5をかけたものになります。
standard error of the mean は平均値についての標準誤差です。
standard deviation は実験データの標準偏差です。

考察

賽の目に関しては大体いいんじゃないでしょうか。3・4がやや多いので標準偏差は小さめになっています。

ポテンシャル減少は少し発生率が低めですね。統計はあまり詳しくないのですが,「1000回の試行の平均値」は「無限大回の試行の平均値」を中心に正規分布すると思うので,もしそうなら「この実験の平均値」と「無限大回の試行の平均値」の差の絶対値が標準誤差を超える確率は31.7%なのでまあありえない実験結果とは言えないでしょう。この「差」が標準誤差の約1.2倍というのは実験結果が偏差値38や62くらいの珍しさということになります。(ちなみに賽の目は46や54くらいの珍しさ)

3回のレベルアップのうち「3回とも1回だけポテンシャル減少」と「1回は2連続減少,1回は1回だけ減少,1回は減少なし」と「1回は3連続減少,残りの二回は減少なし」はどれも平均値に与える影響は同じですが,標準偏差に与える影響は後者になるほど大きいです。1000回程度のレベルアップでは最後の3連続減少(MP最大値・基礎攻撃力・基礎防御力のすべてがアップ)が少なくとも1回発生する確率は約12%と低く,今回も発生しませんでした。このあたりが実験データの標準偏差の小ささの原因にもなっていると思います。単純にポテンシャル減少が起こった方が標準偏差への影響が大きく,ポテンシャル減少が少なかったというのが大きな原因ではありますが。

というわけで,おまけ.txtの内容は信用していいと思います(もともと疑ってるわけじゃないけど)。と同時に試行のたびにこのぐらいは理想の値からずれてしまうものなのだと感じていただければと。

fake.rbについて

Rubyをインストールしていない人のためにprubyを付けたので興味のある人はいろいろ数字をいじってどう変わるか遊んでみてください。prubyはWindows上でしか動きませんが,Macの場合は最初からRubyはインストールされていると思います(ターミナルで「ruby fake.rb 100」などと打ってください)。当然ですが,試行回数を増やすとそれだけ計算に時間がかかります。間違ってCPU能力の割に大きすぎる値を入力してしまい途中でやめたいときはCtrl+Cで中断してください。

雪道での実験との違いは,まず言語が違うのでDelphiのRandomとRubyのrandの仕様の違いが(もしかしたら全く同じものなのかもしれませんが)あります。また,雪道では起動のたびにどのように乱数をリセットしているのか不明です。fake.rbでは種を一定幅で変化させていますが,雪道ではおそらく起動時刻そのままか,起動時刻を利用した何らかの演算の結果を種にしていると思われます。また雪道では敵の出現など別のことにも乱数が使われていて,fake.rbのように乱数列の最初の4つを使っているわけではないという差もあります。

このような違いはあまり問題にはならないと思いますが,fake.rbはあくまでシミュレーションであるということは心に留めておいてください。

ちなみに

雪道攻略の書の作者さんの記録のうちMPの取得レベルが明らかになっている,動画の記録について同様に分析するとvideo.txtのようになります。うーん,これは確かに非常に多いですね。偏差値で言うと32や68くらいの珍しさです。標準誤差の2倍に達してはいないとはいえ……。ノーセーブクリアご苦労様です。

なお,ポテンシャルが下がる(上がらない)のは必ずしも悪いことではありません。ポテンシャルは名の通り潜在していて,意味が出るのはその後レベルアップする時で,あと何回もレベルアップしないときはポテンシャルがあっても意味がないのです。最後のほうになれば「制御」で基礎能力を上げるのにかかるコストが増えてくるので,レベルアップでポテンシャルを消費して上がってくれた方がうれしいはずです。

具体的に言うと,あと10回レベルアップする予定のときにポテンシャルが下がって攻撃力が上がると,HPを10削って攻撃力を1あげるのと同じ効果になります。しかもHPを「前借り」してレベルアップのたびに返済するような形になり,若干お得です。ポテンシャル減少の怖いところはいつまでたっても完済にはならないことで,つまりあと30回レベルアップする予定のときにポテンシャルが下がると基礎攻撃力1に対してHPを30も払うこととなり,かなり痛いです。

また,現在のポテンシャルが5m・ポテンシャルの減少なしでn回レベルアップする時,賽の目がすべて6(ポテンシャル上昇なし)なら最大HPは6n+mnだけ上昇し,すべて1(ポテンシャル上昇最大)なら0.5n(n+1)+mnだけ上昇します。n=11のとき6n+mn=0.5n(n+1)+mnとなり,n<11なら6n+mn>0.5n(n+1)+mn,n>11なら6n+mn<0.5n(n+1)+mnとなります。

尤もそんなことがわかったところで狙えないので意味はないわけですが……。


執筆者:KAZOON
最終更新日:2008年2月21日