(数学的な表記として正しくないものも含まれています. ご承知おきください.)
乱数調整の手法は大きく二つに分かれる.
2番目の手法を用いる際, 最初に引いていた初期Seedに依って目的Seedを得るまでに超長時間の操作を要求されることがある. 目的Seedの出現頻度が余りに少ない場合に起こりがちな問題で, 乱数消費の操作時間が短く済む初期Seedを引けるまでソフトリセットを繰り返す"初期Seed厳選"をすることで対処することが多い.
このとき, どのような戦略(基準)にそって初期Seedを採択すれば, 目的Seedを得るまでにかかる時間を最小化出来るかを考察する.
乱数生成器の周期が十分に大きく, 各出力が独立であると見做してよいことを仮定する. すなわち, 目的Seedの出現確率が消費数によらず常にとして良いものとする.
初期Seedから目的Seedまでに必要な消費数を[adv]として, 閾値[adv]に対してを満たすならばその初期Seedを採択するという戦略を考える.
一回の試行にかかる時間(初期Seedを得るまでにかかる1回あたりの時間)を[s], 乱数消費速度を[adv/s]とする.
このとき, 試行回数[回]で条件を満たす初期Seedを得られたのであれば, 最終的に目的Seedを得るまでにかかった時間[s]は
と表される.
目的Seedを得るまでに掛かった時間の期待値を考える.
式より, が定数と見なせることに注意すると, 期待値の線形性を用いることで
と変形できる.
初期Seed厳選は, 一回の試行において初期Seedが採択される確率を成功確率とするベルヌーイ試行といえる. は, 回消費を行うまでに目的Seedが出現する確率だから,
として表せる.
ベルヌーイ試行を成功するまで繰り返したとき, その試行回数は幾何分布に従うことが知られており[2], 幾何分布の期待値は元となるベルヌーイ試行の成功確率の逆数となる.
すなわち
が導かれる.
また, 初期Seedから目的Seedまでの消費数の期待値はのみに依存して決まる. 初期Seedの事前条件により, はからまでの離散一様分布に従うと見做してよい[3]ため,
と導かれる.
以上より,
が得られる.
を固定して考えることで, はについての関数と見做せる. 従って所与の問題はこの関数の最適化問題に帰着される.
パラメータを用意して期待値を計算する. 今回はそれぞれ
とした[4].
の計算式を Wolfram Alphaに投入する と次のようになる.
Wolfram Alphaは最小値の計算も出来る. 実際に解かせてみると以下の通り.
実験より, の最小値を与える閾値が求められた.
(以上, 常体終わり)
最小値()付近を拡大してみてみるとこんな感じの見た目をしてます.
あまり小さすぎる閾値を設定すると所要時間は跳ね上がる一方で, 大きい閾値を設定すると線形増加するので, 上手く設定してあげると幸せになれそうです.
ともあれ, きちんとパラメータを与えれば良さそうな閾値を決められることが分かって満足です.
の最小値を与えるようなをパラメータから計算できないかとアレコレ考えていたのですが, どうやら
が良い近似を与えることが分かりました. 大学数学か何かで出てきそうな近似ですね.
残念ながら証明は出来ていないのですが, 腕に覚えがある方は挑戦してみてください.
ただのマクローリン近似でした.
が充分に小さい時,
となるので, 代わりにこの関数の最小値を求めることで所与の値が導出されます.