疑似乱数



確率・統計

統計/解析

ベイズ理論

確率

公開日:2020/5/12          

前提知識


疑似乱数とは、乱数列に見えるが実際には特定のアルゴリズムによって決まっている数列の事です。コンピュータで生成される乱数はほとんどが疑似乱数です。 完全な乱数を作ろうと思ったら、例えば多面体のサイコロを実際に振って出た目の数値を扱うとか、コンピュータに接続されたデバイスからの入力のノイズ情報を扱う等、 コンピュータ外からの入力を用いれば実現できますが、簡単ではないことは想像つくと思います。

またシミュレーションを行う上では、再現性のある乱数というのも求められるので、完全な乱数よりも逆に疑似乱数の方が良い場合もあります。 なおテレビゲーム等においては、アイテムの発生条件や、敵とのエンカウントに疑似乱数を使っている事が多く、疑似乱数の再現性の性質を利用(悪用?)して 狙いのアイテムを得る等の裏技が使われる場合があります。これを乱数調整と言います。

疑似乱数生成の考え方、生成アルゴリズム例を以下に示します。

<線形合同法>
疑似乱数生成を理解するのには最も手頃な手法で、これまで広く使われていた手法です。式は以下漸化式となります。



modはカッコの中の数字をMで割った余りを意味します。従って乱数の範囲はMより小さい値となります。 またxnの初期値x0SEED(シード)といいます。 プログラムの関数でユーザーがシードを設定しない場合は、現在の時刻から決めた値などをデフォルトで設定したりします。

この手法の欠点は、以下のように値の設定すると下一桁に規則性が出てくることで、特にMを偶数に設定した時は、奇数と偶数が交互に出たり、必ず奇数もしくは偶数になります。



この欠点が致命的となった有名な例として、Xbox向けの「カルドセプトサーガ」というボードゲームのダイスの出る目が、偶数と奇数を交互に出してしまうというバグがありました。

<メルセンヌ・ツイスター(MT)>
日本人が考えたアルゴリズムで、高いランダム性と周期性が実現でき且つ計算速度が速いことから、非常に高い評価を得られており、pythonやMATLAB、C++などでデフォルトの乱数発生器として用いられている。 最大周期が219937-1の時、MT19939と呼ばれる。

<xorshift>
排他的論理和(XOR)とビットシフトを用いた演算で、比較的長周期(2128-1)の乱数を生成できる割に計算が高速である。









サブチャンネルあります。⇒ 何かのお役に立てればと

関連記事一覧



確率・統計

統計/解析

ベイズ理論

確率