線形合同法の解析とそのゲームへの応用

線形合同法擬似乱数として使える数列を発生させるアルゴリズムの一種。
線形合同法 - Wikipedia
wikiには、この乱数列が最大周期を実現(0〜Mまでの数値を一見ランダムにかつ重複なく発生)させる条件が記載されているが、一方でこの条件を満たさなかった場合どうなるかが書いていない。
※最大周期になる条件は以下のとおり。

  1. BとMが互いに素である。
  2. A-1がMの全ての素因数で割り切れる。
  3. (Mが4の倍数の場合)A-1は4の倍数である。

ざっと調べたところ、最大周期条件を満たさないAとBの場合、さらに短周期型と収斂型に分類できることがわかった。

短周期型
文字通り、最大ではない周期であり、出現しない数値があるものの、ある程度生成すると初期値が出現し、以降は繰り返しとなるものとする。ちなみに、初期値によって周期の幅も変わってくる。
収斂型
便宜上こう呼ぶ。ある値が出現すると、それ以降はその値のみがずっと生成される。ちなみに、初期値によって一定の値に収斂するのに必要な生成数は変わってくる。

次は、この最大周期型・短周期型・収斂型がどのように出現するかを調べてみた。
話を簡単にするために、Mは256で固定して、Aを1〜255、Bを0〜255まで変化させて、各数式がどうなるかをプログラムでやってみた。

条件123全てを満たす
最大周期になる。
条件2と3を満たさない
収斂型になる。
それ以外
短周期型になる。

ことがわかった。なお、短周期型には周期数が1になるものもあり、これは一見収斂型と区別がつかない。
また、最大周期型は全体の8分の1、収斂型は全体の2分の1になり、残りが短周期型になる。

ゲームへの応用

多数のキャラクターユニットが登場するゲームに使える。
これらのユニットは、レベルアップ毎にパラメータを増やすか特殊能力を得るかしていくとする。そしてどのような成長をするかはチャート表でサイコロを振ることで決定するとする。
そうした場合、キャラクター毎に線形合同法によるサイコロを確保しておけば、製作側が完全に管理可能な一見ランダム風の成長曲線を構成できる。

収斂型を使う場合
低レベル中はある程度の特殊能力を得るものの、それ以降は特定のパラメータのみが上がり続ける。もしくは特定の特殊能力が強くなり続ける。ウィザードリィで言えば戦士や魔法使いなどの単純職業に向く。
短周期型
可能な分野が偏るものの、それらが均等にレベルアップし続ける。侍や君主などの複合職に向く。
最大周期型
いわゆる勇者的な成長をする。ただし、成長は遅い。